Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ > Class Template Reference#
|
DiFfRG
Discretization Framework for functional Renormalization Group flows
|
#include <KurganovTadmor.hh>
Classes | |
| struct | AssemblyFaceGeometryProvider |
| struct | CellTopologyCacheEntry |
| struct | FaceJacobianDependencyCacheEntry |
| struct | FaceReconstructionDescriptor |
| struct | ReadoutSolution |
Public Member Functions | |
| Assembler (Discretization &discretization, Model &model, const ConfigTree &config) | |
| virtual void | reinit_vector (VectorType &vec) const override |
| virtual void | reinit_matrix (SparseMatrixType &matrix) const override |
| virtual MPI_Comm | get_communicator () const override |
| The communicator this assembler's linear algebra lives on. | |
| virtual void | reinit_solution_view (SolutionView< VectorType > &view) const override |
| virtual IndexSet | get_differential_indices () const override |
| Obtain the dofs which contain time derivatives. | |
| virtual void | attach_data_output (OutputFrame< dim, VectorType > &data_out, const VectorType &solution, const VectorType &variables, const VectorType &dt_solution=VectorType(), const VectorType &residual=VectorType()) override |
| virtual void | reinit () override |
| Reinitialize the assembler. This is necessary if the mesh has changed, e.g. after a mesh refinement. | |
| virtual void | set_time (double t) override |
| Set the current time. The assembler should usually just forward this to the numerical model. | |
| virtual const get_type::SparsityPattern< SparseMatrixType > & | get_sparsity_pattern_jacobian () const override |
| Obtain the sparsity pattern of the jacobian matrix. | |
| virtual const SparseMatrixType & | get_mass_matrix () const override |
| Obtain the mass matrix. | |
| virtual void | residual_variables (VectorType &residual, const VectorType &variables, const VectorType &spatial_solution) override |
| virtual void | jacobian_variables (FullMatrix< NumberType > &jacobian, const VectorType &variables, const VectorType &) override |
| void | readouts (OutputFrame< dim, VectorType > &data_out, const VectorType &solution_global, const VectorType &variables) const |
| std::pair< Point, Iterator > | resolve_extractor_point (const Point &EoM_point, const Iterator &EoM_cell_, const VectorType &solution_global) const |
| Where the model wants its extractors evaluated, and the cell holding that point. | |
| ReadoutSolution | reconstruct_readout_solution (const Iterator &cell, const VectorType &solution_global, const Point &x, bool with_hessians=false) const |
| auto | extractor_raw_potential (const VectorType &solution_global) const |
| Evaluate the model's extractors at the EoM point. | |
| void | extract (std::array< NumberType, Components::count_extractors()> &data, const VectorType &solution_global, const VectorType &variables, bool search_EoM, bool set_EoM, bool postprocess) const |
| virtual void | mass (VectorType &mass, const VectorType &solution_global, const VectorType &solution_global_dot, NumberType weight) override |
| auto | make_assembly_context_view (const SolutionReconstructionCache &cache) const |
| auto | make_assembly_context_view (SolutionReconstructionCache &&cache) const =delete |
| template<HasAssemblyContextView Context> | |
| void | run_fv_kt_pre_assembly_hook (const AssemblyStage stage, const Context &context) |
| void | fill_cell_data_from_topology (const CellGeometryDofs &topology, const VectorType &solution_global, CellData &data) const |
| template<int boundary_dim, typename BoundaryNumberType > | |
| internal::BoundaryStencilData< boundary_dim, BoundaryNumberType, n_components > | build_boundary_stencil_from_cache_impl (const Iterator &cell, const unsigned int boundary_face_no, const VectorType &solution_global) const |
| template<typename BoundaryNumberType > | |
| internal::BoundaryStencilData< dim, BoundaryNumberType, n_components > | build_boundary_stencil_from_cache (const Iterator &cell, const unsigned int boundary_face_no, const VectorType &solution_global) const |
| template<typename BoundaryNumberType > | |
| internal::BoundaryReconstructionStencilData< dim, BoundaryNumberType, n_components > | build_boundary_reconstruction_stencil_from_cache (const Iterator &cell, const unsigned int boundary_face_no, const VectorType &solution_global) const |
| void | fill_cell_stencil (const Iterator &cell, const VectorType &solution_global, CellStencilData &stencil) const |
| CellStencilDataT< autodiff::Real< 1, NumberType > > | tag_cell_stencil_dofs_from_cache (const Iterator &cell, const CellStencilData &cell_stencil, const VectorType &solution_global, const types::global_dof_index dof_j) const |
| unsigned int | find_neighbor_face (const Iterator &cell, const Iterator &neighbor) const |
| template<def::HasReconstructor ActiveReconstructor> | |
| void | rebuild_solution_reconstruction_cache (const VectorType &solution_global, SolutionReconstructionCache &cache) const |
| void | ensure_solution_reconstruction_cache_shape (SolutionReconstructionCache &cache) const |
| void | initialize_solution_reconstruction_cache_topology (SolutionReconstructionCache &cache) const |
| void | initialize_cell_stencil_topology (const unsigned int cell_index, CellStencilData &stencil) const |
| void | refresh_solution_reconstruction_cache_values (const VectorType &solution_global, SolutionReconstructionCache &cache) const |
| void | refresh_cell_stencil_values (const unsigned int cell_index, const VectorType &solution_global, CellStencilData &stencil) const |
| void | rebuild_face_reconstruction_descriptors () |
| const FaceReconstructionState & | get_cached_face_reconstruction (const SolutionReconstructionCache &cache, const Iterator &cell, const unsigned int face_index) const |
| auto | compute_interior_face_reconstruction_from_cache (const Iterator &cell, const Iterator &ncell, const VectorType &solution_global, const Point &x_q, Scratch &scratch_data) const |
| auto | compute_boundary_face_reconstruction_from_cache (const Iterator &cell, const unsigned int face_no, const VectorType &solution_global, const Point &x_q) const |
| auto | compute_interior_jacobian_face_reconstruction_from_cache (const Iterator &cell, const Iterator &ncell, const VectorType &solution_global, const Point &x_q, Scratch &scratch_data) const |
| auto | compute_boundary_jacobian_face_reconstruction_from_cache (const Iterator &cell, const unsigned int face_no, const VectorType &solution_global, const Point &x_q) const |
| template<typename ExtractorArray > | |
| void | probe_diffusion_flux_conditioning (const SolutionReconstructionCache &reconstruction_cache, const ExtractorArray &extractors, const VectorType &variables) const |
| One-shot conditioning check on the model's diffusion flux. | |
| void | fill_constant_quadrature_values (const Iterator &cell, const VectorType &solution_global, const VectorType &solution_global_dot, Scratch &scratch_data) const |
| virtual void | residual (VectorType &residual, const VectorType &solution_global, NumberType weight, const VectorType &solution_global_dot, NumberType weight_mass, const VectorType &variables=VectorType()) override |
| virtual void | jacobian_mass (SparseMatrixType &jacobian, const VectorType &solution_global, const VectorType &solution_global_dot, NumberType alpha=1., NumberType beta=1.) override |
| virtual void | jacobian (SparseMatrixType &jacobian, const VectorType &solution_global, NumberType weight, const VectorType &solution_global_dot, NumberType alpha, NumberType beta, const VectorType &variables=VectorType()) override |
| virtual void | refinement_indicator (Vector< double > &indicator, const VectorType &solution_global) |
| void | append_reconstruction_neighbor_dofs (std::vector< types::global_dof_index > &from_dofs, const Iterator &root_cell) const |
| void | append_boundary_reconstruction_dofs (std::vector< types::global_dof_index > &from_dofs, const unsigned int cell_index, const unsigned int face_index) const |
| void | build_face_jacobian_dependency_cache (const Iterator &cell, const unsigned int face_index, FaceJacobianDependencyCacheEntry &dependencies) const |
| void | build_source_jacobian_dependency_cache (const Iterator &cell, FaceJacobianDependencyCacheEntry &dependencies) const |
| The dofs the nonlocal part of the source jacobian writes to and reads from. | |
| void | build_sparsity (get_type::SparsityPattern< SparseMatrixType > &sparsity_pattern, const DoFHandler< dim > &to_dofh, const DoFHandler< dim > &from_dofh, const int stencil=2, bool add_extractor_dofs=false) const |
| void | build_cached_jacobian_sparsity (get_type::SparsityPattern< SparseMatrixType > &sparsity_pattern) const |
| void | fill_boundary_topology (internal::BoundaryStencilTopologyData< dim, n_components > &boundary_topology, const Iterator &cell, const unsigned int boundary_face_no, std::vector< types::global_dof_index > &dof_indices) const |
| void | rebuild_cell_topology_cache () |
| const CellTopologyCacheEntry & | get_cell_topology (const Iterator &cell) const |
| SummaryEvent | summary () const override |
| double | average_time_reinit () const |
| uint | num_reinits () const |
| double | average_time_residual_assembly () const |
| uint | num_residuals () const |
| double | average_time_jacobian_assembly () const |
| uint | num_jacobians () const |
Public Member Functions inherited from DiFfRG::AbstractAssembler< Discretization_::VectorType, Discretization_::SparseMatrixType, Discretization_::dim > | |
| virtual void | attach_data_output (OutputFrame< dim, VectorType > &data_out, const VectorType &solution, const VectorType &variables=VectorType(), const VectorType &dt_solution=VectorType(), const VectorType &residual=VectorType())=0 |
| Contribute the assembler's fields and model readouts to one scoped output frame. | |
| virtual void | attach_data_output (DataOutput< dim, VectorType > &, const VectorType &, const VectorType &=VectorType(), const VectorType &=VectorType(), const VectorType &=VectorType())=delete |
| virtual void | reinit_vector (VectorType &vector) const=0 |
| Reinitialize an arbitrary vector so that it has the correct size and structure. | |
| virtual void | reinit_matrix (SparseMatrixType &matrix) const=0 |
| Reinitialize a matrix to the jacobian's sparsity pattern. | |
| virtual void | reinit_solution_view (SolutionView< VectorType > &view) const=0 |
| Establish the layout of a fully-replicated read-only view of the solution. | |
| virtual void | residual_variables (VectorType &residual, const VectorType &variables, const VectorType &spatial_solution) |
| When coupling the spatial discretization to additional variables, this function should calculate the residual for the additional variables. | |
| virtual void | jacobian_variables (FullMatrix< NumberType > &jacobian, const VectorType &variables, const VectorType &spatial_solution) |
| When coupling the spatial discretization to additional variables, this function should calculate the jacobian for the additional variables. | |
| void | mass (VectorType &mass, const VectorType &solution_global, NumberType weight) |
| Calculates the mass \(m_i(u)\) for an ODE. | |
| virtual void | mass (VectorType &mass, const VectorType &solution_global, const VectorType &solution_global_dot, NumberType weight)=0 |
| Calculates the mass \(m(u, \partial_t u)\) for a DAE. | |
| void | residual (VectorType &residual, const VectorType &solution_global, NumberType weight, NumberType weight_mass, const VectorType &variables=VectorType()) |
| Calculates the residual for an ODE. | |
| virtual void | residual (VectorType &residual, const VectorType &solution_global, NumberType weight, const VectorType &solution_global_dot, NumberType weight_mass, const VectorType &variables=VectorType())=0 |
| Calculates the residual for a DAE. | |
| void | jacobian_mass (SparseMatrixType &jacobian, const VectorType &solution_global, NumberType mass_weight=1.) |
| Calculates the jacobian of the mass function for an ODE. | |
| virtual void | jacobian_mass (SparseMatrixType &jacobian, const VectorType &solution_global, const VectorType &solution_global_dot, NumberType alpha=1., NumberType beta=1.)=0 |
| Calculates the jacobian of the mass function for a DAE. | |
| void | jacobian (SparseMatrixType &jacobian, const VectorType &solution_global, NumberType weight, NumberType mass_weight, const VectorType &variables=VectorType()) |
| Calculates the jacobian of the residual function for an ODE. | |
| virtual void | jacobian (SparseMatrixType &jacobian, const VectorType &solution_global, NumberType weight, const VectorType &solution_global_dot, NumberType alpha, NumberType beta, const VectorType &variables=VectorType())=0 |
| Calculates the jacobian of the residual function for a DAE. | |
Static Public Member Functions | |
| static void | fill_cell_data (const Iterator &cell, const VectorType &solution_global, std::vector< types::global_dof_index > &scratch_dof_indices, CellData &data) |
| static bool | is_physical_boundary_face (const Iterator &cell, const unsigned int face_index) |
| static Iterator | face_neighbor (const Iterator &cell, const unsigned int face_index) |
| static void | fill_cell_stencil (const Iterator &cell, const VectorType &solution_global, const Model &model, std::vector< types::global_dof_index > &scratch_dof_indices, CellStencilData &stencil) |
| template<typename BoundaryNumberType > requires (dim == 1) | |
| static internal::BoundaryStencilData< dim, BoundaryNumberType, n_components > | build_boundary_stencil (const Iterator &cell, const unsigned int boundary_face_no, const VectorType &solution_global, std::vector< types::global_dof_index > &scratch_dof_indices) |
| template<def::HasReconstructor ActiveReconstructor> | |
| static GradientType | source_gradient (const CellStencilData &stencil, const Point &x_q) |
| The "fe_derivatives" slot of fv_tie(), i.e. the gradient model.source() sees at x_q. | |
| static std::array< internal::GradientType< dim, NumberType, n_components >, n_faces > | compute_neighbor_gradients (const Iterator &cell, const VectorType &solution_global, const Model &model, std::vector< types::global_dof_index > &scratch_dof_indices, CellStencilData &temporary_stencil) |
| static Tensor< 1, dim > | face_normal_from_cell (const Iterator &cell, const unsigned int face_no) |
| static double | face_jxw (const Iterator &cell, const unsigned int face_no) |
| template<typename DoFContainer > | |
| static void | append_dofs (std::vector< types::global_dof_index > &target, const DoFContainer &source) |
| template<typename DoFContainer > | |
| static void | append_valid_dofs (std::vector< types::global_dof_index > &target, const DoFContainer &source) |
| static void | sort_unique_dofs (std::vector< types::global_dof_index > &dofs) |
Static Public Attributes | |
| static constexpr uint | dim = Discretization::dim |
| static constexpr uint | n_components = Components::count_fe_functions(0) |
| static constexpr uint | n_faces = GeometryInfo<dim>::faces_per_cell |
Protected Member Functions | |
| template<typename... T> | |
| auto | fv_tie (T &&...t) |
| The named tuple handed to model.source(), the FV counterpart of CG's fe_tie(). | |
| AssemblySchedule | schedule_for (const double cost_ns) const |
| void | update_assembly_schedules () |
Static Protected Member Functions | |
| template<typename... T> | |
| static constexpr auto | v_tie (T &&...t) |
| template<typename... T> | |
| static constexpr auto | e_tie (T &&...t) |
Static Protected Attributes | |
| static constexpr int | nothing = 0 |
| static constexpr double | flux_conditioning_warn_threshold = 1e-9 |
| static constexpr unsigned int | flux_conditioning_max_samples = 512 |
Member Typedef Documentation
◆ CellData
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::CellData = internal::CellData<dim, NumberType, n_components> |
◆ CellGeometryDofs
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::CellGeometryDofs = internal::CellGeometryDofs<dim, n_components> |
◆ CellStencilData
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::CellStencilData = internal::CellStencilData<dim, NumberType, n_components> |
◆ CellStencilDataT
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::CellStencilDataT = internal::CellStencilData<dim, NT, n_components> |
◆ CellStencilTopologyData
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::CellStencilTopologyData = internal::CellStencilTopologyData<dim, n_components> |
◆ Components
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Components = typename Discretization::Components |
◆ Discretization
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Discretization = Discretization_ |
◆ FaceReconstructionState
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::FaceReconstructionState = internal::FaceReconstructionState<dim, NumberType, n_components> |
◆ GradientType
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::GradientType = internal::GradientType<dim, NumberType, n_components> |
◆ Iterator
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Iterator = typename DoFHandler<Discretization::dim>::active_cell_iterator |
◆ JacobianReconstructor
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::JacobianReconstructor = JacobianReconstructor_ |
◆ Model
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Model = Model_ |
◆ NeighborData
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::NeighborData = internal::NeighborData<dim, NumberType, n_components> |
◆ NumberType
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::NumberType = typename Discretization::NumberType |
◆ Point
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Point = dealii::Point<dim> |
◆ Reconstructor
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Reconstructor = Reconstructor_ |
◆ Scratch
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::Scratch = internal::ScratchData<dim, NumberType, n_components> |
◆ SolutionReconstructionCache
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::SolutionReconstructionCache = internal::SolutionReconstructionCache<dim, NumberType, n_components> |
◆ SparseMatrixType
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::SparseMatrixType = typename Discretization::SparseMatrixType |
◆ ThirdDerivativeType
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::ThirdDerivativeType = internal::ThirdDerivativeType<dim, NumberType, n_components> |
◆ VectorType
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::VectorType = typename Discretization::VectorType |
◆ WaveSpeedStrategy
| using DiFfRG::FV::KurganovTadmor::Assembler< Discretization_, Model_, Reconstructor_, WaveSpeedStrategy_, JacobianReconstructor_ >::WaveSpeedStrategy = WaveSpeedStrategy_ |
Constructor & Destructor Documentation
◆ Assembler()
|
inline |
Member Function Documentation
◆ append_boundary_reconstruction_dofs()
|
inline |
◆ append_dofs()
|
inlinestatic |
◆ append_reconstruction_neighbor_dofs()
|
inline |
◆ append_valid_dofs()
|
inlinestatic |
◆ attach_data_output()
|
inlineoverridevirtual |
◆ average_time_jacobian_assembly()
|
inline |
◆ average_time_reinit()
|
inline |
◆ average_time_residual_assembly()
|
inline |
◆ build_boundary_reconstruction_stencil_from_cache()
|
inline |
◆ build_boundary_stencil()
requires (dim == 1)
|
inlinestatic |
◆ build_boundary_stencil_from_cache()
|
inline |
◆ build_boundary_stencil_from_cache_impl()
|
inline |
◆ build_cached_jacobian_sparsity()
|
inline |
◆ build_face_jacobian_dependency_cache()
|
inline |
◆ build_source_jacobian_dependency_cache()
|
inline |
The dofs the nonlocal part of the source jacobian writes to and reads from.
Radius 1, tighter than the face dependencies: the gradient handed to model.source() is reconstructed from the cell and its 2*dim face neighbours only. Across a physical boundary face that neighbour is a model ghost, so the boundary stencil's dofs take its place.
◆ build_sparsity()
|
inline |
◆ compute_boundary_face_reconstruction_from_cache()
|
inline |
◆ compute_boundary_jacobian_face_reconstruction_from_cache()
|
inline |
◆ compute_interior_face_reconstruction_from_cache()
|
inline |
◆ compute_interior_jacobian_face_reconstruction_from_cache()
|
inline |
◆ compute_neighbor_gradients()
|
inlinestatic |
◆ e_tie()
|
inlinestaticconstexprprotected |
◆ ensure_solution_reconstruction_cache_shape()
|
inline |
◆ extract()
|
inline |
◆ extractor_raw_potential()
|
inline |
Evaluate the model's extractors at the EoM point.
This is the FV counterpart of DiFfRG::FEMAssembler::extract, and exists for the same reason: it is the only bridge by which a model's FE (field-space) solution reaches its Variables. Models that couple the two – e.g. an effective potential whose flux depends on momentum-dependent dressings which in turn flow with the potential's derivatives at the EoM – cannot be assembled without it.
The reconstruction is the same one readouts() uses: the EoM point is found from the cell-averaged solution, then values and gradients are reconstructed there by the Reconstructor. Hessians are additionally reconstructed here (and ONLY here – see reconstruct_readout_solution): one extra three-point difference at a single point per step is free, whereas doing it per cell in the flux path would be neither cheap nor meaningful.
- Parameters
-
data Output: the extractor values. search_EoM Re-locate the EoM point instead of reusing the cached one. set_EoM Store the located point/cell as the new cache. postprocess Apply the model's EoM_postprocess to the located point.
The raw potential for the extractors, or an inert placeholder if the model does not read it.
Reconstructing it is a direct solve over the whole mesh, and extract() runs on every residual and every jacobian – so a model that never touches the potential slots should say so and skip it.
◆ face_jxw()
|
inlinestatic |
◆ face_neighbor()
|
inlinestatic |
◆ face_normal_from_cell()
|
inlinestatic |
◆ fill_boundary_topology()
|
inline |
◆ fill_cell_data()
|
inlinestatic |
◆ fill_cell_data_from_topology()
|
inline |
◆ fill_cell_stencil() [1/2]
|
inline |
◆ fill_cell_stencil() [2/2]
|
inlinestatic |
◆ fill_constant_quadrature_values()
|
inline |
◆ find_neighbor_face()
|
inline |
◆ fv_tie()
|
inlineprotected |
The named tuple handed to model.source(), the FV counterpart of CG's fe_tie().
"fe_derivatives" is the Reconstructor's gradient at the quadrature point, not an FE derivative – at the default single quadrature point (the cell centre) that is the scheme's own limited slope.
There is deliberately no "fe_hessians" slot: the only curvature the 2*dim stencil can produce is the unlimited quadratic fit of reconstruct_readout_solution(), which is not fit for a per-cell residual path. Omitting the slot makes a model that reads it fail to compile rather than silently receive zeros.
◆ get_cached_face_reconstruction()
|
inline |
◆ get_cell_topology()
|
inline |
◆ get_communicator()
|
inlineoverridevirtual |
The communicator this assembler's linear algebra lives on.
MPI_COMM_SELF for a serial discretization, so callers never branch on the build type.
◆ get_differential_indices()
|
inlineoverridevirtual |
Obtain the dofs which contain time derivatives.
- Returns
- IndexSet The indices of the dofs which contain time derivatives
◆ get_mass_matrix()
|
inlineoverridevirtual |
Obtain the mass matrix.
- Returns
- const SparseMatrixType& The mass matrix
◆ get_sparsity_pattern_jacobian()
|
inlineoverridevirtual |
Obtain the sparsity pattern of the jacobian matrix.
- Returns
- const SparsityPattern<VectorType>& The sparsity pattern of the jacobian matrix
◆ initialize_cell_stencil_topology()
|
inline |
◆ initialize_solution_reconstruction_cache_topology()
|
inline |
◆ is_physical_boundary_face()
|
inlinestatic |
◆ jacobian()
|
inlineoverridevirtual |
◆ jacobian_mass()
|
inlineoverridevirtual |
◆ jacobian_variables()
|
inlineoverridevirtual |
◆ make_assembly_context_view() [1/2]
|
inline |
◆ make_assembly_context_view() [2/2]
|
delete |
◆ mass()
|
inlineoverridevirtual |
◆ num_jacobians()
|
inline |
◆ num_reinits()
|
inline |
◆ num_residuals()
|
inline |
◆ probe_diffusion_flux_conditioning()
|
inline |
One-shot conditioning check on the model's diffusion flux.
The FV residual differences the diffusion flux between a cell's faces. Any part of the flux that does not depend on the gradient therefore cancels analytically — but not in floating point, where it leaves its round-off, |F|·eps, behind. When that gradient-independent baseline dwarfs the gradient-dependent part, the residual loses the corresponding number of digits, and an implicit solver asked for a tight tolerance will grind its step size down trying to resolve pure noise.
This is the standard failure mode for fRG loop integrals at large RG scale: a flux c·k^n·g(k² + ∂u) carries an O(k^(n-1)) baseline, so the relative noise is ~eps·k²/Δ(∂u) and blows up as the UV cutoff grows.
The fix belongs in the model, not here: return the flux with its zero-gradient value already subtracted, F - F|_{∂u = 0}, written in a cancellation-free form. Subtracting a gradient-independent constant leaves the residual unchanged (a constant flux has zero divergence and cancels on the ghost side of boundary faces too).
◆ readouts()
|
inline |
◆ rebuild_cell_topology_cache()
|
inline |
◆ rebuild_face_reconstruction_descriptors()
|
inline |
◆ rebuild_solution_reconstruction_cache()
|
inline |
◆ reconstruct_readout_solution()
|
inline |
◆ refinement_indicator()
|
inlinevirtual |
◆ refresh_cell_stencil_values()
|
inline |
◆ refresh_solution_reconstruction_cache_values()
|
inline |
◆ reinit()
|
inlineoverridevirtual |
Reinitialize the assembler. This is necessary if the mesh has changed, e.g. after a mesh refinement.
◆ reinit_matrix()
|
inlineoverridevirtual |
◆ reinit_solution_view()
|
inlineoverridevirtual |
◆ reinit_vector()
|
inlineoverridevirtual |
◆ residual()
|
inlineoverridevirtual |
◆ residual_variables()
|
inlineoverridevirtual |
◆ resolve_extractor_point()
|
inline |
Where the model wants its extractors evaluated, and the cell holding that point.
- Parameters
-
with_hessians Also fill ReadoutSolution::hessians. Off by default and intended ONLY for the single EoM-point evaluation in extract(): it is a plain unlimited difference, not part of the scheme, and must not be wired into the flux path.
The EoM itself when the model does not define extractor_point – and then this costs nothing, because building the SolutionSample is inside the if constexpr.
Values are read straight off the dofs – with one dof per cell they are the cell averages already – and gradients are recovered by central differences afterwards. Deliberately not the Reconstructor's limited slopes: reconstructing per cell means a stencil fill over the whole mesh on every residual evaluation, which is serial work that dominates the assembly (it cost a factor of four here). The limited slope stays where it belongs, in the flux path. The FE path in make_solution_sample() is no use for either, since DG0 shape functions have zero gradient.
◆ run_fv_kt_pre_assembly_hook()
|
inline |
◆ schedule_for()
|
inlineprotected |
- See also
- FEMAssembler::schedule_for
◆ set_time()
|
inlineoverridevirtual |
Set the current time. The assembler should usually just forward this to the numerical model.
- Parameters
-
t The current time
◆ sort_unique_dofs()
|
inlinestatic |
◆ source_gradient()
|
inlinestatic |
The "fe_derivatives" slot of fv_tie(), i.e. the gradient model.source() sees at x_q.
The same reconstruction the readout path and the face fluxes use. At the default single quadrature point – the cell centre – compute_gradient_at_point falls through to the limiter, so this is the scheme's own limited slope; with overintegration it becomes one-sided towards x_q.
Boundary cells need no special case: the stencil's neighbour slot across a physical boundary face already holds the model's ghost value (see refresh_cell_stencil_values).
◆ summary()
|
inlineoverridevirtual |
Return aggregate assembly statistics for the run summary.
Reimplemented from DiFfRG::AbstractAssembler< Discretization_::VectorType, Discretization_::SparseMatrixType, Discretization_::dim >.
◆ tag_cell_stencil_dofs_from_cache()
|
inline |
◆ update_assembly_schedules()
|
inlineprotected |
◆ v_tie()
|
inlinestaticconstexprprotected |
Member Data Documentation
◆ cell_topology_cache
|
protected |
◆ diagnose_flux_conditioning
|
protected |
◆ dim
|
staticconstexpr |
◆ discretization
|
protected |
◆ dof_handler
|
protected |
◆ domain_diameter
|
protected |
◆ EoM
|
mutableprotected |
◆ EoM_cell
|
mutableprotected |
◆ EoM_config
|
protected |
◆ EoM_minimum_guess
|
mutableprotected |
◆ face_reconstruction_descriptors
|
protected |
◆ fe
|
protected |
◆ flux_conditioning_max_samples
|
staticconstexprprotected |
◆ flux_conditioning_probed
|
mutableprotected |
◆ flux_conditioning_warn_threshold
|
staticconstexprprotected |
◆ jacobian_reconstruction_cache
|
protected |
◆ local_component_of_dof
|
protected |
◆ mapping
|
protected |
◆ mass_matrix
|
protected |
◆ model
|
protected |
◆ n_components
|
staticconstexpr |
◆ n_faces
|
staticconstexpr |
◆ n_owned_cells
|
protected |
- See also
- FEMAssembler::n_owned_cells
◆ nothing
|
staticconstexprprotected |
◆ old_EoM_cell
|
protected |
◆ potential_cache
|
mutableprotected |
Mesh-dependent half of the potential reconstructions, built once and reused; see PotentialSystemCache.
◆ quadrature
|
protected |
◆ quadrature_face
|
protected |
◆ report_port
|
protected |
◆ residual_reconstruction_cache
|
protected |
◆ schedule_overrides
|
protected |
◆ sparsity_pattern_jacobian
|
protected |
◆ sparsity_pattern_mass
|
protected |
◆ timings_jacobian
|
protected |
◆ timings_reinit
|
protected |
◆ timings_residual
|
protected |
◆ triangulation
|
protected |
The documentation for this class was generated from the following file:
- /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/assembler/KurganovTadmor.hh
Generated by
Public Types inherited from