// This may look like C code, but it is really -*- C++ -*-
#ifndef RK4CDIFEQ_H_SEEN
#define RK4CDIFEQ_H_SEEN
#include "difeq.h"
namespace PlanckDPC {
// Runge-Kutta ordre 4 adaptatif
// Runge-Kutta ordre 4 adaptatif, avec correction du pas d'integration
class RK4CDiffEq : public RK4DiffEq {
public:
// Constructeurs. Voir DiffEqSolver
//
RK4CDiffEq();
RK4CDiffEq(DiffEqFunction*);
RK4CDiffEq(DIFEQFCN1);
//
// Precision souhaitee, en absolu ou relatif, independamment pour chaque
// fonction ou globalement
//
RK4CDiffEq& Accuracy(double);
RK4CDiffEq& AbsAccuracy(Vector const& vScal);
RK4CDiffEq& AbsAccuracy(double scal);
RK4CDiffEq& RelAccuracy();
//
// Implementation RK4 adaptatif
virtual void SolveArr(Matrix& y, double* t, double tf, int n);
protected:
// Un pas adaptatif
void RKCStep(Vector& newY, Vector const& y0, Vector const& yScale,
double dttry, double& dtdone, double& dtnext);
double eps;
bool relAccuracy;
Vector accScale;
Vector yTemp; // Pour ne pas reallouer
Vector ySave;
};
} // Fin du namespace
#endif