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