Execute a transfer plan on nodal element data: uNew(:,:,li,:) receives old element data copied, prolonged (exact interpolation), or restricted (conservative L2 projection) according to plan entry li. interp must be the solution interpolant the data lives on (its mortar operators drive the transfer). Runs once per adaptation epoch - not a per-time-step hot path - so clarity is preferred over fused loops here.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(TransferPlan2D), | intent(in) | :: | plan | |||
| type(Lagrange), | intent(in) | :: | interp | |||
| integer, | intent(in) | :: | nVar | |||
| real(kind=prec), | intent(in) | :: | uOld(1:interp%N+1,1:interp%N+1,1:plan%nOld,1:nVar) | |||
| real(kind=prec), | intent(out) | :: | uNew(1:interp%N+1,1:interp%N+1,1:plan%nNew,1:nVar) |
subroutine ApplyTransferPlan(plan,interp,nVar,uOld,uNew)
!! Execute a transfer plan on nodal element data: uNew(:,:,li,:) receives old element data
!! copied, prolonged (exact interpolation), or restricted (conservative L2 projection)
!! according to plan entry li. interp must be the solution interpolant the data lives on
!! (its mortar operators drive the transfer). Runs once per adaptation epoch - not a
!! per-time-step hot path - so clarity is preferred over fused loops here.
implicit none
type(TransferPlan2D),intent(in) :: plan
type(Lagrange),intent(in) :: interp
integer,intent(in) :: nVar
real(prec),intent(in) :: uOld(1:interp%N+1,1:interp%N+1,1:plan%nOld,1:nVar)
real(prec),intent(out) :: uNew(1:interp%N+1,1:interp%N+1,1:plan%nNew,1:nVar)
call ApplyTransferPlanRange(plan,interp,nVar,uOld,1,plan%nNew,uNew)
endsubroutine ApplyTransferPlan