SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
volume_stages.hpp File Reference
#include <atomic>
#include <cmath>
#include <exception>
#include <expected>
#include <memory>
#include <optional>
#include <utility>
#include <vector>
#include "serif/operators/contributions.hpp"
#include "serif/backend/mfem/operators/element_preparation.hpp"
#include "serif/backend/mfem/operators/element_evaluation.hpp"
#include "serif/backend/mfem/operators/geometry_derivatives.hpp"
#include "serif/backend/mfem/operators/preparation.hpp"
#include "serif/backend/mfem/operators/volume_data.hpp"
#include "serif/backend/mfem/shared/parallel.hpp"
#include "serif/utils/error/errors.hpp"
#include "serif/utils/types/strings.hpp"
Include dependency graph for volume_stages.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
 
namespace  serif::operators::backend::mfem::detail
 

Typedefs

template<typename OperandT>
using serif::operators::backend::mfem::SamplesFor = OperandSamples
 Associate an operand type pack with equally ordered sample arguments.
 

Functions

template<typename ElementT, typename MakeT>
std::expected< ElementBatch< ElementT >, PreparationRejection > serif::operators::backend::mfem::detail::build_element_batch (const int count, Workspace &workspace, MakeT &&make)
 Build one immutable batch entry per index, concurrently, with one Workspace per worker.
 
template<VolumeEquation EquationT, typename SchemaT, typename ContributionT>
std::expected< ElementBatch< ElementBasis< EquationPlan< EquationT >::operand_count > >, PreparationRejection > serif::operators::backend::mfem::sample_contribution_basis (const VolumeConfiguration< EquationT, SchemaT > &configuration, const ContributionBinding< ContributionT > &contribution, const BasisBindings< EquationPlan< EquationT >::column_count > &bindings, TensorBasisCache &cache)
 Sample the reference discretization once for each supported element of this contribution.
 
template<VolumeEquation EquationT, typename OperandT, typename BindingT>
OperandSamples serif::operators::backend::mfem::sample_contribution_operand (const ElementBatch< ElementBasis< EquationPlan< EquationT >::operand_count > > &basis, const CoefficientView< BindingT > &input, Workspace &workspace)
 Only this operand's coefficients and reference basis determine its reference samples.
 
template<VolumeEquation EquationT, typename SchemaT, typename ContributionT>
std::expected< ElementBatch< ElementGeometry< EquationPlan< EquationT >::operand_count > >, PreparationRejection > serif::operators::backend::mfem::map_contribution_geometry (const VolumeConfiguration< EquationT, SchemaT > &configuration, const ElementBatch< ElementBasis< EquationPlan< EquationT >::operand_count > > &basis, const CoefficientView< typename VolumeConfiguration< EquationT, SchemaT >::DisplacementBinding > &displacement, const MappingCoefficients &compactification, Workspace &workspace)
 Freeze mapping data and mapped bases independently of the equation's coefficient inputs.
 
template<typename OperandT, std::size_t OperandCount>
OperandSamples serif::operators::backend::mfem::map_contribution_operand (const OperandSamples &samples, const ElementBatch< ElementGeometry< OperandCount > > &geometry, Workspace &workspace)
 Map only operands whose physical representation depends on deformation.
 
template<VolumeEquation Equation, typename Schema, typename Contribution>
std::expected< ElementBatch<::mfem::DenseMatrix >, PreparationRejection > serif::operators::backend::mfem::differentiate_contribution_geometry (const VolumeConfiguration< Equation, Schema > &configuration, const ContributionData< EquationPlan< Equation >::operand_count > &contribution, Workspace &workspace)
 Compute local displacement derivatives as an immutable graph result for this contribution.
 
template<VolumeEquation EquationT, typename ContributionT, typename... Operands>
std::expected< ContributionData< EquationPlan< EquationT >::operand_count >, PreparationRejection > serif::operators::backend::mfem::evaluate_contribution_equation (const ContributionBinding< ContributionT > &contribution, const ElementBatch< ElementBasis< EquationPlan< EquationT >::operand_count > > &basis, const ElementBatch< ElementGeometry< EquationPlan< EquationT >::operand_count > > &geometry, Workspace &workspace, const SamplesFor< Operands > &... samples)
 Evaluate one equation contribution; its basis, mapping and individual operand samples are already prepared.
 
template<VolumeEquation EquationT, typename SchemaT, typename... Contributions>
std::expected< VolumeData< EquationT, SchemaT >, PreparationRejection > serif::operators::backend::mfem::collect_volume_results (const std::shared_ptr< const VolumeConfiguration< EquationT, SchemaT > > &configuration, const BasisBindings< EquationPlan< EquationT >::column_count > &bindings, Workspace &workspace, const Contributions &... contributions)
 Collect the results of all contributions into a single VolumeData. This contains the residuals due to each contribution for all degrees of freedom as well as data needed for subsequent jacobian calculations.