VariableECSTransition Derived Type

type, public, extends(Transition) :: VariableECSTransition

Transition where the transition energy and cross-section are derived


Components

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

True only if user explicitly sets it to true

real(kind=rk), private, allocatable, dimension(:) :: energyCost
real(kind=rk), private, allocatable, dimension(:) :: flattenedEmissionVector
class(Derivation), private, allocatable :: energyDeriv

Derivation object used in transition energy calculation

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

Indices for transition energy derivation

type(DerivationContainer), private, allocatable, dimension(:) :: csDerivs

Derivation objects for the various cross section data columns

type(IntArray), private, allocatable, dimension(:) :: csDerivsReqIndices

Required indices for the various cross section data column derivations

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

Cross section columns corresponding to each of the derivations

integer(kind=ik), private :: locNumX

Size of local rate vectors

type(VSpace), private, pointer :: vSpaceRef

Reference to velocity space object used in moment-taking

logical, private :: takeMomentumMoment

True if the momentum rate should be allocated and updated by taking the first moment of the l = 1 harmonic

integer(kind=ik), private :: l1HarmonicInd

Index of the l=1 m = 0 harmonic on the harmonic grid

integer(kind=ik), private :: distFunVarIndex

Variable index of the distribution function to be used in moment-taking


Finalization Procedures

final :: finalizeVariableECSTransition


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

  • interface

    private pure module function getIngoingStates(this) result(inStates)

    Getter for ingoingStates

    Arguments

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

    Return Value integer(kind=ik), allocatable, dimension(:)

procedure, public :: getOutgoingStates

  • interface

    private pure module function getOutgoingStates(this) result(outStates)

    Getter for outgoingStates

    Arguments

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

    Return Value integer(kind=ik), allocatable, dimension(:)

procedure, public :: setStates

  • interface

    private pure module subroutine setStates(this, inStates, outStates)

    Setter for both ingoing and outgoing states

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    integer(kind=ik), intent(in), dimension(:) :: inStates

    Ingoing state IDs

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

    Outgoing state IDs

procedure, public :: setRate

  • interface

    private pure module subroutine setRate(this, rate)

    Setter for rate values

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:) :: rate

procedure, public :: getRate

  • interface

    private pure module function getRate(this) result(rate)

    Getter for rate values

    Arguments

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

    Return Value real(kind=rk), allocatable, dimension(:)

procedure, public :: setRateMomentum

  • interface

    private pure module subroutine setRateMomentum(this, rate)

    Setter for rateMomentum values

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:) :: rate

procedure, public :: getRateMomentum

  • interface

    private pure module function getRateMomentum(this) result(rate)

    Getter for rateMomentum values

    Arguments

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

    Return Value real(kind=rk), allocatable, dimension(:)

procedure, public :: setRateEnergy

  • interface

    private pure module subroutine setRateEnergy(this, rate)

    Setter for rateEnergy

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:) :: rate

procedure, public :: getRateEnergy

  • interface

    private pure module function getRateEnergy(this) result(rate)

    Getter for rateEnergy

    Arguments

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

    Return Value real(kind=rk), allocatable, dimension(:)

procedure, public :: setCrossSection

  • interface

    private pure module subroutine setCrossSection(this, crossSection)

    Setter for crossSection

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:,:) :: crossSection

procedure, public :: setCrossSectionCol

  • interface

    private pure module subroutine setCrossSectionCol(this, crossSection, col)

    Set cross-section values in column col

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:) :: crossSection
    integer(kind=ik), intent(in) :: col

procedure, public :: getCrossSectionCol

  • interface

    private pure module function getCrossSectionCol(this, col) result(crossSection)

    Get cross-section values from column col

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(in) :: this
    integer(kind=ik), intent(in) :: col

    Return Value real(kind=rk), allocatable, dimension(:)

procedure, public :: includesElDensity

  • interface

    private pure module function includesElDensity(this) result(includesDens)

    Check whether rates in this transition include an electron density factor

    Arguments

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

    Return Value logical

procedure, public :: setIncludeElectronDensity

  • interface

    private pure module subroutine setIncludeElectronDensity(this, includeDens)

    Setter for rateContainsElDensity

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    logical, intent(in) :: includeDens

procedure, public :: setCSDim

  • interface

    private pure module subroutine setCSDim(this, csDim)

    Setter for csDim

    Arguments

    Type IntentOptional Attributes Name
    class(Transition), intent(inout) :: this
    integer(kind=ik), intent(in) :: csDim

procedure, public :: getCSDim

  • interface

    private pure module function getCSDim(this) result(csDim)

    Getter for csDim

    Arguments

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

    Return Value integer(kind=ik)

procedure, public :: getRateSize

  • interface

    private pure module function getRateSize(this) result(rateSize)

    Getter for rate array length

    Arguments

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

    Return Value integer(kind=ik)

procedure, public :: init => initVariableECSTransition

  • interface

    private pure module subroutine initVariableECSTransition(this, locNumX, inStates, outStates, energyDeriv, energyDerivIndices, csDerivs, csDerivsReqIndices, csCols, distVarIndex, refVSpace, momentumMoment, l1Index)

    Initialization routine for VariableECSTransition object

    Arguments

    Type IntentOptional Attributes Name
    class(VariableECSTransition), intent(inout) :: this
    integer(kind=ik), intent(in) :: locNumX

    Local number of spatial cells

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

    Pre-transition states

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

    Post-transition states

    class(Derivation), intent(in) :: energyDeriv

    Derivation object used in rate calculation

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

    Indices for rate derivation

    type(DerivationContainer), intent(in), dimension(:) :: csDerivs

    Derivation objects for the various cross section data columns

    type(IntArray), intent(in), dimension(:) :: csDerivsReqIndices

    Required indices for the various cross section data column derivations

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

    Cross section columns corresponding to each of the derivations

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

    Distribution function variable index

    type(VSpace), intent(inout), target :: refVSpace

    Target for the reference pointer

    logical, intent(in), optional :: momentumMoment

    Set to true if the momentum rate should be calculated

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

    Index of the l=1 harmonic - must be provided if calculating momentum rate

procedure, public :: update => updateCSRates

  • interface

    private module subroutine updateCSRates(this, varCont, hostModel, hostData, updatePriority)

    Update transition properties

    Arguments

    Type IntentOptional Attributes Name
    class(VariableECSTransition), intent(inout) :: this
    type(VariableContainer), intent(in) :: varCont

    Variable container used in update

    class(ModelSurrogate), intent(in), optional :: hostModel

    Host model - unused

    class(ModelboundData), intent(in), optional :: hostData

    Host data - used to get emission vectors

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

    Priority for this update call - unused

procedure, public :: getTransitionEnergy => getEnergy

  • interface

    private pure module function getEnergy(this) result(energyCost)

    Returns array representing energy cost of this transition

    Arguments

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

    Return Value real(kind=rk), allocatable, dimension(:)