feat: adopt lumped mass and reduced-coordinate shell HHT
Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#define FESA_ANALYSIS_HHT_DYNAMIC_INTERNAL_H_
|
||||
|
||||
#include <array>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
#include "fesa/analysis/dynamic_analysis_state.h"
|
||||
@@ -28,6 +29,8 @@ struct RuntimeShell {
|
||||
struct DynamicAssembly {
|
||||
DynamicAcceptedFrameState frame;
|
||||
SparseMatrix mass;
|
||||
SparseMatrix position_tangent;
|
||||
SparseMatrix velocity_tangent;
|
||||
SparseMatrix internal_tangent;
|
||||
SparseMatrix effective_tangent;
|
||||
SparseMatrix drilling_metric;
|
||||
@@ -38,6 +41,8 @@ struct DynamicAssembly {
|
||||
double angular_momentum_rate_scale;
|
||||
Vector hidden_second{0U};
|
||||
Vector hidden_second_scale{0U};
|
||||
// Canonical scalar drilling-constraint derivative, indexed by global node.
|
||||
std::optional<SparseMatrix> hidden_gradient;
|
||||
};
|
||||
|
||||
/// @brief Builds checked shell evaluators in stable source order.
|
||||
@@ -59,6 +64,20 @@ Result<DynamicAssembly> EvaluateAssembly(
|
||||
const HhtParameters& parameters, const ParallelFor& parallel_for,
|
||||
bool directional_third);
|
||||
|
||||
/// @brief Evaluates an increment's initial iterate without committing history.
|
||||
/// @param frame New-time trial containing the last accepted coordinates.
|
||||
/// @param predictor Frozen HHT predictor used for both possible starting points.
|
||||
/// @param old_acceleration Last accepted physical coordinate acceleration.
|
||||
/// @return The valid initial assembly with smaller free ||D^T E||_infinity,
|
||||
/// preferring the predictor on a tie. Invalid predictor chart/geometry selects
|
||||
/// accepted coordinates; rate, mass and arithmetic failures remain failures.
|
||||
Result<DynamicAssembly> EvaluateNewtonStart(
|
||||
const Domain& domain, const DofManager& dofs,
|
||||
const std::vector<RuntimeShell>& shells, DynamicAcceptedFrameState frame,
|
||||
const HhtPredictor& predictor, const Vector& old_acceleration,
|
||||
const Vector& load_scale, double time_increment,
|
||||
const HhtParameters& parameters, const ParallelFor& parallel_for);
|
||||
|
||||
/// @brief Builds deterministic CSR structure from an ordered local list.
|
||||
Result<SparseMatrix> MakeSparse(std::size_t rows, std::size_t columns,
|
||||
std::vector<CooContribution> contributions);
|
||||
@@ -77,6 +96,10 @@ std::vector<std::size_t> NullNodes(
|
||||
const std::vector<DynamicRotationKinematics>& rotations);
|
||||
|
||||
/// @brief Solves the positive-mass and differentiated-null initial equations.
|
||||
///
|
||||
/// The returned candidate is finite and exact-zero at constrained DOFs. Its
|
||||
/// complete free-equation N2-R certificate requires reassembly with that
|
||||
/// acceleration and the caller's source-uncancelled residual scale.
|
||||
Result<Vector> InitializeAcceleration(const Domain& domain,
|
||||
const DofManager& dofs,
|
||||
const DynamicAssembly& initial,
|
||||
|
||||
Reference in New Issue
Block a user