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 Initial refinement = 2
    set Dirichlet boundary ids = 0,1,2,3

    subsection Grid generation
      set Grid generator           = hyper_cube
      set Grid generator arguments = -1: 1: false
      set Triangulation type       = distributed
    end

    subsection Material
      set Density       = 1.0
      set Lame mu       = 1.0
      set Lame lambda   = 1.0
      set Damping shear = 0.0
      set Damping bulk  = 0.0
    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 Initial refinement = 1
    set Dirichlet boundary ids =

    subsection Grid generation
      set Grid generator           = hyper_cube
      set Grid generator arguments = -0.65: 0.65: false
      set Triangulation type       = distributed
    end

    subsection Material
      set Density       = 4.0
      set Lame mu       = 8.0
      set Lame lambda   = 8.0
      set Damping shear = 0.0
      set Damping bulk  = 0.0
    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.

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 application registers these contributors 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.