/usr/include/vtk-7.1/vtkRungeKutta45.h is in libvtk7-dev 7.1.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkRungeKutta45.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkRungeKutta45
* @brief Integrate an initial value problem using 5th
* order Runge-Kutta method with adaptive stepsize control.
*
*
* This is a concrete sub-class of vtkInitialValueProblemSolver.
* It uses a 5th order Runge-Kutta method with stepsize control to obtain
* the values of a set of functions at the next time step. The stepsize
* is adjusted by calculating an estimated error using an embedded 4th
* order Runge-Kutta formula:
* Press, W. H. et al., 1992, Numerical Recipes in Fortran, Second
* Edition, Cambridge University Press
* Cash, J.R. and Karp, A.H. 1990, ACM Transactions on Mathematical
* Software, vol 16, pp 201-222
*
* @sa
* vtkInitialValueProblemSolver vtkRungeKutta4 vtkRungeKutta2 vtkFunctionSet
*/
#ifndef vtkRungeKutta45_h
#define vtkRungeKutta45_h
#include "vtkCommonMathModule.h" // For export macro
#include "vtkInitialValueProblemSolver.h"
class VTKCOMMONMATH_EXPORT vtkRungeKutta45 : public vtkInitialValueProblemSolver
{
public:
vtkTypeMacro(vtkRungeKutta45,vtkInitialValueProblemSolver);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
/**
* Construct a vtkRungeKutta45 with no initial FunctionSet.
*/
static vtkRungeKutta45 *New();
//@{
/**
* Given initial values, xprev , initial time, t and a requested time
* interval, delT calculate values of x at t+delTActual (xnext).
* Possibly delTActual != delT. This may occur
* because this solver supports adaptive stepsize control. It tries
* to change to stepsize such that
* the (estimated) error of the integration is less than maxError.
* The solver will not set the stepsize smaller than minStep or
* larger than maxStep (note that maxStep and minStep should both
* be positive, whereas delT can be negative).
* Also note that delT is an in/out argument. vtkRungeKutta45
* will modify delT to reflect the best (estimated) size for the next
* integration step.
* An estimated value for the error is returned (by reference) in error.
* This is the norm of the error vector if there are more than
* one function to be integrated.
* This method returns an error code representing the nature of
* the failure:
* OutOfDomain = 1,
* NotInitialized = 2,
* UnexpectedValue = 3
*/
int ComputeNextStep(double* xprev, double* xnext,
double t, double& delT,
double maxError, double& error) VTK_OVERRIDE
{
double minStep = delT;
double maxStep = delT;
double delTActual;
return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
minStep, maxStep, maxError, error);
}
int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
double t, double& delT,
double maxError, double& error) VTK_OVERRIDE
{
double minStep = delT;
double maxStep = delT;
double delTActual;
return this->ComputeNextStep(xprev, dxprev, xnext, t, delT, delTActual,
minStep, maxStep, maxError, error);
}
int ComputeNextStep(double* xprev, double* xnext,
double t, double& delT, double& delTActual,
double minStep, double maxStep,
double maxError, double& error) VTK_OVERRIDE
{
return this->ComputeNextStep(xprev, 0, xnext, t, delT, delTActual,
minStep, maxStep, maxError, error);
}
int ComputeNextStep(double* xprev, double* dxprev, double* xnext,
double t, double& delT, double& delTActual,
double minStep, double maxStep,
double maxError, double& error) VTK_OVERRIDE;
//@}
protected:
vtkRungeKutta45();
~vtkRungeKutta45() VTK_OVERRIDE;
void Initialize() VTK_OVERRIDE;
// Cash-Karp parameters
static double A[5];
static double B[5][5];
static double C[6];
static double DC[6];
double* NextDerivs[6];
int ComputeAStep(double* xprev, double* dxprev, double* xnext, double t,
double& delT, double& delTActual, double& error);
private:
vtkRungeKutta45(const vtkRungeKutta45&) VTK_DELETE_FUNCTION;
void operator=(const vtkRungeKutta45&) VTK_DELETE_FUNCTION;
};
#endif
|