feat(hex8): use reference-weighted mean-volume energy

This commit is contained in:
KOKO\Mimi
2026-10-10 23:32:40 +09:00
parent 29670e168d
commit 18b36c1c22
8 changed files with 537 additions and 155 deletions
+5 -5
View File
@@ -30,7 +30,7 @@ struct Hex8HighLowResponse {
double strain_energy_low{0.0};
};
/// @brief Implements full-integration C3D8 linear and TL StVK mechanics.
/// @brief Implements C3D8 full deviatoric and mean-volume Green energy.
/// @note Reference geometry is owned and immutable; no trial is committed.
class Hex8Element final : public Element {
public:
@@ -53,14 +53,14 @@ class Hex8Element final : public Element {
/// @brief Returns f=K0*u and infinitesimal tensor strain at eight points.
Result<Hex8Response> EvaluateLinear(const Vector& displacement) const;
/// @brief Returns one certified StVK trial and its analytic energy Hessian.
/// @brief Returns one certified mean-Green TL trial and its 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.
/// @brief Evaluates mean-Green TL 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;
@@ -81,7 +81,7 @@ class Hex8Element final : public Element {
};
/// @brief Constructs an owned candidate before reference validation.
Hex8Element(EntityIndex element_index, ElementDofLayout layout,
Coordinates coordinates, double lambda, double mu,
Coordinates coordinates, double kappa, double mu,
std::optional<double> density, SourceLocation location);
/// @brief Evaluates without mutating the cached reference or previous values.
Result<Hex8Response> Evaluate(const Vector& displacement,
@@ -95,7 +95,7 @@ class Hex8Element final : public Element {
EntityIndex element_index_;
ElementDofLayout layout_;
Coordinates coordinates_;
double lambda_;
double kappa_;
double mu_;
std::optional<double> density_;
SourceLocation location_;