db_transition_class Module

Houses fixed transition energy and fixed cross-section transition object


Used by


Interfaces

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(:)

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.

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

interface

  • private elemental module subroutine finalizeDBTransition(this)

    Deallocate pointer component

    Arguments

    Type IntentOptional Attributes Name
    type(DBTransition), intent(inout) :: this

Derived Types

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

Finalizations Procedures

final :: finalizeDBTransition

Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject
procedure, public :: makeDefined => makeDefinedObject
procedure, public :: makeUndefined => makeUndefinedObject
procedure, public :: getIngoingStates
procedure, public :: getOutgoingStates
procedure, public :: setStates
procedure, public :: setRate
procedure, public :: getRate
procedure, public :: setRateMomentum
procedure, public :: getRateMomentum
procedure, public :: setRateEnergy
procedure, public :: getRateEnergy
procedure, public :: setCrossSection
procedure, public :: setCrossSectionCol
procedure, public :: getCrossSectionCol
procedure, public :: includesElDensity
procedure, public :: setIncludeElectronDensity
procedure, public :: setCSDim
procedure, public :: getCSDim
procedure, public :: getRateSize
procedure, public :: init => initDBTransition
procedure, public :: update => updateCSRates
procedure, public :: getTransitionEnergy => getEnergy