SELF_MultiSetModel3D Module

GPU backend of MultiSetModel3D. The interface exchange gathers each set's face trace from solution%boundary_gpu, and the default FillInterfaceBoundary writes solution%extBoundary_gpu with a device kernel. Overrides of FillInterfaceBoundary must likewise write the device copy (iface%ghost_gpu holds the ghost traces there), and must not call solution%UpdateDevice inside the step loop: it resets the halo exchange's static-variable state.


Uses

  • module~~self_multisetmodel3d~~UsesGraph module~self_multisetmodel3d SELF_MultiSetModel3D module~self_setinterface_3d SELF_SetInterface_3D module~self_multisetmodel3d->module~self_setinterface_3d iso_c_binding iso_c_binding module~self_multisetmodel3d->iso_c_binding module~self_multisetmodel3d_t SELF_MultiSetModel3D_t module~self_multisetmodel3d->module~self_multisetmodel3d_t module~self_gpu SELF_GPU module~self_multisetmodel3d->module~self_gpu module~self_setinterface_3d->iso_c_binding module~self_setinterface_3d->module~self_gpu module~self_mesh_3d SELF_Mesh_3D module~self_setinterface_3d->module~self_mesh_3d module~self_setinterface_3d_t SELF_SetInterface_3D_t module~self_setinterface_3d->module~self_setinterface_3d_t module~self_constants SELF_Constants module~self_setinterface_3d->module~self_constants module~self_multisetmodel3d_t->module~self_setinterface_3d module~self_dgmodel3d SELF_DGModel3D module~self_multisetmodel3d_t->module~self_dgmodel3d module~self_multisetmodel3d_t->module~self_mesh_3d module~self_multisetmodel3d_t->module~self_constants 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_model SELF_Model module~self_multisetmodel3d_t->module~self_model 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_gpu->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu->module~self_gpu_enums~2 module~self_gpu_enums~2->iso_c_binding module~self_dgmodel3d->module~self_gpu module~self_dgmodel3d->module~self_mesh_3d module~self_dgmodel3d->module~self_boundaryconditions 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_mesh_3d->iso_c_binding module~self_mesh_3d->module~self_gpu module~self_mesh_3d_t SELF_Mesh_3D_t module~self_mesh_3d->module~self_mesh_3d_t module~self_setinterface_3d_t->iso_c_binding module~self_setinterface_3d_t->module~self_mesh_3d module~self_setinterface_3d_t->module~self_constants module~self_setinterface_3d_t->mpi module~self_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_boundaryconditions->iso_c_binding module~self_supportroutines SELF_SupportRoutines module~self_boundaryconditions->module~self_supportroutines module~self_metadata SELF_Metadata module~self_boundaryconditions->module~self_metadata module~self_lagrange~3->iso_c_binding module~self_lagrange~3->module~self_gpu module~self_lagrange~3->module~self_constants module~self_lagrange~3->iso_fortran_env module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~3->module~self_lagrange_t module~self_model->HDF5 module~self_model->module~self_hdf5 module~self_model->module~self_supportroutines module~self_model->module~self_metadata FEQParse FEQParse module~self_model->FEQParse module~self_elementsetmesh_3d->module~self_mesh_3d module~self_elementsetmesh_3d->module~self_constants module~self_elementsetmesh_3d->mpi module~self_multisetio_3d->module~self_constants module~self_multisetio_3d->HDF5 module~self_hdf5->module~self_constants module~self_hdf5->mpi module~self_hdf5->HDF5 module~self_hdf5->iso_fortran_env module~self_geometry_3d->module~self_mesh_3d module~self_geometry_3d->module~self_constants module~self_geometry_3d->module~self_lagrange~3 module~self_scalar_3d SELF_Scalar_3D module~self_geometry_3d->module~self_scalar_3d 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_geometry_3d->module~self_supportroutines module~self_data SELF_Data module~self_geometry_3d->module~self_data module~self_scalar_3d->iso_c_binding module~self_scalar_3d->module~self_gpu module~self_scalar_3d->module~self_constants 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_vector_3d->iso_c_binding module~self_vector_3d->module~self_gpu module~self_vector_3d->module~self_constants 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_c_binding module~self_tensor_3d~2->module~self_gpu module~self_tensor_3d~2->module~self_constants module~self_tensor_3d~2->iso_fortran_env module~self_tensor_3d_t SELF_Tensor_3D_t module~self_tensor_3d~2->module~self_tensor_3d_t module~self_gpuinterfaces->iso_c_binding module~self_gpuinterfaces->module~self_gpu module~self_transferplan_3d->module~self_constants module~self_transferplan_3d->module~self_lagrange~3 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_mesh_3d_t->iso_c_binding module~self_mesh_3d_t->module~self_constants 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_supportroutines module~self_mesh SELF_Mesh module~self_mesh_3d_t->module~self_mesh module~self_quadrature SELF_Quadrature module~self_mesh_3d_t->module~self_quadrature module~self_domaindecomposition SELF_DomainDecomposition module~self_mesh_3d_t->module~self_domaindecomposition module~self_mesh_2d_t SELF_Mesh_2D_t module~self_mesh_3d_t->module~self_mesh_2d_t module~self_dgmodel3d_t->module~self_mesh_3d module~self_dgmodel3d_t->module~self_boundaryconditions module~self_dgmodel3d_t->module~self_model module~self_dgmodel3d_t->HDF5 module~self_dgmodel3d_t->module~self_hdf5 module~self_dgmodel3d_t->module~self_geometry_3d 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_dgmodel3d_t->FEQParse module~self_solutionmigration SELF_SolutionMigration module~self_dgmodel3d_t->module~self_solutionmigration 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_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_metadata->HDF5 module~self_metadata->module~self_hdf5 module~self_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_constants module~self_lagrange_t->HDF5 module~self_lagrange_t->module~self_hdf5 module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->module~self_quadrature module~self_data->iso_c_binding module~self_data->module~self_constants module~self_data->module~self_lagrange~3 module~self_data->HDF5 module~self_data->module~self_hdf5 module~self_data->module~self_metadata module~self_data->FEQParse module~self_solutionmigration->module~self_constants module~self_solutionmigration->mpi module~self_solutionmigration->iso_fortran_env module~self_solutionmigration->module~self_domaindecomposition module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->module~self_constants 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_metadata module~self_scalar_3d_t->FEQParse module~self_scalar_3d_t->module~self_data module~self_datapool SELF_DataPool module~self_scalar_3d_t->module~self_datapool module~self_tensor_3d_t->iso_c_binding module~self_tensor_3d_t->module~self_constants 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_metadata module~self_tensor_3d_t->FEQParse module~self_tensor_3d_t->module~self_data module~self_tensor_3d_t->module~self_datapool module~self_vector_3d_t->iso_c_binding module~self_vector_3d_t->module~self_constants 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_metadata module~self_vector_3d_t->FEQParse module~self_vector_3d_t->module~self_data module~self_vector_3d_t->module~self_datapool module~self_solutiontransfer_3d->module~self_constants module~self_solutiontransfer_3d->module~self_lagrange~3 module~self_octreemesh_3d->module~self_mesh_3d module~self_octreemesh_3d->module~self_constants module~self_octreemesh_3d->module~self_lagrange~3 module~self_refinementprimitives_3d SELF_RefinementPrimitives_3D module~self_octreemesh_3d->module~self_refinementprimitives_3d module~self_mesh->iso_c_binding module~self_mesh->module~self_constants module~self_mesh->module~self_domaindecomposition module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_domaindecomposition->iso_c_binding module~self_domaindecomposition->mpi module~self_domaindecomposition->iso_fortran_env module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_constants 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_supportroutines 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_mappedvector_3d->iso_c_binding module~self_mappedvector_3d->module~self_gpu 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_mappedscalar_3d~2->iso_c_binding module~self_mappedscalar_3d~2->module~self_gpu 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_transferplan_2d->module~self_constants module~self_transferplan_2d->module~self_lagrange~3 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_datapool->module~self_constants module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_lagrange~3 module~self_domaindecomposition_t->mpi module~self_domaindecomposition_t->module~self_supportroutines module~self_mappedvector_3d_t->iso_c_binding module~self_mappedvector_3d_t->module~self_mesh_3d module~self_mappedvector_3d_t->module~self_constants module~self_mappedvector_3d_t->module~self_lagrange~3 module~self_mappedvector_3d_t->module~self_geometry_3d module~self_mappedvector_3d_t->FEQParse module~self_mappedvector_3d_t->module~self_domaindecomposition module~self_refinementprimitives_3d->module~self_constants module~self_refinementprimitives_3d->module~self_lagrange~3 module~self_mappedscalar_3d_t->iso_c_binding module~self_mappedscalar_3d_t->module~self_mesh_3d module~self_mappedscalar_3d_t->module~self_constants module~self_mappedscalar_3d_t->module~self_lagrange~3 module~self_mappedscalar_3d_t->module~self_geometry_3d 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->module~self_domaindecomposition module~self_quadtreemesh_2d->module~self_constants module~self_quadtreemesh_2d->module~self_lagrange~3 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_solutiontransfer_2d->module~self_constants module~self_solutiontransfer_2d->module~self_lagrange~3 module~self_refinementprimitives_2d->module~self_constants module~self_refinementprimitives_2d->module~self_lagrange~3 module~self_mesh_2d->iso_c_binding module~self_mesh_2d->module~self_gpu module~self_mesh_2d->module~self_mesh_2d_t

Contents


Derived Types

type, public, extends(MultiSetModel3D_t) :: MultiSetModel3D

Components

TypeVisibilityAttributesNameInitial
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
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
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

public subroutine FillInterfaceBoundary_MultiSetModel3D(this, iset)

Device version of FillInterfaceBoundary_MultiSetModel3D_t: extBoundary(i,j,s,e,v) = ghost(i,j,v,f) on the interface faces of set iset, written to solution%extBoundary_gpu. The partner set must have the same nvar.

Arguments

TypeIntentOptionalAttributesName
class(MultiSetModel3D), intent(inout) :: this
integer, intent(in) :: iset

public subroutine SetupInterfaces_MultiSetModel3D(this)

As SetupInterfaces_MultiSetModel3D_t, then points each set's trace reference at the device copy of its solution%boundary.

Arguments

TypeIntentOptionalAttributesName
class(MultiSetModel3D), intent(inout) :: this