hermit.fenics.elastic_model

Reissner-Mindlin shell elastic model: strains, stress resultants, energy, residual.

Port of ElasticModelShapeOpt from femo dev_coupling. Geometry sensitivity is via SpatialCoordinate differentiation, so all gradients are plain ufl.grad on the (possibly moved) mesh – no gradx / J(uhat).

Classes

ElasticModel

fiber_angle / fiber_direction (at most one) rotate clt_matrices

Module Contents

class hermit.fenics.elastic_model.ElasticModel(mesh, w, clt_matrices, fiber_angle=None, fiber_direction=None, quadrature_degree=4)

fiber_angle / fiber_direction (at most one) rotate clt_matrices (laminate axes) into the element frame inside the form. With neither given, A/B/D/A_s are used exactly as passed (no identity rotation multiplied in), so the unoriented form is bit-identical to the form without orientation.

bending_energy(dx_inplane=dx)
drilling_energy(dx_drilling=dx)
elastic_energy(dx_inplane=None, dx_shear=None, dx_drilling=None)
membrane_energy(dx_inplane=dx)
shear_energy(dx_shear=dx)
weak_residual(elastic_energy, f=None, m=None, load_terms=None, penalty=False, g=None, dss=None, dSS=None, bc_dof_mask=None, penalty_terms=None, penalty_targets=None)

penalty_terms, given, is a list of (dss, dSS, bc_dof_mask) triples whose contributions are summed (multi-region penalty, e.g. hm.clamp(...) + hm.symmetry(...)); with it omitted, the single (dss, dSS, bc_dof_mask) triple is used.

load_terms, given, is a list of (kind, Function) pairs: each contributes its own residual term, on its own space, in place of the fixed-space f/m coefficients load_terms=None (the default) uses. An empty list is valid (no distributed term – e.g. a point-load-only Loads, whose contribution is a direct RHS entry handled entirely outside this form); only f/m both None and load_terms None is the error case (nothing at all to apply).

E01
W
eps
gamma
gradu
kappa
mesh
offset
quadrature_degree = 4
t_gu
w