ImplicitDamageRatio#
ImplicitDamageRatio extends explicit wind ratios with interior wind damage, utility wind damage, and flood damage. Use it when you need the component-level implicit ratios but do not need the final replacement-ratio-weighted building totals.
Related API: Damage Ratio Calculation API Related notebook: Fragility Curve Calculation with Detailed Damage Ratio Analysis
Inputs#
This class uses all ExplicitDamageRatio inputs plus loaded damage-ratio datasets:
ComponentCombination_All: shape(192, 6). The last column selects the one-based flood component configuration.ProbDS_Flood: shape(8, 4, 136, 6), indexed by building type, flood configuration, flood depth, and damage state.DamageState_Flood: shape(6, 2), used to sample flood damage values.rng: optional seed or random generator for Weibull and flood sampling.
Indexing details:
ComponentConfigurationIndexis zero-based.- Flood configuration values inside
ComponentCombination_Allare one-based and validated before indexingProbDS_Flood. FloodDepthIndexis zero-based over the 136 flood-depth rows in the current probability file.
Outputs And Returns#
With automatic execution:
ExplicitDamageRatioWind: inherited explicit wind dictionary.ImplicitDamageRatioWind: dictionary with"Interior","Electrical","Mechanical", and"Plumbing".tempProbDS_Flood: cumulative flood damage-state probabilities for the selected building type and component configuration, shape(136, 6).ImplicitDamageRatioFlood: sampled scalar flood damage ratio.
Manual methods:
fn_damage_ratio_interior_wind() -> floatfn_damage_ratio_utility_wind() -> dict[str, float]fn_helper_damage_ratio_flood() -> np.ndarrayfn_damage_ratio_flood() -> float
Config Behavior#
With AUTO_LOAD_DATASETS = True, all flood and replacement-ratio datasets load in the base class. With it disabled, assign or load ProbDS_Flood, ComponentCombination_All, and DamageState_Flood before flood methods.
With AUTO_EXECUTE_METHODS = True, explicit wind, implicit wind, flood helper, and flood damage calculations run during construction. With it disabled, call them in order: explicit wind first, interior wind, utility wind, flood helper, then flood damage.
Automatic Example#
import numpy as np
from types import SimpleNamespace
from cheersafe.damage_ratio_calculation import ImplicitDamageRatio
from cheersafe.inventory import BuildingInventory
building = BuildingInventory(buildings_file_name="BuildingGeometry.json").buildings[0]
resistance = {
"Openings": np.ones(building.DoorFront + building.DoorBack + building.DoorGarage
+ building.OpeningFront + building.OpeningBack
+ 2 * (building.OpeningSideR + building.OpeningSideH)),
"Walls": np.ones(12),
"Roof Sheathings": np.ones(sum(building.NumPanel)),
"Roof Coverings": np.ones(sum(building.NumPanel)),
"Roof-Wall Connections": np.ones(sum(building.NumConnection)),
}
failure = SimpleNamespace(get_final_resistance=lambda: resistance)
implicit = ImplicitDamageRatio(building, failure, 0, 0, rng=1234)
print(implicit.ImplicitDamageRatioWind)
print(implicit.ImplicitDamageRatioFlood)
Manual-Control Example#
import numpy as np
from types import SimpleNamespace
from cheersafe.config import Config
from cheersafe.damage_ratio_calculation import ImplicitDamageRatio
from cheersafe.inventory import BuildingInventory
building = BuildingInventory(buildings_file_name="BuildingGeometry.json").buildings[0]
resistance = {
"Openings": np.ones(building.DoorFront + building.DoorBack + building.DoorGarage
+ building.OpeningFront + building.OpeningBack
+ 2 * (building.OpeningSideR + building.OpeningSideH)),
"Walls": np.ones(12),
"Roof Sheathings": np.ones(sum(building.NumPanel)),
"Roof Coverings": np.ones(sum(building.NumPanel)),
"Roof-Wall Connections": np.ones(sum(building.NumConnection)),
}
failure = SimpleNamespace(get_final_resistance=lambda: resistance)
old_execute = Config.AUTO_EXECUTE_METHODS
Config.AUTO_EXECUTE_METHODS = False
try:
implicit = ImplicitDamageRatio(building, failure, 0, 0, rng=1234)
implicit.ExplicitDamageRatioWind = implicit.fn_damage_ratio_wind()
implicit.ImplicitDamageRatioWind["Interior"] = implicit.fn_damage_ratio_interior_wind()
implicit.ImplicitDamageRatioWind = implicit.fn_damage_ratio_utility_wind()
implicit.tempProbDS_Flood = implicit.fn_helper_damage_ratio_flood()
implicit.ImplicitDamageRatioFlood = implicit.fn_damage_ratio_flood()
finally:
Config.AUTO_EXECUTE_METHODS = old_execute