DBTransition Derived Type

type, public, extends(Transition) :: DBTransition

Transition with fixed energy where the cross-section is calculated using SOL-KiT's version of discrete detailed balance


Components

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

True only if user explicitly sets it to true

real(kind=rk), private :: transitionEnergy
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

logical, private :: strictDB

Set to false if strict detailed balance should not be enforced by scaling cross-sections. Defaults to true.

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

integer(kind=ik), private :: locNumX

Size of local rate vectors

integer(kind=ik), private :: directTransitionIndex

Index of the direct transition in the host model data

integer(kind=ik), private :: fixedWIndexDirect

Index of the direct transition inelastic weight matrix in the host model inelastic data object

integer(kind=ik), private :: temperatureVarIndex

Index of the temperature variable used to calculate the detailed balance cross-section

integer(kind=ik), private :: fixedWIndex

Index of this transition's inelastic weight matrix in the host model inelastic data object

integer(kind=ik), private :: maxCSl

Highest harmonic of the cross-section to calculate

real(kind=rk), private :: degeneracyRatio

Ratio of the degeneracy of the initial and final states of the transition

class(Derivation), private, allocatable :: degeneracyFun

Optional derivation object when the degeneracy is a function of variables in the variable container

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

Variable indices needed for the degeneracy function calculation

integer(kind=ik), private :: csUpdatePriority

Update priority for cross-section data

type(SparseRowData), private, allocatable :: directFixedW

Local copy to avoid expensive copy routines

type(RealArray), private, allocatable, dimension(:) :: discreteEnergyErrors

Difference between discrete and analytic transition energies for each row/column of directFixedW


Finalization Procedures

final :: finalizeDBTransition


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 => initDBTransition

  • interface

    private pure module subroutine initDBTransition(this, locNumX, inStates, outStates, energy, distVarIndex, refVSpace, directTransitionIndex, fixedWIndexDirect, fixedWIndex, temperatureVarIndex, maxCSl, degeneracyRatio, degeneracyFun, degeneracyFunIndices, momentumMoment, l1Index, csUpdatePriority, strictDB)

    Initialization routine for DBTransition object

    Arguments

    Type IntentOptional Attributes Name
    class(DBTransition), 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

    real(kind=rk), intent(in) :: energy

    Transition energy

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

    Distribution function variable index

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

    Target for the reference pointer

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

    Index of the direct transition in the host model data

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

    Index of the direct transition inelastic weight matrix in the host model inelastic data object

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

    Index of this transition's inelastic weight matrix in the host model inelastic data object

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

    Index of the temperature variable used to calculate the detailed balance cross-section

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

    Highest harmonic of the cross-section to calculate

    real(kind=rk), intent(in) :: degeneracyRatio

    Ratio of the degeneracy of the initial and final states of the transition

    class(Derivation), intent(in), optional :: degeneracyFun

    Optional derivation object when the degeneracy is a function of variables in the variable container

    integer(kind=ik), intent(in), optional, dimension(:) :: degeneracyFunIndices

    Variable indices needed for the degeneracy function calculation

    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

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

    Update priority for cross-section data. Defaults to highest priority (0)

    logical, intent(in), optional :: strictDB

    Set to false if strict detailed balance should not be enforced by scaling cross-sections. Defaults to true.

procedure, public :: update => updateCSRates

  • interface

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

    Update cross-section and transition and moment exchange rates (if applicable)

    Arguments

    Type IntentOptional Attributes Name
    class(DBTransition), 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 access direct transition data

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

    Priority for this update call used to determine if cross-sections should be updated

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(DBTransition), intent(in) :: this

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