Spaces:
Sleeping
Sleeping
# src/performance.py | |
import logging | |
from typing import Dict | |
from src.models import Pavement, TrafficData, ClimateData, SubgradeProperties, MaterialProperties | |
from src.utils.logger import setup_logger | |
logger = setup_logger(__name__) | |
def predict_fatigue_cracking(pavement: Pavement, traffic_data: TrafficData, material_props: MaterialProperties) -> float: | |
""" | |
Predict fatigue cracking based on axle loads and material properties. | |
:param pavement: Pavement structure. | |
:param traffic_data: Traffic data. | |
:param material_props: Material properties. | |
:return: Total fatigue damage. | |
""" | |
total_damage = 0 | |
axle_loads = traffic_data.get_total_axle_loads() | |
for year, loads in enumerate(axle_loads): | |
for load in loads: | |
damage = (load / material_props.asphalt_modulus) ** 3 # Simplified relationship | |
total_damage += damage | |
logger.debug(f"Year {year + 1}, Load {load} kN: Damage {damage}") | |
logger.info(f"Total Fatigue Damage: {total_damage}") | |
return total_damage | |
def predict_rutting(pavement: Pavement, traffic_data: TrafficData, climate_data: ClimateData, subgrade_props: SubgradeProperties) -> float: | |
""" | |
Predict rutting based on axle loads, climate data, and subgrade properties. | |
:param pavement: Pavement structure. | |
:param traffic_data: Traffic data. | |
:param climate_data: Climate data. | |
:param subgrade_props: Subgrade properties. | |
:return: Total rutting depth. | |
""" | |
total_rut = 0 | |
axle_loads = traffic_data.get_total_axle_loads() | |
for year, loads in enumerate(axle_loads): | |
for load in loads: | |
rut = (load / subgrade_props.modulus) * (climate_data.rainfall / 1000) # Simplified relationship | |
total_rut += rut | |
logger.debug(f"Year {year + 1}, Load {load} kN: Rut {rut} mm") | |
logger.info(f"Total Rutting: {total_rut} mm") | |
return total_rut | |
def predict_thermal_cracking(pavement: Pavement, climate_data: ClimateData, material_props: MaterialProperties) -> float: | |
""" | |
Predict thermal cracking based on temperature variation and material properties. | |
:param pavement: Pavement structure. | |
:param climate_data: Climate data. | |
:param material_props: Material properties. | |
:return: Thermal cracking index. | |
""" | |
thermal_crack = material_props.thermal_coeff * climate_data.temperature_variation | |
logger.info(f"Thermal Cracking Index: {thermal_crack}") | |
return thermal_crack | |
def design_new_pavement(pavement: Pavement, traffic_data: TrafficData, climate_data: ClimateData, | |
subgrade_props: SubgradeProperties, material_props: MaterialProperties) -> Dict[str, float]: | |
""" | |
Design a new pavement by predicting various distresses. | |
:param pavement: Pavement structure. | |
:param traffic_data: Traffic data. | |
:param climate_data: Climate data. | |
:param subgrade_props: Subgrade properties. | |
:param material_props: Material properties. | |
:return: Dictionary with predicted distresses. | |
""" | |
fatigue = predict_fatigue_cracking(pavement, traffic_data, material_props) | |
rutting = predict_rutting(pavement, traffic_data, climate_data, subgrade_props) | |
thermal = predict_thermal_cracking(pavement, climate_data, material_props) | |
logger.info("Pavement design simulation completed.") | |
return { | |
'Fatigue Cracking': fatigue, | |
'Rutting': rutting, | |
'Thermal Cracking': thermal | |
} | |
def evaluate_performance(pavement: Pavement, traffic_data: TrafficData, climate_data: ClimateData, | |
subgrade_props: SubgradeProperties, material_props: MaterialProperties) -> Dict[str, float]: | |
""" | |
Evaluate pavement performance, currently mirrors design_new_pavement. | |
:param pavement: Pavement structure. | |
:param traffic_data: Traffic data. | |
:param climate_data: Climate data. | |
:param subgrade_props: Subgrade properties. | |
:param material_props: Material properties. | |
:return: Dictionary with predicted distresses. | |
""" | |
logger.info("Evaluating pavement performance.") | |
return design_new_pavement(pavement, traffic_data, climate_data, subgrade_props, material_props) | |