VTK
vtkRungeKutta45.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkRungeKutta45.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
37 #ifndef __vtkRungeKutta45_h
38 #define __vtkRungeKutta45_h
39 
41 
43 {
44 public:
46  void PrintSelf(ostream& os, vtkIndent indent);
47 
49  static vtkRungeKutta45 *New();
50 
52 
67  virtual int ComputeNextStep(double* xprev, double* xnext, double t,
68  double& delT, double maxError, double& error)
69  {
70  double minStep = delT;
71  double maxStep = delT;
72  double delTActual;
73  return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
74  minStep, maxStep, maxError, error);
75  }
76  virtual int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
77  double t, double& delT,
78  double maxError, double& error)
79  {
80  double minStep = delT;
81  double maxStep = delT;
82  double delTActual;
83  return this->ComputeNextStep(xprev, dxprev, xnext, t, delT, delTActual,
84  minStep, maxStep, maxError, error);
85  }
86  virtual int ComputeNextStep(double* xprev, double* xnext,
87  double t, double& delT, double& delTActual,
88  double minStep, double maxStep,
89  double maxError, double& error)
90  {
91  return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
92  minStep, maxStep, maxError, error);
93  }
94  virtual int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
95  double t, double& delT, double& delTActual,
96  double minStep, double maxStep,
97  double maxError, double& error);
99 
100 protected:
101  vtkRungeKutta45();
102  ~vtkRungeKutta45();
103 
104  virtual void Initialize();
105 
106  // Cash-Karp parameters
107  static double A[5];
108  static double B[5][5];
109  static double C[6];
110  static double DC[6];
111 
112  double* NextDerivs[6];
113 
114  int ComputeAStep(double* xprev, double* dxprev, double* xnext, double t,
115  double& delT, double& error);
116 
117 private:
118  vtkRungeKutta45(const vtkRungeKutta45&); // Not implemented.
119  void operator=(const vtkRungeKutta45&); // Not implemented.
120 };
121 
122 #endif
123 
virtual int ComputeNextStep(double *xprev, double *xnext, double t, double &delT, double maxError, double &error)
virtual void PrintSelf(ostream &os, vtkIndent indent)
virtual int ComputeNextStep(double *xprev, double *xnext, double t, double &delT, double maxError, double &error)
a simple class to control print indentation
Definition: vtkIndent.h:37
Integrate an initial value problem using 5th order Runge-Kutta method with adaptive stepsize control...
#define VTK_COMMON_EXPORT
virtual int ComputeNextStep(double *xprev, double *dxprev, double *xnext, double t, double &delT, double maxError, double &error)
static vtkObject * New()
virtual int ComputeNextStep(double *xprev, double *xnext, double t, double &delT, double &delTActual, double minStep, double maxStep, double maxError, double &error)
Integrate a set of ordinary differential equations (initial value problem) in time.