Entropy-conserving linear scalar advection equation in 2-D.
Solves: du/dt + u_a * du/dx + v_a * du/dy = 0
Entropy function: eta(u) = u^2 / 2 (same as Trixi.jl)
EC two-point flux (arithmetic mean, entropy-conserving for eta = u^2/2): F^EC(uL, uR) = (u_a * (uL+uR)/2, v_a * (uL+uR)/2)
Surface Riemann flux (Local Lax-Friedrichs / Rusanov): F_Riemann = 0.5 * (a.n) * (uL+uR) - 0.5 * |a| * (uR-uL) where |a| = sqrt(u^2 + v^2) is the maximum wave speed. This is dissipative (entropy-stable) and reduces to the central flux when uL = uR (no dissipation at no-normal-flow or mirror boundaries).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| 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 | |||
| logical, | public | :: | gradient_enabled | = | .false. | ||
| type(BoundaryConditionList), | public | :: | hyperbolicBCs | ||||
| integer, | public | :: | ioIterate | = | 0 | ||
| type(Mesh2D), | public, | pointer | :: | mesh | |||
| integer, | public | :: | nvar | ||||
| 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 | ||||
| real(kind=prec), | public | :: | u | ||||
| real(kind=prec), | public | :: | v | ||||
| type(MappedScalar2D), | public | :: | workSol |
| procedure, public :: AdditionalFree => AdditionalFree_Model | |
| procedure, public :: AdditionalInit => AdditionalInit_ECAdvection2D_t | |
| procedure, public :: AdditionalOutput => AdditionalOutput_Model | |
| procedure, public :: BoundaryFlux => BoundaryFlux_DGModel2D_t | |
| procedure, public :: CalculateEntropy => CalculateEntropy_DGModel2D_t | |
| procedure, public :: CalculateSolutionGradient => CalculateSolutionGradient_DGModel2D_t | |
| procedure, public :: CalculateTendency => CalculateTendency_ECDGModel2D_t | |
| procedure, public :: Euler_timeIntegrator | |
| procedure, public :: FluxMethod => fluxmethod_DGModel2D_t | |
| procedure, public :: ForwardStep => ForwardStep_Model | |
| procedure, public :: Free => Free_ECDGModel2D_t | |
| procedure, public :: GetSimulationTime | |
| procedure, public :: IncrementIOCounter | |
| procedure, public :: Init => Init_ECDGModel2D_t | |
| 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 :: 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 :: TwoPointFluxMethod => TwoPointFluxMethod_ECDGModel2D_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_ECAdvection2D_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_ECAdvection2D_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_ECAdvection2D_t |
Quadratic entropy: eta(u) = u^2 / 2
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ECAdvection2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) |
Local Lax-Friedrichs (Rusanov) Riemann flux for linear advection. Entropy-stable: provides symmetric dissipation at element interfaces. lambda_max = sqrt(u^2 + v^2) is the maximum wave speed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ECAdvection2D_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) |
Arithmetic-mean two-point flux for linear advection. Entropy-conserving with respect to eta(u) = u^2/2.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ECAdvection2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | sL(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | sR(1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ECAdvection2D_t), | intent(inout) | :: | this |
Mirror boundary condition: sets extBoundary = interior state. With the LLF Riemann flux, this gives sR = sL at the boundary, so the Riemann flux reduces to the central flux (a.n)*s — no dissipation. Use this BC when testing entropy conservation.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(BoundaryCondition), | intent(in) | :: | bc | |||
| class(Model), | intent(inout) | :: | mymodel |