Mondaic

salvus.mesh.layered_meshing.meshing_protocol.coarsening_policy.intralayer_vertical_refine

salvus.mesh.layered_meshing.meshing_protocol.coarsening_policy.intralayer_vertical_refine salvus mesh layered_meshing meshing_protocol coarsening_policy intralayer_vertical_refine

Allow for vertical refinements in a layer.

Classes

IntralayerVerticalRefine

class IntralayerVerticalRefine(
    salvus.mesh.layered_meshing.meshing_protocol.coarsening_policy.IntralayerCoarseningPolicy
):
    def __init__(
        self,
        fixed_horizontal_element_boundaries: list[list[float]] = default,
        min_layer_thickness: float | None = None,
        max_vertical_oversampling_factor: int | None = None,
        max_aspect_ratio: float = 10.0,
        refinement_type: typing.Literal["doubling", "tripling"] = "tripling",
    ) -> None: ...

Construct a coarsening policy that allows for vertical refinements.

Parameters
  • fixed_horizontal_element_boundaries list[list[float]] — An optional array of horizontal coordinate values where fixed element boundaries should occur. Useful for respecting the mesh of simple vertical structures and the like. For 3-D meshes one can pass a list of lists of values, which correspond to the first and second coordinate axes (i.e x and y) respectively.
  • min_layer_thickness float | None — If a float is specified here, mask out all elements in this layer where the layer thickness is less than this value. Useful for masking out elements in shallow water layers.
  • max_vertical_oversampling_factor int | None — Deprecated and ignored. It used to relax an upper bound on the number of vertical elements per column, but that number is now determined exactly, leaving no bound for it to relax. Will be removed in a future release.
  • max_aspect_ratio float — Ensure that the vertical dimension of each element are no more than this many times the horizontal dimensions. Defaults to 10.0
  • refinement_type typing.Literal['doubling', 'tripling'] — The type of vertical refinements to use. ‘doubling’ usually gives a better time step, but since it changes the number of elements in the horizontal direction it can only be used in the top layer of any layered model.
Methods
basic_block()
def basic_block(
    self,
    elm_p_wav: tuple[float, ...],
    n_elm_h: list[int],
    n_elm_c: int,
    i_bot: Interface,
    i_top: Interface,
    b_flat: float,
    t_flat: float,
    mw: realized.RealizedParameter,
    cs: CoordinateSystem,
) -> list[MeshBlock]: ...

Get the rectangle or cube constructors.

May return an empty list if it is detected that the connector blocks already span the entire layer.

Parameters
  • elm_p_wav tuple[float, ...] — The number of elements per wavelength.
  • n_elm_h list[int] — The number of elements in the horizontal directions.
  • n_elm_c int — The total number of elements in the connectors.
  • i_bot Interface — The bottom interface.
  • i_top Interface — The top interface.
  • b_flat float — The bottom elevation of the flattened mesh block.
  • t_flat float — The top elevation of the flattened mesh block.
  • mw realized.RealizedParameter — The minimum wavelengths.
  • cs CoordinateSystem — The coordinate system.
Returns list[MeshBlock] — The mesh block.

Used in tutorials