feat(analysis): execute solid generalized frequency pencil
This commit is contained in:
@@ -58,7 +58,7 @@ struct FeastEigenResult {
|
||||
std::string upper_search_termination;
|
||||
};
|
||||
|
||||
/// @brief Solves a whitened real-symmetric eigenproblem with oneMKL FEAST.
|
||||
/// @brief Adapts standard and symmetric-definite sparse pencils to FEAST.
|
||||
class MklFeastEigenSolver final {
|
||||
public:
|
||||
/// @brief Computes all validated interval pairs for a requested lowest-mode
|
||||
@@ -76,6 +76,28 @@ class MklFeastEigenSolver final {
|
||||
Result<FeastEigenResult> Solve(const SparseMatrix& whitened_operator,
|
||||
std::size_t requested_modes,
|
||||
double zero_operator_scale) const;
|
||||
/// @brief Solves the original sparse symmetric definite K/M pencil.
|
||||
/// @param mass_lower_bound Certified positive lower spectral bound of M,
|
||||
/// including floating-point assembly uncertainty; never a diagonal estimate.
|
||||
/// @param classification_scale Positive max |Kii|/Mii in physical units.
|
||||
/// @note Eigenvectors are mass-normalized. For this API the historical
|
||||
/// whitened_residuals field contains original-pencil eta_r; no whitening
|
||||
/// is performed. Intervals/eigenvalues in normalized backend evidence use
|
||||
/// classification_scale, while eigenvalues are returned in physical units.
|
||||
Result<FeastEigenResult> SolveGeneralized(const SparseMatrix& stiffness,
|
||||
const SparseMatrix& mass,
|
||||
std::size_t requested_modes,
|
||||
double mass_lower_bound,
|
||||
double classification_scale) const;
|
||||
|
||||
private:
|
||||
/// @brief Shares deterministic count/search controls without changing
|
||||
/// pencils.
|
||||
Result<FeastEigenResult> SolveImpl(const SparseMatrix& stiffness,
|
||||
const SparseMatrix* mass,
|
||||
std::size_t requested_modes,
|
||||
double physical_scale,
|
||||
double mass_lower_bound) const;
|
||||
};
|
||||
|
||||
} // namespace fesa
|
||||
|
||||
Reference in New Issue
Block a user