00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00037 #ifndef __vtkRungeKutta45_h
00038 #define __vtkRungeKutta45_h
00039
00040 #include "vtkInitialValueProblemSolver.h"
00041
00042 class VTK_COMMON_EXPORT vtkRungeKutta45 : public vtkInitialValueProblemSolver
00043 {
00044 public:
00045 vtkTypeRevisionMacro(vtkRungeKutta45,vtkInitialValueProblemSolver);
00046
00048 static vtkRungeKutta45 *New();
00049
00051
00066 virtual int ComputeNextStep(double* xprev, double* xnext, double t,
00067 double& delT, double maxError, double& error)
00068 {
00069 double minStep = delT;
00070 double maxStep = delT;
00071 double delTActual;
00072 return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
00073 minStep, maxStep, maxError, error);
00074 }
00075 virtual int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
00076 double t, double& delT,
00077 double maxError, double& error)
00078 {
00079 double minStep = delT;
00080 double maxStep = delT;
00081 double delTActual;
00082 return this->ComputeNextStep(xprev, dxprev, xnext, t, delT, delTActual,
00083 minStep, maxStep, maxError, error);
00084 }
00085 virtual int ComputeNextStep(double* xprev, double* xnext,
00086 double t, double& delT, double& delTActual,
00087 double minStep, double maxStep,
00088 double maxError, double& error)
00089 {
00090 return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
00091 minStep, maxStep, maxError, error);
00092 }
00093 virtual int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
00094 double t, double& delT, double& delTActual,
00095 double minStep, double maxStep,
00096 double maxError, double& error);
00098
00099 protected:
00100 vtkRungeKutta45();
00101 ~vtkRungeKutta45();
00102
00103 virtual void Initialize();
00104
00105
00106 static double A[5];
00107 static double B[5][5];
00108 static double C[6];
00109 static double DC[6];
00110
00111 double* NextDerivs[6];
00112
00113 int ComputeAStep(double* xprev, double* dxprev, double* xnext, double t,
00114 double& delT, double& error);
00115
00116 private:
00117 vtkRungeKutta45(const vtkRungeKutta45&);
00118 void operator=(const vtkRungeKutta45&);
00119 };
00120
00121 #endif
00122
00123
00124
00125
00126
00127
00128
00129