self_advection_diffusion_2d_t Module


Uses

  • module~~self_advection_diffusion_2d_t~~UsesGraph module~self_advection_diffusion_2d_t self_advection_diffusion_2d_t module~self_mesh SELF_Mesh module~self_advection_diffusion_2d_t->module~self_mesh module~self_boundaryconditions SELF_BoundaryConditions module~self_advection_diffusion_2d_t->module~self_boundaryconditions module~self_dgmodel2d SELF_DGModel2D module~self_advection_diffusion_2d_t->module~self_dgmodel2d module~self_constants SELF_Constants module~self_mesh->module~self_constants module~self_domaindecomposition SELF_DomainDecomposition module~self_mesh->module~self_domaindecomposition iso_c_binding iso_c_binding module~self_mesh->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_boundaryconditions->iso_c_binding module~self_dgmodel2d_t SELF_DGModel2D_t module~self_dgmodel2d->module~self_dgmodel2d_t module~self_constants->iso_c_binding iso_fortran_env iso_fortran_env module~self_constants->iso_fortran_env module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_hdf5 SELF_HDF5 module~self_metadata->module~self_hdf5 HDF5 HDF5 module~self_metadata->HDF5 module~self_dgmodel2d_t->module~self_boundaryconditions module~self_dgmodel2d_t->module~self_supportroutines module~self_dgmodel2d_t->module~self_metadata module~self_model SELF_Model module~self_dgmodel2d_t->module~self_model module~self_dgmodel2d_t->iso_fortran_env module~self_dgmodel2d_t->module~self_hdf5 FEQParse FEQParse module~self_dgmodel2d_t->FEQParse module~self_dgmodel2d_t->HDF5 module~self_mappedscalar_2d SELF_MappedScalar_2D module~self_dgmodel2d_t->module~self_mappedscalar_2d module~self_mesh_2d SELF_Mesh_2D module~self_dgmodel2d_t->module~self_mesh_2d module~self_solutionmigration SELF_SolutionMigration module~self_dgmodel2d_t->module~self_solutionmigration module~self_transferplan_2d SELF_TransferPlan_2D module~self_dgmodel2d_t->module~self_transferplan_2d module~self_mappedvector_2d~2 SELF_MappedVector_2D module~self_dgmodel2d_t->module~self_mappedvector_2d~2 module~self_geometry_2d SELF_Geometry_2D module~self_dgmodel2d_t->module~self_geometry_2d module~self_model->module~self_supportroutines module~self_model->module~self_metadata module~self_model->module~self_hdf5 module~self_model->FEQParse module~self_model->HDF5 module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_supportroutines module~self_domaindecomposition_t->iso_c_binding module~self_lagrange~2 SELF_Lagrange module~self_domaindecomposition_t->module~self_lagrange~2 mpi mpi module~self_domaindecomposition_t->mpi module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 module~self_hdf5->mpi module~self_mappedscalar_2d_t SELF_MappedScalar_2D_t module~self_mappedscalar_2d->module~self_mappedscalar_2d_t module~self_mesh_2d_t SELF_Mesh_2D_t module~self_mesh_2d->module~self_mesh_2d_t module~self_solutionmigration->module~self_constants module~self_solutionmigration->module~self_domaindecomposition module~self_solutionmigration->iso_fortran_env module~self_solutionmigration->mpi module~self_transferplan_2d->module~self_constants module~self_transferplan_2d->module~self_lagrange~2 module~self_solutiontransfer_2d SELF_SolutionTransfer_2D module~self_transferplan_2d->module~self_solutiontransfer_2d module~self_quadtreemesh_2d SELF_QuadTreeMesh_2D module~self_transferplan_2d->module~self_quadtreemesh_2d module~self_mappedvector_2d_t SELF_MappedVector_2D_t module~self_mappedvector_2d~2->module~self_mappedvector_2d_t module~self_geometry_2d->module~self_constants module~self_geometry_2d->module~self_supportroutines module~self_geometry_2d->module~self_mesh_2d module~self_geometry_2d->module~self_lagrange~2 module~self_data SELF_Data module~self_geometry_2d->module~self_data module~self_vector_2d SELF_Vector_2D module~self_geometry_2d->module~self_vector_2d module~self_tensor_2d SELF_Tensor_2D module~self_geometry_2d->module~self_tensor_2d module~self_scalar_2d~2 SELF_Scalar_2D module~self_geometry_2d->module~self_scalar_2d~2 module~self_lagrange~2->module~self_constants module~self_lagrange~2->iso_c_binding module~self_lagrange~2->iso_fortran_env module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~2->module~self_lagrange_t module~self_mappedscalar_2d_t->module~self_constants module~self_mappedscalar_2d_t->module~self_domaindecomposition module~self_mappedscalar_2d_t->iso_c_binding module~self_mappedscalar_2d_t->FEQParse module~self_mappedscalar_2d_t->module~self_mesh_2d module~self_mappedscalar_2d_t->module~self_geometry_2d module~self_mappedscalar_2d_t->module~self_lagrange~2 module~self_mappedscalar_2d_t->module~self_tensor_2d module~self_mappedscalar_2d_t->module~self_scalar_2d~2 module~self_mesh_2d_t->module~self_mesh module~self_mesh_2d_t->module~self_constants module~self_mesh_2d_t->module~self_domaindecomposition module~self_mesh_2d_t->module~self_supportroutines module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_hdf5 module~self_mesh_2d_t->HDF5 module~self_mesh_2d_t->module~self_lagrange~2 module~self_quadrature SELF_Quadrature module~self_mesh_2d_t->module~self_quadrature module~self_solutiontransfer_2d->module~self_constants module~self_solutiontransfer_2d->module~self_lagrange~2 module~self_quadtreemesh_2d->module~self_constants module~self_quadtreemesh_2d->module~self_mesh_2d module~self_quadtreemesh_2d->module~self_lagrange~2 module~self_refinementprimitives_2d SELF_RefinementPrimitives_2D module~self_quadtreemesh_2d->module~self_refinementprimitives_2d module~self_mappedvector_2d_t->module~self_constants module~self_mappedvector_2d_t->module~self_domaindecomposition module~self_mappedvector_2d_t->iso_c_binding module~self_mappedvector_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->module~self_lagrange~2 module~self_mappedvector_2d_t->module~self_vector_2d module~self_mappedvector_2d_t->module~self_tensor_2d module~self_data->module~self_constants module~self_data->module~self_metadata module~self_data->iso_c_binding module~self_data->module~self_hdf5 module~self_data->FEQParse module~self_data->HDF5 module~self_data->module~self_lagrange~2 module~self_vector_2d_t SELF_Vector_2D_t module~self_vector_2d->module~self_vector_2d_t module~self_tensor_2d_t SELF_Tensor_2D_t module~self_tensor_2d->module~self_tensor_2d_t module~self_scalar_2d~2->module~self_constants module~self_scalar_2d~2->iso_c_binding module~self_scalar_2d_t SELF_Scalar_2D_t module~self_scalar_2d~2->module~self_scalar_2d_t module~self_lagrange_t->module~self_constants module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->iso_c_binding module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->module~self_hdf5 module~self_lagrange_t->HDF5 module~self_lagrange_t->module~self_quadrature module~self_vector_2d_t->module~self_constants module~self_vector_2d_t->module~self_metadata module~self_vector_2d_t->iso_c_binding module~self_vector_2d_t->module~self_hdf5 module~self_vector_2d_t->FEQParse module~self_vector_2d_t->HDF5 module~self_vector_2d_t->module~self_lagrange~2 module~self_vector_2d_t->module~self_data module~self_datapool SELF_DataPool module~self_vector_2d_t->module~self_datapool module~self_tensor_2d_t->module~self_constants module~self_tensor_2d_t->module~self_metadata module~self_tensor_2d_t->iso_c_binding module~self_tensor_2d_t->module~self_hdf5 module~self_tensor_2d_t->FEQParse module~self_tensor_2d_t->HDF5 module~self_tensor_2d_t->module~self_lagrange~2 module~self_tensor_2d_t->module~self_data module~self_tensor_2d_t->module~self_datapool module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_refinementprimitives_2d->module~self_constants module~self_refinementprimitives_2d->module~self_lagrange~2 module~self_scalar_2d_t->module~self_constants module~self_scalar_2d_t->module~self_metadata module~self_scalar_2d_t->iso_c_binding module~self_scalar_2d_t->module~self_hdf5 module~self_scalar_2d_t->FEQParse module~self_scalar_2d_t->HDF5 module~self_scalar_2d_t->module~self_lagrange~2 module~self_scalar_2d_t->module~self_data module~self_scalar_2d_t->module~self_datapool module~self_datapool->module~self_constants

Used by

  • module~~self_advection_diffusion_2d_t~~UsedByGraph module~self_advection_diffusion_2d_t self_advection_diffusion_2d_t module~self_advection_diffusion_2d~2 self_advection_diffusion_2d module~self_advection_diffusion_2d~2->module~self_advection_diffusion_2d_t module~self_advection_diffusion_2d self_advection_diffusion_2d module~self_advection_diffusion_2d->module~self_advection_diffusion_2d_t

Contents


Derived Types

type, public, extends(DGModel2D) :: advection_diffusion_2d_t

Components

TypeVisibilityAttributesNameInitial
type(MappedScalar2D), public :: dSdt
real(kind=prec), public :: dt
real(kind=prec), public :: entropy
type(MappedVector2D), public :: flux
type(MappedScalar2D), public :: fluxDivergence
type(SEMQuad), public, pointer:: geometry=> null()
logical, public :: gradient_enabled =.false.
type(BoundaryConditionList), public :: hyperbolicBCs
integer, public :: ioIterate =0
type(Mesh2D), public, pointer:: mesh=> null()
integer, public :: nUnmappedBoundaries =0

The first unregistered bcid found, and meaningful only when nUnmappedBoundaries > 0: -1 is itself a legal bcid, so it cannot double as an "absent" marker.

integer, public :: nstepped =0
real(kind=prec), public :: nu
integer, public :: nvar
type(BoundaryConditionList), public :: parabolicBCs

Mesh boundary edges whose sideInfo(5) boundary condition id matches no registered boundary condition, counted over the whole domain by MapBoundaryConditions and summed across ranks. Nothing writes solution%extBoundary on such an edge, so the Riemann solver reads zeros at t = 0 and stale values afterwards. ReportUnmappedBoundaries warns about them once, from the top of ForwardStep.

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
real(kind=prec), public, allocatable:: transferStage(:,:,:,:)

Migrated old-element window, held between MigrateOldWindow and ApplyTransferPlan on the multi-rank path: the contiguous run of OLD elements this rank's new element range references. Flat, because it is viewed through a rank-remapped pointer whose element lower bound is the window's first GLOBAL old element index - the numbering the transfer plan uses. Persistent and grow-only, so a settled adapting run allocates nothing here. The GPU backend overrides the migration and keeps the window in device memory instead, leaving this unallocated.

real(kind=prec), public :: u
logical, public :: unmappedBoundariesReported =.false.

Pre-regrid copy of the solution, held between StageSolutionForTransfer and ApplyTransferPlan so that Regrid is free to release the storage it was read from. The base implementation stages on the host; the GPU backend overrides both procedures and stages device-side instead, leaving this unallocated.

integer, public :: unmappedBoundaryID =-1
real(kind=prec), public :: v
real(kind=prec), public, allocatable:: winStage(:)
integer, public :: winStageFirst =0

global old index of winStage's first element

integer, public :: winStageN =0

window element count; 0 means no window is migrated

type(MappedScalar2D), public :: workSol

Type-Bound Procedures

procedure, public :: AdditionalFree => AdditionalFree_Model
procedure, public :: AdditionalInit => AdditionalInit_advection_diffusion_2d_t
procedure, public :: AdditionalOutput => AdditionalOutput_Model
procedure, public :: ApplyTransferPlan => ApplyTransferPlan_DGModel2D_t
procedure, public :: BoundaryFlux => BoundaryFlux_DGModel2D_t
procedure, public :: CalculateEntropy => CalculateEntropy_DGModel2D_t
procedure, public :: CalculateSolutionGradient => CalculateSolutionGradient_DGModel2D_t
procedure, public :: CalculateTendency => CalculateTendency_DGModel2D_t
procedure, public :: DownloadOldWindow => DownloadOldWindow_DGModel2D_t
procedure, public :: Euler_timeIntegrator
procedure, public :: FluxMethod => fluxmethod_DGModel2D_t
procedure, public :: ForwardStep => ForwardStep_Model
procedure, public :: Free => Free_DGModel2D_t
procedure, public :: GetSimulationTime
procedure, public :: IncrementIOCounter
procedure, public :: Init => Init_DGModel2D_t
procedure, public :: LowStorageRK2_timeIntegrator
procedure, public :: LowStorageRK3_timeIntegrator
procedure, public :: LowStorageRK4_timeIntegrator
procedure, public :: MapBoundaryConditions => MapBoundaryConditions_DGModel2D_t
procedure, public :: MigrateOldWindow => MigrateOldWindow_DGModel2D_t
procedure, public :: PostStepHook => PostStepHook_Model
procedure, public :: PreStepHook => PreStepHook_Model
procedure, public :: PreTendencyHook => PreTendencyHook_Model
procedure, public :: PrintType => PrintType_Model
procedure, public :: ReadModel => Read_DGModel2D_t
procedure, public :: Regrid => Regrid_DGModel2D_t
procedure, public :: ReportEntropy => ReportEntropy_Model
procedure, public :: ReportMetrics => ReportMetrics_DGModel2D_t
procedure, public :: ReportUnmappedBoundaries => ReportUnmappedBoundaries_DGModel2D_t
procedure, public :: ReportUserMetrics => ReportUserMetrics_Model
procedure, public :: SetBoundaryCondition => setboundarycondition_DGModel2D_t
procedure, public :: SetGradientBoundaryCondition => setgradientboundarycondition_DGModel2D_t
procedure, public :: SetMetadata => SetMetadata_DGModel2D_t
procedure, public :: SetNumberOfVariables => SetNumberOfVariables_Model
procedure, public :: SetSimulationTime
generic, public :: SetSolution => SetSolutionFromChar_DGModel2D_t, SetSolutionFromEqn_DGModel2D_t
generic, public :: SetTimeIntegrator => SetTimeIntegrator_withChar
procedure, public :: SourceMethod => sourcemethod_DGModel2D_t
procedure, public :: StageSolutionForTransfer => StageSolutionForTransfer_DGModel2D_t
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_advection_diffusion_2d_t
procedure, public :: flux1D => flux1d_Model
procedure, public :: flux2d => flux2d_advection_diffusion_2d_t
procedure, public :: flux3D => flux3d_Model
procedure, public :: riemannflux1d => riemannflux1d_Model
procedure, public :: riemannflux2d => riemannflux2d_advection_diffusion_2d_t
procedure, public :: riemannflux3d => riemannflux3d_Model
procedure, public :: source1d => source1d_Model
procedure, public :: source2d => source2d_Model
procedure, public :: source3d => source3d_Model

Functions

public pure function entropy_func_advection_diffusion_2d_t(this, s) result(e)

Arguments

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

Return Value real(kind=prec)

public pure function flux2d_advection_diffusion_2d_t(this, s, dsdx) result(flux)

Arguments

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

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

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

Arguments

TypeIntentOptionalAttributesName
class(advection_diffusion_2d_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)


Subroutines

Register boundary conditions for the advection-diffusion model. Hyperbolic: mirror (no-normal-flow) wall condition on the solution. Parabolic: no-stress condition that zeros the normal gradient at the boundary, giving zero diffusive flux through walls. This is stable with the Bassi-Rebay (BR1) method.

Arguments

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

public subroutine hbc2d_NoNormalFlow_advection_diffusion_2d_t(bc, mymodel)

Mirror boundary condition on the solution: sets the exterior state equal to the interior state. With LLF this zeroes the upwind dissipation at the wall.

Arguments

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

public subroutine pbc2d_NoStress_advection_diffusion_2d_t(bc, mymodel)

No-stress boundary condition for the BR1 diffusive flux. Reflects the interior gradient so that the normal component of the averaged gradient vanishes at the boundary: sigma_ext = sigma_int - 2 (sigma_int . nhat) nhat This gives zero diffusive flux through the wall and is unconditionally stable for Bassi-Rebay.

Arguments

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