SELF_ESAtmo2D Module


Uses

  • module~~self_esatmo2d~~UsesGraph module~self_esatmo2d SELF_ESAtmo2D module~self_gpu SELF_GPU module~self_esatmo2d->module~self_gpu module~self_gpuinterfaces SELF_GPUInterfaces module~self_esatmo2d->module~self_gpuinterfaces module~self_ecdgmodel2d_t SELF_ECDGModel2D_t module~self_esatmo2d->module~self_ecdgmodel2d_t module~self_esatmo2d_t SELF_ESAtmo2D_t module~self_esatmo2d->module~self_esatmo2d_t module~self_mesh_2d SELF_Mesh_2D module~self_esatmo2d->module~self_mesh_2d module~self_geometry_2d SELF_Geometry_2D module~self_esatmo2d->module~self_geometry_2d module~self_boundaryconditions SELF_BoundaryConditions module~self_esatmo2d->module~self_boundaryconditions iso_c_binding iso_c_binding module~self_esatmo2d->iso_c_binding module~self_gpu->iso_c_binding module~self_gpu_enums SELF_GPU_enums module~self_gpu->module~self_gpu_enums module~self_gpuinterfaces->module~self_gpu module~self_gpuinterfaces->iso_c_binding module~self_dgmodel2d SELF_DGModel2D module~self_ecdgmodel2d_t->module~self_dgmodel2d module~self_mappedtwopointvector_2d SELF_MappedTwoPointVector_2D module~self_ecdgmodel2d_t->module~self_mappedtwopointvector_2d module~self_esatmo2d_t->module~self_boundaryconditions module~self_ecdgmodel2d SELF_ECDGModel2D module~self_esatmo2d_t->module~self_ecdgmodel2d module~self_mappedscalar_2d~2 SELF_MappedScalar_2D module~self_esatmo2d_t->module~self_mappedscalar_2d~2 module~self_mesh SELF_Mesh module~self_esatmo2d_t->module~self_mesh module~self_mesh_2d_t SELF_Mesh_2D_t module~self_mesh_2d->module~self_mesh_2d_t module~self_geometry_2d->module~self_mesh_2d module~self_tensor_2d~2 SELF_Tensor_2D module~self_geometry_2d->module~self_tensor_2d~2 module~self_lagrange~3 SELF_Lagrange module~self_geometry_2d->module~self_lagrange~3 module~self_vector_2d~2 SELF_Vector_2D module~self_geometry_2d->module~self_vector_2d~2 module~self_constants SELF_Constants module~self_geometry_2d->module~self_constants module~self_data SELF_Data module~self_geometry_2d->module~self_data module~self_supportroutines SELF_SupportRoutines module~self_geometry_2d->module~self_supportroutines module~self_scalar_2d SELF_Scalar_2D module~self_geometry_2d->module~self_scalar_2d module~self_boundaryconditions->iso_c_binding module~self_metadata SELF_Metadata module~self_boundaryconditions->module~self_metadata module~self_boundaryconditions->module~self_supportroutines module~self_gpu_enums->iso_c_binding module~self_dgmodel2d_t SELF_DGModel2D_t module~self_dgmodel2d->module~self_dgmodel2d_t HDF5 HDF5 module~self_metadata->HDF5 module~self_hdf5 SELF_HDF5 module~self_metadata->module~self_hdf5 module~self_tensor_2d_t SELF_Tensor_2D_t module~self_tensor_2d~2->module~self_tensor_2d_t module~self_lagrange~3->module~self_gpu module~self_lagrange~3->iso_c_binding module~self_lagrange~3->module~self_constants iso_fortran_env iso_fortran_env module~self_lagrange~3->iso_fortran_env module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~3->module~self_lagrange_t module~self_mappedtwopointvector_2d_t SELF_MappedTwoPointVector_2D_t module~self_mappedtwopointvector_2d->module~self_mappedtwopointvector_2d_t module~self_ecdgmodel2d->module~self_ecdgmodel2d_t module~self_mappedscalar_2d_t SELF_MappedScalar_2D_t module~self_mappedscalar_2d~2->module~self_mappedscalar_2d_t module~self_mesh->iso_c_binding module~self_mesh->module~self_constants module~self_domaindecomposition~2 SELF_DomainDecomposition module~self_mesh->module~self_domaindecomposition~2 module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_lagrange~3 module~self_mesh_2d_t->module~self_mesh module~self_mesh_2d_t->module~self_constants module~self_mesh_2d_t->module~self_supportroutines module~self_mesh_2d_t->module~self_domaindecomposition~2 module~self_quadrature SELF_Quadrature module~self_mesh_2d_t->module~self_quadrature module~self_mesh_2d_t->HDF5 module~self_mesh_2d_t->module~self_hdf5 module~self_vector_2d_t SELF_Vector_2D_t module~self_vector_2d~2->module~self_vector_2d_t module~self_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_data->iso_c_binding module~self_data->module~self_metadata module~self_data->module~self_lagrange~3 module~self_data->module~self_constants FEQParse FEQParse module~self_data->FEQParse module~self_data->HDF5 module~self_data->module~self_hdf5 module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_scalar_2d->iso_c_binding module~self_scalar_2d->module~self_constants module~self_scalar_2d_t SELF_Scalar_2D_t module~self_scalar_2d->module~self_scalar_2d_t module~self_tensor_2d_t->iso_c_binding module~self_tensor_2d_t->module~self_metadata module~self_tensor_2d_t->module~self_lagrange~3 module~self_tensor_2d_t->module~self_constants module~self_tensor_2d_t->module~self_data module~self_tensor_2d_t->FEQParse module~self_tensor_2d_t->HDF5 module~self_tensor_2d_t->module~self_hdf5 module~self_mappedtwopointvector_2d_t->module~self_geometry_2d module~self_mappedtwopointvector_2d_t->iso_c_binding module~self_mappedtwopointvector_2d_t->module~self_lagrange~3 module~self_mappedtwopointvector_2d_t->module~self_constants module~self_twopointvector_2d SELF_TwoPointVector_2D module~self_mappedtwopointvector_2d_t->module~self_twopointvector_2d module~self_mappedscalar_2d_t->module~self_mesh_2d module~self_mappedscalar_2d_t->module~self_geometry_2d module~self_mappedscalar_2d_t->iso_c_binding module~self_mappedscalar_2d_t->module~self_tensor_2d~2 module~self_mappedscalar_2d_t->module~self_lagrange~3 module~self_mappedscalar_2d_t->module~self_constants module~self_mappedscalar_2d_t->module~self_scalar_2d module~self_mappedscalar_2d_t->module~self_domaindecomposition~2 module~self_mappedscalar_2d_t->FEQParse module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition~2->module~self_domaindecomposition_t module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_vector_2d_t->iso_c_binding module~self_vector_2d_t->module~self_metadata module~self_vector_2d_t->module~self_lagrange~3 module~self_vector_2d_t->module~self_constants module~self_vector_2d_t->module~self_data module~self_vector_2d_t->FEQParse module~self_vector_2d_t->HDF5 module~self_vector_2d_t->module~self_hdf5 module~self_scalar_2d_t->iso_c_binding module~self_scalar_2d_t->module~self_metadata module~self_scalar_2d_t->module~self_lagrange~3 module~self_scalar_2d_t->module~self_constants module~self_scalar_2d_t->module~self_data module~self_scalar_2d_t->FEQParse module~self_scalar_2d_t->HDF5 module~self_scalar_2d_t->module~self_hdf5 module~self_dgmodel2d_t->module~self_mesh_2d module~self_dgmodel2d_t->module~self_geometry_2d module~self_dgmodel2d_t->module~self_boundaryconditions module~self_dgmodel2d_t->module~self_metadata 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_hdf5 module~self_model SELF_Model module~self_dgmodel2d_t->module~self_model module~self_mappedvector_2d~2 SELF_MappedVector_2D module~self_dgmodel2d_t->module~self_mappedvector_2d~2 module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 mpi mpi module~self_hdf5->mpi 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->HDF5 module~self_lagrange_t->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_model->module~self_hdf5 module~self_twopointvector_2d_t SELF_TwoPointVector_2D_t module~self_twopointvector_2d->module~self_twopointvector_2d_t 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_mappedvector_2d_t SELF_MappedVector_2D_t module~self_mappedvector_2d~2->module~self_mappedvector_2d_t module~self_twopointvector_2d_t->iso_c_binding module~self_twopointvector_2d_t->module~self_metadata module~self_twopointvector_2d_t->module~self_lagrange~3 module~self_twopointvector_2d_t->module~self_constants module~self_twopointvector_2d_t->module~self_data module~self_twopointvector_2d_t->FEQParse module~self_mappedvector_2d_t->module~self_mesh_2d module~self_mappedvector_2d_t->module~self_geometry_2d module~self_mappedvector_2d_t->iso_c_binding module~self_mappedvector_2d_t->module~self_tensor_2d~2 module~self_mappedvector_2d_t->module~self_lagrange~3 module~self_mappedvector_2d_t->module~self_vector_2d~2 module~self_mappedvector_2d_t->module~self_constants module~self_mappedvector_2d_t->module~self_domaindecomposition~2 module~self_mappedvector_2d_t->FEQParse

Contents


Interfaces

interface

  • public subroutine boundaryflux_esatmo2d_gpu(fb, fextb, nhat, nscale, flux, p0, Rd, gamma, N, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: fb
    type(c_ptr), value:: fextb
    type(c_ptr), value:: nhat
    type(c_ptr), value:: nscale
    type(c_ptr), value:: flux
    real(kind=c_prec), value:: p0
    real(kind=c_prec), value:: Rd
    real(kind=c_prec), value:: gamma
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nel

interface

  • public subroutine diffusiveboundaryflux_esatmo2d_gpu(fluxN, avgGrad, uBnd, uExt, nhat, nscale, nu, kappa, tau_nu, tau_kappa, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: fluxN
    type(c_ptr), value:: avgGrad
    type(c_ptr), value:: uBnd
    type(c_ptr), value:: uExt
    type(c_ptr), value:: nhat
    type(c_ptr), value:: nscale
    real(kind=c_prec), value:: nu
    real(kind=c_prec), value:: kappa
    real(kind=c_prec), value:: tau_nu
    real(kind=c_prec), value:: tau_kappa
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

interface

  • public subroutine diffusiveflux_esatmo2d_gpu(diffFlux, grad, nu, kappa, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: diffFlux
    type(c_ptr), value:: grad
    real(kind=c_prec), value:: nu
    real(kind=c_prec), value:: kappa
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

interface

  • public subroutine hbc2d_nonormalflow_esatmo2d_gpu(extboundary, boundary, nhat, elements, sides, nBoundaries, N, nel, nvar) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: extboundary
    type(c_ptr), value:: boundary
    type(c_ptr), value:: nhat
    type(c_ptr), value:: elements
    type(c_ptr), value:: sides
    integer(kind=c_int), value:: nBoundaries
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nel
    integer(kind=c_int), value:: nvar

interface

  • public subroutine pbc2d_nostress_esatmo2d_gpu(extgrad, grad, nhat, elements, sides, nBoundaries, N, nel, nvar) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: extgrad
    type(c_ptr), value:: grad
    type(c_ptr), value:: nhat
    type(c_ptr), value:: elements
    type(c_ptr), value:: sides
    integer(kind=c_int), value:: nBoundaries
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nel
    integer(kind=c_int), value:: nvar

interface

  • public subroutine sourcemethod_esatmo2d_gpu(source, solution, dsdx, J, dSplit, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: source
    type(c_ptr), value:: solution
    type(c_ptr), value:: dsdx
    type(c_ptr), value:: J
    type(c_ptr), value:: dSplit
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

interface

  • public subroutine twopointfluxmethod_esatmo2d_gpu(f, s, dsdx, p0, Rd, gamma, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: f
    type(c_ptr), value:: s
    type(c_ptr), value:: dsdx
    real(kind=c_prec), value:: p0
    real(kind=c_prec), value:: Rd
    real(kind=c_prec), value:: gamma
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

Derived Types

type, public, extends(ESAtmo2D_t) :: ESAtmo2D

Components

TypeVisibilityAttributesNameInitial
real(kind=prec), public :: Rd =287.0_prec
real(kind=prec), public :: cp =1004.0_prec
real(kind=prec), public :: cv =717.0_prec
type(MappedScalar2D), public :: dSdt
type(MappedScalar2D), public :: diffDiv
type(MappedVector2D), public :: diffFlux
real(kind=prec), public :: dt
real(kind=prec), public :: entropy
real(kind=prec), public :: eta_penalty =4.0_prec
type(MappedVector2D), public :: flux
type(MappedScalar2D), public :: fluxDivergence
real(kind=prec), public :: g =9.81_prec

Constant-coefficient Laplacian diffusion. The interface flux is BR1 central + Nitsche-style jump penalty (i.e. SIPG-style):

Read more…
type(SEMQuad), public, pointer:: geometry
logical, public :: gradient_enabled =.false.
type(BoundaryConditionList), public :: hyperbolicBCs
integer, public :: ioIterate =0
real(kind=prec), public :: kappa =0.0_prec
real(kind=prec), public :: length_scale =0.0_prec

Diffusive-flux scratch buffer. Holds the constant-coefficient Laplacian flux F_diff(i,j,iel,iVar,d) = -coeff_iVar * d(s_iVar)/dx_d.

type(Mesh2D), public, pointer:: mesh
real(kind=prec), public :: nu =0.0_prec
integer, public :: nvar
real(kind=prec), public :: p0 =100000.0_prec
type(BoundaryConditionList), public :: parabolicBCs
logical, public :: prescribed_bcs_enabled =.true.
type(MappedScalar2D), public :: solution
type(MappedVector2D), public :: solutionGradient
type(MappedScalar2D), public :: source
real(kind=prec), public :: t
logical, public :: tecplot_enabled =.true.
procedure(SELF_timeIntegrator), public, pointer:: timeIntegrator=> Euler_timeIntegrator
type(MappedTwoPointVector2D), public :: twoPointFlux
type(MappedScalar2D), public :: workSol

Type-Bound Procedures

procedure, public :: AddThermalBubble => AddThermalBubble_ESAtmo2D_t

Constant-coefficient Laplacian / Bassi-Rebay diffusion hooks

procedure, public :: AdditionalFree => AdditionalFree_ESAtmo2D_t
procedure, public :: AdditionalInit => AdditionalInit_ESAtmo2D
procedure, public :: AdditionalOutput => AdditionalOutput_Model
procedure, public :: BoundaryFlux => BoundaryFlux_ESAtmo2D
procedure, public :: CalculateEntropy => CalculateEntropy_DGModel2D_t
procedure, public :: CalculateSolutionGradient => CalculateSolutionGradient_DGModel2D_t
procedure, public :: CalculateTendency => CalculateTendency_ESAtmo2D
procedure, public :: DiffusiveBoundaryFlux => DiffusiveBoundaryFlux_ESAtmo2D
procedure, public :: DiffusiveFluxMethod => DiffusiveFluxMethod_ESAtmo2D
procedure, public :: Euler_timeIntegrator
procedure, public :: FluxMethod => fluxmethod_DGModel2D_t
procedure, public :: ForwardStep => ForwardStep_Model
procedure, public :: Free => Free_ESAtmo2D
procedure, public :: GetSimulationTime
procedure, public :: IncrementIOCounter
procedure, public :: Init => Init_ESAtmo2D
procedure, public :: LowStorageRK2_timeIntegrator
procedure, public :: LowStorageRK3_timeIntegrator
procedure, public :: LowStorageRK4_timeIntegrator
procedure, public :: MapBoundaryConditions => MapBoundaryConditions_DGModel2D_t
procedure, public :: PreTendency => PreTendency_Model
procedure, public :: PrintType => PrintType_Model
procedure, public :: ReadModel => Read_DGModel2D_t
procedure, public :: ReportEntropy => ReportEntropy_Model
procedure, public :: ReportMetrics => ReportMetrics_DGModel2D_t
procedure, public :: ReportUserMetrics => ReportUserMetrics_Model
procedure, public :: SetBoundaryCondition => setboundarycondition_DGModel2D_t
procedure, public :: SetDiffusion => SetDiffusion_ESAtmo2D_t
procedure, public :: SetGradientBoundaryCondition => setgradientboundarycondition_DGModel2D_t
procedure, public :: SetHydrostaticBalance => SetHydrostaticBalance_ESAtmo2D_t
procedure, public :: SetMetadata => SetMetadata_ESAtmo2D_t
procedure, public :: SetNumberOfVariables => SetNumberOfVariables_ESAtmo2D_t
procedure, public :: SetSimulationTime
generic, public :: SetSolution => SetSolutionFromChar_DGModel2D_t, SetSolutionFromEqn_DGModel2D_t
generic, public :: SetTimeIntegrator => SetTimeIntegrator_withChar
procedure, public :: SourceMethod => SourceMethod_ESAtmo2D
procedure, public :: TwoPointFluxMethod => TwoPointFluxMethod_ESAtmo2D
procedure, public :: UpdateGRK2 => UpdateGRK2_DGModel2D_t
procedure, public :: UpdateGRK3 => UpdateGRK3_DGModel2D_t
procedure, public :: UpdateGRK4 => UpdateGRK4_DGModel2D_t
procedure, public :: UpdateSolution => UpdateSolution_DGModel2D_t
procedure, public :: WriteModel => Write_DGModel2D_t
procedure, public :: WriteTecplot => WriteTecplot_DGModel2D_t
procedure, public :: entropy_func => entropy_func_ESAtmo2D_t
procedure, public :: flux1D => flux1d_Model
procedure, public :: flux2D => flux2d_Model
procedure, public :: flux3D => flux3d_Model
procedure, public :: riemannflux1d => riemannflux1d_Model
procedure, public :: riemannflux2d => riemannflux2d_ESAtmo2D_t
procedure, public :: riemannflux3d => riemannflux3d_Model
procedure, public :: source1d => source1d_Model
procedure, public :: source2d => source2d_Model
procedure, public :: source3d => source3d_Model
procedure, public :: twopointflux2d => twopointflux2d_ESAtmo2D_t

Subroutines

public subroutine AdditionalInit_ESAtmo2D(this)

Arguments

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

public subroutine BoundaryFlux_ESAtmo2D(this)

LMARS interface flux on GPU.

Arguments

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

public subroutine CalculateTendency_ESAtmo2D(this)

GPU-resident tendency for ESAtmo2D.

Arguments

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

public subroutine DiffusiveBoundaryFlux_ESAtmo2D(this)

GPU-resident fill of diffFlux%boundaryNormal with the SIPG-stabilised BR1 diffusive flux: f = -coeff(avg_grad . n)nmag + tau(uL - uR)nmag

Arguments

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

public subroutine DiffusiveFluxMethod_ESAtmo2D(this)

GPU-resident fill of diffFlux%interior with the constant-coefficient Laplacian flux F_d(iVar) = -coeff(iVar) * d(s_iVar)/dx_d.

Arguments

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

public subroutine Free_ESAtmo2D(this)

Arguments

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

public subroutine Init_ESAtmo2D(this, mesh, geometry)

Arguments

TypeIntentOptionalAttributesName
class(ESAtmo2D), intent(out) :: this
type(Mesh2D), intent(in), target:: mesh
type(SEMQuad), intent(in), target:: geometry

public subroutine SourceMethod_ESAtmo2D(this)

Souza et al. (2023) non-conservative gravity flux differencing on GPU. The geopotential lives at solution(:,:,:,5); the source for rho*v is computed via the SBP-EC two-point form using log-mean density and the contravariant metric.

Arguments

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

public subroutine TwoPointFluxMethod_ESAtmo2D(this)

Souza et al. (2023) entropy-conservative two-point flux on GPU.

Arguments

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

public subroutine hbc2d_NoNormalFlow_ESAtmo2D_GPU_wrapper(bc, mymodel)

GPU-accelerated no-normal-flow BC for 2D Entropy-Stable Atmosphere. Reflects normal momentum, mirrors density, rho*theta, and Phi.

Arguments

TypeIntentOptionalAttributesName
class(BoundaryCondition), intent(in) :: bc
class(Model), intent(inout) :: mymodel

public subroutine pbc2d_NoStress_ESAtmo2D_GPU_wrapper(bc, mymodel)

GPU-accelerated parabolic no-stress / no-heat-flux BC for 2D Entropy-Stable Atmosphere.

Arguments

TypeIntentOptionalAttributesName
class(BoundaryCondition), intent(in) :: bc
class(Model), intent(inout) :: mymodel