◆ FORGE Suite
GitHubMechanical Neuroimaging Lab · Univ. of Delaware
Skip to content

Material Models

Type Hierarchy

Sentinel.AbstractMaterialModel Type
julia
AbstractMaterialModel

Abstract supertype for all MRE material constitutive models. Concrete subtypes drive dispatch for element integration, adjoint gradient computation, and optimization routines.

source
Sentinel.IsotropicIncompressible Type
julia
IsotropicIncompressible <: AbstractMaterialModel

Rayleigh-damped viscoelastic isotropic incompressible material. Corresponds to Fortran mtrlmodel = 1.

The property list is consumed positionally; three layouts are accepted:

  • 3 properties (standard runfile layout): prop 1 = complex shear modulus μ* Pa, prop 2 = density (the element kernels do not read this slot –- density arrives via the assembly-level ρ argument), prop 3 = complex bulk modulus κ* Pa

  • 2 properties: prop 1 = μ_, prop 2 = κ_

  • 1 property: prop 1 = μ* (κ* defaults to 1e9 Pa)

Uses a mixed pressure-displacement formulation with elemental pressures.

source
Sentinel.IsotropicCompressible Type
julia
IsotropicCompressible <: AbstractMaterialModel

Rayleigh-damped isotropic compressible viscoelastic material. Corresponds to Fortran mtrlmodel = 3.

The property list is consumed positionally; two layouts are accepted:

  • 3 properties (standard runfile layout): prop 1 = complex shear modulus μ* Pa, prop 2 = density (the element kernels do not read this slot –- density arrives via the assembly-level ρ argument), prop 3 = complex Lamé parameter λ* Pa (converted internally to bulk modulus κ = λ + 2μ/3)

  • 2 properties: prop 1 = μ_, prop 2 = complex bulk modulus κ_ Pa (used directly)

Supports both hex27 and tet4 elements.

source
Sentinel.Orthotropic Type
julia
Orthotropic <: AbstractMaterialModel

Rayleigh-damped orthotropic viscoelastic material. Corresponds to Fortran mtrlmodel = 2.

Nine properties: the complex entries of the 6×6 orthotropic stiffness matrix in Voigt notation, in the order

11, 22, 33, 12, 13, 23, 44, 55, 66

Requires fiber direction field for principal axis definition.

source
Sentinel.Poroelastic Type
julia
Poroelastic <: AbstractMaterialModel

Poroelastic material with fluid pressure as an additional nodal DOF. Corresponds to Fortran mtrlmodel = 4.

Material properties:

  • Solid frame elastic properties

  • Fluid viscosity η

  • Permeability κ

  • Porosity φ

DOF layout: [u_x(1..nn), u_y(1..nn), u_z(1..nn), p(1..nn)] Fixed extra properties: ρ_p (solid density), ρ_a (added mass), ρ_f (fluid density)

source
Sentinel.TransverseIsotropicV1 Type
julia
TransverseIsotropicV1 <: AbstractMaterialModel

Transverse isotropic viscoelastic material, formulation 1 (absolute moduli). Corresponds to Fortran mtrlmodel = 5.

Properties (positional):

  • prop 1: complex shear modulus in the transverse (isotropic) plane Pa

  • prop 2: complex shear modulus in the fiber-aligned shear planes Pa

  • prop 3: complex tensile modulus along the fiber axis Pa

  • prop 4 (optional): complex bulk modulus κ* Pa (defaults to 1e9)

Requires fiber direction field (DTI-derived) for symmetry axis. Uses same assembly kernel as TransverseIsotropicV2 and GeneralizedAnisotropic.

source
Sentinel.TransverseIsotropicV2 Type
julia
TransverseIsotropicV2 <: AbstractMaterialModel

Transverse isotropic viscoelastic material, formulation 2 (relative anisotropy ratios). Corresponds to Fortran mtrlmodel = 6.

Properties (positional):

  • prop 1: complex substrate (base) shear modulus μ Pa –- the transverse-plane shear modulus

  • prop 2: shear anisotropy ratio φ (complex, dimensionless); the fiber-plane shear modulus is μ(1 + φ)

  • prop 3: tensile anisotropy ratio ζ (complex, dimensionless); scales the tensile (normal-stress) terms

  • prop 4 (optional): complex bulk modulus κ* Pa (defaults to 1e9)

Requires fiber direction field (DTI-derived) for symmetry axis. Uses same assembly kernel as TransverseIsotropicV1 and GeneralizedAnisotropic.

source
Sentinel.GeneralizedAnisotropic Type
julia
GeneralizedAnisotropic <: AbstractMaterialModel

Generalized anisotropic viscoelastic material. Corresponds to Fortran mtrlmodel = 7.

Properties (positional):

  • prop 1: complex shear modulus in the transverse plane Pa

  • prop 2: complex principal directional Young's modulus along axis 1 (fiber direction) Pa

  • prop 3: complex principal directional Young's modulus in the transverse direction Pa

The stiffness matrix is used directly in global coordinates –- no fiber rotation is applied. Uses same assembly kernel (genanisoforwardassemble) as models 5 and 6.

source
Sentinel.material_model Function
julia
material_model(model::Int) -> AbstractMaterialModel

Convert the Fortran integer model flag to the corresponding Julia type singleton.

Examples

julia
julia> material_model(1)
IsotropicIncompressible()

julia> material_model(4)
Poroelastic()
source
Sentinel.model_index Function
julia
model_index(::AbstractMaterialModel) -> Int

Return the Fortran integer index for a material model type.

source
Sentinel.has_pressure_dofs Function
julia
has_pressure_dofs(::AbstractMaterialModel) -> Bool

Return true if the material model includes pressure degrees of freedom.

  • Incompressible models (1, 2, 5, 6, 7) use elemental pressure DOFs for the mixed formulation.

  • Poroelastic (4) uses nodal pressure DOFs.

  • Compressible (3) has no pressure DOFs.

source
Sentinel.pressure_dof_type Function
julia
pressure_dof_type(::AbstractMaterialModel) -> Symbol

Return :elemental or :nodal to indicate pressure DOF placement. Returns :none for models without pressure DOFs.

source
Sentinel.uses_fiber_directions Function
julia
uses_fiber_directions(::AbstractMaterialModel) -> Bool

Return true if the material model requires a fiber direction field (e.g., from DTI).

source

Material Data

Sentinel.Material Type
julia
Material

Complete material description for a single zone, including all properties, error tracking, and multi-mesh parameterization. Corresponds to the Fortran material derived type.

Fields

  • model: integer model identifier (1–7), or use material_model(model) for dispatch

  • numprop: number of material properties

  • nreg: number of regularization terms

  • nummeas: number of measurement points for error analysis

  • prop: vector of SingleProperty, length numprop

  • nummtrlmesh: number of material meshes (for multi-resolution parameterization)

  • meshind: (2, numprop, nummtrlmeshstructs) — mesh index for real/imag per property

  • res8: (nummtrlmesh, 3) — resolution of each material mesh [dx, dy, dz]

  • nodval: nodal material property values for tet mesh, (nn, numprop) complex

  • psource: pressure source for poroelastic model, (np, numdispsets) complex

  • rhop, rhoa, rhof: poroelastic density parameters (model=4 only)

  • toterrinit, totalerror, disperror, toterrprev: error tracking scalars

  • numerrupdate: iteration counter for error updates

  • calcvar: flag — compute property estimate variances

  • errinit: flag — whether toterrinit has been initialized

  • regerror: per-regularization-term error, length nreg

source
Sentinel.SingleProperty Type
julia
SingleProperty

Stores the values of one scalar material property across all parameter nodes/elements. Corresponds to the Fortran singleproperty derived type.

Fields

  • basis: parameterization basis — 1 = nodal, 2 = elemental

  • nvpp: number of values per point (e.g., 3 for power-law: θ₀_r, α_r, ω₀_r)

  • scalar: 4-element scaling vector [s_r, s_i, α_r, α_i] for power-law normalization

  • npr: number of parameter points for the real part

  • npi: number of parameter points for the imaginary part

  • rvalue: real property values, size (npr, nvpp) — stored as normalized values

  • ivalue: imaginary property values, size (npi, nvpp) — stored as normalized values

  • rvariance: variance of real estimates, size (npr, nvpp)

  • ivariance: variance of imaginary estimates, size (npi, nvpp)

  • rupdate: flags indicating updated real parameter points, length npr

  • iupdate: flags indicating updated imaginary parameter points, length npi

  • rcount: update counts for real parameter points, length npr

  • icount: update counts for imaginary parameter points, length npi

  • rgp: number of Gauss points affected by each real property value, length npr

  • igp: number of Gauss points affected by each imaginary property value, length npi

  • rmesh: index of the material mesh that real property is defined on (1-based)

  • imesh: index of the material mesh that imaginary property is defined on (1-based)

Notes

The scalar vector enables dimensionless parameterization:

  • scalar[1] scales real values: μ_r = scalar[1] * rvalue[j, k]

  • scalar[2] scales imag values: μ_i = scalar[2] * ivalue[j, k]

  • scalar[3], scalar[4] are α scalings for power-law frequency dependence

For non-power-law (standard) properties, nvpp = 1 and only one set of values exists. For power-law properties, nvpp = 3 with values [θ₀, α, ω₀] per point.

source