Solution transfer between an element and its four h-refinement children (AMR Stage 3).
When a 2-D quadrilateral element is refined into four children (SELF child ordering
1=SW, 2=SE, 3=NE, 4=NW, each covering one quadrant of the parent reference square), the
prognostic solution must move with the mesh:
Prolongation (parent -> 4 children): sample the parent's degree-N nodal polynomial at
the children's nodes. Each child occupies a reference half-interval in each direction, so
this is exactly a tensor product of the 2:1 mortar restriction operator Lagrange%mortarR
(built and identity-checked for the nonconforming interface machinery). It is an exact
interpolation: the child fields reproduce the parent polynomial with no loss.
Restriction (4 children -> parent): the L2 projection of the (generally discontinuous
across children) fine solution back onto the parent's degree-N polynomial space, a tensor
product of the mortar projection operator Lagrange%mortarP (the M-inner-product adjoint of
mortarR). mortarP already carries the 1/2 per-direction sub-edge Jacobian appropriate for
projecting solution traces.
These inherit the discrete identities established for the 1-D mortar operators
(test/mortarprojection_identity.f90):
Consistency / reversibility: RestrictFromChildren(ProlongToChildren(u)) = u exactly, from
sum_k P_k R_k = I applied in each tensor direction. Refining then immediately coarsening
does not perturb the solution.
Conservation: sum_ij w_i w_j u_parent(i,j) = (1/4) sum_c sum_ij w_i w_j u_child_c(i,j),
i.e. the reference-cell integral of the restricted parent equals the sum of the children's
reference-cell integrals (each child is a quarter of the parent). Weighted by the geometry
Jacobian this is conservation of the cell-integrated prognostic quantity.
The routines are element-local and portable (host do concurrent over children/variables);
the AMR driver maps forest parent/child relationships onto the element index ranges it passes
in. Transfer runs between time steps, so it is not a per-step hot path; on GPU backends the
transferred field is re-uploaded as part of the Stage-6 device re-allocation.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
public subroutine ProlongToChildren(interp, nVar, uParent, uChildren)
Prolong (interpolate) a parent element's nodal solution onto its four children.
uChildren(:,:,:,c) is the field on child c (ordering 1=SW,2=SE,3=NE,4=NW). Exact for the
parent's degree-N polynomial representation.