feat(hex8): preserve full high-low state in dynamic element responses
This commit is contained in:
@@ -20,6 +20,16 @@ struct Hex8Response {
|
||||
std::array<SolidIntegrationPointRow, 8> points{};
|
||||
};
|
||||
|
||||
/// @brief Normalized full-state response for Solid HHT high+low arithmetic.
|
||||
/// @note Point rows are rounded observables; forces, Hessian and energy retain
|
||||
/// their low components until global assembly and physical validation.
|
||||
struct Hex8HighLowResponse {
|
||||
Hex8Response high;
|
||||
Vector internal_force_low{24U};
|
||||
Matrix tangent_low{24U, 24U};
|
||||
double strain_energy_low{0.0};
|
||||
};
|
||||
|
||||
/// @brief Implements full-integration C3D8 linear and TL StVK mechanics.
|
||||
/// @note Reference geometry is owned and immutable; no trial is committed.
|
||||
class Hex8Element final : public Element {
|
||||
@@ -45,6 +55,15 @@ class Hex8Element final : public Element {
|
||||
Result<Hex8Response> EvaluateLinear(const Vector& displacement) const;
|
||||
/// @brief Returns one certified StVK trial and its analytic energy Hessian.
|
||||
Result<Hex8Response> EvaluateNonlinear(const Vector& displacement) const;
|
||||
/// @brief Evaluates linear energy/force/Hessian on the complete paired state.
|
||||
/// @note Uses the same reference-relative gradient operator as the paired TL
|
||||
/// path. Inputs must have 24 finite normalized high+low translations.
|
||||
Result<Hex8HighLowResponse> EvaluateLinearHighLow(
|
||||
const Vector& high, const Vector& low) const;
|
||||
/// @brief Evaluates certified TL StVK mechanics without collapsing low state.
|
||||
/// @note Failure preserves immutable reference data and all caller state.
|
||||
Result<Hex8HighLowResponse> EvaluateNonlinearHighLow(
|
||||
const Vector& high, const Vector& low) const;
|
||||
/// @brief Returns the constant reference consistent mass; density required.
|
||||
Result<ElementStiffnessContribution> ComputeMass() const;
|
||||
/// @brief Returns immutable positive reference Gauss volume weights.
|
||||
@@ -67,6 +86,9 @@ class Hex8Element final : public Element {
|
||||
/// @brief Evaluates without mutating the cached reference or previous values.
|
||||
Result<Hex8Response> Evaluate(const Vector& displacement,
|
||||
bool nonlinear) const;
|
||||
/// @brief Uses one paired gradient for energy, force and analytic Hessian.
|
||||
Result<Hex8HighLowResponse> EvaluateHighLow(
|
||||
const Vector& high, const Vector& low, bool nonlinear) const;
|
||||
/// @brief Attaches stable source context to a model failure.
|
||||
Status Failure(const char* message) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user