weac.components.layer module

Mechanical properties of snow-pack layers.

  • Layer - a regular slab layer (no foundation springs)

  • WeakLayer - a slab layer that also acts as a Winkler-type foundation

class weac.components.layer.Layer(*, rho=150, h=200, nu=0.25, E=0.0, G=0.0, tensile_strength=0.0, tensile_strength_method='sigrist', E_method='bergfeld', grain_type=None, grain_size=None, hand_hardness=None)[source]

Bases: BaseModel

Regular slab layer (no foundation springs).

Parameters:
  • rho (Annotated[float, Gt(gt=0)])

  • h (Annotated[float, Gt(gt=0)])

  • nu (Annotated[float, Ge(ge=0), Lt(lt=0.5)])

  • E (Annotated[float, Ge(ge=0)])

  • G (Annotated[float, Ge(ge=0)])

  • tensile_strength (Annotated[float, Ge(ge=0)])

  • tensile_strength_method (Literal['sigrist'])

  • E_method (Literal['bergfeld', 'scapazzo', 'gerling'])

  • grain_type (GrainType | None)

  • grain_size (float | None)

  • hand_hardness (HandHardness | None)

rho

Density of the layer [kg m⁻³].

Type:

float

h

Height/Thickness of the layer [mm].

Type:

float

nu

Poisson’s ratio [-] Defaults to weac.constants.NU).

Type:

float

E

Young’s modulus E [MPa]. If omitted it is derived from rho.

Type:

float, optional

G

Shear modulus G [MPa]. If omitted it is derived from E and nu.

Type:

float, optional

rho: float
h: float
nu: float
E: float
G: float
tensile_strength: float
tensile_strength_method: Literal['sigrist']
E_method: Literal['bergfeld', 'scapazzo', 'gerling']
grain_type: GrainType | None
grain_size: float | None
hand_hardness: HandHardness | None
model_post_init(_ctx)[source]

Override this method to perform additional initialization after __init__ and model_construct. This is useful if you want to do some validation that requires the entire model to be initialized.

validate_positive_E_G()[source]

Validate that E and G are positive.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class weac.components.layer.WeakLayer(*, rho=125, h=20, collapse_height=0.0, nu=0.25, E=0.0, G=0.0, kn=0.0, kt=0.0, G_c=1.0, G_Ic=0.56, G_IIc=0.79, sigma_c=6.16, tau_c=5.09, E_method='bergfeld', grain_type=None, grain_size=None, hand_hardness=None)[source]

Bases: BaseModel

Weak layer that also behaves as a Winkler foundation.

Parameters:
  • rho (Annotated[float, Gt(gt=0)])

  • h (Annotated[float, Gt(gt=0)])

  • collapse_height (Annotated[float, Ge(ge=0)])

  • nu (Annotated[float, Ge(ge=0), Lt(lt=0.5)])

  • E (Annotated[float, Ge(ge=0)])

  • G (Annotated[float, Ge(ge=0)])

  • kn (float)

  • kt (float)

  • G_c (Annotated[float, Gt(gt=0)])

  • G_Ic (Annotated[float, Gt(gt=0)])

  • G_IIc (Annotated[float, Gt(gt=0)])

  • sigma_c (Annotated[float, Gt(gt=0)])

  • tau_c (Annotated[float, Gt(gt=0)])

  • E_method (Literal['bergfeld', 'scapazzo', 'gerling'])

  • grain_type (GrainType | None)

  • grain_size (float | None)

  • hand_hardness (HandHardness | None)

rho

Density of the layer [kg m⁻³].

Type:

float

h

Height/Thickness of the layer [mm].

Type:

float

nu

Poisson’s ratio [-] Defaults to weac.constants.NU).

Type:

float

E

Young’s modulus E [MPa]. If omitted it is derived from rho.

Type:

float, optional

G

Shear modulus G [MPa]. If omitted it is derived from E and nu.

Type:

float, optional

kn

Normal (compression) spring stiffness kₙ [N mm⁻³]. If omitted it is computed as E_plane / t where E_plane = E / (1 - nu²).

Type:

float, optional

kt

Shear spring stiffness kₜ [N mm⁻³]. If omitted it is G / t.

Type:

float, optional

G_c

Total fracture energy Gc [J/m^2]. Default 1.0 J/m^2.

Type:

float

G_Ic

Mode-I fracture toughness GIc [J/m^2]. Default 0.56 J/m^2.

Type:

float

G_IIc

Mode-II fracture toughness GIIc [J/m^2]. Default 0.79 J/m^2.

Type:

float

rho: float
h: float
collapse_height: float
nu: float
E: float
G: float
kn: float
kt: float
G_c: float
G_Ic: float
G_IIc: float
sigma_c: float
tau_c: float
E_method: Literal['bergfeld', 'scapazzo', 'gerling']
grain_type: GrainType | None
grain_size: float | None
hand_hardness: HandHardness | None
model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_post_init(_ctx)[source]

Override this method to perform additional initialization after __init__ and model_construct. This is useful if you want to do some validation that requires the entire model to be initialized.

validate_positive_E_G()[source]

Validate that E and G are positive.