SELF_Model Module



Contents


Variables

TypeVisibilityAttributesNameInitial
integer, public, parameter:: SELF_EQUATION_LENGTH =500
integer, public, parameter:: SELF_EULER =100
integer, public, parameter:: SELF_FORMULATION_LENGTH =30
integer, public, parameter:: SELF_INTEGRATOR_LENGTH =10
integer, public, parameter:: SELF_RK2 =200
integer, public, parameter:: SELF_RK3 =300
integer, public, parameter:: SELF_RK4 =400
real(kind=prec), public, parameter:: rk2_a(1:2) =(/0.0_prec, -0.5_prec/)
real(kind=prec), public, parameter:: rk2_b(1:2) =(/0.5_prec, 0.5_prec/)
real(kind=prec), public, parameter:: rk2_g(1:2) =(/0.5_prec, 1.0_prec/)
real(kind=prec), public, parameter:: rk3_a(1:3) =(/0.0_prec, -5.0_prec/9.0_prec, -153.0_prec/128.0_prec/)
real(kind=prec), public, parameter:: rk3_b(1:3) =(/0.0_prec, 1.0_prec/3.0_prec, 3.0_prec/4.0_prec/)
real(kind=prec), public, parameter:: rk3_g(1:3) =(/1.0_prec/3.0_prec, 15.0_prec/16.0_prec, 8.0_prec/15.0_prec/)
real(kind=prec), public, parameter:: rk4_a(1:5) =(/0.0_prec, -1.0_prec, -1.0_prec/3.0_prec+2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, -2.0_prec**(1.0_prec/3.0_prec)-2.0_prec**(2.0_prec/3.0_prec)-2.0_prec, -1.0_prec+2.0_prec**(1.0_prec/3.0_prec)/)
real(kind=prec), public, parameter:: rk4_b(1:5) =(/0.0_prec, 2.0_prec/3.0_prec+2.0_prec**(1.0_prec/3.0_prec)/3.0_prec+2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, 2.0_prec/3.0_prec+2.0_prec**(1.0_prec/3.0_prec)/3.0_prec+2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, 1.0_prec/3.0_prec-2.0_prec**(1.0_prec/3.0_prec)/3.0_prec-2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, 1.0_prec/)
real(kind=prec), public, parameter:: rk4_g(1:5) =(/2.0_prec/3.0_prec+2.0_prec**(1.0_prec/3.0_prec)/3.0_prec+2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, -2.0_prec**(2.0_prec/3.0_prec)/6.0_prec+1.0_prec/6.0_prec, -1.0_prec/3.0_prec-2.0_prec*2.0_prec**(1.0_prec/3.0_prec)/3.0_prec-2.0_prec**(2.0_prec/3.0_prec)/3.0_prec, 1.0_prec/3.0_prec-2.0_prec**(1.0_prec/3.0_prec)/3.0_prec-2.0_prec**(2.0_prec/3.0_prec)/6.0_prec, 1.0_prec/3.0_prec+2.0_prec**(1.0_prec/3.0_prec)/6.0_prec+2.0_prec**(2.0_prec/3.0_prec)/12.0_prec/)

Interfaces

interface

  • public subroutine CalculateTendency(this)

    Arguments

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

interface

  • public subroutine ReadModel(this, filename)

    Arguments

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

interface

  • public subroutine SELF_timeIntegrator(this, tn)

    Arguments

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

interface

  • public subroutine UpdateGRK(this, m)

    Arguments

    TypeIntentOptionalAttributesName
    class(Model), intent(inout) :: this
    integer, intent(in) :: m

interface

  • public subroutine UpdateSolution(this, dt)

    Arguments

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

interface

  • public subroutine WriteModel(this, filename)

    Arguments

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

interface

  • public subroutine WriteTecplot(this, filename)

    Arguments

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

Derived Types

type, public, abstract :: Model

Components

TypeVisibilityAttributesNameInitial
real(kind=prec), public :: dt
real(kind=prec), public :: entropy
logical, public :: gradient_enabled =.false.
integer, public :: ioIterate =0
integer, public :: nvar
real(kind=prec), public :: t
procedure(SELF_timeIntegrator), public, pointer:: timeIntegrator=> Euler_timeIntegrator

Type-Bound Procedures

procedure, public :: CalculateEntropy => CalculateEntropy_Model
procedure(CalculateTendency), public :: CalculateTendency
procedure, public :: Euler_timeIntegrator
procedure, public :: ForwardStep => ForwardStep_Model
procedure, public :: GetSimulationTime
procedure, public :: IncrementIOCounter
procedure, public :: LowStorageRK2_timeIntegrator
procedure, public :: LowStorageRK3_timeIntegrator
procedure, public :: LowStorageRK4_timeIntegrator
procedure, public :: PreTendency => PreTendency_Model
procedure, public :: PrintType => PrintType_Model
procedure(ReadModel), public :: ReadModel
procedure, public :: ReportEntropy => ReportEntropy_Model
procedure, public :: SetSimulationTime
generic, public :: SetTimeIntegrator => SetTimeIntegrator_withChar
procedure, private :: SetTimeIntegrator_withChar
procedure(UpdateGRK), public :: UpdateGRK2
procedure(UpdateGRK), public :: UpdateGRK3
procedure(UpdateGRK), public :: UpdateGRK4
procedure(UpdateSolution), public :: UpdateSolution
procedure(WriteModel), public :: WriteModel
procedure(WriteTecplot), public :: WriteTecplot
procedure, public :: entropy_func => entropy_func_Model
procedure, public :: flux1D => flux1d_Model
procedure, public :: flux2D => flux2d_Model
procedure, public :: flux3D => flux3d_Model
procedure, public :: hbc1d_NoNormalFlow => hbc1d_Generic_Model
procedure, public :: hbc1d_Prescribed => hbc1d_Prescribed_Model
procedure, public :: hbc1d_Radiation => hbc1d_Generic_Model
procedure, public :: hbc2d_NoNormalFlow => hbc2d_Generic_Model
procedure, public :: hbc2d_Prescribed => hbc2d_Prescribed_Model
procedure, public :: hbc2d_Radiation => hbc2d_Generic_Model
procedure, public :: hbc3d_NoNormalFlow => hbc3d_Generic_Model
procedure, public :: hbc3d_Prescribed => hbc3d_Prescribed_Model
procedure, public :: hbc3d_Radiation => hbc3d_Generic_Model
procedure, public :: pbc1d_NoNormalFlow => pbc1d_Generic_Model
procedure, public :: pbc1d_Prescribed => pbc1d_Prescribed_Model
procedure, public :: pbc1d_Radiation => pbc1d_Generic_Model
procedure, public :: pbc2d_NoNormalFlow => pbc2d_Generic_Model
procedure, public :: pbc2d_Prescribed => pbc2d_Prescribed_Model
procedure, public :: pbc2d_Radiation => pbc2d_Generic_Model
procedure, public :: pbc3d_NoNormalFlow => pbc3d_Generic_Model
procedure, public :: pbc3d_Prescribed => pbc3d_Prescribed_Model
procedure, public :: pbc3d_Radiation => pbc3d_Generic_Model
procedure, public :: riemannflux1d => riemannflux1d_Model
procedure, public :: riemannflux2d => riemannflux2d_Model
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_Model(this, s) result(e)

Arguments

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

Return Value real(kind=prec)

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)

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)

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)

public pure function hbc1d_Generic_Model(this, s, nhat) result(exts)

Arguments

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

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

public pure function hbc1d_Prescribed_Model(this, x, t) result(exts)

Arguments

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

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

public pure function hbc2d_Generic_Model(this, s, nhat) result(exts)

Arguments

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

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

public pure function hbc2d_Prescribed_Model(this, x, t) result(exts)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
real(kind=prec), intent(in) :: x(1:2)
real(kind=prec), intent(in) :: t

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

public pure function hbc3d_Generic_Model(this, s, nhat) result(exts)

Arguments

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

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

public pure function hbc3d_Prescribed_Model(this, x, t) result(exts)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
real(kind=prec), intent(in) :: x(1:3)
real(kind=prec), intent(in) :: t

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

public pure function pbc1d_Generic_Model(this, dsdx, nhat) result(extDsdx)

Arguments

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

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

public pure function pbc1d_Prescribed_Model(this, x, t) result(extDsdx)

Arguments

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

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

public pure function pbc2d_Generic_Model(this, dsdx, nhat) result(extDsdx)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
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,1:2)

public pure function pbc2d_Prescribed_Model(this, x, t) result(extDsdx)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
real(kind=prec), intent(in) :: x(1:2)
real(kind=prec), intent(in) :: t

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

public pure function pbc3d_Generic_Model(this, dsdx, nhat) result(extDsdx)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
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,1:3)

public pure function pbc3d_Prescribed_Model(this, x, t) result(extDsdx)

Arguments

TypeIntentOptionalAttributesName
class(Model), intent(in) :: this
real(kind=prec), intent(in) :: x(1:3)
real(kind=prec), intent(in) :: t

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

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)

public pure function riemannflux2d_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:2)
real(kind=prec), intent(in) :: nhat(1:2)

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

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)

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)

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)

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)


Subroutines

public subroutine CalculateEntropy_Model(this)

Base method for calculating entropy of a model When this method is not overridden, the entropy is simply set to 0.0. When you develop a model built on top of this abstract class or one of its children, it is recommended that you define a convex mathematical entropy function that is used as a measure of the model stability.

Arguments

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

public subroutine Euler_timeIntegrator(this, tn)

Arguments

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

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

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

public subroutine IncrementIOCounter(this)

Arguments

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

public subroutine LowStorageRK2_timeIntegrator(this, tn)

Arguments

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

public subroutine LowStorageRK3_timeIntegrator(this, tn)

Arguments

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

public subroutine LowStorageRK4_timeIntegrator(this, tn)

Arguments

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

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

public subroutine PrintType_Model(this)

Arguments

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

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

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

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