SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
volume_field_block.hpp File Reference
#include <algorithm>
#include <concepts>
#include <functional>
#include <memory>
#include <vector>
#include "serif/backend/mfem/discretization/element_coordinates.hpp"
#include "serif/backend/mfem/operators/linearized_block.hpp"
#include "serif/backend/mfem/operators/volume_application.hpp"
#include "serif/backend/mfem/shared/parallel.hpp"
Include dependency graph for volume_field_block.hpp:
This graph shows which files directly or indirectly include this file:

Classes

class  serif::operators::backend::mfem::detail::VolumeFieldOperator< Field, Equation, Schema >
 Retain accepted data while applying a single field coupling with reusable contraction scratch. More...
 
struct  serif::operators::backend::mfem::detail::VolumeFieldOperator< Field, Equation, Schema >::Scratch
 One worker's element scratch. More...
 
struct  serif::operators::backend::mfem::detail::ProbedElementBlock
 One element's probed block: column c's integrated values for every local row, column-major. More...
 
struct  serif::operators::backend::mfem::detail::ProbeScratch
 Per-worker scratch for probing element blocks. More...
 
struct  serif::operators::backend::mfem::detail::CoefficientExpansion
 Weighted reduced coordinates of each local coordinate, as CSR: local i owns [offsets[i], offsets[i+1]). More...
 
struct  serif::operators::backend::mfem::detail::ConstrainedElementBlock
 One element's probed block on constrained bindings: column-major values and both constraint expansions. More...
 

Namespaces

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

Functions

template<typename Field, typename Equation, typename Schema, typename Visit>
void serif::operators::backend::mfem::detail::for_each_field_element (const VolumeData< Equation, Schema > &data, Visit &&visit)
 Ignore a structurally absent field before gathering coefficients or touching contribution bases.
 
template<typename Field, typename Equation, typename Contribution>
void serif::operators::backend::mfem::detail::field_integrand (const ElementData< EquationPlan< Equation >::operand_count > &element, const ::mfem::Vector &direction, ::mfem::Vector &integrand, ::mfem::Vector &samples, BasisWorkspace &workspace)
 Contract only the requested physical field; geometry is frozen in this accepted linearization.
 
template<typename Field, typename Equation>
consteval std::size_t serif::operators::backend::mfem::detail::field_column ()
 Locate a physical field in the equation's unique coefficient columns.
 
std::shared_ptr< const ::mfem::SparseMatrix > serif::operators::backend::mfem::detail::make_csr (const std::vector< std::vector< int > > &row_columns, const std::vector< std::vector< double > > &row_values, const int height, const int width)
 Write MFEM-style CSR rows (already in Finalize() order) into an owning SparseMatrix.
 
std::shared_ptr< const ::mfem::SparseMatrix > serif::operators::backend::mfem::detail::finalize_probed_blocks (const std::vector< ProbedElementBlock > &blocks, const int height, const int width)
 SparseMatrix::Add for every probed entry followed by Finalize(), built without MFEM's linked rows.
 
std::shared_ptr< const ::mfem::SparseMatrix > serif::operators::backend::mfem::detail::finalize_constrained_blocks (const std::vector< ConstrainedElementBlock > &blocks, const int height, const int width)
 The constrained form of finalize_probed_blocks: SparseMatrix::Add(row_index, column_index, row_weight * value * column_weight) for every element, column, local row, row coefficient and column coefficient in that order, followed by Finalize().
 
template<typename Field, VolumeEquation Equation, typename Schema>
std::shared_ptr< const ::mfem::SparseMatrix > serif::operators::backend::mfem::assemble_volume_field (const VolumeData< Equation, Schema > &data)
 Assemble a selected field block from accepted weighted derivatives, never by probing the whole system.
 
template<typename Field, VolumeEquation Equation, typename Schema>
std::vector< double > serif::operators::backend::mfem::volume_field_diagonal (const VolumeData< Equation, Schema > &data)
 Extract exact physical diagonals, retaining constraint cross terms when hanging nodes are present.
 
template<typename Field, VolumeEquation Equation, typename Schema>
LinearizedBlock serif::operators::backend::mfem::volume_field_block (std::shared_ptr< const VolumeData< Equation, Schema > > data)
 Expose efficient physical block operations from an owning accepted dependency result.