Connect MITC4 drilling evidence across analysis procedures

This commit is contained in:
KOKO\Mimi
2026-10-20 09:21:39 +09:00
parent 294ffbf8a1
commit c6188b3ad7
30 changed files with 763 additions and 28 deletions
+4
View File
@@ -3,6 +3,7 @@
#include <array>
#include <cstddef>
#include <optional>
#include <vector>
#include "fesa/core/status.h"
@@ -72,6 +73,8 @@ class AnalysisState {
double PhysicalStrainEnergy() const noexcept;
/// @brief Returns global force and moment equilibrium components.
const std::array<double, 6>& Equilibrium() const noexcept;
/// @brief Returns actual MITC4 mode and artificial spatial moment evidence.
const std::optional<Mitc4DrillingEvidence>& Mitc4Drilling() const noexcept;
/// @brief Returns normalized shell verification metrics.
const std::array<double, 3>& VerificationMetrics() const noexcept;
@@ -96,6 +99,7 @@ class AnalysisState {
double physical_strain_energy_{0.0};
std::array<double, 6> equilibrium_{};
std::array<double, 3> verification_metrics_{};
std::optional<Mitc4DrillingEvidence> mitc4_drilling_;
};
} // namespace fesa
@@ -3,6 +3,7 @@
#include <array>
#include <cstdint>
#include <optional>
#include <vector>
#include "fesa/core/source_identity.h"
@@ -54,6 +55,7 @@ struct DynamicAcceptedFrameState {
double external_work = 0.0;
double energy_defect = 0.0;
std::array<double, 6> global_equilibrium{};
std::optional<Mitc4DrillingEvidence> mitc4_drilling;
std::array<double, 3> linear_momentum{};
std::array<double, 3> angular_momentum{};
std::array<double, 3> linear_momentum_rate{};
@@ -8,6 +8,7 @@
#include <vector>
#include "fesa/math/matrix.h"
#include "fesa/elements/mitc4_drilling_mode.h"
#include "fesa/solvers/eigen/eigen_solver.h"
namespace fesa {
@@ -53,6 +54,7 @@ struct EigenAnalysisState {
explicit EigenAnalysisState(FeastEigenResult backend_result)
: backend{std::move(backend_result)} {}
std::optional<Mitc4DrillingMode> drilling_mode;
std::size_t full_dof_count{0U};
std::size_t free_dof_count{0U};
std::size_t mass_null_dimension{0U};
@@ -3,6 +3,7 @@
#include <array>
#include <cstdint>
#include <optional>
#include <vector>
#include "fesa/core/source_identity.h"
@@ -46,6 +47,7 @@ struct NonlinearTrialState {
std::vector<ShellResultRow> shell_results;
double physical_strain_energy;
std::array<double, 6> global_equilibrium;
std::optional<Mitc4DrillingEvidence> mitc4_drilling;
};
/// @brief Stores one authoritative nonlinear increment frame.
@@ -69,6 +71,7 @@ struct AcceptedFrameState {
std::vector<ShellResultRow> shell_results;
double physical_strain_energy;
std::array<double, 6> global_equilibrium;
std::optional<Mitc4DrillingEvidence> mitc4_drilling;
};
/// @brief Owns committed nonlinear state and validated accepted frames.