Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
370 lines
20 KiB
XML
370 lines
20 KiB
XML
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
|
|
<compounddef id="namespaceserif_1_1solver_1_1preconditioner" kind="namespace" language="C++">
|
|
<compoundname>serif::solver::preconditioner</compoundname>
|
|
<innerclass refid="structserif_1_1solver_1_1preconditioner_1_1_block_preconditioner" prot="public">serif::solver::preconditioner::BlockPreconditioner</innerclass>
|
|
<innerclass refid="structserif_1_1solver_1_1preconditioner_1_1_bordered_preconditioner" prot="public">serif::solver::preconditioner::BorderedPreconditioner</innerclass>
|
|
<innerclass refid="structserif_1_1solver_1_1preconditioner_1_1_constraint_coordinates" prot="public">serif::solver::preconditioner::ConstraintCoordinates</innerclass>
|
|
<innerclass refid="structserif_1_1solver_1_1preconditioner_1_1_coupled_preconditioner" prot="public">serif::solver::preconditioner::CoupledPreconditioner</innerclass>
|
|
<innerclass refid="structserif_1_1solver_1_1preconditioner_1_1_failure" prot="public">serif::solver::preconditioner::Failure</innerclass>
|
|
<innerclass refid="classserif_1_1solver_1_1preconditioner_1_1_solver" prot="public">serif::solver::preconditioner::Solver</innerclass>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1backend">serif::solver::preconditioner::backend</innernamespace>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1checks">serif::solver::preconditioner::checks</innernamespace>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1computations">serif::solver::preconditioner::computations</innernamespace>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1detail">serif::solver::preconditioner::detail</innernamespace>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1keys">serif::solver::preconditioner::keys</innernamespace>
|
|
<innernamespace refid="namespaceserif_1_1solver_1_1preconditioner_1_1strategies">serif::solver::preconditioner::strategies</innernamespace>
|
|
<sectiondef kind="enum">
|
|
<memberdef kind="enum" id="namespaceserif_1_1solver_1_1preconditioner_1aa7f59af2cd4988b0904ebc5b7b575a53" prot="public" static="no" strong="yes">
|
|
<type></type>
|
|
<name>ApplicationContract</name>
|
|
<qualifiedname>serif::solver::preconditioner::ApplicationContract</qualifiedname>
|
|
<enumvalue id="namespaceserif_1_1solver_1_1preconditioner_1aa7f59af2cd4988b0904ebc5b7b575a53ac69606d8690b52527aaa940e729c420a" prot="public">
|
|
<name>fixed_linear</name>
|
|
<briefdescription>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
</enumvalue>
|
|
<enumvalue id="namespaceserif_1_1solver_1_1preconditioner_1aa7f59af2cd4988b0904ebc5b7b575a53ae04aa5104d082e4a51d241391941ba26" prot="public">
|
|
<name>variable</name>
|
|
<briefdescription>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
</enumvalue>
|
|
<briefdescription>
|
|
<para>Whether repeated applications represent one fixed linear map or a variable inner solve. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/solver/preconditioner/contract.hpp" line="6" column="5" bodyfile="src/include/serif/solver/preconditioner/contract.hpp" bodystart="7" bodyend="10"/>
|
|
</memberdef>
|
|
</sectiondef>
|
|
<sectiondef kind="func">
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1aff3e6544cccc4f31636172fc69a8badc" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Row</type>
|
|
</param>
|
|
<param>
|
|
<type>typename Field</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::physical_block</definition>
|
|
<argsstring>(operators::backend::mfem::LinearizedBlock block)</argsstring>
|
|
<name>physical_block</name>
|
|
<qualifiedname>serif::solver::preconditioner::physical_block</qualifiedname>
|
|
<param>
|
|
<type><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1_linearized_block" kindref="compound">operators::backend::mfem::LinearizedBlock</ref></type>
|
|
<declname>block</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Name a single accepted physical coupling as an ordinary dependency source. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/backend/mfem/solver/preconditioner/computations/physical_blocks.hpp" line="63" column="11" bodyfile="src/include/serif/backend/mfem/solver/preconditioner/computations/physical_blocks.hpp" bodystart="63" bodyend="68"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1a0e6d2e61115ded4891d57330e180266c" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Recipe</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_preconditioner_computations</definition>
|
|
<argsstring>(const Recipe &choice)</argsstring>
|
|
<name>make_preconditioner_computations</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_preconditioner_computations</qualifiedname>
|
|
<param>
|
|
<type>const Recipe &</type>
|
|
<declname>choice</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Declare a recipe's numerical stages for composition into one model dependency graph. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" line="63" column="11" bodyfile="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" bodystart="63" bodyend="66"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1ad39566dd213a1990a61035cbe088c788" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Recipe</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_preconditioner_graph</definition>
|
|
<argsstring>(const Recipe &choice)</argsstring>
|
|
<name>make_preconditioner_graph</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_preconditioner_graph</qualifiedname>
|
|
<param>
|
|
<type>const Recipe &</type>
|
|
<declname>choice</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Construct the complete preconditioner graph in one place, without preparing any numerical data. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
<para><simplesect kind="note"><para>Recipes choose physical branches; computation declarations name all edges. The dependency engine orders execution. </para>
|
|
</simplesect>
|
|
</para>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" line="73" column="11" bodyfile="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" bodystart="73" bodyend="79"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1a7db97879f2bd3f0975895373581923af" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Recipe</type>
|
|
</param>
|
|
<param>
|
|
<type>discretization::blocks::SystemLayoutType</type>
|
|
<declname>Layout</declname>
|
|
<defname>Layout</defname>
|
|
</param>
|
|
<param>
|
|
<type>utils::dependencies::IsComputation...</type>
|
|
<declname>Additional</declname>
|
|
<defname>Additional</defname>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_preconditioner_computations</definition>
|
|
<argsstring>(const Recipe &choice, const Layout &, Additional... additional)</argsstring>
|
|
<name>make_preconditioner_computations</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_preconditioner_computations</qualifiedname>
|
|
<param>
|
|
<type>const Recipe &</type>
|
|
<declname>choice</declname>
|
|
</param>
|
|
<param>
|
|
<type>const Layout &</type>
|
|
</param>
|
|
<param>
|
|
<type>Additional...</type>
|
|
<declname>additional</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Expand a recipe and its coordinate ordering for composition into an existing physical graph. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" line="83" column="11" bodyfile="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" bodystart="83" bodyend="89"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1af2cf1c7829a4ff52fb58d3f28d760fb2" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Recipe</type>
|
|
</param>
|
|
<param>
|
|
<type>discretization::blocks::SystemLayoutType</type>
|
|
<declname>Layout</declname>
|
|
<defname>Layout</defname>
|
|
</param>
|
|
<param>
|
|
<type>utils::dependencies::IsComputation...</type>
|
|
<declname>Additional</declname>
|
|
<defname>Additional</defname>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_preconditioner_graph</definition>
|
|
<argsstring>(const Recipe &choice, const Layout &layout, Additional... additional)</argsstring>
|
|
<name>make_preconditioner_graph</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_preconditioner_graph</qualifiedname>
|
|
<param>
|
|
<type>const Recipe &</type>
|
|
<declname>choice</declname>
|
|
</param>
|
|
<param>
|
|
<type>const Layout &</type>
|
|
<declname>layout</declname>
|
|
</param>
|
|
<param>
|
|
<type>Additional...</type>
|
|
<declname>additional</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Order the inverse in system coordinates, optionally including explicit upstream computations such as reference surface assembly. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
<para><simplesect kind="note"><para>Supply <ref refid="namespaceserif_1_1solver_1_1preconditioner_1_1keys_1a51c4360b9a88a40c2171089db75a643a" kindref="member">keys::Layout</ref> in the preparation context. Additional computations must have unique result keys. </para>
|
|
</simplesect>
|
|
</para>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" line="96" column="11" bodyfile="src/include/serif/backend/mfem/solver/preconditioner/graph.hpp" bodystart="96" bodyend="100"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1aa5c6d8ad540ecaca25de3555918566f3" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>PrimalPreconditionerLayout</type>
|
|
<declname>Layout</declname>
|
|
<defname>Layout</defname>
|
|
</param>
|
|
<param>
|
|
<type>typename PotentialInverse</type>
|
|
<defval>strategies::inverse::FixedAMG</defval>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_primal_preconditioner</definition>
|
|
<argsstring>(const Layout &, PotentialInverse potential_inverse=strategies::inverse::FixedAMG{.cycles=3})</argsstring>
|
|
<name>make_primal_preconditioner</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_primal_preconditioner</qualifiedname>
|
|
<param>
|
|
<type>const Layout &</type>
|
|
</param>
|
|
<param>
|
|
<type>PotentialInverse</type>
|
|
<declname>potential_inverse</declname>
|
|
<defval><ref refid="structserif_1_1solver_1_1preconditioner_1_1strategies_1_1inverse_1_1_fixed_a_m_g" kindref="compound">strategies::inverse::FixedAMG</ref>{.cycles=3}</defval>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Couple scalar density and potential responses, then correct every shape and global constraint together. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
<para>Potential responds first and its force contribution then adjusts density. The existing dense border retains surface-to-field and field-to-surface responses, including the mean radius mode; shape has no separate mass inverse. Density uses its diagonal without regularization because its pressure-force Jacobian includes drift and need not satisfy the positive-diagonal contract of the elliptic AMG strategy used for potential. <simplesect kind="note"><para>The dense border stores one field response per shape/global coordinate and a square border matrix. This default targets bounded surface catalogs; large nodal surfaces require an explicitly chosen scalable recipe. </para>
|
|
</simplesect>
|
|
<simplesect kind="note"><para>This is an approximate inverse, not a guarantee that the physical constraint Schur system is nonsingular. </para>
|
|
</simplesect>
|
|
<parameterlist kind="param"><parameteritem>
|
|
<parameternamelist>
|
|
<parametername>potential_inverse</parametername>
|
|
</parameternamelist>
|
|
<parameterdescription>
|
|
<para>Inverse of the potential block: three fixed AMG cycles by default, or for example <ref refid="structserif_1_1solver_1_1preconditioner_1_1strategies_1_1inverse_1_1_sparse_direct" kindref="compound">strategies::inverse::SparseDirect</ref> for an exact factorization of moderate-size blocks. </para>
|
|
</parameterdescription>
|
|
</parameteritem>
|
|
</parameterlist>
|
|
</para>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/solver/preconditioner/default_preconditioners.hpp" line="67" column="11" bodyfile="src/include/serif/solver/preconditioner/default_preconditioners.hpp" bodystart="67" bodyend="74"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1afd31d14cec3f663d8ed9c51d6fbc8fc7" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Field</type>
|
|
</param>
|
|
<param>
|
|
<type>typename Row</type>
|
|
<defval>Field</defval>
|
|
</param>
|
|
<param>
|
|
<type>typename Strategy</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::make_preconditioner</definition>
|
|
<argsstring>(Strategy inverse)</argsstring>
|
|
<name>make_preconditioner</name>
|
|
<qualifiedname>serif::solver::preconditioner::make_preconditioner</qualifiedname>
|
|
<param>
|
|
<type>Strategy</type>
|
|
<declname>inverse</declname>
|
|
</param>
|
|
<briefdescription>
|
|
<para>Describe an inverse without preparing matrices or binding runtime state. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/solver/preconditioner/recipes/block.hpp" line="20" column="11" bodyfile="src/include/serif/solver/preconditioner/recipes/block.hpp" bodystart="20" bodyend="23"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1a1443fd07473ce97765003d6730b32204" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename Constraints</type>
|
|
</param>
|
|
<param>
|
|
<type>typename Fields</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::with_constraints</definition>
|
|
<argsstring>(Fields fields, strategies::inverse::DenseDirect inverse={})</argsstring>
|
|
<name>with_constraints</name>
|
|
<qualifiedname>serif::solver::preconditioner::with_constraints</qualifiedname>
|
|
<param>
|
|
<type>Fields</type>
|
|
<declname>fields</declname>
|
|
</param>
|
|
<param>
|
|
<type><ref refid="structserif_1_1solver_1_1preconditioner_1_1strategies_1_1inverse_1_1_dense_direct" kindref="compound">strategies::inverse::DenseDirect</ref></type>
|
|
<declname>inverse</declname>
|
|
<defval>{}</defval>
|
|
</param>
|
|
<requiresclause>DisjointSubsystems<Fields, Constraints> </requiresclause>
|
|
<briefdescription>
|
|
<para>Attach constraints without a registry of built-in mass, rotation, or central-density providers. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/solver/preconditioner/recipes/bordered.hpp" line="32" column="11" bodyfile="src/include/serif/solver/preconditioner/recipes/bordered.hpp" bodystart="32" bodyend="42"/>
|
|
</memberdef>
|
|
<memberdef kind="function" id="namespaceserif_1_1solver_1_1preconditioner_1a4083a10bc61fd512d53a3c1523ae2f95" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
<templateparamlist>
|
|
<param>
|
|
<type>typename First</type>
|
|
</param>
|
|
<param>
|
|
<type>typename Second</type>
|
|
</param>
|
|
<param>
|
|
<type>typename Policy</type>
|
|
</param>
|
|
</templateparamlist>
|
|
<type>auto</type>
|
|
<definition>auto serif::solver::preconditioner::couple</definition>
|
|
<argsstring>(First first, Second second, Policy coupling)</argsstring>
|
|
<name>couple</name>
|
|
<qualifiedname>serif::solver::preconditioner::couple</qualifiedname>
|
|
<param>
|
|
<type>First</type>
|
|
<declname>first</declname>
|
|
</param>
|
|
<param>
|
|
<type>Second</type>
|
|
<declname>second</declname>
|
|
</param>
|
|
<param>
|
|
<type>Policy</type>
|
|
<declname>coupling</declname>
|
|
</param>
|
|
<requiresclause>DisjointSubsystems<First, Second> </requiresclause>
|
|
<briefdescription>
|
|
<para>Choose the physical subsystem ordering explicitly; the same algebra serves material/surface and material/gravity. </para>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<inbodydescription>
|
|
</inbodydescription>
|
|
<location file="src/include/serif/solver/preconditioner/recipes/coupled.hpp" line="33" column="11" bodyfile="src/include/serif/solver/preconditioner/recipes/coupled.hpp" bodystart="33" bodyend="36"/>
|
|
</memberdef>
|
|
</sectiondef>
|
|
<briefdescription>
|
|
</briefdescription>
|
|
<detaileddescription>
|
|
</detaileddescription>
|
|
<location file="src/compile_time_checks/serif/solver/preconditioner/coupling.cpp" line="9" column="1"/>
|
|
</compounddef>
|
|
</doxygen>
|