feat(support): continued migration to new field dof support system

mass normaliztion, gravity, displacement, and hydrostatic equilibrium are now migrated
This commit is contained in:
2026-08-24 15:44:24 -04:00
parent 0f3ca8050b
commit 177ae8b38a
48 changed files with 1738 additions and 935 deletions

View File

@@ -1,5 +1,4 @@
module;
#include <cstdint>
#include <memory>
#include <mfem.hpp>
@@ -10,21 +9,13 @@ export import :operators.gravity_field_jacobian;
export import :operators.context.gravity_field;
export namespace mean_field::operators {
enum class GravityResidualBlock : std::uint8_t { gradient_equation = 0, poisson_equation = 1, count = 2 };
constexpr int gravity_residual_block_index(const GravityResidualBlock block) noexcept {
return static_cast<int>(block);
}
inline constexpr int gravity_residual_block_count = gravity_residual_block_index(GravityResidualBlock::count);
class GravityFieldOperator final : public mfem::Operator {
public:
GravityFieldOperator(
fem::FEM &f,
const mapping::DomainMapperStateless &domain_mapper,
context::gravity_field::GravityFieldLinearizationContext &linearization_context,
const mfem::Array<int> &state_true_offsets,
const mfem::Array<int> &state_offsets,
GravityFieldJacobianOperator &jacobian
);
@@ -40,9 +31,9 @@ export namespace mean_field::operators {
Operator &GetGradient(const mfem::Vector &state) const override;
[[nodiscard]] const mfem::Array<int> &GetStateTrueOffsets() const noexcept;
[[nodiscard]] const mfem::Array<int> &GetStateOffsets() const noexcept;
[[nodiscard]] const mfem::Array<int> &GetResidualTrueOffsets() const noexcept;
[[nodiscard]] const mfem::Array<int> &GetResidualOffsets() const noexcept;
[[nodiscard]] context::gravity_field::GravityFieldLinearizationContext &GetLinearizationContext() noexcept;
@@ -66,8 +57,8 @@ export namespace mean_field::operators {
fem::FEM &m_fem;
const mapping::DomainMapperStateless &m_domain_mapper;
context::gravity_field::GravityFieldLinearizationContext &m_linearization_context;
mfem::Array<int> m_state_true_offsets;
mfem::Array<int> m_residual_true_offsets;
mfem::Array<int> m_state_offsets;
mfem::Array<int> m_residual_offsets;
GravityFieldJacobianOperator &m_jacobian;
};
@@ -106,7 +97,7 @@ export namespace mean_field::operators {
[[nodiscard]] const context::gravity_field::GravityFieldGeometryContext &GetGeometryContext() const noexcept;
[[nodiscard]] const mfem::Array<int> &GetGravityTrueOffsets() const noexcept;
[[nodiscard]] const mfem::Array<int> &GetGravityOffsets() const noexcept;
private:
void ValidateDisplacement(const mfem::Vector &displacement) const;
@@ -117,7 +108,8 @@ export namespace mean_field::operators {
private:
GravityFieldOperator &m_gravity_field_operator;
mfem::Array<int> m_gravity_true_offsets;
mfem::Array<int> m_gravity_offsets;
context::gravity_field::GravityFieldGeometryContext &m_gravity_field_geometry_context;
mfem::Vector m_displacement;
};
} // namespace mean_field::operators
} // namespace mean_field::operators