Finite Volume Solver
prototype
A framework to build finite volume solvers for the AG Klein at the Freie Universität Berlin.
|
This class applies a base flux nethod on a view of states. More...
#include <FluxMethod.hpp>
Public Types | |
using | Equation = meta::Equation< const BaseMethod & > |
using | Complete = ::fub::Complete< Equation > |
using | Conservative = ::fub::Conservative< Equation > |
using | CompleteArray = ::fub::CompleteArray< Equation > |
using | ConservativeArray = ::fub::ConservativeArray< Equation > |
Public Member Functions | |
FluxMethod ()=default | |
~FluxMethod ()=default | |
FluxMethod (const FluxMethod &)=default | |
FluxMethod (FluxMethod &&)=default | |
FluxMethod & | operator= (const FluxMethod &)=default |
FluxMethod & | operator= (FluxMethod &&)=default |
template<typename... Args> | |
FluxMethod (Args &&... args) | |
const BaseMethod & | Base () const noexcept |
Returns the Implementation class which will be used to compute single fluxes. More... | |
BaseMethod & | Base () noexcept |
Returns the Implementation class which will be used to compute single fluxes. More... | |
void | ComputeNumericFluxes (const View< Conservative > &fluxes, const View< const Complete > &states, Duration dt, double dx, Direction dir) |
This function computes numerical fluxes. More... | |
void | ComputeNumericFluxes (execution::SequentialTag, const View< Conservative > &fluxes, const View< const Complete > &states, Duration dt, double dx, Direction dir) |
This function computes numerical fluxes. More... | |
void | ComputeNumericFluxes (execution::SimdTag, const View< Conservative > &fluxes, const View< const Complete > &states, Duration dt, double dx, Direction dir) |
This function computes numerical fluxes. More... | |
void | ComputeNumericFluxes (execution::OpenMpTag, const View< Conservative > &fluxes, const View< const Complete > &states, Duration dt, double dx, Direction dir) |
This function computes numerical fluxes. More... | |
void | ComputeNumericFluxes (execution::OpenMpSimdTag, const View< Conservative > &fluxes, const View< const Complete > &states, Duration dt, double dx, Direction dir) |
This function computes numerical fluxes. More... | |
double | ComputeStableDt (const View< const Complete > &states, double dx, Direction dir) |
This function computes a time step size such that no signal will leave any cell covered by this view. More... | |
double | ComputeStableDt (execution::SequentialTag, const View< const Complete > &states, double dx, Direction dir) |
This function computes a time step size such that no signal will leave any cell covered by this view. More... | |
double | ComputeStableDt (execution::SimdTag, const View< const Complete > &states, double dx, Direction dir) |
This function computes a time step size such that no signal will leave any cell covered by this view. More... | |
double | ComputeStableDt (execution::OpenMpTag, const View< const Complete > &states, double dx, Direction dir) |
This function computes a time step size such that no signal will leave any cell covered by this view. More... | |
double | ComputeStableDt (execution::OpenMpSimdTag, const View< const Complete > &states, double dx, Direction dir) |
This function computes a time step size such that no signal will leave any cell covered by this view. More... | |
Static Public Member Functions | |
static constexpr int | GetStencilWidth () noexcept |
Returns the stencil width of this flux method. More... | |
static constexpr int | GetStencilSize () noexcept |
Returns the number of elements in a stencil of this flux method. More... | |
Public Attributes | |
std::array< Complete, StencilSize > | stencil_ |
Conservative | numeric_flux_ |
std::array< CompleteArray, StencilSize > | stencil_array_ |
ConservativeArray | numeric_flux_array_ |
Static Public Attributes | |
static constexpr int | Rank |
static constexpr std::size_t | StencilSize |
Returns the number of elements in a stencil of this flux method (std::size_t version). More... | |
This class applies a base flux nethod on a view of states.
The base class only needs to define its logic on single states or state arrays instead of on a multi dimensional arrray. By using this class the developer does not need to repeat the logic which might involve iterating through all indices of a patch, loading the states and applying the base method.
There are in total two strategies implemented, a cell-wise and a simdified one. The sequential strategy is easier to debug but less performant. The simd version does use the spatial grid index. This class also assumes that base class does not use the local coordinates.
using fub::FluxMethod< BaseMethod >::Complete = ::fub::Complete<Equation> |
using fub::FluxMethod< BaseMethod >::CompleteArray = ::fub::CompleteArray<Equation> |
using fub::FluxMethod< BaseMethod >::Conservative = ::fub::Conservative<Equation> |
using fub::FluxMethod< BaseMethod >::ConservativeArray = ::fub::ConservativeArray<Equation> |
using fub::FluxMethod< BaseMethod >::Equation = meta::Equation<const BaseMethod&> |
|
default |
|
default |
|
default |
|
default |
fub::FluxMethod< BaseMethod >::FluxMethod | ( | Args &&... | args | ) |
|
noexcept |
Returns the Implementation class which will be used to compute single fluxes.
|
noexcept |
Returns the Implementation class which will be used to compute single fluxes.
void fub::FluxMethod< BaseMethod >::ComputeNumericFluxes | ( | const View< Conservative > & | fluxes, |
const View< const Complete > & | states, | ||
Duration | dt, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes numerical fluxes.
[out] | fluxes | The destination view where numeric fluxes will be stored at. |
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dt | The time step size which will be used to compute the numerical flux. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
void fub::FluxMethod< BaseMethod >::ComputeNumericFluxes | ( | execution::OpenMpSimdTag | , |
const View< Conservative > & | fluxes, | ||
const View< const Complete > & | states, | ||
Duration | dt, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes numerical fluxes.
[out] | fluxes | The destination view where numeric fluxes will be stored at. |
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dt | The time step size which will be used to compute the numerical flux. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
void fub::FluxMethod< BaseMethod >::ComputeNumericFluxes | ( | execution::OpenMpTag | , |
const View< Conservative > & | fluxes, | ||
const View< const Complete > & | states, | ||
Duration | dt, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes numerical fluxes.
[out] | fluxes | The destination view where numeric fluxes will be stored at. |
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dt | The time step size which will be used to compute the numerical flux. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
void fub::FluxMethod< BaseMethod >::ComputeNumericFluxes | ( | execution::SequentialTag | , |
const View< Conservative > & | fluxes, | ||
const View< const Complete > & | states, | ||
Duration | dt, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes numerical fluxes.
[out] | fluxes | The destination view where numeric fluxes will be stored at. |
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dt | The time step size which will be used to compute the numerical flux. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
void fub::FluxMethod< BaseMethod >::ComputeNumericFluxes | ( | execution::SimdTag | , |
const View< Conservative > & | fluxes, | ||
const View< const Complete > & | states, | ||
Duration | dt, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes numerical fluxes.
[out] | fluxes | The destination view where numeric fluxes will be stored at. |
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dt | The time step size which will be used to compute the numerical flux. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
double fub::FluxMethod< BaseMethod >::ComputeStableDt | ( | const View< const Complete > & | states, |
double | dx, | ||
Direction | dir | ||
) |
This function computes a time step size such that no signal will leave any cell covered by this view.
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
double fub::FluxMethod< BaseMethod >::ComputeStableDt | ( | execution::OpenMpSimdTag | , |
const View< const Complete > & | states, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes a time step size such that no signal will leave any cell covered by this view.
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
double fub::FluxMethod< BaseMethod >::ComputeStableDt | ( | execution::OpenMpTag | , |
const View< const Complete > & | states, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes a time step size such that no signal will leave any cell covered by this view.
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
double fub::FluxMethod< BaseMethod >::ComputeStableDt | ( | execution::SequentialTag | , |
const View< const Complete > & | states, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes a time step size such that no signal will leave any cell covered by this view.
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
double fub::FluxMethod< BaseMethod >::ComputeStableDt | ( | execution::SimdTag | , |
const View< const Complete > & | states, | ||
double | dx, | ||
Direction | dir | ||
) |
This function computes a time step size such that no signal will leave any cell covered by this view.
[in] | states | A view over cell states which will be used to fill the stencil for this method. |
[in] | dir | The direction parameter specifies which directional flux method to use. |
[in] | dx | The cell width size which will be used to compute the numerical flux. |
|
staticconstexprnoexcept |
Returns the number of elements in a stencil of this flux method.
|
staticconstexprnoexcept |
Returns the stencil width of this flux method.
|
default |
|
default |
Conservative fub::FluxMethod< BaseMethod >::numeric_flux_ |
ConservativeArray fub::FluxMethod< BaseMethod >::numeric_flux_array_ |
|
staticconstexpr |
std::array<Complete, StencilSize> fub::FluxMethod< BaseMethod >::stencil_ |
std::array<CompleteArray, StencilSize> fub::FluxMethod< BaseMethod >::stencil_array_ |
|
staticconstexpr |
Returns the number of elements in a stencil of this flux method (std::size_t version).