feat(solver/normalization): Added normalization system
The dynamical range of different fields SERiF must solve for is massive. This just breaks any reasonable preconditioner / spreads the eigen modes of the system matrix out. This is a normalization system which uses charectaristic scale factors (e.g. the approximate radius estimated using the lane-emden equation) to rescale different fields to a more similar numeric scale. This turns out to be essential for stable convergence. Broadly this implements Riesz normalization along with exact diagnoal normalization.
This commit is contained in:
14
src/include/serif/solver/normalization/layout.hpp
Normal file
14
src/include/serif/solver/normalization/layout.hpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "serif/discretization/blocks/system_layout.hpp"
|
||||
|
||||
namespace serif::solver::normalization
|
||||
{
|
||||
/** @brief Compatibility spelling for the shared discretization layout. */
|
||||
template <utils::dependencies::IsKeyList Values, utils::dependencies::IsKeyList Residuals>
|
||||
using CoordinateLayout = discretization::blocks::SystemLayout<Values, Residuals>;
|
||||
|
||||
/** @brief Normalization consumes the same coordinate representation as physical operators and solvers. */
|
||||
template <typename Candidate>
|
||||
concept CoordinateLayoutType = discretization::blocks::SystemLayoutType<Candidate>;
|
||||
}
|
||||
Reference in New Issue
Block a user