68 const std::vector<double>& values) {
69 if (times.size() != values.size()) {
71 "SplineTimeDependence::SplineTimeDependence",
72 "Times and values should be of equal length");
74 if (times.size() <= splineOrder) {
76 "SplineTimeDependence::SplineTimeDependence",
77 "Times and values should be of length > splineOrder");
79 if (splineOrder != 1 and splineOrder != 3) {
81 "SplineTimeDependence::SplineTimeDependence",
82 "Only linear or cubic interpolation is supported");
84 for (
size_t i = 0; i < times.size() - 1; ++i) {
85 if (times[i] >= times[i + 1]) {
87 "SplineTimeDependence::SplineTimeDependence",
88 "Times should increase monotonically");
95 if (splineOrder == 1) {
96 spline_m = gsl_spline_alloc (gsl_interp_linear, times.size());
98 spline_m = gsl_spline_alloc (gsl_interp_cspline, times.size());
102 gsl_spline_init(
spline_m, ×[0], &values[0], times.size());
103 if (
acc_m ==
nullptr) {
104 acc_m = gsl_interp_accel_alloc();
106 gsl_interp_accel_reset(
acc_m);