Alsvinn  0.5.3
The fast FVM simulator with UQ support
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
alsfvm::equation::euler::Euler< nsd > Class Template Reference

#include <alsfvm/equation/euler/Euler.hpp>

Public Types

typedef Types< nsd >::rvec vec
 
typedef Types< nsd+2 >::rvec state_vector
 
typedef Types< nsd+2 >::matrix state_matrix
 
typedef euler::EulerParameters Parameters
 
typedef euler::ConservedVariables< nsd > ConservedVariables
 
typedef euler::ExtraVariables< nsd > ExtraVariables
 
typedef euler::PrimitiveVariables< nsd > PrimitiveVariables
 
typedef euler::AllVariables< nsd > AllVariables
 
typedef euler::TecnoVariables< nsd > TecnoVariables
 
typedef equation::euler::Views< volume::Volume, memory::View< real >, nsd > Views
 
typedef equation::euler::Views< const volume::Volume, const memory::View< const real >, nsd > ConstViews
 
typedef equation::euler::ViewsExtra< volume::Volume, memory::View< real >, nsd > ViewsExtra
 
typedef equation::euler::ViewsExtra< const volume::Volume, const memory::View< const real >, nsd > ConstViewsExtra
 

Public Member Functions

 Euler (const EulerParameters &parameters)
 
__device__ __host__ AllVariables fetchAllVariables (ConstViews &views, size_t index) const
 
__device__ __host__ ExtraVariables fetchExtraVariables (ConstViewsExtra &views, size_t index) const
 
__device__ __host__ void setExtraViewAt (ViewsExtra &output, size_t index, const ExtraVariables &input) const
 
__device__ __host__ void addToViewAt (Views &output, size_t index, const ConservedVariables &input) const
 
template<size_t direction>
__device__ __host__ void computePointFlux (const AllVariables &u, ConservedVariables &F) const
 
template<size_t direction>
__device__ __host__ ConservedVariables computePointFlux (const ConservedVariables &u) const
 
__device__ __host__ ExtraVariables computeExtra (const ConservedVariables &u) const
 
__device__ __host__ ExtraVariables computeExtra (const PrimitiveVariables &primitiveVariables) const
 computes the extra variables from the primitive ones More...
 
__device__ __host__ ConservedVariables computeConserved (const PrimitiveVariables &primitiveVariables) const
 computes the extra variables from the primitive ones More...
 
template<int direction>
__device__ __host__ real computeWaveSpeed (const ConservedVariables &u, const ExtraVariables &v) const
 
__device__ __host__ bool obeysConstraints (const ConservedVariables &u, const ExtraVariables &v) const
 
__device__ __host__ AllVariables makeAllVariables (real rho, vec m, real E) const
 
__device__ __host__ real getWeight (const ConstViews &in, size_t index) const
 
__device__ __host__ PrimitiveVariables computePrimitiveVariables (const ConservedVariables &conserved) const
 
__device__ __host__ real getGamma () const
 
__device__ __host__ TecnoVariables computeTecnoVariables (const ConservedVariables &conserved) const
 
__device__ __host__ state_vector computeEntropyVariables (const ConservedVariables &conserved) const
 
__device__ __host__ vec computeEntropyPotential (const ConservedVariables &conserved) const
 
template<int direction>
__device__ __host__ state_vector computeEntropyVariablesMultipliedByEigenVectorMatrix (const ConservedVariables &conserved) const
 
template<int direction>
__device__ __host__ state_matrix computeEigenVectorMatrix (const ConservedVariables &conserved) const
 Computes the Eigen vector matrix. See 3.2.2 for full description in http://www.springer.com/de/book/9783540252023. More...
 
template<int direction>
__device__ __host__ state_vector computeEigenValues (const ConservedVariables &conserved) const
 
template<>
std::string getName ()
 
template<>
std::string getName ()
 
template<>
std::string getName ()
 
template<>
__device__ __host__ matrix5 computeEigenVectorMatrix (const ConservedVariables &conservedConst) const
 
template<>
__device__ __host__ rvec5 computeEigenValues (const ConservedVariables &conservedConst) const
 
template<>
__device__ __host__ matrix4 computeEigenVectorMatrix (const ConservedVariables &conservedConst) const
 
template<>
__device__ __host__ rvec4 computeEigenValues (const ConservedVariables &conservedConst) const
 
template<>
__device__ __host__ matrix3 computeEigenVectorMatrix (const ConservedVariables &conserved) const
 
template<>
__device__ __host__ rvec3 computeEigenValues (const ConservedVariables &conserved) const
 
template<>
const std::vector< std::string > conservedVariables
 
template<>
const std::vector< std::string > primitiveVariables
 
template<>
const std::vector< std::string > extraVariables
 
template<>
const std::vector< std::string > conservedVariables
 
template<>
const std::vector< std::string > primitiveVariables
 
template<>
const std::vector< std::string > extraVariables
 
template<>
const std::vector< std::string > conservedVariables
 
template<>
const std::vector< std::string > primitiveVariables
 
template<>
const std::vector< std::string > extraVariables
 

Static Public Member Functions

static std::string getName ()
 
__device__ static __host__ size_t getNumberOfConservedVariables ()
 
template<class T , class S >
__device__ static __host__ ConservedVariables fetchConservedVariables (euler::Views< T, S, nsd > &views, size_t index)
 
__device__ static __host__ void setViewAt (Views &output, size_t index, const ConservedVariables &input)
 

Static Public Attributes

static const std::vector< std::string > conservedVariables
 
static const std::vector< std::string > primitiveVariables
 
static const std::vector< std::string > extraVariables
 
static const size_t numberOfConservedVariables = 2 + nsd
 

Detailed Description

template<int nsd>
class alsfvm::equation::euler::Euler< nsd >

Implements the euler equations

Parameters
nsdthe number of space dimensions

Member Typedef Documentation

◆ AllVariables

template<int nsd>
typedef euler::AllVariables<nsd> alsfvm::equation::euler::Euler< nsd >::AllVariables

◆ ConservedVariables

◆ ConstViews

template<int nsd>
typedef equation::euler::Views<const volume::Volume, const memory::View<const real>, nsd > alsfvm::equation::euler::Euler< nsd >::ConstViews

◆ ConstViewsExtra

template<int nsd>
typedef equation::euler::ViewsExtra<const volume::Volume, const memory::View<const real>, nsd > alsfvm::equation::euler::Euler< nsd >::ConstViewsExtra

◆ ExtraVariables

◆ Parameters

◆ PrimitiveVariables

◆ state_matrix

template<int nsd>
typedef Types< nsd + 2 >::matrix alsfvm::equation::euler::Euler< nsd >::state_matrix

◆ state_vector

template<int nsd>
typedef Types< nsd + 2 >::rvec alsfvm::equation::euler::Euler< nsd >::state_vector

◆ TecnoVariables

◆ vec

template<int nsd>
typedef Types<nsd>::rvec alsfvm::equation::euler::Euler< nsd >::vec

◆ Views

◆ ViewsExtra

Constructor & Destructor Documentation

◆ Euler()

template<int nsd>
alsfvm::equation::euler::Euler< nsd >::Euler ( const EulerParameters parameters)
inline

Member Function Documentation

◆ addToViewAt()

template<int nsd>
__device__ __host__ void alsfvm::equation::euler::Euler< nsd >::addToViewAt ( Views output,
size_t  index,
const ConservedVariables input 
) const
inline

Adds the conserved variables to the view at the given index

Basically sets output[index] += input

◆ computeConserved()

template<int nsd>
__device__ __host__ ConservedVariables alsfvm::equation::euler::Euler< nsd >::computeConserved ( const PrimitiveVariables primitiveVariables) const
inline

computes the extra variables from the primitive ones

Parameters
primitiveVariablesthe primtive variables
Returns
the computed all variables
Note
This implementation is not made for speed! Should only be used sparsely (eg. for initialization).

◆ computeEigenValues() [1/4]

template<int nsd>
template<int direction>
__device__ __host__ state_vector alsfvm::equation::euler::Euler< nsd >::computeEigenValues ( const ConservedVariables conserved) const

Compute eigen values of the jacobian of $F$, $G$ or $H$. See 3.2.2 for full description in http://www.springer.com/de/book/9783540252023

◆ computeEigenValues() [2/4]

template<>
__device__ __host__ rvec5 alsfvm::equation::euler::Euler< 3 >::computeEigenValues ( const ConservedVariables conservedConst) const

◆ computeEigenValues() [3/4]

template<>
__device__ __host__ rvec4 alsfvm::equation::euler::Euler< 2 >::computeEigenValues ( const ConservedVariables conservedConst) const

◆ computeEigenValues() [4/4]

template<>
__device__ __host__ rvec3 alsfvm::equation::euler::Euler< 1 >::computeEigenValues ( const ConservedVariables conserved) const

◆ computeEigenVectorMatrix() [1/4]

template<int nsd>
template<int direction>
__device__ __host__ state_matrix alsfvm::equation::euler::Euler< nsd >::computeEigenVectorMatrix ( const ConservedVariables conserved) const

Computes the Eigen vector matrix. See 3.2.2 for full description in http://www.springer.com/de/book/9783540252023.

◆ computeEigenVectorMatrix() [2/4]

template<>
__device__ __host__ matrix5 alsfvm::equation::euler::Euler< 3 >::computeEigenVectorMatrix ( const ConservedVariables conservedConst) const

◆ computeEigenVectorMatrix() [3/4]

template<>
__device__ __host__ matrix4 alsfvm::equation::euler::Euler< 2 >::computeEigenVectorMatrix ( const ConservedVariables conservedConst) const

◆ computeEigenVectorMatrix() [4/4]

template<>
__device__ __host__ matrix3 alsfvm::equation::euler::Euler< 1 >::computeEigenVectorMatrix ( const ConservedVariables conserved) const

◆ computeEntropyPotential()

template<int nsd>
__device__ __host__ vec alsfvm::equation::euler::Euler< nsd >::computeEntropyPotential ( const ConservedVariables conserved) const
inline

Computes the entropy potential $\psi(u)$ given by

\[\psi(u) = v(u)f(u) - Q(u)\]

where $Q(u)$ is defined through

\[Q'(u) = f'(u)E'(u)\]

Here

\[\psi(u) = \left(\begin{array}{c}\rho u\\ \rho v\\ \rho w\end{array}\right)=\vec{m}\]

◆ computeEntropyVariables()

template<int nsd>
__device__ __host__ state_vector alsfvm::equation::euler::Euler< nsd >::computeEntropyVariables ( const ConservedVariables conserved) const
inline

Computes the entropy variable $v(u)$ given by

\[v(u) = \partial_u E(u)\]

corresponding to the entropy

\[E(u)=\frac{-\rho s}{\gamma-1}\]

Here $s$ is the thermodynamic entropy, given as

\[s=\log(p)-\gamma \log (\rho)\]

The corresponding entropy variables are given as

\[v(\vec{u})=\left(\begin{array}{c}\frac{\gamma-s}{\gamma-1}-\frac{\rho(u_x^2+u_y^2+u_z^2)}{2p}\\ \rho u/p\\ \rho v/p\\ \rho w/p\\ -\rho/p\end{array}\right)\]

◆ computeEntropyVariablesMultipliedByEigenVectorMatrix()

template<int nsd>
template<int direction>
__device__ __host__ state_vector alsfvm::equation::euler::Euler< nsd >::computeEntropyVariablesMultipliedByEigenVectorMatrix ( const ConservedVariables conserved) const
inline

◆ computeExtra() [1/2]

template<int nsd>
__device__ __host__ ExtraVariables alsfvm::equation::euler::Euler< nsd >::computeExtra ( const ConservedVariables u) const
inline

Computes the extra variables $ p $ and $u$. Here we compute

\[u =\frac{1}{\rho} m\]

and

\[p = (\gamma-1)(E-\frac{1}{2\rho}m^2)\]

◆ computeExtra() [2/2]

template<int nsd>
__device__ __host__ ExtraVariables alsfvm::equation::euler::Euler< nsd >::computeExtra ( const PrimitiveVariables primitiveVariables) const
inline

computes the extra variables from the primitive ones

Parameters
primitiveVariablesthe primtive variables
Returns
the computed all variables
Note
This implementation is not made for speed! Should only be used sparsely (eg. for initialization).

◆ computePointFlux() [1/2]

template<int nsd>
template<size_t direction>
__device__ __host__ void alsfvm::equation::euler::Euler< nsd >::computePointFlux ( const AllVariables u,
ConservedVariables F 
) const
inline

Computes the point flux.

Here we view the Euler equation as the following hyperbolic system

\[\vec{U}_t+F(\vec{U})_x+G(\vec{U})_y+H(\vec{U})_z = 0\]

where

\[\vec{U}=\left(\begin{array}{l}\rho\\ \vec{m}\\E\end{array}\right)=\left(\begin{array}{c}\rho\\ \rho u\\ \rho v\\ \rho w \\E\end{array}\right)\]

and

\[F(\vec{U})=\left(\begin{array}{c}\rho u\\ \rho u^2+p\\ \rho u v\\ \rho u w\\ u(E+p)\end{array}\right)\qquad G(\vec{U})=\left(\begin{array}{c}\rho v\\ \rho uv\\ \rho v^2+p\\ \rho v w\\ v(E+p)\end{array}\right)\qquad H(\vec{U})=\left(\begin{array}{c}\rho w\\ \rho uw\\ \rho w v\\ \rho w^2+p\\ w(E+p)\end{array}\right) \]

Returns

\[\left\{\begin{array}{lr}F(\vec{U})&\mathrm{if}\;\mathrm{direction}=0\\ G(\vec{U})&\mathrm{if}\;\mathrm{direction}=1\\ H(\vec{U})&\mathrm{if}\;\mathrm{direction}=2 \end{array}\right.\]

Parameters
[in]uthe variables to use
[out]Fthe resulting flux

◆ computePointFlux() [2/2]

template<int nsd>
template<size_t direction>
__device__ __host__ ConservedVariables alsfvm::equation::euler::Euler< nsd >::computePointFlux ( const ConservedVariables u) const
inline

Utility function that calls

computePointFlux<direction>(const AllVariables& u, ConservedVariables& F);

◆ computePrimitiveVariables()

template<int nsd>
__device__ __host__ PrimitiveVariables alsfvm::equation::euler::Euler< nsd >::computePrimitiveVariables ( const ConservedVariables conserved) const
inline

◆ computeTecnoVariables()

template<int nsd>
__device__ __host__ TecnoVariables alsfvm::equation::euler::Euler< nsd >::computeTecnoVariables ( const ConservedVariables conserved) const
inline

◆ computeWaveSpeed()

template<int nsd>
template<int direction>
__device__ __host__ real alsfvm::equation::euler::Euler< nsd >::computeWaveSpeed ( const ConservedVariables u,
const ExtraVariables v 
) const
inline

Computes the wave speed in the given direction (absolute value of wave speed)

◆ conservedVariables() [1/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 3 >::conservedVariables ( )

◆ conservedVariables() [2/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 2 >::conservedVariables ( )

◆ conservedVariables() [3/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 1 >::conservedVariables ( )

◆ extraVariables() [1/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 3 >::extraVariables ( )

◆ extraVariables() [2/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 2 >::extraVariables ( )

◆ extraVariables() [3/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 1 >::extraVariables ( )

◆ fetchAllVariables()

template<int nsd>
__device__ __host__ AllVariables alsfvm::equation::euler::Euler< nsd >::fetchAllVariables ( ConstViews views,
size_t  index 
) const
inline

Fetches and computes the all variables from memory

◆ fetchConservedVariables()

template<int nsd>
template<class T , class S >
__device__ static __host__ ConservedVariables alsfvm::equation::euler::Euler< nsd >::fetchConservedVariables ( euler::Views< T, S, nsd > &  views,
size_t  index 
)
inlinestatic

◆ fetchExtraVariables()

template<int nsd>
__device__ __host__ ExtraVariables alsfvm::equation::euler::Euler< nsd >::fetchExtraVariables ( ConstViewsExtra views,
size_t  index 
) const
inline

◆ getGamma()

template<int nsd>
__device__ __host__ real alsfvm::equation::euler::Euler< nsd >::getGamma ( ) const
inline

◆ getName() [1/4]

template<int nsd>
static std::string alsfvm::equation::euler::Euler< nsd >::getName ( )
static

Defaults to "euler<nsd>".

◆ getName() [2/4]

template<>
std::string alsfvm::equation::euler::Euler< 3 >::getName ( )
inline

◆ getName() [3/4]

template<>
std::string alsfvm::equation::euler::Euler< 2 >::getName ( )
inline

◆ getName() [4/4]

template<>
std::string alsfvm::equation::euler::Euler< 1 >::getName ( )
inline

◆ getNumberOfConservedVariables()

template<int nsd>
__device__ static __host__ size_t alsfvm::equation::euler::Euler< nsd >::getNumberOfConservedVariables ( )
inlinestatic

◆ getWeight()

template<int nsd>
__device__ __host__ real alsfvm::equation::euler::Euler< nsd >::getWeight ( const ConstViews in,
size_t  index 
) const
inline

◆ makeAllVariables()

template<int nsd>
__device__ __host__ AllVariables alsfvm::equation::euler::Euler< nsd >::makeAllVariables ( real  rho,
vec  m,
real  E 
) const
inline

◆ obeysConstraints()

template<int nsd>
__device__ __host__ bool alsfvm::equation::euler::Euler< nsd >::obeysConstraints ( const ConservedVariables u,
const ExtraVariables v 
) const
inline

Checks to see if the variables obeys the constraint. In this case it checks that

\[\rho > 0\]

and

\[p\geq 0\]

Returns
true if the inequalities are fulfilled, false otherwise

◆ primitiveVariables() [1/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 3 >::primitiveVariables ( )

◆ primitiveVariables() [2/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 2 >::primitiveVariables ( )

◆ primitiveVariables() [3/3]

template<>
const std::vector< std::string > alsfvm::equation::euler::Euler< 1 >::primitiveVariables ( )

◆ setExtraViewAt()

template<int nsd>
__device__ __host__ void alsfvm::equation::euler::Euler< nsd >::setExtraViewAt ( ViewsExtra output,
size_t  index,
const ExtraVariables input 
) const
inline

Writes the ExtraVariable struct back to memory

◆ setViewAt()

template<int nsd>
__device__ static __host__ void alsfvm::equation::euler::Euler< nsd >::setViewAt ( Views output,
size_t  index,
const ConservedVariables input 
)
inlinestatic

Writes the ConservedVariable struct back to memory

Member Data Documentation

◆ conservedVariables

template<int nsd>
const std::vector<std::string> alsfvm::equation::euler::Euler< nsd >::conservedVariables
static

List of all conserved variables used by Euler (rho, mx, my, mz, E)

◆ extraVariables

template<int nsd>
const std::vector<std::string> alsfvm::equation::euler::Euler< nsd >::extraVariables
static

List of all extra variables used by Euler (p, vx, vy, vz)

◆ numberOfConservedVariables

template<int nsd>
const size_t alsfvm::equation::euler::Euler< nsd >::numberOfConservedVariables = 2 + nsd
static

Gives the number of conserved variables used (2+nsd)

◆ primitiveVariables

template<int nsd>
const std::vector<std::string> alsfvm::equation::euler::Euler< nsd >::primitiveVariables
static

List of all primtive variables used by Euler (rho, vx, vy, vz, p)


The documentation for this class was generated from the following file: