weac.analysis.steady_state module

Hybrid steady-state evaluation — independent critical-cut + tip-contact legs.

Tensile ease comes from the critical-cut dual-orientation search (shorter critical_cut_length wins). ERR comes from the tip-contact (touchdown-cut) dual-orientation search (higher thickness fraction; public scalar is energy_release_rate). Orientation winners are chosen independently.

PST builders, Brent cut search, tip-contact residual, ease selection, and hybrid orchestration all live in this module. Helpers are importable for tests but are not part of __all__.

class weac.analysis.steady_state.SteadyStateErrBlock(energy_release_rate, cut_length, cut_direction_winner, converged, message, diagnostics=<factory>, maximal_stress_result=None, system=None)[source]

Bases: object

ERR block from the tip-contact (touchdown-cut) search.

Parameters:
  • energy_release_rate (float)

  • cut_length (float)

  • cut_direction_winner (Literal['upslope', 'downslope'])

  • converged (bool)

  • message (str)

  • diagnostics (dict[str, Any])

  • maximal_stress_result (MaximalStressResult | None)

  • system (SystemModel | None)

energy_release_rate: float
cut_length: float
cut_direction_winner: Literal['upslope', 'downslope']
converged: bool
message: str
diagnostics: dict[str, Any]
maximal_stress_result: MaximalStressResult | None = None
system: SystemModel | None = None
__init__(energy_release_rate, cut_length, cut_direction_winner, converged, message, diagnostics=<factory>, maximal_stress_result=None, system=None)
Parameters:
  • energy_release_rate (float)

  • cut_length (float)

  • cut_direction_winner (Literal['upslope', 'downslope'])

  • converged (bool)

  • message (str)

  • diagnostics (dict[str, Any])

  • maximal_stress_result (MaximalStressResult | None)

  • system (SystemModel | None)

Return type:

None

class weac.analysis.steady_state.SteadyStateResult(tensile, err, phi)[source]

Bases: object

Structured hybrid steady-state result with independent tensile / ERR legs.

Exposes core_scalars() / diagnostics for comparison harnesses (characteristic_length = tensile L_crit, energy_release_rate = ERR-leg winner).

Parameters:
tensile: SteadyStateTensileBlock
err: SteadyStateErrBlock
phi: float
property converged: bool
property message: str
property diagnostics: dict[str, Any]
core_scalars()[source]

JSON-friendly top-level scalars for comparison runners.

Return type:

dict[str, float | bool | str]

__init__(tensile, err, phi)
Parameters:
Return type:

None

class weac.analysis.steady_state.SteadyStateTensileBlock(critical_cut_length, cut_direction_winner, converged, message, diagnostics=<factory>, maximal_stress_result=None, system=None)[source]

Bases: object

Tensile-ease block from the critical-cut search.

Parameters:
  • critical_cut_length (float)

  • cut_direction_winner (Literal['upslope', 'downslope'])

  • converged (bool)

  • message (str)

  • diagnostics (dict[str, Any])

  • maximal_stress_result (MaximalStressResult | None)

  • system (SystemModel | None)

critical_cut_length: float
cut_direction_winner: Literal['upslope', 'downslope']
converged: bool
message: str
diagnostics: dict[str, Any]
maximal_stress_result: MaximalStressResult | None = None
system: SystemModel | None = None
__init__(critical_cut_length, cut_direction_winner, converged, message, diagnostics=<factory>, maximal_stress_result=None, system=None)
Parameters:
  • critical_cut_length (float)

  • cut_direction_winner (Literal['upslope', 'downslope'])

  • converged (bool)

  • message (str)

  • diagnostics (dict[str, Any])

  • maximal_stress_result (MaximalStressResult | None)

  • system (SystemModel | None)

Return type:

None

weac.analysis.steady_state.evaluate_steady_state(system, *, print_call_stats=False)[source]

Evaluate hybrid steady state from a SystemModel.

Extracts layers, weak layer, and inclination φ from system. Does not accept touchdown mode and does not force φ→0.

Parameters:
Return type:

SteadyStateResult

weac.analysis.steady_state.evaluate_steady_state_from_layers(*, layers, weak_layer, phi, cut_min=CUT_MIN_MM, cut_max=CUT_MAX_MM, xtol=CUT_XTOL_MM, bedded_length=BEDDED_LENGTH_DEFAULT, print_call_stats=False)[source]

Dual-leg hybrid evaluator (independent orientation selection per block).

  • Tensile: critical-cut search; ease = shorter critical_cut_length.

  • ERR: tip-contact search; ease = higher thickness fraction; public scalar is energy_release_rate.

Inclination phi is taken as given — no flat-slab (φ→0) override. Per-leg elapsed_s / n_cut_samples are always written to diagnostics; printing occurs only when print_call_stats is True.

Parameters:
  • layers (list[Layer])

  • weak_layer (WeakLayer)

  • phi (float)

  • cut_min (float)

  • cut_max (float)

  • xtol (float)

  • bedded_length (float)

  • print_call_stats (bool)

Return type:

SteadyStateResult