Snapshot optimized solver and audit diagnostics before numerical experiments
This commit is contained in:
@@ -44,11 +44,29 @@ export namespace mean_field::operators {
|
||||
const mfem::Vector &gravity_gradient,
|
||||
mfem::Vector &action
|
||||
) const override;
|
||||
// Unmodified MFEM partial-assembly application on the same prepared data.
|
||||
void MultReference(const mfem::Vector &gravityGradient, mfem::Vector &action) const;
|
||||
[[nodiscard]] int GetFastMassElementCount() const noexcept { return m_fastMassElements; }
|
||||
|
||||
void MultDisplacementVariationTrue(
|
||||
const mfem::Vector &gravityGradientTrue,
|
||||
const mfem::Vector &displacementVariationTrue,
|
||||
mfem::Vector &actionVariationTrue
|
||||
) const;
|
||||
// Retained prepared implementation for isolated A/B validation and
|
||||
// profiling. Uses the same prepared state, quadrature and DOF maps.
|
||||
void MultDisplacementVariationTrueReference(
|
||||
const mfem::Vector &gravityGradientTrue,
|
||||
const mfem::Vector &displacementVariationTrue,
|
||||
mfem::Vector &actionVariationTrue
|
||||
) const;
|
||||
// Previous optimized pointwise path, excluding the new tensor contractions.
|
||||
void MultDisplacementVariationTrueCachedReference(
|
||||
const mfem::Vector &gravityGradientTrue, const mfem::Vector &displacementVariationTrue,
|
||||
mfem::Vector &actionVariationTrue
|
||||
) const;
|
||||
[[nodiscard]] int GetFastVariationElementCount() const noexcept;
|
||||
[[nodiscard]] int GetTensorVariationElementCount() const noexcept;
|
||||
void AssembleDiagonal(mfem::Vector &diagonal) const override;
|
||||
void AssembleTrueDiagonal(mfem::Vector &diagonal) const;
|
||||
|
||||
@@ -79,6 +97,11 @@ export namespace mean_field::operators {
|
||||
mfem::Vector compactification;
|
||||
const mfem::IntegrationRule *integrationRule{nullptr};
|
||||
std::shared_ptr<const fem::VectorReferenceTable> gravityReferenceTable;
|
||||
std::shared_ptr<const fem::ScalarReferenceTable> displacementReferenceTable;
|
||||
// One contiguous column per quadrature point: scale*J_mesh^-1
|
||||
// (row-major, nine entries), followed by grad(scale). 3D VALUE
|
||||
// displacement with an interior or Kelvin map; empty otherwise.
|
||||
mfem::DenseMatrix tangentFactors;
|
||||
// Fixed computational-mesh Piola factor, separate from J_map.
|
||||
mfem::DenseMatrix meshPiolaJacobians;
|
||||
mfem::Vector referenceWeights;
|
||||
@@ -86,6 +109,13 @@ export namespace mean_field::operators {
|
||||
};
|
||||
|
||||
[[nodiscard]] mapping::MappingStatus PrepareVariationData();
|
||||
void MultDisplacementVariationTrueImpl(
|
||||
const mfem::Vector &gravityGradientTrue,
|
||||
const mfem::Vector &displacementVariationTrue,
|
||||
mfem::Vector &actionVariationTrue,
|
||||
bool useFastPath, bool useTensorPath
|
||||
) const;
|
||||
void AddFastElementVariation(const ElementVariationData &data, bool useTensorPath) const;
|
||||
[[nodiscard]] HDivMassPreparationResult TryPrepareImpl(
|
||||
const mfem::Vector &displacement,
|
||||
PreparationMode mode
|
||||
@@ -129,9 +159,12 @@ export namespace mean_field::operators {
|
||||
mutable mfem::DenseMatrix m_meshPiolaJacobian;
|
||||
mutable mfem::DenseMatrix m_gravityGradientShape;
|
||||
mutable mfem::DenseMatrix m_massTensorVariation;
|
||||
mutable mfem::DenseMatrix m_tensorDisplacement, m_tensorGravity, m_tensorDual;
|
||||
mutable mfem::Vector m_tensorWorkspace;
|
||||
std::uint64_t m_preparation_count{0};
|
||||
bool m_is_prepared{false};
|
||||
bool m_has_variation_data{false};
|
||||
bool m_single_rank{true};
|
||||
int m_fastMassElements{0};
|
||||
};
|
||||
} // namespace mean_field::operators
|
||||
|
||||
Reference in New Issue
Block a user