perf(jacobian-action): major updates to jacobian action application by removing redudant quadrature work. ~5x increase in speed
This commit is contained in:
@@ -15,6 +15,7 @@ export import :fem;
|
||||
export import :field.mfem;
|
||||
export import :mapping.domain_mapper;
|
||||
export import :model.stellar;
|
||||
export import :model.typed_stellar;
|
||||
export import :operators.context.gravity_field;
|
||||
export import :operators.gravity_field;
|
||||
export import :operators.gravity_field_jacobian;
|
||||
@@ -23,6 +24,7 @@ export import :operators.prepared_displacement_residual;
|
||||
export import :operators.prepared_hydrostatic_equilibrium;
|
||||
export import :operators.prepared_mass_normalization;
|
||||
export import :operators.prepared_surface_constraint;
|
||||
export import :operators.root_manifest;
|
||||
export import :physics.rigid_rotation;
|
||||
export import :utils.blocks;
|
||||
|
||||
@@ -82,6 +84,16 @@ export namespace mean_field::operators {
|
||||
using StellarEquilibriumLayout =
|
||||
utils::blocks::form_layout<utils::blocks::surface_deformed_stellar_equilibrium_form>;
|
||||
|
||||
using StellarEquilibriumSpecificationModel =
|
||||
model::StellarModel<models::SpecificationSet<eos::Polytrope, models::FixedTotalMass, surface::Isobaric>>;
|
||||
|
||||
using StellarEquilibriumSystemManifest = EquilibriumSystemManifest<
|
||||
StellarEquilibriumSpecificationModel,
|
||||
utils::blocks::surface_deformed_stellar_equilibrium_form,
|
||||
utils::blocks::surface_deformed_stellar_equilibrium_jacobian_form>;
|
||||
|
||||
using StellarEquilibriumRootManifest = StellarEquilibriumSystemManifest;
|
||||
|
||||
class PreparedStellarEquilibriumOperator final : public mfem::Operator {
|
||||
public:
|
||||
template <models::StellarModelType Model>
|
||||
@@ -101,12 +113,27 @@ export namespace mean_field::operators {
|
||||
f,
|
||||
domainMapper,
|
||||
stellarModel.equationOfState(),
|
||||
stellarModel.targetMass(),
|
||||
models::compileConstraint(models::FixedTotalMass{dimensions::MassValue{stellarModel.targetMass()}}),
|
||||
PressureSurfaceConstraintView{stellarModel.compiledSurfaceConstraint()},
|
||||
deformation::PreparedDomainDeformationRuntime{stellarModel.compileDomainDeformation(f)}
|
||||
) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Authoritative construction path for a compiled equilibrium system.
|
||||
* The caller owns the EOS and compiled surface constraint for this
|
||||
* operator's lifetime; the remaining compiled contributions are
|
||||
* transferred into the operator.
|
||||
*/
|
||||
PreparedStellarEquilibriumOperator(
|
||||
fem::FEM &f,
|
||||
const mapping::DomainMapper &domainMapper,
|
||||
const eos::Polytrope &equationOfState,
|
||||
models::CompiledFixedMass fixedMassConstraint,
|
||||
PressureSurfaceConstraintView surfaceConstraint,
|
||||
deformation::PreparedDomainDeformationRuntime domainDeformation
|
||||
);
|
||||
|
||||
PreparedStellarEquilibriumOperator(const PreparedStellarEquilibriumOperator &) = delete;
|
||||
PreparedStellarEquilibriumOperator &operator=(const PreparedStellarEquilibriumOperator &) = delete;
|
||||
PreparedStellarEquilibriumOperator(PreparedStellarEquilibriumOperator &&) = delete;
|
||||
@@ -128,6 +155,12 @@ export namespace mean_field::operators {
|
||||
[[nodiscard]] bool IsPrepared() const noexcept;
|
||||
[[nodiscard]] double GetTargetMass() const noexcept;
|
||||
[[nodiscard]] const StellarEquilibriumLayout &GetLayout() const noexcept;
|
||||
[[nodiscard]] const StellarEquilibriumRootManifest &GetRootManifest() const noexcept;
|
||||
[[nodiscard]] RootStateView<utils::blocks::surface_deformed_stellar_equilibrium_form>
|
||||
GetRootStateView(const mfem::Vector &state) const;
|
||||
[[nodiscard]] ResidualView<utils::blocks::surface_deformed_stellar_equilibrium_form>
|
||||
GetResidualView(mfem::Vector &residual) const;
|
||||
[[nodiscard]] RootConstraintReport GetFixedMassReport() const;
|
||||
[[nodiscard]] const StellarEquilibriumDependencies &GetDependencies() const;
|
||||
[[nodiscard]] const PreparedStellarEquilibriumStatistics &GetStatistics() const noexcept;
|
||||
|
||||
@@ -160,16 +193,7 @@ export namespace mean_field::operators {
|
||||
fem::FEM &f,
|
||||
const mapping::DomainMapper &domainMapper,
|
||||
const eos::Polytrope &equationOfState,
|
||||
double targetMass,
|
||||
PressureSurfaceConstraintView surfaceConstraint,
|
||||
deformation::PreparedDomainDeformationRuntime domainDeformation
|
||||
);
|
||||
|
||||
PreparedStellarEquilibriumOperator(
|
||||
fem::FEM &f,
|
||||
const mapping::DomainMapper &domainMapper,
|
||||
const eos::Polytrope &equationOfState,
|
||||
double targetMass,
|
||||
models::CompiledFixedMass fixedMassConstraint,
|
||||
PressureSurfaceConstraintView surfaceConstraint,
|
||||
ConstructionData constructionData
|
||||
);
|
||||
@@ -177,7 +201,7 @@ export namespace mean_field::operators {
|
||||
void AssembleResidual();
|
||||
void VerifyPrepared() const;
|
||||
|
||||
StellarEquilibriumLayout m_layout;
|
||||
StellarEquilibriumRootManifest m_rootManifest;
|
||||
mfem::Array<int> m_gravityStateOffsets;
|
||||
|
||||
context::gravity_field::GravityFieldLinearizationContext m_gravityContext;
|
||||
@@ -198,7 +222,7 @@ export namespace mean_field::operators {
|
||||
mfem::Vector m_generatedVolumeDisplacement;
|
||||
mfem::Vector m_fullMechanicalResidual;
|
||||
mfem::Vector m_cachedResidual;
|
||||
double m_targetMass{0.0};
|
||||
models::CompiledFixedMass m_fixedMassConstraint;
|
||||
|
||||
mutable PreparedStellarEquilibriumStatistics m_statistics;
|
||||
bool m_isPrepared{false};
|
||||
|
||||
Reference in New Issue
Block a user