Fiber-reinforced elastodynamics¶
This tutorial composes two independent, nonmatching elastodynamics Problems:
matrix: ElastodynamicsSolver<dim,dim>
fiber: ElastodynamicsSolver<1,dim>
The canonical input is
tutorials/fiber_reinforced_elastodynamics/parameters.prm.in:
# Matrix plus embedded additive/excess fiber tutorial.
set dimension = 2
set space dimension = 2
subsection Fiber Reinforced Elastodynamics
set Output directory = @TEST_OUTPUT_DIR@/tutorial-output/fiber-reinforced-elastodynamics
subsection Time interval
set Initial time = 0.0
set Final time = 0.05
set Output time interval = 0.01
end
subsection Fixed step
set Time step = 0.01
set Number of time steps = 5
set Policy = number_of_steps
end
subsection Coupling solver
set Maximum steps = 200
set Tolerance = 1.e-10
set Block tolerance = 1.e-12
set Initial compatibility tolerance = 1.e-10
end
subsection Matrix Elastodynamics
set FE degree = 1
set Dirichlet boundary ids = 0,1,2,3
subsection Domain
set Initial refinement = 2
set Grid generator = hyper_cube
set Grid generator arguments = -1: 1: false
set Triangulation type = distributed
end
subsection Material properties
set Material tags by material id =
subsection default
set Density = 1.0
set Lame mu = 1.0
set Lame lambda = 1.0
set Rayleigh alpha = 0
set Rayleigh beta = 0
set Viscosity eta = 0
end
end
subsection Functions
subsection Body force
set Function expression = 0; 1
set Variable names = x,y,t
end
subsection Displacement boundary
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Velocity boundary
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Initial displacement
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Initial velocity
set Function expression = 0; 0
set Variable names = x,y,t
end
end
end
subsection Fiber Elastodynamics
# These are additive/excess coefficients, not a second complete matrix
# material. Keep density positive for the SPD effective fiber block.
set FE degree = 1
set Dirichlet boundary ids =
subsection Domain
set Initial refinement = 1
set Grid generator = hyper_cube
set Grid generator arguments = -0.65: 0.65: false
set Triangulation type = distributed
end
subsection Material properties
set Material tags by material id =
subsection default
set Density = 4.0
set Lame mu = 8.0
set Lame lambda = 8.0
set Rayleigh alpha = 0
set Rayleigh beta = 0
set Viscosity eta = 0
end
end
subsection Functions
subsection Body force
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Displacement boundary
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Velocity boundary
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Initial displacement
set Function expression = 0; 0
set Variable names = x,y,t
end
subsection Initial velocity
set Function expression = 0; 0
set Variable names = x,y,t
end
end
end
end
Run the 2D input with:
./build/fiber_reinforced_elastodynamics_debug \
build/tutorials/fiber_reinforced_elastodynamics/parameters.prm
The matrix occupies [-1,1]^2. The fiber is an independently meshed line
inside it. Its ambient vector components still have dimension two, but its FE
support is one-dimensional. The fiber coefficients are an additive excess
contribution coupled to the matrix through a line multiplier. A vector Field
on the line selects all ambient components (spacedim), not just the
one-dimensional support component. Use field.component_mask() when passing
that selection to a native assembler.
The validation tests compare fixed-step backward-Euler coupling with an uncoupled dense reference advanced from its own displacement and velocity history under the same forcing and time steps. The application advances only the coupled state.
The application exposes matrix and fiber velocity fields and creates an
independent vector multiplier field. The constraint is assembled from
weak_term(value(field), test(lambda)) terms. Its transpose reactions enforce
velocity compatibility on the two spaces. The five semantic fields are
matrix.displacement differential
matrix.velocity differential
fiber.displacement differential
fiber.velocity differential
coupling.lambda algebraic
The multiplier owns a FiniteElementSpace on the fiber Domain. By default,
Multiplier FE degree = 0 follows the fiber degree; a positive value selects
an independent continuous degree. To choose another element, set
Fiber Reinforced Elastodynamics/Multiplier space/Finite element, for example
FESystem<1>[FE_DGQ<1>(0)^2] for a cellwise constant 2D vector multiplier.
An explicit element name overrides Multiplier FE degree and must have dim
components. The default auto keeps the degree-based behavior. The choice must
still yield a solvable constraint system; not every trial/multiplier pair is
stable.
The IDA execution keeps the adapter, field handles, and solver vectors local
to one solve. It registers the two Problems and their velocity-continuity
constraint directly with IDAAdapter, accepts the
displacement and velocity fields after accepted steps, and writes the two
Problem outputs plus the multiplier on its own FE space. The application
supports 2/2 and 3/3 matrix dimension selections; the fiber is
one-dimensional in both cases.