Add immutable MITC4 drilling selection and direct director springs

This commit is contained in:
KOKO\Mimi
2026-10-20 08:52:43 +09:00
parent 52e321e15c
commit 8bac3ebf49
9 changed files with 670 additions and 22 deletions
@@ -54,6 +54,8 @@ struct NonlinearMitc4InternalEquilibrium {
Matrix drilling_metric{0U, 0U};
double drilling_energy = 0.0;
Vector force_directional_second{0U};
/// @brief Stores D2(f_drill)[v,v] separately; direct springs give exact zero.
Vector drilling_force_directional_second{0U};
Vector drilling_constraint{0U};
Matrix drilling_constraint_gradient{0U, 0U};
std::array<Matrix, 4> drilling_constraint_hessian{
@@ -104,6 +106,11 @@ class NonlinearMitc4Shell {
std::array<ShellNodeInitialFrame, 4> initial_frames,
const ShellSection& section, const LinearElasticMaterial& material);
/// @brief Returns this immutable kernel's numerical drilling formulation.
[[nodiscard]] Mitc4DrillingMode DrillingMode() const noexcept {
return drilling_mode_;
}
/// @brief Evaluates trial physical kinematics and fixed recovery rows.
/// @param trial Global nodal translation and fixed-global rotation vectors.
/// @return Physical recovery or a fail-closed trial diagnostic.
@@ -134,6 +141,7 @@ class NonlinearMitc4Shell {
private:
friend struct nonlinear_mitc4_internal::ConfigurationSnapshot;
friend struct mitc4_drilling_internal::TestAccess;
/// @brief Retains validated fixed-reference data without analysis ownership.
NonlinearMitc4Shell(std::array<Vector3, 4> coordinates,
@@ -155,6 +163,7 @@ class NonlinearMitc4Shell {
double youngs_modulus_;
double poisson_ratio_;
double drilling_stiffness_;
Mitc4DrillingMode drilling_mode_;
SourceLocation source_location_;
std::string identity_;
};