#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 MakeHhtParameters(double alpha); /// @brief Predicts q and v using the old auxiliary acceleration. /// @param time_increment Finite positive duration in input time units. Result 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 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_