# deriveEquilVelMSGas Subroutine

## private recursive subroutine deriveEquilVelMSGas(fun, varSys, elempos, time, tree, nElems, nDofs, res)

Equilibrium velocity from state Calculate the momentum of a given element for single species or mixture from the cptr scheme state vector for gas mixture (Asinari model). Need to solve the system of equations to compute this momentum since first order moments gives only moments of transformed pdfs. Hence to obtain the first order moments of actual pdfs we need to solve system of equation of size = nSpecies for each velocity components

### Arguments

TypeIntentOptionalAttributesName
class(tem_varSys_op_type), intent(in) :: fun

Description of the method to obtain the variables, here some preset values might be stored, like the space time function to use or the required variables.

type(tem_varSys_type), intent(in) :: varSys

The variable system to obtain the variable from.

integer, intent(in) :: elempos(:)

Position of the TreeID of the element to get the variable for in the global treeID list.

type(tem_time_type), intent(in) :: time

Point in time at which to evaluate the variable.

type(treelmesh_type), intent(in) :: tree

global treelm mesh info

integer, intent(in) :: nElems

Number of values to obtain for this variable (vectorized access).

integer, intent(in) :: nDofs

Number of degrees of freedom within an element.

real(kind=rk), intent(out) :: res(:)

Resulting values for the requested variable.

Linearized array dimension: (n requested entries) x (nComponents of this variable) x (nDegrees of freedom) Access: (iElem-1)fun%nComponentsnDofs + (iDof-1)*fun%nComponents + iComp

## Variables

TypeVisibilityAttributesNameInitial
integer, private :: statePos
integer, private :: iElem
integer, private :: iComp
integer, private :: iLevel
integer, private :: iField
integer, private :: ifld
integer, private :: nFields
type(mus_varSys_data_type), private, pointer:: fPtr
type(mus_scheme_type), private, pointer:: scheme
integer, private :: pdfPos
integer, private :: varPos
integer, private :: QQ
real(kind=rk), private, allocatable:: tmpPDF(:)
real(kind=rk), private :: massFraction(varSys%nStateVars)
real(kind=rk), private :: mass_dens(varSys%nStateVars)
real(kind=rk), private :: press(varSys%nStateVars)
real(kind=rk), private :: lambda(varSys%nStateVars)
real(kind=rk), private :: pressMix
real(kind=rk), private :: densMix
real(kind=rk), private :: molWeightMix
real(kind=rk), private :: first_moments(fun%nComponents,varSys%nStateVars)
real(kind=rk), private :: momentum(fun%nComponents,varSys%nStateVars)
real(kind=rk), private, dimension(varSys%nStateVars):: molWeight
real(kind=rk), private, dimension(varSys%nStateVars):: phi
real(kind=rk), private :: resi_coeff(varSys%nStateVars,varSys%nStateVars)
real(kind=rk), private :: chi(varSys%nStateVars,varSys%nStateVars)
integer, private :: iFieldDia
integer, private :: iFieldNonDia
real(kind=rk), private :: matrixA(varSys%nStateVars,varSys%nStateVars)
real(kind=rk), private :: invA(varSys%nStateVars,varSys%nStateVars)
real(kind=rk), private :: eqVel(3)
real(kind=rk), private :: vel(3,varSys%nStateVars)
integer, private :: nSize
integer, private :: stateVarMap(varSys%nStateVars)