38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
#ifndef FESA_RESULTS_GLOBAL_EQUILIBRIUM_RECOVERY_H_
|
|
#define FESA_RESULTS_GLOBAL_EQUILIBRIUM_RECOVERY_H_
|
|
|
|
#include "fesa/core/status.h"
|
|
#include "fesa/fem/dof_manager.h"
|
|
#include "fesa/math/sparse_matrix.h"
|
|
#include "fesa/math/vector.h"
|
|
#include "fesa/model/domain.h"
|
|
#include "results/recovery_candidate.h"
|
|
|
|
namespace fesa::results_internal {
|
|
|
|
/// @brief Owns full residual, reaction evidence, and free equilibrium scale.
|
|
struct GlobalEquilibriumResult {
|
|
Vector internal_force;
|
|
Vector residual;
|
|
Vector reaction;
|
|
double normalized_free_residual{0.0};
|
|
};
|
|
|
|
/// @brief Computes K*d-F, full reaction evidence, and free residual metric.
|
|
/// @return The complete global residual candidate or a structured failure.
|
|
Result<GlobalEquilibriumResult> GlobalEquilibriumRecovery(
|
|
const Domain& domain, const DofManager& dofs,
|
|
const SparseMatrix& full_stiffness, const Vector& full_displacement,
|
|
const Vector& full_external_force);
|
|
|
|
/// @brief Adds shell global force and moment equilibrium evidence.
|
|
/// @note Moments are taken about the fixed global origin.
|
|
Status RecoverShellGlobalEvidence(const Domain& domain, const DofManager& dofs,
|
|
const Vector& external_force,
|
|
const GlobalEquilibriumResult& global,
|
|
RecoveryCandidate& candidate);
|
|
|
|
} // namespace fesa::results_internal
|
|
|
|
#endif // FESA_RESULTS_GLOBAL_EQUILIBRIUM_RECOVERY_H_
|