# deriveKinePressPhy Subroutine

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

Calculate the kinematic mixture pressure in physical of a given set of elements (sum up all links).

This routine requires initial mole fraction of all species which must be provided through add_variable table in scheme and set depvar in tracking for kinematic pressure to the newly added variable. This will be used to evaluate spatial function for initial mole fraction from initial mole fraction initial mixture molar density will be computed. Formula to compute kinematic pressure $p = c^2_s (\sum_k \rho_k \phi_k - min_l (m_l) n_0)/\rho_0$ here, $\rho_k$ - species density, \ $\phi_k$ - species molecular weight ratio, \ $n_0$ - mixture number density,\ $\rho_0$ - reference density. Example: In scheme table,

 add_variable = { name = "initialMolFrac", ncomponents=1,')
initialMolFrac = { { kind="combined", spatial=luaFunc}
{ kind="combined", spatial=luaFunc2}}
}


In tracking,

 variable = {{"kinematicpressure_phy", 1, dep = { "initialMolFrac"}}}


The interface has to comply to the abstract interface tem_varSys_proc_element.

### 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
type(mus_varSys_data_type), private, pointer:: fPtr
integer, private :: iElem
integer, private :: press_pos
integer, private, allocatable:: level(:)