A parent model that runs one DG model per element set and couples the sets at their
shared faces.
The global mesh is split into nSets element sets (SELF_ElementSetMesh_3D). Set k gets
its own sub-mesh, geometry and DG model, which may be any extension of DGModel3D: for
example a fluid model on one set and a solid model on another. The parent extends
Model, so the stock time integrators drive it: every stage calls the parent's
CalculateTendency and UpdateGRKn, and the parent forwards them to each set.
Setup takes three steps, because user model types cannot be constructed generically:
call ms%Init(globalMesh,interp,setOfElemLocal,nSets)
builds the sub-meshes and geometries.
On every rank and for every set k, including sets with no elements on that rank:
allocate( :: ms%sets(k)%model)
call ms%sets(k)%model%Init(ms%sets(k)%mesh,ms%sets(k)%geometry)
then set the initial condition. Model Init is collective over the set's
communicator (MapBoundaryConditions reduces over it), so no rank may skip a set.
call ms%SetupInterfaces()
checks the set models, builds the interface map and registers the interface
boundary condition on each set model.
Interface faces. In each sub-mesh, a face shared with another set carries
sideInfo(5) = SELF_BC_SET_INTERFACE. SetupInterfaces registers a no-op hyperbolic
boundary condition for that id on every set model and maps boundary conditions again,
so the faces count as mapped and nothing but the parent writes their exterior state.
Each stage, CalculateTendency
0. calls the parent's PreTendencyHook,
1. interpolates the solution of every set with interface faces on this rank to its
element faces (BoundaryInterp),
2. exchanges the interface traces (SetInterface3D%Exchange), so iface%ghost holds
the partner set's trace on every local interface face,
3. calls FillInterfaceBoundary(k) for each set k, which writes solution%extBoundary
on set k's interface faces,
4. calls each set model's CalculateTendency.
The default FillInterfaceBoundary copies the ghost trace unchanged and requires both
sets to have the same nvar. Override it to couple sets whose variables differ.
Invariants:
- Sets are processed in the same fixed order (k = 1..nSets) on every rank.
- A set with no elements on a rank skips CalculateTendency and the solution updates
on that rank. Set models must therefore not call collectives, or post messages on
their mesh communicator, inside CalculateTendency or anything it calls
(PreTendencyHook, boundary condition handlers). Every other forwarded procedure
runs on every set, empty or not.
- sets(:) must never be reassigned, reallocated or moved: each model stores pointers
to its own mesh and geometry.
- Solution gradients are not supported (gradient_enabled must be false on every set):
the gradient exchange inside each set's CalculateTendency has no hook for interface
faces.
- Each sub-mesh owns a duplicate of the global mesh communicator, which Free releases.
Output. WriteModel writes one HDF5 file:
/interp/... the shared interpolant
/elementsets/setOfElem set id of every global element
/set_/controlgrid/solution/ (Np,Np,Np,nGlobalElem_k) per variable
/set_/controlgrid/geometry/_dim node coordinates, d = 1..3
with written as I4.4 and elements in set-global order. ReadModel reads the
solutions back into a model built on the same partition.
Uses
module~~self_multisetmodel3d_t~~UsesGraph
module~self_multisetmodel3d_t
SELF_MultiSetModel3D_t
module~self_dgmodel3d
SELF_DGModel3D
module~self_multisetmodel3d_t->module~self_dgmodel3d
module~self_boundaryconditions
SELF_BoundaryConditions
module~self_multisetmodel3d_t->module~self_boundaryconditions
module~self_lagrange~3
SELF_Lagrange
module~self_multisetmodel3d_t->module~self_lagrange~3
module~self_setinterface_3d
SELF_SetInterface_3D
module~self_multisetmodel3d_t->module~self_setinterface_3d
module~self_model
SELF_Model
module~self_multisetmodel3d_t->module~self_model
module~self_mesh_3d
SELF_Mesh_3D
module~self_multisetmodel3d_t->module~self_mesh_3d
mpi
mpi
module~self_multisetmodel3d_t->mpi
HDF5
HDF5
module~self_multisetmodel3d_t->HDF5
module~self_elementsetmesh_3d
SELF_ElementSetMesh_3D
module~self_multisetmodel3d_t->module~self_elementsetmesh_3d
module~self_multisetio_3d
SELF_MultiSetIO_3D
module~self_multisetmodel3d_t->module~self_multisetio_3d
module~self_hdf5
SELF_HDF5
module~self_multisetmodel3d_t->module~self_hdf5
module~self_geometry_3d
SELF_Geometry_3D
module~self_multisetmodel3d_t->module~self_geometry_3d
module~self_constants
SELF_Constants
module~self_multisetmodel3d_t->module~self_constants
module~self_dgmodel3d->module~self_boundaryconditions
module~self_dgmodel3d->module~self_mesh_3d
module~self_dgmodel3d->module~self_geometry_3d
module~self_gpuinterfaces
SELF_GPUInterfaces
module~self_dgmodel3d->module~self_gpuinterfaces
module~self_transferplan_3d
SELF_TransferPlan_3D
module~self_dgmodel3d->module~self_transferplan_3d
iso_fortran_env
iso_fortran_env
module~self_dgmodel3d->iso_fortran_env
module~self_dgmodel3d_t
SELF_DGModel3D_t
module~self_dgmodel3d->module~self_dgmodel3d_t
module~self_gpu
SELF_GPU
module~self_dgmodel3d->module~self_gpu
module~self_supportroutines
SELF_SupportRoutines
module~self_boundaryconditions->module~self_supportroutines
module~self_metadata
SELF_Metadata
module~self_boundaryconditions->module~self_metadata
iso_c_binding
iso_c_binding
module~self_boundaryconditions->iso_c_binding
module~self_lagrange~3->module~self_constants
module~self_lagrange~3->iso_fortran_env
module~self_lagrange~3->module~self_gpu
module~self_lagrange~3->iso_c_binding
module~self_lagrange_t
SELF_Lagrange_t
module~self_lagrange~3->module~self_lagrange_t
module~self_setinterface_3d->module~self_mesh_3d
module~self_setinterface_3d->module~self_constants
module~self_setinterface_3d->module~self_gpu
module~self_setinterface_3d->iso_c_binding
module~self_setinterface_3d_t
SELF_SetInterface_3D_t
module~self_setinterface_3d->module~self_setinterface_3d_t
module~self_model->HDF5
module~self_model->module~self_hdf5
FEQParse
FEQParse
module~self_model->FEQParse
module~self_model->module~self_supportroutines
module~self_model->module~self_metadata
module~self_mesh_3d->module~self_gpu
module~self_mesh_3d->iso_c_binding
module~self_mesh_3d_t
SELF_Mesh_3D_t
module~self_mesh_3d->module~self_mesh_3d_t
module~self_elementsetmesh_3d->module~self_mesh_3d
module~self_elementsetmesh_3d->mpi
module~self_elementsetmesh_3d->module~self_constants
module~self_multisetio_3d->HDF5
module~self_multisetio_3d->module~self_constants
module~self_hdf5->mpi
module~self_hdf5->HDF5
module~self_hdf5->module~self_constants
module~self_hdf5->iso_fortran_env
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_scalar_3d
SELF_Scalar_3D
module~self_geometry_3d->module~self_scalar_3d
module~self_tensor_3d~2
SELF_Tensor_3D
module~self_geometry_3d->module~self_tensor_3d~2
module~self_vector_3d
SELF_Vector_3D
module~self_geometry_3d->module~self_vector_3d
module~self_data
SELF_Data
module~self_geometry_3d->module~self_data
module~self_geometry_3d->module~self_supportroutines
module~self_constants->iso_fortran_env
module~self_constants->iso_c_binding
module~self_scalar_3d->module~self_constants
module~self_scalar_3d->module~self_gpuinterfaces
module~self_scalar_3d->module~self_gpu
module~self_scalar_3d->iso_c_binding
module~self_scalar_3d_t
SELF_Scalar_3D_t
module~self_scalar_3d->module~self_scalar_3d_t
module~self_tensor_3d~2->module~self_constants
module~self_tensor_3d~2->iso_fortran_env
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_vector_3d->module~self_constants
module~self_vector_3d->module~self_gpuinterfaces
module~self_vector_3d->module~self_gpu
module~self_vector_3d->iso_c_binding
module~self_vector_3d_t
SELF_Vector_3D_t
module~self_vector_3d->module~self_vector_3d_t
module~self_data->module~self_lagrange~3
module~self_data->HDF5
module~self_data->module~self_hdf5
module~self_data->module~self_constants
module~self_data->FEQParse
module~self_data->module~self_metadata
module~self_data->iso_c_binding
module~self_gpuinterfaces->module~self_gpu
module~self_gpuinterfaces->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_dgmodel3d_t->module~self_boundaryconditions
module~self_dgmodel3d_t->module~self_model
module~self_dgmodel3d_t->module~self_mesh_3d
module~self_dgmodel3d_t->HDF5
module~self_dgmodel3d_t->module~self_hdf5
module~self_dgmodel3d_t->module~self_geometry_3d
module~self_dgmodel3d_t->FEQParse
module~self_dgmodel3d_t->module~self_transferplan_3d
module~self_dgmodel3d_t->iso_fortran_env
module~self_dgmodel3d_t->module~self_supportroutines
module~self_dgmodel3d_t->module~self_metadata
module~self_mappedvector_3d
SELF_MappedVector_3D
module~self_dgmodel3d_t->module~self_mappedvector_3d
module~self_mappedscalar_3d~2
SELF_MappedScalar_3D
module~self_dgmodel3d_t->module~self_mappedscalar_3d~2
module~self_transferplan_2d
SELF_TransferPlan_2D
module~self_dgmodel3d_t->module~self_transferplan_2d
module~self_solutionmigration
SELF_SolutionMigration
module~self_dgmodel3d_t->module~self_solutionmigration
module~self_gpu->iso_c_binding
module~self_gpu_enums~2
SELF_GPU_enums
module~self_gpu->module~self_gpu_enums~2
module~self_supportroutines->module~self_constants
module~self_supportroutines->iso_fortran_env
module~self_metadata->HDF5
module~self_metadata->module~self_hdf5
module~self_lagrange_t->HDF5
module~self_lagrange_t->module~self_hdf5
module~self_lagrange_t->module~self_constants
module~self_lagrange_t->iso_fortran_env
module~self_lagrange_t->module~self_supportroutines
module~self_lagrange_t->iso_c_binding
module~self_quadrature
SELF_Quadrature
module~self_lagrange_t->module~self_quadrature
module~self_setinterface_3d_t->module~self_mesh_3d
module~self_setinterface_3d_t->mpi
module~self_setinterface_3d_t->module~self_constants
module~self_setinterface_3d_t->iso_c_binding
module~self_mesh_3d_t->module~self_lagrange~3
module~self_mesh_3d_t->HDF5
module~self_mesh_3d_t->module~self_hdf5
module~self_mesh_3d_t->module~self_constants
module~self_mesh_3d_t->module~self_supportroutines
module~self_mesh_3d_t->iso_c_binding
module~self_mesh
SELF_Mesh
module~self_mesh_3d_t->module~self_mesh
module~self_mesh_2d_t
SELF_Mesh_2D_t
module~self_mesh_3d_t->module~self_mesh_2d_t
module~self_mesh_3d_t->module~self_quadrature
module~self_domaindecomposition
SELF_DomainDecomposition
module~self_mesh_3d_t->module~self_domaindecomposition
module~self_mesh->module~self_constants
module~self_mesh->iso_c_binding
module~self_mesh->module~self_domaindecomposition
module~self_mesh_2d_t->module~self_lagrange~3
module~self_mesh_2d_t->HDF5
module~self_mesh_2d_t->module~self_hdf5
module~self_mesh_2d_t->module~self_constants
module~self_mesh_2d_t->module~self_supportroutines
module~self_mesh_2d_t->iso_c_binding
module~self_mesh_2d_t->module~self_mesh
module~self_mesh_2d_t->module~self_quadrature
module~self_mesh_2d_t->module~self_domaindecomposition
module~self_scalar_3d_t->module~self_lagrange~3
module~self_scalar_3d_t->HDF5
module~self_scalar_3d_t->module~self_hdf5
module~self_scalar_3d_t->module~self_constants
module~self_scalar_3d_t->FEQParse
module~self_scalar_3d_t->module~self_data
module~self_scalar_3d_t->module~self_metadata
module~self_scalar_3d_t->iso_c_binding
module~self_datapool
SELF_DataPool
module~self_scalar_3d_t->module~self_datapool
module~self_tensor_3d_t->module~self_lagrange~3
module~self_tensor_3d_t->HDF5
module~self_tensor_3d_t->module~self_hdf5
module~self_tensor_3d_t->module~self_constants
module~self_tensor_3d_t->FEQParse
module~self_tensor_3d_t->module~self_data
module~self_tensor_3d_t->module~self_metadata
module~self_tensor_3d_t->iso_c_binding
module~self_tensor_3d_t->module~self_datapool
module~self_vector_3d_t->module~self_lagrange~3
module~self_vector_3d_t->HDF5
module~self_vector_3d_t->module~self_hdf5
module~self_vector_3d_t->module~self_constants
module~self_vector_3d_t->FEQParse
module~self_vector_3d_t->module~self_data
module~self_vector_3d_t->module~self_metadata
module~self_vector_3d_t->iso_c_binding
module~self_vector_3d_t->module~self_datapool
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_3d->module~self_gpuinterfaces
module~self_mappedvector_3d->module~self_gpu
module~self_mappedvector_3d->iso_c_binding
module~self_mappedvector_3d_t
SELF_MappedVector_3D_t
module~self_mappedvector_3d->module~self_mappedvector_3d_t
module~self_mappedscalar_3d~2->module~self_gpuinterfaces
module~self_mappedscalar_3d~2->module~self_gpu
module~self_mappedscalar_3d~2->iso_c_binding
module~self_mappedscalar_3d_t
SELF_MappedScalar_3D_t
module~self_mappedscalar_3d~2->module~self_mappedscalar_3d_t
module~self_transferplan_2d->module~self_lagrange~3
module~self_transferplan_2d->module~self_constants
module~self_quadtreemesh_2d
SELF_QuadTreeMesh_2D
module~self_transferplan_2d->module~self_quadtreemesh_2d
module~self_solutiontransfer_2d
SELF_SolutionTransfer_2D
module~self_transferplan_2d->module~self_solutiontransfer_2d
module~self_solutionmigration->mpi
module~self_solutionmigration->module~self_constants
module~self_solutionmigration->iso_fortran_env
module~self_solutionmigration->module~self_domaindecomposition
module~self_gpu_enums~2->iso_c_binding
module~self_quadrature->module~self_constants
module~self_quadrature->iso_fortran_env
module~self_domaindecomposition->mpi
module~self_domaindecomposition->iso_fortran_env
module~self_domaindecomposition->iso_c_binding
module~self_domaindecomposition_t
SELF_DomainDecomposition_t
module~self_domaindecomposition->module~self_domaindecomposition_t
module~self_datapool->module~self_constants
module~self_quadtreemesh_2d->module~self_lagrange~3
module~self_quadtreemesh_2d->module~self_constants
module~self_refinementprimitives_2d
SELF_RefinementPrimitives_2D
module~self_quadtreemesh_2d->module~self_refinementprimitives_2d
module~self_mesh_2d
SELF_Mesh_2D
module~self_quadtreemesh_2d->module~self_mesh_2d
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_refinementprimitives_3d->module~self_lagrange~3
module~self_refinementprimitives_3d->module~self_constants
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_scalar_3d
module~self_mappedscalar_3d_t->module~self_tensor_3d~2
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_2d->module~self_lagrange~3
module~self_solutiontransfer_2d->module~self_constants
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_refinementprimitives_2d->module~self_lagrange~3
module~self_refinementprimitives_2d->module~self_constants
module~self_mesh_2d->module~self_gpu
module~self_mesh_2d->iso_c_binding
module~self_mesh_2d->module~self_mesh_2d_t
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.
Used by
module~~self_multisetmodel3d_t~~UsedByGraph
module~self_multisetmodel3d_t
SELF_MultiSetModel3D_t
module~self_multisetmodel3d
SELF_MultiSetModel3D
module~self_multisetmodel3d->module~self_multisetmodel3d_t
module~self_multisetmodel3d~2
SELF_MultiSetModel3D
module~self_multisetmodel3d~2->module~self_multisetmodel3d_t
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.
Derived Types
One element set: its sub-mesh, geometry and model. The mesh and geometry live on
the heap so the pointers the model stores to them stay valid.
Components
Type Visibility Attributes Name Initial
integer,
public ::
comm = MPI_COMM_NULL
type(SEMHex ),
public, pointer ::
geometry => null() Duplicate of the global mesh communicator, used by this set's decomposition.
Owned by the parent and freed after the sub-mesh.
type(Mesh3D ),
public, pointer ::
mesh => null()
class(DGModel3D ),
public, allocatable ::
model
Components
Type Visibility Attributes Name Initial
real(kind=prec),
public ::
dt
real(kind=prec),
public ::
entropy
type(Mesh3D ),
public, pointer ::
globalMesh => null() Set id of every global element, s(e), e = 1..nGlobalElem (replicated).
logical,
public ::
gradient_enabled = .false.
type(SetInterface3D ),
public ::
iface Each set's solution%boundary, the trace the interface exchange sends.
logical,
public ::
interfacesReady = .false.
integer,
public ::
ioIterate = 0
integer,
public ::
nInterfaceFaces = 0 Interface map and ghost traces; built by SetupInterfaces.
integer,
public ::
nSets = 0
integer,
public ::
nstepped = 0
integer,
public ::
nvar
logical,
public ::
prescribed_bcs_enabled = .true.
integer,
public, allocatable ::
setGlobalId (:)Number of set-k elements on lower ranks, k = 1..nSets.
integer,
public, allocatable ::
setOfElem (:)Set-global id g_k(e) of every global element within its own set (replicated).
integer,
public, allocatable ::
setOffsetThisRank (:)Number of interface faces summed over all sets and all ranks.
type(ElementSet3D ),
public, allocatable ::
sets (:)The global mesh the sets were extracted from. Not owned.
real(kind=prec),
public ::
t
logical,
public ::
tecplot_enabled = .true.
procedure(SELF_timeIntegrator ),
public, pointer ::
timeIntegrator => Euler_timeIntegrator
type(SetTraceRef ),
public, allocatable ::
traces (:)
Type-Bound Procedures
procedure, public :: AdditionalFree => AdditionalFree_Model
procedure, public :: AdditionalInit => AdditionalInit_Model
procedure, public :: AdditionalOutput => AdditionalOutput_Model
procedure, public :: CalculateEntropy => CalculateEntropy_MultiSetModel3D_t
procedure, public :: CalculateTendency => CalculateTendency_MultiSetModel3D_t
procedure, public :: Euler_timeIntegrator
procedure, public :: FillInterfaceBoundary => FillInterfaceBoundary_MultiSetModel3D_t
procedure, public :: ForwardStep => ForwardStep_Model
procedure, public :: Free => Free_MultiSetModel3D_t
procedure, public :: GetSimulationTime
procedure, public :: IncrementIOCounter => IncrementIOCounter_MultiSetModel3D_t
procedure, public :: Init => Init_MultiSetModel3D_t
procedure, public :: LowStorageRK2_timeIntegrator
procedure, public :: LowStorageRK3_timeIntegrator
procedure, public :: LowStorageRK4_timeIntegrator
procedure, public :: PostStepHook => PostStepHook_MultiSetModel3D_t
procedure, public :: PreStepHook => PreStepHook_MultiSetModel3D_t
procedure, public :: PreTendencyHook => PreTendencyHook_Model
procedure, public :: PrintType => PrintType_Model
procedure, public :: ReadModel => Read_MultiSetModel3D_t
procedure, public :: ReportEntropy => ReportEntropy_Model
procedure, public :: ReportMetrics => ReportMetrics_MultiSetModel3D_t
procedure, public :: ReportUnmappedBoundaries => ReportUnmappedBoundaries_MultiSetModel3D_t
procedure, public :: ReportUserMetrics => ReportUserMetrics_Model
procedure, public :: SetNumberOfVariables => SetNumberOfVariables_Model
procedure, public :: SetSimulationTime
generic, public :: SetTimeIntegrator => SetTimeIntegrator_withChar
procedure, public :: SetupInterfaces => SetupInterfaces_MultiSetModel3D_t
procedure, private :: SyncSetClocks
procedure, public :: UpdateGRK2 => UpdateGRK2_MultiSetModel3D_t
procedure, public :: UpdateGRK3 => UpdateGRK3_MultiSetModel3D_t
procedure, public :: UpdateGRK4 => UpdateGRK4_MultiSetModel3D_t
procedure, public :: UpdateSolution => UpdateSolution_MultiSetModel3D_t
procedure, public :: WriteModel => Write_MultiSetModel3D_t
procedure, public :: WriteTecplot => WriteTecplot_MultiSetModel3D_t
procedure, public :: entropy_func => entropy_func_Model
procedure, public :: flux1D => flux1d_Model
procedure, public :: flux2D => flux2d_Model
procedure, public :: flux3D => flux3d_Model
procedure, public :: riemannflux1d => riemannflux1d_Model
procedure, public :: riemannflux2d => riemannflux2d_Model
procedure, public :: riemannflux3d => riemannflux3d_Model
procedure, public :: source1d => source1d_Model
procedure, public :: source2d => source2d_Model
procedure, public :: source3d => source3d_Model
Subroutines
entropy = sum over sets k of the entropy of set k. Each set's CalculateEntropy is
collective over its communicator, so it runs on every set, empty or not.
Arguments
Exchange interface traces, fill the interface exterior states, then compute the
tendency of every set with elements on this rank, in set order. See the module
documentation for the stage order.
Arguments
Write solution%extBoundary on the interface faces of set iset from the ghost
traces of the last exchange:
Read more…
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
integer,
intent(in)
::
iset
Free the interface map, then every set's model, geometry and sub-mesh, then the
sub-mesh communicators. The global mesh is not owned and is left alone.
Collective.
Arguments
Advance the output counter of the parent and of every set.
Arguments
Split globalMesh into nSets element sets and build each set's sub-mesh and
geometry. The set models are not created here; see the module documentation.
Read more…
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(out)
::
this
type(Mesh3D ),
intent(in),
target ::
globalMesh
type(Lagrange ),
intent(in),
pointer ::
interp
integer,
intent(in)
::
setOfElemLocal (1:globalMesh%nElem)
integer,
intent(in)
::
nSets
Run every set's PostStepHook, empty sets included, after syncing the set clocks.
Arguments
Run every set's PreStepHook, empty sets included, after syncing the set clocks.
Arguments
Read every set's solution from a file written by WriteModel, then copy it to the
device. The file must hold the same element-set partition (setOfElem) and the
same number of nodes per element; a variable with no dataset keeps its current
value. The host copy is refreshed from the device first, so on GPU builds that
value is the device's.
Read more…
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
character,
intent(in)
::
filename
Report each set's metrics. Rank-local; sets with no elements on this rank are
skipped, since their min and max are undefined.
Arguments
Report unmapped boundary faces for every set. The counts are already global.
Arguments
Reserve mesh%decomp's request scratch for the largest scalar exchange a set with
nvar variables posts: 2*nvar messages per rank-remote conforming side, mortar
sub-side or anisotropic mortar half. Rank-local; no communication.
Arguments
Type Intent Optional Attributes Name
type(Mesh3D ),
intent(inout)
::
mesh
integer,
intent(in)
::
nvar
Finish setup once every set model has been allocated and initialized.
Read more…
Arguments
Copy the parent's simulation time and time step to every set model.
Arguments
Stage m of the low-storage RK2 update, for every set with elements on this rank.
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
integer,
intent(in)
::
m
Stage m of the low-storage RK3 update, for every set with elements on this rank.
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
integer,
intent(in)
::
m
Stage m of the low-storage RK4 update, for every set with elements on this rank.
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
integer,
intent(in)
::
m
Forward-Euler update of every set with elements on this rank. dt defaults to the
parent's time step.
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
real(kind=prec),
intent(in),
optional ::
dt
Write one rank-local Tecplot file per set with elements on this rank.
Read more…
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
character,
intent(in),
optional ::
filename
Write every set's solution and geometry to one HDF5 file; see the module
documentation for the layout. Without filename the file is
solution..h5, as for a single model.
Read more…
Arguments
Type Intent Optional Attributes Name
class(MultiSetModel3D_t ),
intent(inout)
::
this
character,
intent(in),
optional ::
filename
Boundary condition for SELF_BC_SET_INTERFACE faces. It writes nothing: the parent
fills solution%extBoundary on these faces before each set's CalculateTendency.
Registering it keeps the faces out of the unmapped-boundary count.
Arguments
Type Intent Optional Attributes Name
class(BoundaryCondition ),
intent(in)
::
bc
class(Model ),
intent(inout)
::
mymodel