feat(newton): first newton solver implementation

This commit is contained in:
2026-09-08 06:36:39 -04:00
parent 76818f2f82
commit b3c04d507a
98 changed files with 20397 additions and 11040 deletions

View File

@@ -4,6 +4,7 @@ module;
#include <cstdint>
#include <limits>
#include <mfem.hpp>
#include <utility>
module mean_field;
import :operators.gravity_field;
@@ -273,6 +274,18 @@ namespace mean_field::operators {
context::gravity_field::GravityFieldPreparationReport GravityFieldOperator::Prepare(
const mfem::Vector &state,
const context::gravity_field::GravityFieldRevisions &revisions
) {
auto result = TryPrepare(state, revisions);
if (!result.has_value()) {
context::gravity_field::throwGravityFieldPreparationRejection(result.error());
}
return std::move(result).value();
}
context::gravity_field::GravityFieldPreparationResult<context::gravity_field::GravityFieldPreparationReport>
GravityFieldOperator::TryPrepare(
const mfem::Vector &state,
const context::gravity_field::GravityFieldRevisions &revisions
) {
using form = utils::blocks::gravity_field_form;
@@ -295,7 +308,7 @@ namespace mean_field::operators {
const mfem::Vector gravity_potential =
make_read_only_value_view(state, m_state_offsets, gravity_potential_block);
return m_linearization_context.Prepare(
return m_linearization_context.TryPrepare(
{.density = density,
.displacement = displacement,
.gravity_gradient = gravity_gradient,