Skip to content

PML3DElement

PML3DElement

PML3DElement(ndof: int, material: Material, PML_Thickness: float, meshType: str, meshTypeParameters: Union[List[float], str], gamma: float = 0.5, beta: float = 0.25, eta: float = 1.0 / 12.0, ksi: float = 1.0 / 48.0, m: float = 2.0, R: float = 1e-08, Cp: Optional[float] = None, alpha0: Optional[float] = None, beta0: Optional[float] = None, **kwargs)

Bases: Element

Three-dimensional perfectly matched layer continuum element.

This eight-node element augments the standard brick with additional PML degrees of freedom, requiring 9 DOFs per node. It is used to absorb outgoing waves at domain boundaries in 3D wave-propagation analyses.

Tcl form

element PML <tag> <n1> ... <n8> <matTag> <thick> "<meshType>" <params...> "-Newmark" <gamma> <beta> <eta> <ksi> [-alphabeta alpha0 beta0 | -m m -R R [-Cp Cp]]

Warning

The assigned material must be a 3D ElasticIsotropicMaterial. Other nDMaterial types are rejected at construction time.

Note
  • meshType must be box or general (case-insensitive).
  • meshTypeParameters must provide six numeric values describing the local PML mesh orientation and extent.
  • Either alpha0 and beta0 must both be supplied, or neither.

Attributes:

Name Type Description
PML_Thickness

Physical thickness of the PML layer.

meshType

PML mesh type passed to OpenSees (box or general).

meshTypeParameters

Six numeric mesh-orientation parameters.

gamma

Newmark gamma parameter.

beta

Newmark beta parameter.

eta

Newmark eta parameter.

ksi

Newmark ksi parameter.

m

PML attenuation parameter used when alpha0/beta0 are omitted.

R

PML reflection parameter used when alpha0/beta0 are omitted.

Cp

Optional P-wave speed override for the PML formulation.

alpha0

Optional PML alpha parameter paired with beta0.

beta0

Optional PML beta parameter paired with alpha0.

Example
from femora.core.model import Model

model = Model()
mat = model.material.nd.elastic_isotropic(
    user_name="PMLMat",
    E=2.0e7,
    nu=0.25,
    rho=2200.0,
)
ele = model.element.brick.pml3d(
    ndof=9,
    material=mat,
    PML_Thickness=1.0,
    meshType="box",
    meshTypeParameters=[1.0, 0.0, 0.0, 0.0, 1.0, 0.0],
)
print(ele.tag)

Create a PML3DElement with validated PML and Newmark parameters.

Parameters:

Name Type Description Default
ndof int

Number of DOFs per node. Must be 9 for this element.

required
material Material

Managed isotropic elastic 3D nDMaterial.

required
PML_Thickness float

Thickness of the PML layer.

required
meshType str

box or general mesh type passed to OpenSees.

required
meshTypeParameters Union[List[float], str]

Six numeric values or a comma-separated string describing the PML mesh orientation.

required
gamma float

Newmark gamma parameter.

0.5
beta float

Newmark beta parameter.

0.25
eta float

Newmark eta parameter.

1.0 / 12.0
ksi float

Newmark ksi parameter.

1.0 / 48.0
m float

PML attenuation parameter when alpha0/beta0 are omitted.

2.0
R float

PML reflection parameter when alpha0/beta0 are omitted.

1e-08
Cp Optional[float]

Optional P-wave speed override.

None
alpha0 Optional[float]

Optional PML alpha parameter; must be paired with beta0.

None
beta0 Optional[float]

Optional PML beta parameter; must be paired with alpha0.

None
**kwargs

Additional element parameters stored on the base element.

{}

Raises:

Type Description
ValueError

If the material is incompatible, if ndof is not 9, or if any PML or Newmark parameter is invalid.