feat: implement consistent-mass HHT shell dynamics
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#ifndef FESA_ANALYSIS_HHT_TIME_INTEGRATION_H_
|
||||
#define FESA_ANALYSIS_HHT_TIME_INTEGRATION_H_
|
||||
|
||||
#include "fesa/core/status.h"
|
||||
#include "fesa/math/vector.h"
|
||||
|
||||
namespace fesa {
|
||||
|
||||
/// @brief Stores the coupled original negative-alpha HHT coefficients.
|
||||
struct HhtParameters {
|
||||
double alpha;
|
||||
double beta;
|
||||
double gamma;
|
||||
};
|
||||
|
||||
/// @brief Stores the displacement and velocity Newmark predictors.
|
||||
struct HhtPredictor {
|
||||
Vector coordinates;
|
||||
Vector velocity;
|
||||
};
|
||||
|
||||
/// @brief Separates physical chart rates from the auxiliary acceleration.
|
||||
struct HhtRates {
|
||||
Vector velocity;
|
||||
Vector acceleration;
|
||||
Vector algorithmic_acceleration;
|
||||
};
|
||||
|
||||
/// @brief Builds coupled coefficients for alpha in [-1/3, 0].
|
||||
/// @note The public INP subset uses only alpha=-0.05.
|
||||
Result<HhtParameters> MakeHhtParameters(double alpha);
|
||||
|
||||
/// @brief Predicts q and v using the old auxiliary acceleration.
|
||||
/// @param time_increment Finite positive duration in input time units.
|
||||
Result<HhtPredictor> PredictHht(const Vector& coordinates,
|
||||
const Vector& velocity,
|
||||
const Vector& algorithmic_acceleration,
|
||||
double time_increment,
|
||||
const HhtParameters& parameters);
|
||||
|
||||
/// @brief Recovers physical and auxiliary rates from one trial coordinate.
|
||||
/// @param old_acceleration Physical endpoint acceleration at the old time.
|
||||
Result<HhtRates> EvaluateHhtRates(const Vector& coordinates,
|
||||
const HhtPredictor& predictor,
|
||||
const Vector& old_acceleration,
|
||||
double time_increment,
|
||||
const HhtParameters& parameters);
|
||||
|
||||
} // namespace fesa
|
||||
#endif // FESA_ANALYSIS_HHT_TIME_INTEGRATION_H_
|
||||
Reference in New Issue
Block a user