ESAtmo2D Derived Type

type, public, extends(ESAtmo2D_t) :: ESAtmo2D


Inherits

type~~esatmo2d~~InheritsGraph type~esatmo2d ESAtmo2D type~esatmo2d_t ESAtmo2D_t type~esatmo2d->type~esatmo2d_t type~mappedvector2d MappedVector2D type~esatmo2d_t->type~mappedvector2d diffFlux type~mappedscalar2d MappedScalar2D type~esatmo2d_t->type~mappedscalar2d diffDiv type~ecdgmodel2d ECDGModel2D type~esatmo2d_t->type~ecdgmodel2d type~mappedvector2d_t MappedVector2D_t type~mappedvector2d->type~mappedvector2d_t type~mappedscalar2d_t MappedScalar2D_t type~mappedscalar2d->type~mappedscalar2d_t type~ecdgmodel2d_t ECDGModel2D_t type~ecdgmodel2d->type~ecdgmodel2d_t type~semquad SEMQuad type~mappedvector2d_t->type~semquad geometry type~vector2d Vector2D type~mappedvector2d_t->type~vector2d type~mappedtwopointvector2d MappedTwoPointVector2D type~ecdgmodel2d_t->type~mappedtwopointvector2d twoPointFlux type~dgmodel2d DGModel2D type~ecdgmodel2d_t->type~dgmodel2d type~mappedscalar2d_t->type~semquad geometry type~scalar2d Scalar2D type~mappedscalar2d_t->type~scalar2d type~semquad->type~vector2d x, nHat type~semquad->type~scalar2d nScale, J type~tensor2d Tensor2D type~semquad->type~tensor2d dxds, dsdx type~vector2d_t Vector2D_t type~vector2d->type~vector2d_t type~mappedtwopointvector2d_t MappedTwoPointVector2D_t type~mappedtwopointvector2d->type~mappedtwopointvector2d_t type~scalar2d_t Scalar2D_t type~scalar2d->type~scalar2d_t type~dgmodel2d_t DGModel2D_t type~dgmodel2d->type~dgmodel2d_t type~mappedtwopointvector2d_t->type~semquad geometry type~twopointvector2d TwoPointVector2D type~mappedtwopointvector2d_t->type~twopointvector2d type~self_dataobj SELF_DataObj type~vector2d_t->type~self_dataobj type~tensor2d_t Tensor2D_t type~tensor2d->type~tensor2d_t type~scalar2d_t->type~self_dataobj type~dgmodel2d_t->type~mappedvector2d solutionGradient, flux type~dgmodel2d_t->type~mappedscalar2d solution, source, fluxDivergence, dSdt, workSol type~dgmodel2d_t->type~semquad geometry type~model Model type~dgmodel2d_t->type~model type~mesh2d Mesh2D type~dgmodel2d_t->type~mesh2d mesh type~boundaryconditionlist BoundaryConditionList type~dgmodel2d_t->type~boundaryconditionlist hyperbolicBCs, parabolicBCs type~twopointvector2d_t TwoPointVector2D_t type~twopointvector2d->type~twopointvector2d_t type~lagrange Lagrange type~self_dataobj->type~lagrange interp EquationParser EquationParser type~self_dataobj->EquationParser eqn type~metadata Metadata type~self_dataobj->type~metadata meta type~tensor2d_t->type~self_dataobj type~mesh2d_t Mesh2D_t type~mesh2d->type~mesh2d_t type~boundarycondition BoundaryCondition type~boundaryconditionlist->type~boundarycondition current, head, tail c_ptr c_ptr type~lagrange->c_ptr qWeights_gpu, iMatrix_gpu, dMatrix_gpu, dgMatrix_gpu, bMatrix_gpu type~lagrange_t Lagrange_t type~lagrange->type~lagrange_t type~twopointvector2d_t->type~self_dataobj type~semmesh SEMMesh type~mesh2d_t->type~semmesh type~boundarycondition->type~boundarycondition next, prev type~boundarycondition->c_ptr elements_gpu, sides_gpu type~domaindecomposition DomainDecomposition type~semmesh->type~domaindecomposition decomp type~lagrange_t->c_ptr blas_handle type~domaindecomposition_t DomainDecomposition_t type~domaindecomposition->type~domaindecomposition_t

Contents

Source Code


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):

f_R^diff(iVar) = -coeff(iVar) * (avg_grad . n) * nmag + tau(iVar) * (uL - uR) * nmag

with tau(iVar) = eta_penalty * coeff(iVar) * (N+1)^2 / length_scale.

nu : kinematic diffusivity for momentum [m^2/s] kappa : thermal diffusivity for rhotheta [m^2/s] eta_penalty : dimensionless SIPG penalty (default 4.0) length_scale : characteristic element length [m], filled by SetDiffusion from the geometry (mean J^(1/2)2).

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

  • public subroutine AddThermalBubble_ESAtmo2D_t(this, dtheta, r0, x0, y0)

    Adds a pressure-balanced warm bubble perturbation.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(inout) :: this
    real(kind=prec), intent(in) :: dtheta
    real(kind=prec), intent(in) :: r0
    real(kind=prec), intent(in) :: x0
    real(kind=prec), intent(in) :: y0

procedure, public :: AdditionalFree => AdditionalFree_ESAtmo2D_t

procedure, public :: AdditionalInit => AdditionalInit_ESAtmo2D_t

procedure, public :: AdditionalOutput => AdditionalOutput_Model

  • public subroutine AdditionalOutput_Model(this, fileid)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    integer(kind=HID_T), intent(in) :: fileid

procedure, public :: BoundaryFlux => BoundaryFlux_ESAtmo2D_t

  • public subroutine BoundaryFlux_ESAtmo2D_t(this)

    LMARS (Low-Mach Approximate Riemann Solver, Chen et al. 2013) interface flux. No hydrostatic pressure split: gravity is folded into SourceMethod via the Souza non-conservative form using the geopotential carried in the state vector (variable index 5).

    Read more…

    Arguments

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

procedure, public :: CalculateEntropy => CalculateEntropy_DGModel2D_t

procedure, public :: CalculateSolutionGradient => CalculateSolutionGradient_DGModel2D_t

procedure, public :: CalculateTendency => CalculateTendency_ESAtmo2D_t

  • public subroutine CalculateTendency_ESAtmo2D_t(this)

    ESAtmo2D tendency = EC inviscid pipeline (parent) + optional constant-coefficient Laplacian diffusion (BR1 weak-form DG).

    Read more…

    Arguments

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

procedure, public :: DiffusiveBoundaryFlux => DiffusiveBoundaryFlux_ESAtmo2D_t

procedure, public :: DiffusiveFluxMethod => DiffusiveFluxMethod_ESAtmo2D_t

procedure, public :: Euler_timeIntegrator

  • public subroutine Euler_timeIntegrator(this, tn)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: tn

procedure, public :: FluxMethod => fluxmethod_DGModel2D_t

procedure, public :: ForwardStep => ForwardStep_Model

  • public subroutine ForwardStep_Model(this, tn, dt, ioInterval)

    Forward steps the model using the associated tendency procedure and time integrator

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: tn
    real(kind=prec), intent(in) :: dt
    real(kind=prec), intent(in) :: ioInterval

procedure, public :: Free => Free_ECDGModel2D_t

procedure, public :: GetSimulationTime

  • public subroutine GetSimulationTime(this, t)

    Returns the current simulation time stored in the model % t attribute

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(out) :: t

procedure, public :: IncrementIOCounter

  • public subroutine IncrementIOCounter(this)

    Arguments

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

procedure, public :: Init => Init_ECDGModel2D_t

  • public subroutine Init_ECDGModel2D_t(this, mesh, geometry)

    Arguments

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

procedure, public :: LowStorageRK2_timeIntegrator

  • public subroutine LowStorageRK2_timeIntegrator(this, tn)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: tn

procedure, public :: LowStorageRK3_timeIntegrator

  • public subroutine LowStorageRK3_timeIntegrator(this, tn)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: tn

procedure, public :: LowStorageRK4_timeIntegrator

  • public subroutine LowStorageRK4_timeIntegrator(this, tn)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: tn

procedure, public :: MapBoundaryConditions => MapBoundaryConditions_DGModel2D_t

  • public subroutine MapBoundaryConditions_DGModel2D_t(this)

    Scan the mesh sideInfo and populate the elements/sides arrays for each registered boundary condition.

    Arguments

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

procedure, public :: PreTendency => PreTendency_Model

  • public subroutine PreTendency_Model(this)

    PreTendency is a template routine that is used to house any additional calculations that you want to execute at the beginning of the tendency calculation routine. This default PreTendency simply returns back to the caller without executing any instructions

    Read more…

    Arguments

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

procedure, public :: PrintType => PrintType_Model

  • public subroutine PrintType_Model(this)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this

procedure, public :: ReadModel => Read_DGModel2D_t

  • public subroutine Read_DGModel2D_t(this, fileName)

    Arguments

    TypeIntentOptionalAttributesName
    class(DGModel2D_t), intent(inout) :: this
    character, intent(in) :: fileName

procedure, public :: ReportEntropy => ReportEntropy_Model

  • public subroutine ReportEntropy_Model(this)

    Base method for reporting the entropy of a model to stdout. Only override this procedure if additional reporting is needed. Alternatively, if you think additional reporting would be valuable for all models, open a pull request with modifications to this base method.

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this

procedure, public :: ReportMetrics => ReportMetrics_DGModel2D_t

  • public subroutine ReportMetrics_DGModel2D_t(this)

    Base method for reporting the entropy of a model to stdout. Only override this procedure if additional reporting is needed. Alternatively, if you think additional reporting would be valuable for all models, open a pull request with modifications to this base method.

    Arguments

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

procedure, public :: ReportUserMetrics => ReportUserMetrics_Model

  • public subroutine ReportUserMetrics_Model(this)

    Method that can be overridden by users to report their own custom metrics after file io

    Arguments

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

procedure, public :: SetBoundaryCondition => setboundarycondition_DGModel2D_t

  • public subroutine setboundarycondition_DGModel2D_t(this)

    Apply registered boundary conditions for the solution. Each boundary condition method loops over its own boundary faces.

    Arguments

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

procedure, public :: SetDiffusion => SetDiffusion_ESAtmo2D_t

  • public subroutine SetDiffusion_ESAtmo2D_t(this, nu, kappa, eta_penalty)

    Set the constant-coefficient Laplacian diffusion coefficients (kinematic momentum diffusivity and thermal diffusivity, both in m^2/s) and the dimensionless SIPG jump penalty. Setting nu or kappa > 0 enables the gradient pipeline so that the diffusive flux methods receive solutionGradient.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(inout) :: this
    real(kind=prec), intent(in) :: nu
    real(kind=prec), intent(in) :: kappa
    real(kind=prec), intent(in), optional :: eta_penalty

procedure, public :: SetGradientBoundaryCondition => setgradientboundarycondition_DGModel2D_t

  • public subroutine setgradientboundarycondition_DGModel2D_t(this)

    Apply registered boundary conditions for the solution gradient. Each boundary condition method loops over its own boundary faces.

    Arguments

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

procedure, public :: SetHydrostaticBalance => SetHydrostaticBalance_ESAtmo2D_t

  • public subroutine SetHydrostaticBalance_ESAtmo2D_t(this, theta0)

    Initialise a hydrostatically balanced atmosphere with uniform potential temperature theta0, zero velocity, and the geopotential Phi = g*y carried as state variable index 5.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(inout) :: this
    real(kind=prec), intent(in) :: theta0

procedure, public :: SetMetadata => SetMetadata_ESAtmo2D_t

procedure, public :: SetNumberOfVariables => SetNumberOfVariables_ESAtmo2D_t

  • public subroutine SetNumberOfVariables_ESAtmo2D_t(this)

    Five conserved variables: (rho, rhou, rhov, rhotheta, Phi), where Phi = gy is the geopotential. Phi has zero flux (volume and surface) so its tendency is identically zero; it is carried in the state vector solely so that the Souza et al. (2023) non-conservative gravity flux differencing in SourceMethod can read it node-locally.

    Arguments

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

procedure, public :: SetSimulationTime

  • public subroutine SetSimulationTime(this, t)

    Sets the model % t attribute with the provided simulation time

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    real(kind=prec), intent(in) :: t

generic, public :: SetTimeIntegrator => SetTimeIntegrator_withChar

  • public subroutine SetTimeIntegrator_withChar(this, integrator)

    Sets the time integrator method, using a character input

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    character, intent(in) :: integrator

procedure, public :: SourceMethod => SourceMethod_ESAtmo2D_t

procedure, public :: TwoPointFluxMethod => TwoPointFluxMethod_ESAtmo2D_t

  • public subroutine TwoPointFluxMethod_ESAtmo2D_t(this)

    Pre-projected scalar contravariant two-point Souza et al. (2023) EC flux. For each node pair (a, b) along reference direction r:

    Read more…

    Arguments

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

procedure, public :: UpdateGRK2 => UpdateGRK2_DGModel2D_t

procedure, public :: UpdateGRK3 => UpdateGRK3_DGModel2D_t

procedure, public :: UpdateGRK4 => UpdateGRK4_DGModel2D_t

procedure, public :: UpdateSolution => UpdateSolution_DGModel2D_t

  • public subroutine UpdateSolution_DGModel2D_t(this, dt)

    Computes a solution update as , where dt is either provided through the interface or taken as the Model's stored time step size (model % dt)

    Arguments

    TypeIntentOptionalAttributesName
    class(DGModel2D_t), intent(inout) :: this
    real(kind=prec), intent(in), optional :: dt

procedure, public :: WriteModel => Write_DGModel2D_t

  • public subroutine Write_DGModel2D_t(this, fileName)

    Arguments

    TypeIntentOptionalAttributesName
    class(DGModel2D_t), intent(inout) :: this
    character, intent(in), optional :: fileName

procedure, public :: WriteTecplot => WriteTecplot_DGModel2D_t

  • public subroutine WriteTecplot_DGModel2D_t(this, filename)

    Arguments

    TypeIntentOptionalAttributesName
    class(DGModel2D_t), intent(inout) :: this
    character, intent(in), optional :: filename

procedure, public :: entropy_func => entropy_func_ESAtmo2D_t

  • public pure function entropy_func_ESAtmo2D_t(this, s) result(e)

    Mathematical entropy: total energy density (kinetic + internal).

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)

    Return Value real(kind=prec)

procedure, public :: flux1D => flux1d_Model

  • public pure function flux1d_Model(this, s, dsdx) result(flux)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: flux2D => flux2d_Model

  • public pure function flux2d_Model(this, s, dsdx) result(flux)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:2)

    Return Value real(kind=prec)(1:this%nvar,1:2)

procedure, public :: flux3D => flux3d_Model

  • public pure function flux3d_Model(this, s, dsdx) result(flux)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:3)

    Return Value real(kind=prec)(1:this%nvar,1:3)

procedure, public :: riemannflux1d => riemannflux1d_Model

  • public pure function riemannflux1d_Model(this, sL, sR, dsdx, nhat) result(flux)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: sL(1:this%nvar)
    real(kind=prec), intent(in) :: sR(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar)
    real(kind=prec), intent(in) :: nhat

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: riemannflux2d => riemannflux2d_ESAtmo2D_t

  • public pure function riemannflux2d_ESAtmo2D_t(this, sL, sR, dsdx, nhat) result(flux)

    Local Lax-Friedrichs (Rusanov) Riemann flux. Provided as a fallback; the model overrides BoundaryFlux directly with the LMARS solver.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(in) :: this
    real(kind=prec), intent(in) :: sL(1:this%nvar)
    real(kind=prec), intent(in) :: sR(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:2)
    real(kind=prec), intent(in) :: nhat(1:2)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: riemannflux3d => riemannflux3d_Model

  • public pure function riemannflux3d_Model(this, sL, sR, dsdx, nhat) result(flux)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: sL(1:this%nvar)
    real(kind=prec), intent(in) :: sR(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:3)
    real(kind=prec), intent(in) :: nhat(1:3)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: source1d => source1d_Model

  • public pure function source1d_Model(this, s, dsdx) result(source)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: source2d => source2d_Model

  • public pure function source2d_Model(this, s, dsdx) result(source)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:2)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: source3d => source3d_Model

  • public pure function source3d_Model(this, s, dsdx) result(source)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(in) :: this
    real(kind=prec), intent(in) :: s(1:this%nvar)
    real(kind=prec), intent(in) :: dsdx(1:this%nvar,1:3)

    Return Value real(kind=prec)(1:this%nvar)

procedure, public :: twopointflux2d => twopointflux2d_ESAtmo2D_t

  • public pure function twopointflux2d_ESAtmo2D_t(this, sL, sR) result(flux)

    Souza et al. (2023, JAMES) entropy-conservative two-point flux for 2-D compressible Euler in (rho, rhov, rhotheta) variables with p = p0(rhoRd*theta/p0)^gamma.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(ESAtmo2D_t), intent(in) :: this
    real(kind=prec), intent(in) :: sL(1:this%nvar)
    real(kind=prec), intent(in) :: sR(1:this%nvar)

    Return Value real(kind=prec)(1:this%nvar,1:2)

Source Code

  type,extends(ESAtmo2D_t),public :: ESAtmo2D
  endtype ESAtmo2D