Skip to content

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:

  • ComponentConfigurationIndex is zero-based.
  • Flood configuration values inside ComponentCombination_All are one-based and validated before indexing ProbDS_Flood.
  • FloodDepthIndex is 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() -> float
  • fn_damage_ratio_utility_wind() -> dict[str, float]
  • fn_helper_damage_ratio_flood() -> np.ndarray
  • fn_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