Files
2026-09-22 21:38:42 +09:00

51 lines
1.7 KiB
C++

#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_