SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
volume_application.hpp File Reference
#include <algorithm>
#include <array>
#include <functional>
#include <span>
#include <tuple>
#include <vector>
#include "serif/backend/mfem/operators/volume_inputs.hpp"
#include "serif/backend/mfem/operators/element_evaluation.hpp"
#include "serif/backend/mfem/operators/element_transpose.hpp"
#include "serif/backend/mfem/shared/parallel.hpp"
Include dependency graph for volume_application.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
 

Functions

template<VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::validate_volume_data (const VolumeData< EquationT, SchemaT > &data)
 Reject changes to discretization objects borrowed by an accepted linearization.
 
template<VolumeEquation EquationT, typename SchemaT, typename VisitT>
void serif::operators::backend::mfem::for_each_volume_element (const VolumeData< EquationT, SchemaT > &data, VisitT &&visit)
 Visit each contribution's own batch in equation order, without scanning other contributions.
 
template<VolumeEquation EquationT, typename SchemaT, typename VisitT>
void serif::operators::backend::mfem::for_each_volume_linearization (const VolumeData< EquationT, SchemaT > &data, VisitT &&visit)
 Visit equation data together with its graph-owned local geometry derivative matrix.
 
template<VolumeEquation EquationT, typename SchemaT>
int serif::operators::backend::mfem::volume_height (const VolumeData< EquationT, SchemaT > &data)
 Return the supported residual size.
 
template<VolumeEquation EquationT, typename SchemaT>
int serif::operators::backend::mfem::volume_width (const VolumeData< EquationT, SchemaT > &data)
 Packed directions contain unique coefficient terms followed by displacement.
 
template<VolumeEquation EquationT, typename SchemaT>
std::size_t serif::operators::backend::mfem::tensor_element_count (const VolumeData< EquationT, SchemaT > &data)
 Count contribution-elements using tensor contractions for any sampled basis.
 
template<VolumeEquation EquationT, typename SchemaT>
int serif::operators::backend::mfem::integration_order (const VolumeData< EquationT, SchemaT > &data, int element)
 Return the largest contribution quadrature order on a supported mesh element.
 
template<VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::volume_residual (const VolumeData< EquationT, SchemaT > &data, ::mfem::Vector &result)
 Copy the residual already assembled and checked when this result was accepted.
 
template<std::size_t Count>
std::array< discretization::backend::mfem::DofMap::Elements, Count > serif::operators::backend::mfem::column_elements (const std::array< const discretization::backend::mfem::DofMap *, Count > &columns)
 Validate coefficient bindings once before a complete element traversal.
 
template<bool Fields = true, bool Geometry = true, VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::apply_volume_direction (const VolumeData< EquationT, SchemaT > &data, const std::array< const ::mfem::Vector *, EquationPlan< EquationT >::column_count > &directions, const ::mfem::Vector &displacement_direction, Workspace &workspace, ::mfem::Vector &result)
 Apply only the requested directions and assemble their supported residual contribution.
 
template<VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::apply_volume_displacements (const VolumeData< EquationT, SchemaT > &data, std::span< const ::mfem::Vector *const > displacement_directions, std::span<::mfem::Vector *const > results)
 apply_volume_direction<false, true> for several displacement directions in one traversal.
 
template<VolumeEquation EquationT, typename SchemaT, typename CoefficientsT>
void serif::operators::backend::mfem::apply_jacobian (const VolumeData< EquationT, SchemaT > &data, const CoefficientsT &direction, const ::mfem::Vector &displacement_direction, Workspace &workspace, ::mfem::Vector &result)
 Apply a direction whose terms explicitly name the accepted coefficient bindings.
 
template<VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::apply_jacobian (const VolumeData< EquationT, SchemaT > &data, const ::mfem::Vector &direction, Workspace &workspace, ::mfem::Vector &result)
 Unpack unique coefficient terms and displacement, then use the same numerical action.
 
template<VolumeEquation EquationT, typename SchemaT>
void serif::operators::backend::mfem::apply_jacobian_transpose (const VolumeData< EquationT, SchemaT > &data, const ::mfem::Vector &residual_dual, Workspace &workspace, ::mfem::Vector &result)
 Assemble the full coordinate transpose in the same packed order as the forward action.