Add immutable MITC4 drilling selection and direct director springs
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
#ifndef FESA_ELEMENTS_MITC4_DRILLING_MODE_H_
|
||||
#define FESA_ELEMENTS_MITC4_DRILLING_MODE_H_
|
||||
|
||||
namespace fesa {
|
||||
|
||||
/// @brief Identifies the immutable numerical MITC4 drilling formulation.
|
||||
enum class Mitc4DrillingMode { kDirectSpring, kLegacyCorotatedTwist };
|
||||
|
||||
/// @brief Returns the stable storage name of a supported drilling formulation.
|
||||
constexpr const char* Mitc4DrillingModeName(Mitc4DrillingMode mode) noexcept {
|
||||
switch (mode) {
|
||||
case Mitc4DrillingMode::kDirectSpring:
|
||||
return "direct-initial-director-spring";
|
||||
case Mitc4DrillingMode::kLegacyCorotatedTwist:
|
||||
return "legacy-corotated-twist";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
namespace mitc4_drilling_internal {
|
||||
struct TestAccess;
|
||||
} // namespace mitc4_drilling_internal
|
||||
|
||||
} // namespace fesa
|
||||
|
||||
#endif // FESA_ELEMENTS_MITC4_DRILLING_MODE_H_
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "fesa/core/status.h"
|
||||
#include "fesa/elements/element.h"
|
||||
#include "fesa/elements/mitc4_shell_definition.h"
|
||||
#include "fesa/elements/mitc4_drilling_mode.h"
|
||||
#include "fesa/materials/isotropic_linear_elastic_material.h"
|
||||
#include "fesa/math/matrix.h"
|
||||
#include "fesa/math/vector.h"
|
||||
@@ -92,6 +93,11 @@ class Mitc4Shell final : public Element {
|
||||
std::array<std::array<double, 3>, 4> initial_directors,
|
||||
const ShellSection& section, const LinearElasticMaterial& material);
|
||||
|
||||
/// @brief Returns this immutable kernel's production drilling formulation.
|
||||
[[nodiscard]] Mitc4DrillingMode DrillingMode() const noexcept {
|
||||
return drilling_mode_;
|
||||
}
|
||||
|
||||
/// @brief Returns the factory-bound MITC4 DOF order.
|
||||
const ElementDofLayout& DofLayout() const noexcept override;
|
||||
|
||||
@@ -163,6 +169,7 @@ class Mitc4Shell final : public Element {
|
||||
|
||||
private:
|
||||
friend class ElementFactory;
|
||||
friend struct mitc4_drilling_internal::TestAccess;
|
||||
|
||||
/// @brief Binds Domain identity after the numerical candidate is valid.
|
||||
void BindRuntime(ElementDofLayout layout, EntityIndex element_index,
|
||||
@@ -203,6 +210,7 @@ class Mitc4Shell final : public Element {
|
||||
double thickness_;
|
||||
double youngs_modulus_;
|
||||
double poisson_ratio_;
|
||||
Mitc4DrillingMode drilling_mode_;
|
||||
SourceLocation source_location_;
|
||||
std::string identity_;
|
||||
ElementDofLayout dof_layout_;
|
||||
|
||||
@@ -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_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user