SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
volume_computations.hpp File Reference
#include <expected>
#include <memory>
#include <tuple>
#include <utility>
#include "serif/backend/mfem/operators/volume_stages.hpp"
#include "serif/backend/mfem/operators/volume_inputs.hpp"
#include "serif/utils/dependencies/dependencies.hpp"
Include dependency graph for volume_computations.hpp:
This graph shows which files directly or indirectly include this file:

Namespaces

namespace  serif
 
namespace  serif::operators
 
namespace  serif::operators::backend
 
namespace  serif::operators::backend::mfem
 

Typedefs

template<std::size_t Contribution, typename OperandT, typename Scope = void>
using serif::operators::backend::mfem::VolumeOperandResult
 Values need a mapping node only when the operand's physical representation depends on geometry.
 
template<typename CacheT, typename Scope = void>
using serif::operators::backend::mfem::VolumeEquationOf = typename std::remove_cvref_t<decltype(std::declval<const CacheT&>().template get<typename volume_keys::Scoped<Scope>::Linearization>())>::Equation
 Recover the equation type from a cache's accepted result type, without accessing a result.
 

Functions

template<std::size_t Contribution, typename OperandT, VolumeEquation EquationT, typename SchemaT, typename Scope = void>
auto serif::operators::backend::mfem::make_operand_computations (const std::shared_ptr< VolumeScratch > &scratch)
 Declare one coefficient contraction, followed by a physical mapping when the space requires it.
 
template<std::size_t Index, typename Scope, VolumeEquation EquationT, typename SchemaT, typename ContributionT, typename... Operands>
auto serif::operators::backend::mfem::make_contribution_computations (const std::shared_ptr< const VolumeConfiguration< EquationT, SchemaT > > &configuration, const std::shared_ptr< VolumeScratch > &scratch, ContributionBinding< ContributionT > contribution, utils::types::TypeList< Operands... >)
 Build one contribution's branch in the same order as its numerical description.
 
template<typename Scope = void, VolumeEquation EquationT, typename SchemaT, std::size_t... Indices>
auto serif::operators::backend::mfem::connect_volume_contributions (const std::shared_ptr< const VolumeConfiguration< EquationT, SchemaT > > &configuration, std::index_sequence< Indices... >)
 Expose contribution computations so deformation and equations can share one dependency graph.
 
template<VolumeEquation EquationT, std::size_t Index, typename Scope = void, typename CacheT>
void serif::operators::backend::mfem::report_contribution_preparation (const CacheT &cache, NumericalWork &report)
 Convert the dependency engine's node statuses to numerical work counts for one contribution.
 
template<typename Scope = void, VolumeEquation EquationT, typename SchemaT>
auto serif::operators::backend::mfem::make_volume_equation_computations (std::shared_ptr< const EquationT > equation, const VolumeDiscretization< typename EquationT::Test, SchemaT > &discretization, VolumeOptions options={})
 Declare reusable volume computations without selecting their source of displacement.
 
template<typename Scope = void, VolumeEquation EquationT, typename SchemaT>
auto serif::operators::backend::mfem::make_volume_equation_computations (EquationT equation, const VolumeDiscretization< typename EquationT::Test, SchemaT > &discretization, VolumeOptions options={})
 Own standalone equations while allowing complete models to share their existing immutable members.
 
template<typename Scope = void, VolumeEquation EquationT, typename SchemaT, typename InputsT>
auto serif::operators::backend::mfem::make_volume_equation_cache (EquationT equation, const VolumeDiscretization< typename EquationT::Test, SchemaT > &discretization, const InputsT &inputs, VolumeOptions options={})
 Construct a standalone cache from the same computations used by a coupled deformation graph.
 
template<typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT>
std::expected< void, PreparationRejection > serif::operators::backend::mfem::try_prepare_volume (CacheT &cache, const DiscretizationT &discretization, const CoefficientsT &term_coefficients, const ::mfem::Vector &displacement_coefficients, PreparationMode mode=PreparationMode::reuse_unchanged)
 Validate current inputs and atomically publish a complete volume linearization.
 
template<typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT>
void serif::operators::backend::mfem::prepare_volume (CacheT &cache, const DiscretizationT &discretization, const CoefficientsT &term_coefficients, const ::mfem::Vector &displacement_coefficients, PreparationMode mode=PreparationMode::reuse_unchanged)
 Throw a caller-visible numerical error when a complete preparation cannot be accepted.
 
template<typename Scope = void, typename CacheT>
NumericalWork serif::operators::backend::mfem::volume_work_report (const CacheT &cache)
 Derive work counts from accepted node statuses; no second report lifecycle is stored.