CRMBoltzTermGenerator Derived Type

type, public, extends(TermGenerator) :: CRMBoltzTermGenerator

TermGenerator object used to generate electron Boltzmann terms with fixed inelastic mappings based on associated variables in species list and CRM modelbound data. Assumes that all passed transition indices correspond to fixed inlastic mapping transitions. Assumes that the cross-section values in the transitions include any nonlinear normalization dependence (e.g. recombination etc.)


Components

Type Visibility Attributes Name Initial
logical, public :: userDefined = .false.

True only if user explicitly sets it to true

type(VarData), private, allocatable, dimension(:) :: vData

Individual term variable data including densities and required modelbound data

character(len=:), private, allocatable :: distributionName

Evolved and implicit distribution name

integer(kind=ik), private, allocatable, dimension(:) :: transitionIndices

Included transition indices

integer(kind=ik), private, allocatable, dimension(:) :: fixedEnergyIndices

Fixed energy indices associated with included transition in inelData

logical, private :: absorptionTerms

True if generating absorption terms. Defaults to false.

logical, private :: dbTerms

True if generating detailed balance terms (non-fixed stencils). Defaults to false.

integer(kind=ik), private :: evolvedHarmonic

Index of harmonic for which this generator should be generating terms

type(EnvironmentWrapper), private, pointer :: envPointer => null()
real(kind=rk), private :: normConst

Normalization constant for the generated terms


Finalization Procedures

final :: finalizeCRMBoltzTermGenerator


Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject

  • interface

    private pure module function isDefinedObject(this) result(defined)

    Getter for userDefined

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(in) :: this

    Return Value logical

procedure, public :: makeDefined => makeDefinedObject

  • interface

    private pure module subroutine makeDefinedObject(this)

    Set userDefined to .true.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure, public :: makeUndefined => makeUndefinedObject

  • interface

    private pure module subroutine makeUndefinedObject(this)

    Set userDefined to .false.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure, public :: setImplicitTerms

  • interface

    private module subroutine setImplicitTerms(this, impTerms)

    Move allocation of impTerms to this%implicitTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    type(MatTermContainer), intent(inout), allocatable, dimension(:) :: impTerms

procedure, public :: setGeneralTerms

  • interface

    private module subroutine setGeneralTerms(this, genTerms)

    Move allocation of genTerms to this%generalTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    type(TermContainer), intent(inout), allocatable, dimension(:) :: genTerms

procedure, public :: setGeneratorPrefix

  • interface

    private module subroutine setGeneratorPrefix(this, prefix)

    Set prefix for added term names

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    character(len=*), intent(in) :: prefix

procedure, public :: getNumImplicitTerms

  • interface

    private pure module function getNumImplicitTerms(this) result(numTerms)

    Get size of this%implicitTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(in) :: this

    Return Value integer(kind=ik)

procedure, public :: getNumGeneralTerms

  • interface

    private pure module function getNumGeneralTerms(this) result(numTerms)

    Get size of this%generalTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(in) :: this

    Return Value integer(kind=ik)

procedure, public :: moveTerms

  • interface

    private module subroutine moveTerms(this, modelObj, impTermImpGroups, impTermGenGroups, genTermGroups)

    Move terms to modelObj

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    class(Model), intent(inout) :: modelObj
    type(IntArray), intent(in), optional, dimension(:) :: impTermImpGroups
    type(IntArray), intent(in), optional, dimension(:) :: impTermGenGroups
    type(IntArray), intent(in), optional, dimension(:) :: genTermGroups

procedure, public :: init => initCRMBoltzTermGenerator

  • interface

    private module subroutine initCRMBoltzTermGenerator(this, envObj, normObj, crmData, distributionName, includedTransitionIndices, fixedEnergyIndices, evolvedHarmonic, generatorTag, absorptionTerms, dbTerms, associatedVariableIndex)

    Constructor routine for CRM Boltzmann term generator

    Arguments

    Type IntentOptional Attributes Name
    class(CRMBoltzTermGenerator), intent(inout) :: this
    type(EnvironmentWrapper), intent(in), target :: envObj

    Environment wrapper used to get species data, partition info, etc.

    class(Normalization), intent(in) :: normObj

    Normalization object used to calculate the normalization constant for the generated terms

    type(ModelboundCRMData), intent(in) :: crmData

    CRM data object used to get transition data

    character(len=*), intent(in) :: distributionName

    Evolved and implicit distribution name

    integer(kind=ik), intent(in), dimension(:) :: includedTransitionIndices

    List of transitions to be included in calculations by this generator.

    integer(kind=ik), intent(in), dimension(:) :: fixedEnergyIndices

    Fixed energy indices associated with included transitions

    integer(kind=ik), intent(in) :: evolvedHarmonic

    Index of harmonic for which this generator should be generating terms

    character(len=*), intent(in) :: generatorTag
    logical, intent(in), optional :: absorptionTerms

    True if this is an absorption term stencil generator. Defaults to false.

    logical, intent(in), optional :: dbTerms

    True if this is a detailed balance term stencil generator. Defaults to false.

    integer(kind=ik), intent(in), optional :: associatedVariableIndex

    Density index in associated variable array. Defaults to 1.

procedure, public :: generate => generateBoltzTerms

  • interface

    private module subroutine generateBoltzTerms(this, mbData)

    Generates and allocates parent implicit Boltzmann terms

    Arguments

    Type IntentOptional Attributes Name
    class(CRMBoltzTermGenerator), intent(inout) :: this
    class(ModelboundData), intent(in), optional :: mbData