SELF_MappedScalar_3D Module


Uses

  • module~~self_mappedscalar_3d~2~~UsesGraph module~self_mappedscalar_3d~2 SELF_MappedScalar_3D module~self_gpuinterfaces SELF_GPUInterfaces module~self_mappedscalar_3d~2->module~self_gpuinterfaces iso_c_binding iso_c_binding module~self_mappedscalar_3d~2->iso_c_binding module~self_gpu SELF_GPU module~self_mappedscalar_3d~2->module~self_gpu module~self_mappedscalar_3d_t SELF_MappedScalar_3D_t module~self_mappedscalar_3d~2->module~self_mappedscalar_3d_t module~self_gpuinterfaces->iso_c_binding module~self_gpuinterfaces->module~self_gpu module~self_gpu->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu->module~self_gpu_enums~2 module~self_mappedscalar_3d_t->iso_c_binding module~self_mesh_3d SELF_Mesh_3D module~self_mappedscalar_3d_t->module~self_mesh_3d module~self_domaindecomposition SELF_DomainDecomposition module~self_mappedscalar_3d_t->module~self_domaindecomposition module~self_geometry_3d SELF_Geometry_3D module~self_mappedscalar_3d_t->module~self_geometry_3d module~self_scalar_3d SELF_Scalar_3D module~self_mappedscalar_3d_t->module~self_scalar_3d module~self_tensor_3d~2 SELF_Tensor_3D module~self_mappedscalar_3d_t->module~self_tensor_3d~2 module~self_lagrange~3 SELF_Lagrange module~self_mappedscalar_3d_t->module~self_lagrange~3 module~self_constants SELF_Constants module~self_mappedscalar_3d_t->module~self_constants FEQParse FEQParse module~self_mappedscalar_3d_t->FEQParse module~self_gpu_enums~2->iso_c_binding 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_domaindecomposition->iso_c_binding module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t mpi mpi module~self_domaindecomposition->mpi iso_fortran_env iso_fortran_env module~self_domaindecomposition->iso_fortran_env module~self_geometry_3d->module~self_mesh_3d module~self_geometry_3d->module~self_scalar_3d module~self_geometry_3d->module~self_tensor_3d~2 module~self_geometry_3d->module~self_lagrange~3 module~self_geometry_3d->module~self_constants module~self_supportroutines SELF_SupportRoutines module~self_geometry_3d->module~self_supportroutines module~self_data SELF_Data module~self_geometry_3d->module~self_data module~self_vector_3d SELF_Vector_3D module~self_geometry_3d->module~self_vector_3d module~self_scalar_3d->module~self_gpuinterfaces 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_t SELF_Scalar_3D_t module~self_scalar_3d->module~self_scalar_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_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_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_mesh_3d_t->iso_c_binding module~self_mesh_3d_t->module~self_domaindecomposition module~self_mesh_3d_t->module~self_lagrange~3 module~self_mesh_3d_t->module~self_constants module~self_mesh_3d_t->module~self_supportroutines 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_quadrature SELF_Quadrature module~self_mesh_3d_t->module~self_quadrature module~self_hdf5 SELF_HDF5 module~self_mesh_3d_t->module~self_hdf5 HDF5 HDF5 module~self_mesh_3d_t->HDF5 module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->module~self_lagrange~3 module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_supportroutines module~self_domaindecomposition_t->mpi module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_data->iso_c_binding module~self_data->module~self_lagrange~3 module~self_data->module~self_constants module~self_data->FEQParse module~self_data->module~self_hdf5 module~self_data->HDF5 module~self_metadata SELF_Metadata module~self_data->module~self_metadata module~self_vector_3d->module~self_gpuinterfaces 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_t SELF_Vector_3D_t module~self_vector_3d->module~self_vector_3d_t module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->module~self_lagrange~3 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_hdf5 module~self_scalar_3d_t->HDF5 module~self_scalar_3d_t->module~self_metadata 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_lagrange~3 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_hdf5 module~self_tensor_3d_t->HDF5 module~self_tensor_3d_t->module~self_metadata module~self_tensor_3d_t->module~self_datapool module~self_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_constants module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->module~self_quadrature module~self_lagrange_t->module~self_hdf5 module~self_lagrange_t->HDF5 module~self_mesh->iso_c_binding module~self_mesh->module~self_domaindecomposition module~self_mesh->module~self_constants module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_domaindecomposition module~self_mesh_2d_t->module~self_lagrange~3 module~self_mesh_2d_t->module~self_constants 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_hdf5 module~self_mesh_2d_t->HDF5 module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_hdf5->module~self_constants module~self_hdf5->mpi module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 module~self_metadata->module~self_hdf5 module~self_metadata->HDF5 module~self_vector_3d_t->iso_c_binding module~self_vector_3d_t->module~self_lagrange~3 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_hdf5 module~self_vector_3d_t->HDF5 module~self_vector_3d_t->module~self_metadata module~self_vector_3d_t->module~self_datapool module~self_datapool->module~self_constants

Used by

  • module~~self_mappedscalar_3d~2~~UsedByGraph module~self_mappedscalar_3d~2 SELF_MappedScalar_3D module~self_dgmodel3d_t SELF_DGModel3D_t module~self_dgmodel3d_t->module~self_mappedscalar_3d~2 module~self_esatmo3d_t SELF_ESAtmo3D_t module~self_esatmo3d_t->module~self_mappedscalar_3d~2 module~self_ecdgmodel3d~2 SELF_ECDGModel3D module~self_esatmo3d_t->module~self_ecdgmodel3d~2 module~self_points_t SELF_Points_t module~self_points_t->module~self_mappedscalar_3d~2 module~self_points SELF_Points module~self_points->module~self_mappedscalar_3d~2 module~self_points->module~self_points_t module~self_dgmodel3d SELF_DGModel3D module~self_dgmodel3d->module~self_dgmodel3d_t module~self_esatmo3d~2 SELF_ESAtmo3D module~self_esatmo3d~2->module~self_esatmo3d_t module~self_ecdgmodel3d_t SELF_ECDGModel3D_t module~self_esatmo3d~2->module~self_ecdgmodel3d_t module~self_amrcontroller_3d SELF_AMRController_3D module~self_amrcontroller_3d->module~self_dgmodel3d_t module~self_amrcontroller_extruded SELF_AMRController_Extruded module~self_amrcontroller_extruded->module~self_dgmodel3d_t module~self_dgmodel3d~2 SELF_DGModel3D module~self_dgmodel3d~2->module~self_dgmodel3d_t module~self_esatmo3d SELF_ESAtmo3D module~self_esatmo3d->module~self_esatmo3d_t module~self_points~2 SELF_Points module~self_points~2->module~self_points_t module~self_advection_diffusion_3d_t self_advection_diffusion_3d_t module~self_advection_diffusion_3d_t->module~self_dgmodel3d module~self_lineareuler3d_t self_LinearEuler3D_t module~self_lineareuler3d_t->module~self_dgmodel3d module~self_ecdgmodel3d_t->module~self_dgmodel3d module~self_multisetmodel3d_t SELF_MultiSetModel3D_t module~self_multisetmodel3d_t->module~self_dgmodel3d module~self_nulldgmodel3d_t self_NullDGModel3D_t module~self_nulldgmodel3d_t->module~self_dgmodel3d module~self_advection_diffusion_3d~2 self_advection_diffusion_3d module~self_advection_diffusion_3d~2->module~self_advection_diffusion_3d_t module~self_ecdgmodel3d~2->module~self_ecdgmodel3d_t module~self_lineareuler3d self_LinearEuler3D module~self_lineareuler3d->module~self_lineareuler3d_t module~self_lineareuler3d~2 self_LinearEuler3D module~self_lineareuler3d~2->module~self_lineareuler3d_t module~self_advection_diffusion_3d self_advection_diffusion_3d module~self_advection_diffusion_3d->module~self_advection_diffusion_3d_t module~self_ecdgmodel3d SELF_ECDGModel3D module~self_ecdgmodel3d->module~self_ecdgmodel3d_t module~self_ecadvection3d SELF_ECAdvection3D module~self_ecadvection3d->module~self_ecdgmodel3d_t module~self_ecadvection3d_t SELF_ECAdvection3D_t module~self_ecadvection3d->module~self_ecadvection3d_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 module~self_nulldgmodel3d~2 self_NullDGModel3D module~self_nulldgmodel3d~2->module~self_nulldgmodel3d_t module~self_nulldgmodel3d self_NullDGModel3D module~self_nulldgmodel3d->module~self_nulldgmodel3d_t module~self_ecadvection3d_t->module~self_ecdgmodel3d~2 module~self_ecadvection3d~2 SELF_ECAdvection3D module~self_ecadvection3d~2->module~self_ecadvection3d_t

Contents


Interfaces

interface

  • public subroutine ContravariantWeight_3D_gpu(f, dsdx, jaf, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: f
    type(c_ptr), value:: dsdx
    type(c_ptr), value:: jaf
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

interface

  • public subroutine NormalWeight_3D_gpu(fb, nhat, nscale, fbn, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: fb
    type(c_ptr), value:: nhat
    type(c_ptr), value:: nscale
    type(c_ptr), value:: fbn
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

Derived Types

type, public, extends(MappedScalar3D_t) :: MappedScalar3D

Components

TypeVisibilityAttributesNameInitial
integer, public :: M
integer, public :: N
integer(kind=c_size_t), public :: alloc_avgBoundary =0
integer(kind=c_size_t), public :: alloc_boundary =0
integer(kind=c_size_t), public :: alloc_boundarynormal =0
integer(kind=c_size_t), public :: alloc_extBoundary =0
integer(kind=c_size_t), public :: alloc_interior =0
integer(kind=c_size_t), public :: alloc_jas =0
real(kind=prec), public, allocatable, dimension(:,:,:,:,:):: anisoMortarBuff
type(c_ptr), public :: anisoMortarBuff_gpu =c_null_ptr
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: avgBoundary
type(c_ptr), public :: avgBoundary_gpu

Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b).

character(len=3), public :: backend ="gpu"
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: boundary
type(c_ptr), public :: boundary_gpu
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: boundarynormal

High-water-mark backing store for the arrays above (AMR Stage 6b; see SELF_DataPool). The public members are pointers remapped onto the leading part of these pools at the exact logical shape, so every extent, stride and shape() stays exactly as before while Resize can reuse the storage across an adaptation epoch. Nothing should index the pools.

type(c_ptr), public :: boundarynormal_gpu
type(EquationParser), public, allocatable:: eqn(:)
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: extBoundary
type(c_ptr), public :: extBoundary_gpu
type(SEMHex), public, pointer:: geometry=> null()
logical, public :: geometry_associated =.false.
integer, public :: halo_inflight =0
integer, public :: halo_nactive =0
type(c_ptr), public :: halo_recvbuf_gpu =c_null_ptr
integer, public, allocatable:: halo_reqs(:)

Bytes currently allocated for jas_gpu, so Resize can reuse it (Stage 6b). The capacity counters for the five arrays inherited from Scalar3D are declared there.

type(c_ptr), public :: halo_sendbuf_gpu =c_null_ptr
logical, public :: halo_static_done =.false.
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: interior
type(c_ptr), public :: interior_gpu
type(Lagrange), public, pointer:: interp
type(c_ptr), public :: jas_gpu
type(Metadata), public, allocatable:: meta(:)
real(kind=prec), public, allocatable, dimension(:,:,:,:,:):: mortarBuff
type(c_ptr), public :: mortarBuff_gpu =c_null_ptr
integer, public :: nElem
integer, public :: nVar
real(kind=prec), public, pointer, contiguous:: pool_avgBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundarynormal(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_extBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_interior(:)=> null()

Type-Bound Procedures

procedure, public :: AnisoMortarExchange => AnisoMortarExchange_MappedScalar3D
procedure, public :: AssociateGeometry => AssociateGeometry_MappedScalar3D_t
procedure, public :: AverageSides => AverageSides_Scalar3D
procedure, public :: BoundaryInterp => BoundaryInterp_Scalar3D
procedure, public :: DissociateGeometry => DissociateGeometry_MappedScalar3D_t
procedure, public :: Free => Free_MappedScalar3D
generic, public :: Gradient => Gradient_Scalar3D_t, Gradient_Scalar3D
generic, public :: GridInterp => GridInterp_Scalar3D_t, GridInterp_Scalar3D
procedure, public :: Init => Init_MappedScalar3D
procedure, private :: MPIAnisoMortarExchangeAsync => MPIAnisoMortarExchangeAsync_MappedScalar3D
procedure, private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedScalar3D
procedure, public :: MapArrays => MapArrays_Scalar3D_t
generic, public :: MappedDGGradient => MappedDGGradient_MappedScalar3D_t, MappedDGGradient_MappedScalar3D
procedure, private :: MappedDGGradient_MappedScalar3D
generic, public :: MappedGradient => MappedGradient_MappedScalar3D_t, MappedGradient_MappedScalar3D
procedure, private :: MappedGradient_MappedScalar3D
procedure, public :: MortarExchange => MortarExchange_MappedScalar3D
procedure, public :: Resize => Resize_MappedScalar3D
procedure, public :: SetDescription => SetDescription_DataObj
generic, public :: SetEquation => SetEquation_DataObj
procedure, public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedScalar3D
procedure, public :: SetName => SetName_DataObj
procedure, public :: SetUnits => SetUnits_DataObj
procedure, public :: SideExchange => SideExchange_MappedScalar3D
procedure, public :: SideExchangeFinish => SideExchangeFinish_MappedScalar3D
procedure, public :: SideExchangeStart => SideExchangeStart_MappedScalar3D
procedure, public :: UpdateDevice => UpdateDevice_MappedScalar3D
procedure, public :: UpdateHost => UpdateHost_Scalar3D
generic, public :: WriteHDF5 => WriteHDF5_MPI_Scalar3D_t, WriteHDF5_Scalar3D_t

Subroutines

public subroutine AnisoMortarExchange_MappedScalar3D(this, mesh)

GPU implementation of the anisotropic mortar exchange (see the base class for the algorithm) : traces are staged, reoriented, restricted, and projected in device memory with the SELF_Mortar kernels.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine EnsureDeviceBuffers_MappedScalar3D(this)

Grow the device buffers to hold the current logical arrays, reusing existing allocations when the bytes already fit (AMR Stage 6b).

Arguments

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

public subroutine Free_MappedScalar3D(this)

Arguments

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

public subroutine Init_MappedScalar3D(this, interp, nVar, nElem)

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(out) :: this
type(Lagrange), intent(in), target:: interp
integer, intent(in) :: nVar
integer, intent(in) :: nElem

public subroutine MPIAnisoMortarExchangeAsync_MappedScalar3D(this, mesh)

GPU-resident analogue of the base-class anisotropic mortar message posting; messages are posted on device memory (GPU-aware MPI).

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MPIMortarExchangeAsync_MappedScalar3D(this, mesh)

GPU-resident analogue of the base-class mortar message posting; messages are posted on device memory (GPU-aware MPI), following MPIExchangeAsync.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MappedDGGradient_MappedScalar3D(this, df)

Calculates the gradient of a function using the weak form of the gradient and the average boundary state. This method will compute the average boundary state from the and attributes of

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(in) :: this
type(c_ptr), intent(inout) :: df

public subroutine MappedGradient_MappedScalar3D(this, df)

Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(c_ptr), intent(out) :: df

public subroutine MortarExchange_MappedScalar3D(this, mesh)

GPU implementation of the mortar exchange (see the base class for the algorithm) : traces are staged, reoriented, restricted, and projected in device memory with the SELF_Mortar kernels.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine Resize_MappedScalar3D(this, interp, nVar, nElem)

Rebind to a new element count, reusing host pools and device buffers where they fit (AMR Stage 6b), and without uploading zeros the way Init does.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Lagrange), intent(in), target:: interp
integer, intent(in) :: nVar
integer, intent(in) :: nElem

public subroutine SetInteriorFromEquation_MappedScalar3D(this, geometry, time)

Sets the this % interior attribute using the eqn attribute, geometry (for physical positions), and provided simulation time.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(SEMHex), intent(in) :: geometry
real(kind=prec), intent(in) :: time

public subroutine SideExchangeFinish_MappedScalar3D(this, mesh)

Complete the aggregated halo exchange started by SideExchangeStart: wait on the persistent requests and unpack the received traces into extBoundary, applying side flips. The host blocks in MPI_Waitall (which also drives MPI progress) while previously launched device kernels continue to execute. No-op if no exchange is in flight.

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine SideExchangeStart_MappedScalar3D(this, mesh, nactive)

Begin the aggregated halo exchange and launch the local (same-rank) side exchange kernel.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh
integer, intent(in), optional :: nactive

public subroutine SideExchange_MappedScalar3D(this, mesh)

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine UpdateDevice_MappedScalar3D(this)

Copy the host arrays to the device, then mark the static halo traces as stale.

Read more…

Arguments

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