00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00052 #ifndef __vtkRungeKutta45_h
00053 #define __vtkRungeKutta45_h
00054
00055 #include "vtkInitialValueProblemSolver.h"
00056
00057 class VTK_COMMON_EXPORT vtkRungeKutta45 : public vtkInitialValueProblemSolver
00058 {
00059 public:
00060 vtkTypeRevisionMacro(vtkRungeKutta45,vtkInitialValueProblemSolver);
00061
00063 static vtkRungeKutta45 *New();
00064
00066
00081 virtual int ComputeNextStep(float* xprev, float* xnext, float t,
00082 float& delT, float maxError, float& error)
00083 {
00084 float minStep = delT;
00085 float maxStep = delT;
00086 float delTActual;
00087 return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
00088 minStep, maxStep, maxError, error);
00089 }
00090 virtual int ComputeNextStep(float* xprev, float* dxprev, float* xnext,
00091 float t, float& delT,
00092 float maxError, float& error)
00093 {
00094 float minStep = delT;
00095 float maxStep = delT;
00096 float delTActual;
00097 return this->ComputeNextStep(xprev, dxprev, xnext, t, delT, delTActual,
00098 minStep, maxStep, maxError, error);
00099 }
00100 virtual int ComputeNextStep(float* xprev, float* xnext,
00101 float t, float& delT, float& delTActual,
00102 float minStep, float maxStep,
00103 float maxError, float& error)
00104 {
00105 return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
00106 minStep, maxStep, maxError, error);
00107 }
00108 virtual int ComputeNextStep(float* xprev, float* dxprev, float* xnext,
00109 float t, float& delT, float& delTActual,
00110 float minStep, float maxStep,
00111 float maxError, float& error);
00113
00114 protected:
00115 vtkRungeKutta45();
00116 ~vtkRungeKutta45();
00117
00118 virtual void Initialize();
00119
00120
00121 static double A[5];
00122 static double B[5][5];
00123 static double C[6];
00124 static double DC[6];
00125
00126 float* NextDerivs[6];
00127
00128 int ComputeAStep(float* xprev, float* dxprev, float* xnext, float t,
00129 float& delT, float& error);
00130
00131 private:
00132 vtkRungeKutta45(const vtkRungeKutta45&);
00133 void operator=(const vtkRungeKutta45&);
00134 };
00135
00136 #endif
00137
00138
00139
00140
00141
00142
00143
00144