fix(poly): fixed numerous bugs related to inconsistent system sizing with the reduced operator
this has restored the symmetry which we relied on before.
This commit is contained in:
@@ -208,6 +208,57 @@ public:
|
||||
*/
|
||||
void set_essential_true_dofs(const SSE::MFEMArrayPairSet& ess_tdof_pair_set);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Reconstructs the full state vector (including essential DOFs) from a reduced state vector (free DOFs).
|
||||
* @param reducedState The vector containing only the free degrees of freedom.
|
||||
* @return Constant reference to the internal full state vector, updated with the reducedState.
|
||||
*/
|
||||
[[nodiscard]] const mfem::Vector &reconstruct_full_state_vector(const mfem::Vector &reducedState) const;
|
||||
|
||||
/**
|
||||
* @breif Reconstruct the full state vector (including essential DOFs) from a reduced state vector (free DOFs) as well as the block offsets.
|
||||
* @param reducedState The vector containing only the free degrees of freedom.
|
||||
* @return Constant reference to the internal full state vector, updated with the reducedState as a block vector.
|
||||
*/
|
||||
[[nodiscard]] const mfem::BlockVector reconstruct_full_block_state_vector(const mfem::Vector &reducedState) const;
|
||||
|
||||
/**
|
||||
* @brief Populates the internal array of free (non-essential) degree of freedom indices.
|
||||
* This is called during finalize().
|
||||
*/
|
||||
void populate_free_dof_array();
|
||||
|
||||
/// --- Getters for key internal state and operators ---
|
||||
/**
|
||||
* @brief Gets the Jacobian operator.
|
||||
* Asserts that the operator is finalized and the Jacobian has been computed.
|
||||
* @return Constant reference to the block Jacobian operator.
|
||||
*/
|
||||
const mfem::BlockOperator &get_jacobian_operator() const;
|
||||
|
||||
/**
|
||||
* @brief Gets the block diagonal preconditioner for the Schur complement system.
|
||||
* Asserts that the operator is finalized and the preconditioner has been computed.
|
||||
* @return Reference to the block diagonal preconditioner.
|
||||
*/
|
||||
mfem::BlockDiagonalPreconditioner &get_preconditioner() const;
|
||||
|
||||
|
||||
/// --- Getters for information on internal state ---
|
||||
/**
|
||||
* @brief Gets the full state vector, including essential DOFs.
|
||||
* @return Constant reference to the internal state vector.
|
||||
*/
|
||||
const mfem::Array<int>& get_free_dofs() const { return m_freeDofs; } ///< Getter for the free DOFs array.
|
||||
|
||||
/**
|
||||
* @brief Gets the size of the reduced system (number of free DOFs).
|
||||
* Asserts that the operator is finalized.
|
||||
* @return The total number of free degrees of freedom.
|
||||
*/
|
||||
int get_reduced_system_size() const;
|
||||
|
||||
/**
|
||||
* @brief Gets the currently set essential true degrees of freedom.
|
||||
* @return A pair containing the essential TDOF pairs for theta and phi.
|
||||
@@ -226,40 +277,6 @@ public:
|
||||
*/
|
||||
const mfem::Array<int>& get_reduced_block_offsets() const {return m_reducedBlockOffsets; }
|
||||
|
||||
/**
|
||||
* @brief Gets the Jacobian operator.
|
||||
* Asserts that the operator is finalized and the Jacobian has been computed.
|
||||
* @return Constant reference to the block Jacobian operator.
|
||||
*/
|
||||
const mfem::BlockOperator &get_jacobian_operator() const;
|
||||
|
||||
/**
|
||||
* @brief Gets the block diagonal preconditioner for the Schur complement system.
|
||||
* Asserts that the operator is finalized and the preconditioner has been computed.
|
||||
* @return Reference to the block diagonal preconditioner.
|
||||
*/
|
||||
mfem::BlockDiagonalPreconditioner &get_preconditioner() const;
|
||||
|
||||
/**
|
||||
* @brief Gets the size of the reduced system (number of free DOFs).
|
||||
* Asserts that the operator is finalized.
|
||||
* @return The total number of free degrees of freedom.
|
||||
*/
|
||||
int get_reduced_system_size() const;
|
||||
|
||||
/**
|
||||
* @brief Reconstructs the full state vector (including essential DOFs) from a reduced state vector (free DOFs).
|
||||
* @param reducedState The vector containing only the free degrees of freedom.
|
||||
* @return Constant reference to the internal full state vector, updated with the reducedState.
|
||||
*/
|
||||
[[nodiscard]] const mfem::Vector &reconstruct_full_state_vector(const mfem::Vector &reducedState) const;
|
||||
|
||||
/**
|
||||
* @brief Populates the internal array of free (non-essential) degree of freedom indices.
|
||||
* This is called during finalize().
|
||||
*/
|
||||
void populate_free_dof_array();
|
||||
|
||||
private:
|
||||
// --- Logging ---
|
||||
Probe::LogManager& m_logManager = Probe::LogManager::getInstance(); ///< Reference to the global log manager.
|
||||
@@ -280,6 +297,7 @@ private:
|
||||
std::unique_ptr<mfem::SparseMatrix> m_MReduced; ///< Reduced M matrix (free DOFs only).
|
||||
std::unique_ptr<mfem::SparseMatrix> m_QReduced; ///< Reduced Q matrix (free DOFs only).
|
||||
std::unique_ptr<mfem::SparseMatrix> m_DReduced; ///< Reduced D matrix (free DOFs only).
|
||||
mutable std::unique_ptr<mfem::SparseMatrix> m_gradReduced; ///< Reduced gradient operator (G) for the nonlinear part f(θ).
|
||||
|
||||
// --- State Vectors and DOF Management ---
|
||||
mutable mfem::Vector m_state; ///< Full state vector [θ, φ]^T, including essential DOFs.
|
||||
|
||||
Reference in New Issue
Block a user