Adaptive-mesh-refinement controller for models on EXTRUDED meshes: a 2-D quadtree on the
surface, with every column extruded through the same nz layers. One call to Adapt performs
one adaptation epoch between time steps, carrying a 3-D model on the extruded mesh and,
optionally, a 2-D model on the surface mesh it was extruded from:
estimate - the 3-D modal-decay indicator flags every element of the 3-D model, and
each column takes the strongest request: refine if any of its layers asks,
coarsen only if all of them agree, keep otherwise;
cap, halo - as in AMRController2D: refine flags at maxLevel are demoted, and refine
flags spread to face-neighbouring columns for nHalo passes;
mutate - AdaptFromFlags + Balance2to1 update the surface forest; an unchanged leaf
set ends the epoch with both models untouched;
rebuild - EmitMesh produces the new surface mesh (with 2:1 mortar edges), the
caller's levels procedure fills the level heights z_k at its geometry
nodes, and ExtrudedMesh builds the new 3-D mesh (whose lateral faces
between columns of different levels become anisotropic mortars);
transfer - the 2-D transfer plan of the forest drives both models: the 2-D model
through its own ApplyTransferPlan, and the 3-D model through
ApplyExtrudedTransferPlan, which applies the plan to every layer of a
column (the surface operator tensored with the identity in zeta).
The levels procedure is called with each new surface mesh because the levels depend on the
position of the surface nodes: with terrain-following levels, refinement samples the
bathymetry at the new nodes (ExtrudedSigmaLevels and ExtrudedHybridLevels are the usual
bodies). It must return levels that are continuous across lateral faces, as ExtrudedMesh
requires.
MPI: as in AMRController2D, the forest is rank-replicated, the column flags are allgathered
once per epoch, and EmitMesh re-decomposes the new surface leaves into contiguous ranges.
Columns never straddle ranks, so the 3-D decomposition is the surface one expanded by nz and
the 2-D migration windows (PlanWindows) become 3-D windows by the same factor. The 3-D model
migrates point-to-point with MigrateOldWindow_DGModel3D_t; the 2-D model with its own
MigrateOldWindow.
Backends: the 3-D model always stages and migrates through the portable host routines of
DGModel3D_t (called by name), because the extruded apply reads host data; on a GPU build
that means one device-to-host and one host-to-device copy of the 3-D field per adaptation
epoch. The 2-D model uses its backend's own transfer. Nothing is added to the time-stepping
loop.
Ownership: the caller's base surface mesh, extruded mesh and geometries are never freed
here; the base surface mesh must outlive the controller (it supplies the boundary-condition
metadata and the communicator for every emitted mesh). Meshes and geometries emitted by an
epoch are owned by the controller and freed when they are replaced or by Free.
Uses
module~~self_amrcontroller_extruded~~UsesGraph
module~self_amrcontroller_extruded
SELF_AMRController_Extruded
module~self_dgmodel3d_t
SELF_DGModel3D_t
module~self_amrcontroller_extruded->module~self_dgmodel3d_t
iso_fortran_env
iso_fortran_env
module~self_amrcontroller_extruded->iso_fortran_env
module~self_lagrange~3
SELF_Lagrange
module~self_amrcontroller_extruded->module~self_lagrange~3
module~self_adaptivemesh_2d
SELF_AdaptiveMesh_2D
module~self_amrcontroller_extruded->module~self_adaptivemesh_2d
module~self_mesh_2d
SELF_Mesh_2D
module~self_amrcontroller_extruded->module~self_mesh_2d
module~self_mesh_3d
SELF_Mesh_3D
module~self_amrcontroller_extruded->module~self_mesh_3d
module~self_amrcontroller_2d
SELF_AMRController_2D
module~self_amrcontroller_extruded->module~self_amrcontroller_2d
module~self_transferplan_2d
SELF_TransferPlan_2D
module~self_amrcontroller_extruded->module~self_transferplan_2d
module~self_quadtreemesh_2d
SELF_QuadTreeMesh_2D
module~self_amrcontroller_extruded->module~self_quadtreemesh_2d
mpi
mpi
module~self_amrcontroller_extruded->mpi
module~self_geometry_2d
SELF_Geometry_2D
module~self_amrcontroller_extruded->module~self_geometry_2d
module~self_geometry_3d
SELF_Geometry_3D
module~self_amrcontroller_extruded->module~self_geometry_3d
module~self_constants
SELF_Constants
module~self_amrcontroller_extruded->module~self_constants
module~self_refinementindicator_3d~2
SELF_RefinementIndicator_3D
module~self_amrcontroller_extruded->module~self_refinementindicator_3d~2
module~self_dgmodel2d_t
SELF_DGModel2D_t
module~self_amrcontroller_extruded->module~self_dgmodel2d_t
module~self_dgmodel3d_t->iso_fortran_env
module~self_dgmodel3d_t->module~self_mesh_3d
module~self_dgmodel3d_t->module~self_transferplan_2d
module~self_dgmodel3d_t->module~self_geometry_3d
module~self_mappedscalar_3d~2
SELF_MappedScalar_3D
module~self_dgmodel3d_t->module~self_mappedscalar_3d~2
module~self_model
SELF_Model
module~self_dgmodel3d_t->module~self_model
module~self_hdf5
SELF_HDF5
module~self_dgmodel3d_t->module~self_hdf5
module~self_boundaryconditions
SELF_BoundaryConditions
module~self_dgmodel3d_t->module~self_boundaryconditions
module~self_transferplan_3d
SELF_TransferPlan_3D
module~self_dgmodel3d_t->module~self_transferplan_3d
module~self_metadata
SELF_Metadata
module~self_dgmodel3d_t->module~self_metadata
module~self_mappedvector_3d
SELF_MappedVector_3D
module~self_dgmodel3d_t->module~self_mappedvector_3d
module~self_supportroutines
SELF_SupportRoutines
module~self_dgmodel3d_t->module~self_supportroutines
FEQParse
FEQParse
module~self_dgmodel3d_t->FEQParse
HDF5
HDF5
module~self_dgmodel3d_t->HDF5
module~self_solutionmigration
SELF_SolutionMigration
module~self_dgmodel3d_t->module~self_solutionmigration
module~self_lagrange~3->iso_fortran_env
module~self_lagrange~3->module~self_constants
module~self_lagrange_t
SELF_Lagrange_t
module~self_lagrange~3->module~self_lagrange_t
module~self_gpu
SELF_GPU
module~self_lagrange~3->module~self_gpu
iso_c_binding
iso_c_binding
module~self_lagrange~3->iso_c_binding
module~self_adaptivemesh_2d->module~self_lagrange~3
module~self_adaptivemesh_2d->module~self_mesh_2d
module~self_adaptivemesh_2d->module~self_quadtreemesh_2d
module~self_adaptivemesh_2d->module~self_constants
module~self_refinementprimitives_2d
SELF_RefinementPrimitives_2D
module~self_adaptivemesh_2d->module~self_refinementprimitives_2d
module~self_mesh_2d->module~self_gpu
module~self_mesh_2d_t
SELF_Mesh_2D_t
module~self_mesh_2d->module~self_mesh_2d_t
module~self_mesh_2d->iso_c_binding
module~self_mesh_3d_t
SELF_Mesh_3D_t
module~self_mesh_3d->module~self_mesh_3d_t
module~self_mesh_3d->module~self_gpu
module~self_mesh_3d->iso_c_binding
module~self_amrcontroller_2d->iso_fortran_env
module~self_amrcontroller_2d->module~self_lagrange~3
module~self_amrcontroller_2d->module~self_adaptivemesh_2d
module~self_amrcontroller_2d->module~self_mesh_2d
module~self_amrcontroller_2d->module~self_transferplan_2d
module~self_amrcontroller_2d->module~self_quadtreemesh_2d
module~self_amrcontroller_2d->mpi
module~self_amrcontroller_2d->module~self_geometry_2d
module~self_amrcontroller_2d->module~self_constants
module~self_amrcontroller_2d->module~self_dgmodel2d_t
module~self_refinementindicator_2d
SELF_RefinementIndicator_2D
module~self_amrcontroller_2d->module~self_refinementindicator_2d
module~self_amrcontroller_2d->module~self_solutionmigration
module~self_domaindecomposition
SELF_DomainDecomposition
module~self_amrcontroller_2d->module~self_domaindecomposition
module~self_transferplan_2d->module~self_lagrange~3
module~self_transferplan_2d->module~self_quadtreemesh_2d
module~self_transferplan_2d->module~self_constants
module~self_solutiontransfer_2d
SELF_SolutionTransfer_2D
module~self_transferplan_2d->module~self_solutiontransfer_2d
module~self_quadtreemesh_2d->module~self_lagrange~3
module~self_quadtreemesh_2d->module~self_mesh_2d
module~self_quadtreemesh_2d->module~self_constants
module~self_quadtreemesh_2d->module~self_refinementprimitives_2d
module~self_geometry_2d->module~self_lagrange~3
module~self_geometry_2d->module~self_mesh_2d
module~self_geometry_2d->module~self_constants
module~self_geometry_2d->module~self_supportroutines
module~self_data
SELF_Data
module~self_geometry_2d->module~self_data
module~self_scalar_2d
SELF_Scalar_2D
module~self_geometry_2d->module~self_scalar_2d
module~self_vector_2d~2
SELF_Vector_2D
module~self_geometry_2d->module~self_vector_2d~2
module~self_tensor_2d~2
SELF_Tensor_2D
module~self_geometry_2d->module~self_tensor_2d~2
module~self_geometry_3d->module~self_lagrange~3
module~self_geometry_3d->module~self_mesh_3d
module~self_geometry_3d->module~self_constants
module~self_vector_3d
SELF_Vector_3D
module~self_geometry_3d->module~self_vector_3d
module~self_tensor_3d~2
SELF_Tensor_3D
module~self_geometry_3d->module~self_tensor_3d~2
module~self_scalar_3d
SELF_Scalar_3D
module~self_geometry_3d->module~self_scalar_3d
module~self_geometry_3d->module~self_supportroutines
module~self_geometry_3d->module~self_data
module~self_constants->iso_fortran_env
module~self_constants->iso_c_binding
module~self_refinementindicator_3d~2->module~self_constants
module~self_refinementindicator_3d_t
SELF_RefinementIndicator_3D_t
module~self_refinementindicator_3d~2->module~self_refinementindicator_3d_t
module~self_refinementindicator_3d~2->module~self_scalar_3d
module~self_refinementindicator_3d~2->module~self_gpu
module~self_refinementindicator_3d~2->iso_c_binding
module~self_gpuinterfaces
SELF_GPUInterfaces
module~self_refinementindicator_3d~2->module~self_gpuinterfaces
module~self_dgmodel2d_t->iso_fortran_env
module~self_dgmodel2d_t->module~self_mesh_2d
module~self_dgmodel2d_t->module~self_transferplan_2d
module~self_dgmodel2d_t->module~self_geometry_2d
module~self_dgmodel2d_t->module~self_model
module~self_dgmodel2d_t->module~self_hdf5
module~self_dgmodel2d_t->module~self_boundaryconditions
module~self_dgmodel2d_t->module~self_metadata
module~self_mappedvector_2d
SELF_MappedVector_2D
module~self_dgmodel2d_t->module~self_mappedvector_2d
module~self_mappedscalar_2d~2
SELF_MappedScalar_2D
module~self_dgmodel2d_t->module~self_mappedscalar_2d~2
module~self_dgmodel2d_t->module~self_supportroutines
module~self_dgmodel2d_t->FEQParse
module~self_dgmodel2d_t->HDF5
module~self_dgmodel2d_t->module~self_solutionmigration
module~self_vector_3d->module~self_constants
module~self_vector_3d->module~self_gpu
module~self_vector_3d->iso_c_binding
module~self_vector_3d->module~self_gpuinterfaces
module~self_vector_3d_t
SELF_Vector_3D_t
module~self_vector_3d->module~self_vector_3d_t
module~self_tensor_3d~2->iso_fortran_env
module~self_tensor_3d~2->module~self_constants
module~self_tensor_3d~2->module~self_gpu
module~self_tensor_3d~2->iso_c_binding
module~self_tensor_3d_t
SELF_Tensor_3D_t
module~self_tensor_3d~2->module~self_tensor_3d_t
module~self_lagrange_t->iso_fortran_env
module~self_lagrange_t->module~self_constants
module~self_lagrange_t->module~self_hdf5
module~self_lagrange_t->module~self_supportroutines
module~self_lagrange_t->HDF5
module~self_lagrange_t->iso_c_binding
module~self_quadrature
SELF_Quadrature
module~self_lagrange_t->module~self_quadrature
module~self_refinementindicator_2d->module~self_constants
module~self_refinementindicator_2d->module~self_gpu
module~self_refinementindicator_2d->iso_c_binding
module~self_refinementindicator_2d->module~self_scalar_2d
module~self_refinementindicator_2d->module~self_gpuinterfaces
module~self_refinementindicator_2d_t
SELF_RefinementIndicator_2D_t
module~self_refinementindicator_2d->module~self_refinementindicator_2d_t
module~self_mesh_3d_t->module~self_lagrange~3
module~self_mesh_3d_t->module~self_constants
module~self_mesh_3d_t->module~self_hdf5
module~self_mesh_3d_t->module~self_mesh_2d_t
module~self_mesh_3d_t->module~self_supportroutines
module~self_mesh_3d_t->HDF5
module~self_mesh_3d_t->iso_c_binding
module~self_mesh_3d_t->module~self_domaindecomposition
module~self_mesh
SELF_Mesh
module~self_mesh_3d_t->module~self_mesh
module~self_mesh_3d_t->module~self_quadrature
module~self_refinementprimitives_2d->module~self_lagrange~3
module~self_refinementprimitives_2d->module~self_constants
module~self_mappedscalar_3d~2->module~self_gpu
module~self_mappedscalar_3d~2->iso_c_binding
module~self_mappedscalar_3d~2->module~self_gpuinterfaces
module~self_mappedscalar_3d_t
SELF_MappedScalar_3D_t
module~self_mappedscalar_3d~2->module~self_mappedscalar_3d_t
module~self_model->module~self_hdf5
module~self_model->module~self_metadata
module~self_model->module~self_supportroutines
module~self_model->FEQParse
module~self_model->HDF5
module~self_hdf5->iso_fortran_env
module~self_hdf5->mpi
module~self_hdf5->module~self_constants
module~self_hdf5->HDF5
module~self_boundaryconditions->module~self_metadata
module~self_boundaryconditions->module~self_supportroutines
module~self_boundaryconditions->iso_c_binding
module~self_transferplan_3d->module~self_lagrange~3
module~self_transferplan_3d->module~self_constants
module~self_solutiontransfer_3d
SELF_SolutionTransfer_3D
module~self_transferplan_3d->module~self_solutiontransfer_3d
module~self_octreemesh_3d
SELF_OctreeMesh_3D
module~self_transferplan_3d->module~self_octreemesh_3d
module~self_metadata->module~self_hdf5
module~self_metadata->HDF5
module~self_mappedvector_2d->module~self_gpu
module~self_mappedvector_2d->iso_c_binding
module~self_mappedvector_2d->module~self_vector_2d~2
module~self_mappedvector_2d->module~self_gpuinterfaces
module~self_mappedvector_2d_t
SELF_MappedVector_2D_t
module~self_mappedvector_2d->module~self_mappedvector_2d_t
module~self_refinementindicator_3d_t->module~self_lagrange~3
module~self_refinementindicator_3d_t->mpi
module~self_refinementindicator_3d_t->module~self_constants
module~self_refinementindicator_3d_t->module~self_scalar_3d
module~self_refinementindicator_3d_t->iso_c_binding
module~self_mappedscalar_2d~2->module~self_gpu
module~self_mappedscalar_2d~2->iso_c_binding
module~self_mappedscalar_2d~2->module~self_scalar_2d
module~self_mappedscalar_2d~2->module~self_gpuinterfaces
module~self_mappedscalar_2d_t
SELF_MappedScalar_2D_t
module~self_mappedscalar_2d~2->module~self_mappedscalar_2d_t
module~self_scalar_3d->module~self_constants
module~self_scalar_3d->module~self_gpu
module~self_scalar_3d->iso_c_binding
module~self_scalar_3d->module~self_gpuinterfaces
module~self_scalar_3d_t
SELF_Scalar_3D_t
module~self_scalar_3d->module~self_scalar_3d_t
module~self_gpu->iso_c_binding
module~self_gpu_enums~2
SELF_GPU_enums
module~self_gpu->module~self_gpu_enums~2
module~self_mesh_2d_t->module~self_lagrange~3
module~self_mesh_2d_t->module~self_constants
module~self_mesh_2d_t->module~self_hdf5
module~self_mesh_2d_t->module~self_supportroutines
module~self_mesh_2d_t->HDF5
module~self_mesh_2d_t->iso_c_binding
module~self_mesh_2d_t->module~self_domaindecomposition
module~self_mesh_2d_t->module~self_mesh
module~self_mesh_2d_t->module~self_quadrature
module~self_mappedvector_3d->module~self_gpu
module~self_mappedvector_3d->iso_c_binding
module~self_mappedvector_3d->module~self_gpuinterfaces
module~self_mappedvector_3d_t
SELF_MappedVector_3D_t
module~self_mappedvector_3d->module~self_mappedvector_3d_t
module~self_supportroutines->iso_fortran_env
module~self_supportroutines->module~self_constants
module~self_solutionmigration->iso_fortran_env
module~self_solutionmigration->mpi
module~self_solutionmigration->module~self_constants
module~self_solutionmigration->module~self_domaindecomposition
module~self_domaindecomposition->iso_fortran_env
module~self_domaindecomposition->mpi
module~self_domaindecomposition->iso_c_binding
module~self_domaindecomposition_t
SELF_DomainDecomposition_t
module~self_domaindecomposition->module~self_domaindecomposition_t
module~self_data->module~self_lagrange~3
module~self_data->module~self_constants
module~self_data->module~self_hdf5
module~self_data->module~self_metadata
module~self_data->FEQParse
module~self_data->HDF5
module~self_data->iso_c_binding
module~self_scalar_2d->module~self_constants
module~self_scalar_2d->module~self_gpu
module~self_scalar_2d->iso_c_binding
module~self_scalar_2d->module~self_gpuinterfaces
module~self_scalar_2d_t
SELF_Scalar_2D_t
module~self_scalar_2d->module~self_scalar_2d_t
module~self_vector_2d~2->module~self_constants
module~self_vector_2d~2->module~self_gpu
module~self_vector_2d~2->iso_c_binding
module~self_vector_2d~2->module~self_gpuinterfaces
module~self_vector_2d_t
SELF_Vector_2D_t
module~self_vector_2d~2->module~self_vector_2d_t
module~self_gpuinterfaces->module~self_gpu
module~self_gpuinterfaces->iso_c_binding
module~self_solutiontransfer_2d->module~self_lagrange~3
module~self_solutiontransfer_2d->module~self_constants
module~self_tensor_2d~2->iso_fortran_env
module~self_tensor_2d~2->module~self_constants
module~self_tensor_2d~2->module~self_gpu
module~self_tensor_2d~2->iso_c_binding
module~self_tensor_2d_t
SELF_Tensor_2D_t
module~self_tensor_2d~2->module~self_tensor_2d_t
module~self_scalar_2d_t->module~self_lagrange~3
module~self_scalar_2d_t->module~self_constants
module~self_scalar_2d_t->module~self_hdf5
module~self_scalar_2d_t->module~self_metadata
module~self_scalar_2d_t->FEQParse
module~self_scalar_2d_t->HDF5
module~self_scalar_2d_t->iso_c_binding
module~self_scalar_2d_t->module~self_data
module~self_datapool
SELF_DataPool
module~self_scalar_2d_t->module~self_datapool
module~self_gpu_enums~2->iso_c_binding
module~self_mappedvector_3d_t->module~self_lagrange~3
module~self_mappedvector_3d_t->module~self_mesh_3d
module~self_mappedvector_3d_t->module~self_geometry_3d
module~self_mappedvector_3d_t->module~self_constants
module~self_mappedvector_3d_t->FEQParse
module~self_mappedvector_3d_t->iso_c_binding
module~self_mappedvector_3d_t->module~self_domaindecomposition
module~self_domaindecomposition_t->module~self_lagrange~3
module~self_domaindecomposition_t->mpi
module~self_domaindecomposition_t->module~self_constants
module~self_domaindecomposition_t->module~self_supportroutines
module~self_domaindecomposition_t->iso_c_binding
module~self_vector_2d_t->module~self_lagrange~3
module~self_vector_2d_t->module~self_constants
module~self_vector_2d_t->module~self_hdf5
module~self_vector_2d_t->module~self_metadata
module~self_vector_2d_t->FEQParse
module~self_vector_2d_t->HDF5
module~self_vector_2d_t->iso_c_binding
module~self_vector_2d_t->module~self_data
module~self_vector_2d_t->module~self_datapool
module~self_vector_3d_t->module~self_lagrange~3
module~self_vector_3d_t->module~self_constants
module~self_vector_3d_t->module~self_hdf5
module~self_vector_3d_t->module~self_metadata
module~self_vector_3d_t->FEQParse
module~self_vector_3d_t->HDF5
module~self_vector_3d_t->iso_c_binding
module~self_vector_3d_t->module~self_data
module~self_vector_3d_t->module~self_datapool
module~self_tensor_3d_t->module~self_lagrange~3
module~self_tensor_3d_t->module~self_constants
module~self_tensor_3d_t->module~self_hdf5
module~self_tensor_3d_t->module~self_metadata
module~self_tensor_3d_t->FEQParse
module~self_tensor_3d_t->HDF5
module~self_tensor_3d_t->iso_c_binding
module~self_tensor_3d_t->module~self_data
module~self_tensor_3d_t->module~self_datapool
module~self_mesh->module~self_constants
module~self_mesh->iso_c_binding
module~self_mesh->module~self_domaindecomposition
module~self_quadrature->iso_fortran_env
module~self_quadrature->module~self_constants
module~self_refinementindicator_2d_t->module~self_lagrange~3
module~self_refinementindicator_2d_t->mpi
module~self_refinementindicator_2d_t->module~self_constants
module~self_refinementindicator_2d_t->iso_c_binding
module~self_refinementindicator_2d_t->module~self_scalar_2d
module~self_mappedscalar_3d_t->module~self_lagrange~3
module~self_mappedscalar_3d_t->module~self_mesh_3d
module~self_mappedscalar_3d_t->module~self_geometry_3d
module~self_mappedscalar_3d_t->module~self_constants
module~self_mappedscalar_3d_t->module~self_tensor_3d~2
module~self_mappedscalar_3d_t->module~self_scalar_3d
module~self_mappedscalar_3d_t->FEQParse
module~self_mappedscalar_3d_t->iso_c_binding
module~self_mappedscalar_3d_t->module~self_domaindecomposition
module~self_solutiontransfer_3d->module~self_lagrange~3
module~self_solutiontransfer_3d->module~self_constants
module~self_octreemesh_3d->module~self_lagrange~3
module~self_octreemesh_3d->module~self_mesh_3d
module~self_octreemesh_3d->module~self_constants
module~self_refinementprimitives_3d
SELF_RefinementPrimitives_3D
module~self_octreemesh_3d->module~self_refinementprimitives_3d
module~self_mappedvector_2d_t->module~self_lagrange~3
module~self_mappedvector_2d_t->module~self_mesh_2d
module~self_mappedvector_2d_t->module~self_geometry_2d
module~self_mappedvector_2d_t->module~self_constants
module~self_mappedvector_2d_t->FEQParse
module~self_mappedvector_2d_t->iso_c_binding
module~self_mappedvector_2d_t->module~self_domaindecomposition
module~self_mappedvector_2d_t->module~self_vector_2d~2
module~self_mappedvector_2d_t->module~self_tensor_2d~2
module~self_mappedscalar_2d_t->module~self_lagrange~3
module~self_mappedscalar_2d_t->module~self_mesh_2d
module~self_mappedscalar_2d_t->module~self_geometry_2d
module~self_mappedscalar_2d_t->module~self_constants
module~self_mappedscalar_2d_t->FEQParse
module~self_mappedscalar_2d_t->iso_c_binding
module~self_mappedscalar_2d_t->module~self_domaindecomposition
module~self_mappedscalar_2d_t->module~self_scalar_2d
module~self_mappedscalar_2d_t->module~self_tensor_2d~2
module~self_scalar_3d_t->module~self_lagrange~3
module~self_scalar_3d_t->module~self_constants
module~self_scalar_3d_t->module~self_hdf5
module~self_scalar_3d_t->module~self_metadata
module~self_scalar_3d_t->FEQParse
module~self_scalar_3d_t->HDF5
module~self_scalar_3d_t->iso_c_binding
module~self_scalar_3d_t->module~self_data
module~self_scalar_3d_t->module~self_datapool
module~self_tensor_2d_t->module~self_lagrange~3
module~self_tensor_2d_t->module~self_constants
module~self_tensor_2d_t->module~self_hdf5
module~self_tensor_2d_t->module~self_metadata
module~self_tensor_2d_t->FEQParse
module~self_tensor_2d_t->HDF5
module~self_tensor_2d_t->iso_c_binding
module~self_tensor_2d_t->module~self_data
module~self_tensor_2d_t->module~self_datapool
module~self_datapool->module~self_constants
module~self_refinementprimitives_3d->module~self_lagrange~3
module~self_refinementprimitives_3d->module~self_constants
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
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.
Abstract Interfaces
abstract interface
public subroutine SELF_ExtrudedLevels(surf, zLevels) Fill zLevels(1:nGeo+1,1:nGeo+1,0:nz,1:surf%nElem), the level heights z_0 < ... <
z_nz = 0 at the geometry nodes of every rank-local surface element, for ExtrudedMesh.
Arguments
Type Intent Optional Attributes Name
type(Mesh2D ),
intent(in)
::
surf
real(kind=prec),
intent(out)
::
zLevels (1:,1:,0:,1:)
Derived Types
Components
Type Visibility Attributes Name Initial
type(SEMHex ),
public, pointer ::
activeGeom => null() its geometry
type(SEMQuad ),
public, pointer ::
activeGeom2 => null() surface geometry (only with a 2-D model)
type(Mesh3D ),
public, pointer ::
activeMesh => null() extruded mesh the 3-D model runs on
type(Mesh2D ),
public, pointer ::
activeSurf => null() surface mesh of the current columns
type(Mesh2D ),
public, pointer ::
baseSurf => null() caller-owned; metadata source for EmitMesh
integer,
public ::
bottomBC = 0 boundary condition id of the column bottoms
real(kind=prec),
public ::
coarsenThreshold = 0.0_prec
real(kind=prec),
public, allocatable ::
energyWeights (:)Migration windows for every rank, in surface elements (columns) and in 3-D elements
type(QuadTreeMesh2D ),
public ::
forest
logical,
public ::
hasModel2D = .false. whether Init was given a 2-D model
type(RefinementIndicator3D ),
public ::
indicator
type(Lagrange ),
public, pointer ::
interp => null() the models' solution interpolant
integer,
public ::
ivar = SELF_AMR_ALLVARS driving 3-D variable for the indicator
procedure(SELF_ExtrudedLevels ),
public, pointer, nopass ::
levels => null()
integer,
public ::
maxLevel = 1 refinement-level cap
integer,
public ::
nHalo = 1 refine-flag halo-expansion passes (in columns)
integer(kind=int64),
public ::
nMigrateBytesRecv = 0
integer(kind=int64),
public ::
nMigrateBytesSent = 0
integer(kind=int64),
public ::
nMigrateElemRemote = 0
integer,
public ::
nz = 0 layers per column
logical,
public ::
ownsActive = .false. whether the active meshes/geometries were emitted by us
real(kind=prec),
public ::
refineThreshold = 0.0_prec
real(kind=prec),
public ::
relativeEnergyFloor = SELF_AMR_DEFAULT_RELFLOOR
real(kind=prec),
public ::
significantEnergyFloor = SELF_AMR_DEFAULT_RELFLOOR
integer,
public ::
topBC = 0 boundary condition id of the column tops
integer,
public, allocatable ::
winFirst (:)
integer,
public, allocatable ::
winFirst3 (:)Cumulative migration accounting, both models together
integer,
public, allocatable ::
winLast (:)
integer,
public, allocatable ::
winLast3 (:)Cumulative migration accounting, both models together
Type-Bound Procedures
procedure, public :: Adapt => Adapt_ExtrudedAMRController
procedure, private :: ApplyIndicatorSettings => ApplyIndicatorSettings_ExtrudedAMRController
procedure, public :: Free => Free_ExtrudedAMRController
procedure, public :: Init => Init_ExtrudedAMRController
procedure, public :: RecommendedTimeStep => RecommendedTimeStep_ExtrudedAMRController
Functions
Level-based explicit time step bound: dtBase / 2**maxLevel, with dtBase stable on the
base (level-0) mesh. Refinement halves the horizontal element size per level; the
vertical spacing is unchanged, so this is conservative when the vertical CFL binds.
Arguments
Type Intent Optional Attributes Name
class(ExtrudedAMRController ),
intent(in)
::
this
real(kind=prec),
intent(in)
::
dtBase
Return Value real(kind=prec)
Subroutines
Perform one adaptation epoch (see the module documentation). On return adapted reports
whether the mesh changed; when it did, both models are rebound to the new meshes with
their solutions transferred, and the caller should re-evaluate the time step
(RecommendedTimeStep) and any model state derived from the mesh. model2d must be given
exactly when Init was given one.
Arguments
Type Intent Optional Attributes Name
class(ExtrudedAMRController ),
intent(inout),
target ::
this
class(DGModel3D_t ),
intent(inout)
::
model3d
logical,
intent(out)
::
adapted
class(DGModel2D_t ),
intent(inout),
optional ::
model2d
Push the controller-owned amplitude-gate settings onto the indicator, after every
indicator Init (which resets them).
Arguments
Release the forest, the indicator and every mesh/geometry the controller emitted. The
models' mesh and geometry pointers dangle afterwards if they were running on emitted
ones, so free or stop using the models first.
Arguments
public subroutine Init_ExtrudedAMRController (this, model3d, surf, levels, bottomBC, topBC, refineThreshold, coarsenThreshold, ivar, maxLevel, nHalo, model2d, relativeEnergyFloor, energyWeights, significantEnergyFloor)
Attach the controller to an initialized 3-D model on an extruded mesh, and optionally to
a 2-D model on the surface mesh.
Read more…
Arguments
Type Intent Optional Attributes Name
class(ExtrudedAMRController ),
intent(out)
::
this
class(DGModel3D_t ),
intent(in)
::
model3d
type(Mesh2D ),
intent(in),
target ::
surf
procedure(SELF_ExtrudedLevels )
::
levels
integer,
intent(in)
::
bottomBC
integer,
intent(in)
::
topBC
real(kind=prec),
intent(in)
::
refineThreshold
real(kind=prec),
intent(in)
::
coarsenThreshold
integer,
intent(in)
::
ivar
integer,
intent(in)
::
maxLevel
integer,
intent(in)
::
nHalo
class(DGModel2D_t ),
intent(in),
optional ::
model2d
real(kind=prec),
intent(in),
optional ::
relativeEnergyFloor
real(kind=prec),
intent(in),
optional ::
energyWeights (:)
real(kind=prec),
intent(in),
optional ::
significantEnergyFloor
Free the active meshes and geometries if this controller emitted them.
Arguments