Mondaic

salvus.material.visco.elastic

salvus.material.visco.elastic salvus material visco elastic

Viscoelastic materials.

Classes

Anisotropic

class Anisotropic(
    salvus.material.visco.elastic._AnisotropicViscoElasticMaterial
):
    def __init__(
        self,
        Q11: _pd.types.ParameterOrConstantT,
        Q12: _pd.types.ParameterOrConstantT,
        Q13: _pd.types.ParameterOrConstantT,
        Q14: _pd.types.ParameterOrConstantT,
        Q15: _pd.types.ParameterOrConstantT,
        Q16: _pd.types.ParameterOrConstantT,
        Q22: _pd.types.ParameterOrConstantT,
        Q23: _pd.types.ParameterOrConstantT,
        Q24: _pd.types.ParameterOrConstantT,
        Q25: _pd.types.ParameterOrConstantT,
        Q26: _pd.types.ParameterOrConstantT,
        Q33: _pd.types.ParameterOrConstantT,
        Q34: _pd.types.ParameterOrConstantT,
        Q35: _pd.types.ParameterOrConstantT,
        Q36: _pd.types.ParameterOrConstantT,
        Q44: _pd.types.ParameterOrConstantT,
        Q45: _pd.types.ParameterOrConstantT,
        Q46: _pd.types.ParameterOrConstantT,
        Q55: _pd.types.ParameterOrConstantT,
        Q56: _pd.types.ParameterOrConstantT,
        Q66: _pd.types.ParameterOrConstantT,
    ) -> None: ...

An elastic material parameterized anisotropic Q values.

Parameters
  • Q11 _pd.types.ParameterOrConstantT — Q for the C11 entry of the stiffness tensor.
  • Q12 _pd.types.ParameterOrConstantT — Q for the C12 entry of the stiffness tensor.
  • Q13 _pd.types.ParameterOrConstantT — Q for the C13 entry of the stiffness tensor.
  • Q14 _pd.types.ParameterOrConstantT — Q for the C14 entry of the stiffness tensor.
  • Q15 _pd.types.ParameterOrConstantT — Q for the C15 entry of the stiffness tensor.
  • Q16 _pd.types.ParameterOrConstantT — Q for the C16 entry of the stiffness tensor.
  • Q22 _pd.types.ParameterOrConstantT — Q for the C22 entry of the stiffness tensor.
  • Q23 _pd.types.ParameterOrConstantT — Q for the C23 entry of the stiffness tensor.
  • Q24 _pd.types.ParameterOrConstantT — Q for the C24 entry of the stiffness tensor.
  • Q25 _pd.types.ParameterOrConstantT — Q for the C25 entry of the stiffness tensor.
  • Q26 _pd.types.ParameterOrConstantT — Q for the C26 entry of the stiffness tensor.
  • Q33 _pd.types.ParameterOrConstantT — Q for the C33 entry of the stiffness tensor.
  • Q34 _pd.types.ParameterOrConstantT — Q for the C34 entry of the stiffness tensor.
  • Q35 _pd.types.ParameterOrConstantT — Q for the C35 entry of the stiffness tensor.
  • Q36 _pd.types.ParameterOrConstantT — Q for the C36 entry of the stiffness tensor.
  • Q44 _pd.types.ParameterOrConstantT — Q for the C44 entry of the stiffness tensor.
  • Q45 _pd.types.ParameterOrConstantT — Q for the C45 entry of the stiffness tensor.
  • Q46 _pd.types.ParameterOrConstantT — Q for the C46 entry of the stiffness tensor.
  • Q55 _pd.types.ParameterOrConstantT — Q for the C55 entry of the stiffness tensor.
  • Q56 _pd.types.ParameterOrConstantT — Q for the C56 entry of the stiffness tensor.
  • Q66 _pd.types.ParameterOrConstantT — Q for the C66 entry of the stiffness tensor.
Attributes
ds typing.Mapping

Material’s xarray representation.

flatten dict

Get all parameters as a dict.

Methods
from_dataset()
def from_dataset(ds: xr.Dataset) -> Material[_pd.types.ParameterFlavorT]: ...

Construct a material from an xarray Dataset.

Parameters
  • ds xr.Dataset — The dataset to construct the material from.
Returns Material[_pd.types.ParameterFlavorT]
from_json()
def from_json(d: builtins.dict) -> Any: ...

Recreate the object from a dictionary serialization of its initialization parameters.

Parameters
  • d builtins.dict — Dictionary containing its init parameters and a few other things.
Returns Any
from_material()
def from_material(
    m: Material[_pd.types.ParameterFlavorT],
    reduction_method: (
        typing.Literal["remove-components", "force"] | None
    ) = None,
) -> typing.Self: ...

Construct this material from another within the same physical system.

Parameters
  • m Material[_pd.types.ParameterFlavorT] — Material to transform.
  • reduction_method typing.Literal['remove-components', 'force'] | None — Method to move between incompatible symmetry classes. None will only move to symmetries that are equal or more permissive, while remove-components will drop components that are found to match the new material’s constraints as necessary, and thus leading to loss of free parameters but not of information. The option “force” will take all information necessary to construct the new parameter set without verification, leading to loss of information.
Returns typing.Self — The transformed material.
from_params()
def from_params(
    q11: _pd.types.ParameterInput,
    q12: _pd.types.ParameterInput,
    q13: _pd.types.ParameterInput,
    q14: _pd.types.ParameterInput,
    q15: _pd.types.ParameterInput,
    q16: _pd.types.ParameterInput,
    q22: _pd.types.ParameterInput,
    q23: _pd.types.ParameterInput,
    q24: _pd.types.ParameterInput,
    q25: _pd.types.ParameterInput,
    q26: _pd.types.ParameterInput,
    q33: _pd.types.ParameterInput,
    q34: _pd.types.ParameterInput,
    q35: _pd.types.ParameterInput,
    q36: _pd.types.ParameterInput,
    q44: _pd.types.ParameterInput,
    q45: _pd.types.ParameterInput,
    q46: _pd.types.ParameterInput,
    q55: _pd.types.ParameterInput,
    q56: _pd.types.ParameterInput,
    q66: _pd.types.ParameterInput,
) -> Anisotropic: ...

Construct this material from generic parameters.

Parameters
  • q11 _pd.types.ParameterInput — Q for the C11 entry of the stiffness tensor.
  • q12 _pd.types.ParameterInput — Q for the C12 entry of the stiffness tensor.
  • q13 _pd.types.ParameterInput — Q for the C13 entry of the stiffness tensor.
  • q14 _pd.types.ParameterInput — Q for the C14 entry of the stiffness tensor.
  • q15 _pd.types.ParameterInput — Q for the C15 entry of the stiffness tensor.
  • q16 _pd.types.ParameterInput — Q for the C16 entry of the stiffness tensor.
  • q22 _pd.types.ParameterInput — Q for the C22 entry of the stiffness tensor.
  • q23 _pd.types.ParameterInput — Q for the C23 entry of the stiffness tensor.
  • q24 _pd.types.ParameterInput — Q for the C24 entry of the stiffness tensor.
  • q25 _pd.types.ParameterInput — Q for the C25 entry of the stiffness tensor.
  • q26 _pd.types.ParameterInput — Q for the C26 entry of the stiffness tensor.
  • q33 _pd.types.ParameterInput — Q for the C33 entry of the stiffness tensor.
  • q34 _pd.types.ParameterInput — Q for the C34 entry of the stiffness tensor.
  • q35 _pd.types.ParameterInput — Q for the C35 entry of the stiffness tensor.
  • q36 _pd.types.ParameterInput — Q for the C36 entry of the stiffness tensor.
  • q44 _pd.types.ParameterInput — Q for the C44 entry of the stiffness tensor.
  • q45 _pd.types.ParameterInput — Q for the C45 entry of the stiffness tensor.
  • q46 _pd.types.ParameterInput — Q for the C46 entry of the stiffness tensor.
  • q55 _pd.types.ParameterInput — Q for the C55 entry of the stiffness tensor.
  • q56 _pd.types.ParameterInput — Q for the C56 entry of the stiffness tensor.
  • q66 _pd.types.ParameterInput — Q for the C66 entry of the stiffness tensor.
Returns Anisotropic — The material.
material_system()
def material_system() -> type[Material]: ...

Method that will return the material system of material.

Returns type[Material] — Either the _AcousticMaterial or _ElasticMaterial type.
map()
def map(
    self, f: typing.Callable[[str, typing.Any], tuple[str, typing.Any]]
) -> typing.Self: ...

Generic map for dataclass instances.

f should be a function taking two parameters: the name of the dataclass member and its value, and it should return a tuple containing the same quantities. If a member is not to be transformed, f should just return a tuple of the input member name and value, unchanged. Both names and values can be transformed, with the semantics following those of dataclasses.replace.

In Salvus we primarily treat dataclasses as containers offering semantics similar to typed dictionaries. Deriving from this protocol allows any relevant dataclass to additionally be treated functorially. This allows for the generic un- and re-wrapping of value held in dataclasses, and essentially replaces the following imperative code:

@dataclass
class A:
    member: int

# Before
my_a = A(member=1)
my_a_new = dataclasses.replace(my_a, member=2 * my_a.member)

# After
my_a_new = A(val=1).map(lambda key, val: (key, 2 * val))

As with many functional patterns, the perceived benefits for simple demonstrative purposes is minimal. The scalability of this pattern becomes apparent, however, when parsing deeply nested abstractions, as the transformation logic can be factored out into independent functions. This is used extensively, for example, in the realization logic of the layered mesher, where generic materials can have generic parameters, etc.

Parameters
  • f typing.Callable[[str, typing.Any], tuple[str, typing.Any]] — The function to map over the dataclass.
Returns typing.Self — A new, potentially transformed, dataclass.
map_realized_parameters()
def map_realized_parameters(
    self,
    f_constant: typing.Callable[
        [str, _pd.realized.constant.Parameter], _pd.realized.constant.Parameter
    ] = salvus.material.base_materials._map_realized_default,
    f_discrete: typing.Callable[
        [str, _pd.realized.discrete.Parameter], _pd.realized.discrete.Parameter
    ] = salvus.material.base_materials._map_realized_default,
    f_analytic: typing.Callable[
        [str, _pd.realized.analytic.Parameter], _pd.realized.analytic.Parameter
    ] = salvus.material.base_materials._map_realized_default,
) -> Self: ...

Apply functions to each parameter individually, distinguishing _pd.

Useful when one wants to transform each parameter type separately. For instance, transformations of discrete parameters often require more associated logic than their constant equivalents. This function abstracts away the boilerplate of check for each parameter type, and subsequently transforming it with some function, as well as ensuring that the parameters are indeed of the correct realized type.

The signatures of each transformation function should take the parameter’s name and value as two distinct inputs, and return the (potentially modified) parameter value.

Parameters
  • f_constant typing.Callable[[str, _pd.realized.constant.Parameter], _pd.realized.constant.Parameter] — The function to apply to constant parameters. Defaults to returning the parameter as-is.
  • f_discrete typing.Callable[[str, _pd.realized.discrete.Parameter], _pd.realized.discrete.Parameter] — The function to apply to discrete parameters. Defaults to returning the parameter as-is.
  • f_analytic typing.Callable[[str, _pd.realized.analytic.Parameter], _pd.realized.analytic.Parameter] — The function to apply to analytic parameters. Defaults to returning the parameter as-is.
Returns Self
qc_test()
def qc_test(
    self,
    level: validation.QCLevel | str = QCLevel.strict,
    display_issues: bool = True,
) -> dict[str, MaterialQCIssue]: ...

Run a series of material quality control tests.

The function also prints a summary of the issues found, including their severity and any mitigation steps that can be taken.

Parameters
  • level validation.QCLevel | str — The level of quality control to perform. The BASIC level performs minimal checks, while the STRICT level performs more thorough checks that are potentially slow. One can pass an enumeration value or a string representation of the level.
  • display_issues bool — If True, prints the issues found during the quality control checks. If False, issues are collected but not printed.
Returns dict[str, MaterialQCIssue] — A dictionary of MaterialQCIssue objects representing the issues found during the quality control checks. The keys are formatted as “type:code”, where type is the type of the issue (e.g, “mesh” or “material”) and code is a specific code for the issue (e.g., “NON_POSITIVE_VP”). If no issues are found, an empty dictionary is returned.
to_json()
def to_json(
    self,
    external_file_hash: types = None,
    timer: types = None,
    log_to_logger: bool = False,
    comm: types = None,
) -> builtins.dict: ...

Serialize the object to a dictionary that can be written to JSON.

Parameters
  • external_file_hash types — Hash of any external files associated with this object. Can be passed here in which case it will be stored in a centralized location in the JSON file.
  • timer types — Execution timer.
  • log_to_logger bool — Log timings to the logger.
  • comm types — MPI communicator, if any.
Returns builtins.dict
to_wavelength_oracle()
def to_wavelength_oracle(
    self, n_dim: typing.Literal[2, 3] | None = None
) -> _pd.types.ParameterOrConstantT: ...

The wavelength oracle.

Parameters
  • n_dim typing.Literal[2, 3] | None — Dimension to return the oracle for, deprecated.
Returns _pd.types.ParameterOrConstantT
with_orientation()
def with_orientation(self, orientation: Material | None) -> Material: ...

Experimetal method to add orientation to a material.

Parameters
  • orientation Material | None — The orientation.
Returns Material — The object with an orientation material attached.

Canonical

class Canonical(salvus.material.visco.elastic._ViscoElasticMaterial):
    def __init__(
        self,
        QMU: _pd.types.ParameterOrConstantT,
        QKAPPA: _pd.types.ParameterOrConstantT,
    ) -> None: ...

An elastic material parameterized by density and p-wave velocity.

Parameters
  • QMU _pd.types.ParameterOrConstantT — Q for Lame’s second parameter (mu).
  • QKAPPA _pd.types.ParameterOrConstantT — Q for the bulk modulus.
Attributes
ds typing.Mapping

Material’s xarray representation.

flatten dict

Get all parameters as a dict.

Methods
from_dataset()
def from_dataset(ds: xr.Dataset) -> Material[_pd.types.ParameterFlavorT]: ...

Construct a material from an xarray Dataset.

Parameters
  • ds xr.Dataset — The dataset to construct the material from.
Returns Material[_pd.types.ParameterFlavorT]
from_json()
def from_json(d: builtins.dict) -> Any: ...

Recreate the object from a dictionary serialization of its initialization parameters.

Parameters
  • d builtins.dict — Dictionary containing its init parameters and a few other things.
Returns Any
from_material()
def from_material(
    m: Material[_pd.types.ParameterFlavorT],
    reduction_method: (
        typing.Literal["remove-components", "force"] | None
    ) = None,
) -> typing.Self: ...

Construct this material from another within the same physical system.

Parameters
  • m Material[_pd.types.ParameterFlavorT] — Material to transform.
  • reduction_method typing.Literal['remove-components', 'force'] | None — Method to move between incompatible symmetry classes. None will only move to symmetries that are equal or more permissive, while remove-components will drop components that are found to match the new material’s constraints as necessary, and thus leading to loss of free parameters but not of information. The option “force” will take all information necessary to construct the new parameter set without verification, leading to loss of information.
Returns typing.Self — The transformed material.
from_params()
def from_params(
    qmu: _pd.types.ParameterInput, qkappa: _pd.types.ParameterInput
) -> Canonical: ...

Construct this material from generic parameters.

Parameters
  • qmu _pd.types.ParameterInput — Q for Lame’s second parameter (mu).
  • qkappa _pd.types.ParameterInput — Q for the bulk modulus.
Returns Canonical — The material.
material_system()
def material_system() -> type[Material]: ...

Method that will return the material system of material.

Returns type[Material] — Either the _AcousticMaterial or _ElasticMaterial type.
map()
def map(
    self, f: typing.Callable[[str, typing.Any], tuple[str, typing.Any]]
) -> typing.Self: ...

Generic map for dataclass instances.

f should be a function taking two parameters: the name of the dataclass member and its value, and it should return a tuple containing the same quantities. If a member is not to be transformed, f should just return a tuple of the input member name and value, unchanged. Both names and values can be transformed, with the semantics following those of dataclasses.replace.

In Salvus we primarily treat dataclasses as containers offering semantics similar to typed dictionaries. Deriving from this protocol allows any relevant dataclass to additionally be treated functorially. This allows for the generic un- and re-wrapping of value held in dataclasses, and essentially replaces the following imperative code:

@dataclass
class A:
    member: int

# Before
my_a = A(member=1)
my_a_new = dataclasses.replace(my_a, member=2 * my_a.member)

# After
my_a_new = A(val=1).map(lambda key, val: (key, 2 * val))

As with many functional patterns, the perceived benefits for simple demonstrative purposes is minimal. The scalability of this pattern becomes apparent, however, when parsing deeply nested abstractions, as the transformation logic can be factored out into independent functions. This is used extensively, for example, in the realization logic of the layered mesher, where generic materials can have generic parameters, etc.

Parameters
  • f typing.Callable[[str, typing.Any], tuple[str, typing.Any]] — The function to map over the dataclass.
Returns typing.Self — A new, potentially transformed, dataclass.
map_realized_parameters()
def map_realized_parameters(
    self,
    f_constant: typing.Callable[
        [str, _pd.realized.constant.Parameter], _pd.realized.constant.Parameter
    ] = salvus.material.base_materials._map_realized_default,
    f_discrete: typing.Callable[
        [str, _pd.realized.discrete.Parameter], _pd.realized.discrete.Parameter
    ] = salvus.material.base_materials._map_realized_default,
    f_analytic: typing.Callable[
        [str, _pd.realized.analytic.Parameter], _pd.realized.analytic.Parameter
    ] = salvus.material.base_materials._map_realized_default,
) -> Self: ...

Apply functions to each parameter individually, distinguishing _pd.

Useful when one wants to transform each parameter type separately. For instance, transformations of discrete parameters often require more associated logic than their constant equivalents. This function abstracts away the boilerplate of check for each parameter type, and subsequently transforming it with some function, as well as ensuring that the parameters are indeed of the correct realized type.

The signatures of each transformation function should take the parameter’s name and value as two distinct inputs, and return the (potentially modified) parameter value.

Parameters
  • f_constant typing.Callable[[str, _pd.realized.constant.Parameter], _pd.realized.constant.Parameter] — The function to apply to constant parameters. Defaults to returning the parameter as-is.
  • f_discrete typing.Callable[[str, _pd.realized.discrete.Parameter], _pd.realized.discrete.Parameter] — The function to apply to discrete parameters. Defaults to returning the parameter as-is.
  • f_analytic typing.Callable[[str, _pd.realized.analytic.Parameter], _pd.realized.analytic.Parameter] — The function to apply to analytic parameters. Defaults to returning the parameter as-is.
Returns Self
qc_test()
def qc_test(
    self,
    level: validation.QCLevel | str = QCLevel.strict,
    display_issues: bool = True,
) -> dict[str, MaterialQCIssue]: ...

Run a series of material quality control tests.

The function also prints a summary of the issues found, including their severity and any mitigation steps that can be taken.

Parameters
  • level validation.QCLevel | str — The level of quality control to perform. The BASIC level performs minimal checks, while the STRICT level performs more thorough checks that are potentially slow. One can pass an enumeration value or a string representation of the level.
  • display_issues bool — If True, prints the issues found during the quality control checks. If False, issues are collected but not printed.
Returns dict[str, MaterialQCIssue] — A dictionary of MaterialQCIssue objects representing the issues found during the quality control checks. The keys are formatted as “type:code”, where type is the type of the issue (e.g, “mesh” or “material”) and code is a specific code for the issue (e.g., “NON_POSITIVE_VP”). If no issues are found, an empty dictionary is returned.
to_json()
def to_json(
    self,
    external_file_hash: types = None,
    timer: types = None,
    log_to_logger: bool = False,
    comm: types = None,
) -> builtins.dict: ...

Serialize the object to a dictionary that can be written to JSON.

Parameters
  • external_file_hash types — Hash of any external files associated with this object. Can be passed here in which case it will be stored in a centralized location in the JSON file.
  • timer types — Execution timer.
  • log_to_logger bool — Log timings to the logger.
  • comm types — MPI communicator, if any.
Returns builtins.dict
to_wavelength_oracle()
def to_wavelength_oracle(
    self, n_dim: typing.Literal[2, 3] | None = None
) -> _pd.types.ParameterOrConstantT: ...

The wavelength oracle.

Parameters
  • n_dim typing.Literal[2, 3] | None — Dimension to return the oracle for, deprecated.
Returns _pd.types.ParameterOrConstantT
with_orientation()
def with_orientation(self, orientation: Material | None) -> Material: ...

Experimetal method to add orientation to a material.

Parameters
  • orientation Material | None — The orientation.
Returns Material — The object with an orientation material attached.