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.
15 lines
609 B
C++
15 lines
609 B
C++
#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>;
|
|
}
|