51 lines
1.7 KiB
C++
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_
|