PLUTO
math_tools.h
Go to the documentation of this file.
1 /* ///////////////////////////////////////////////////////////////////// */
2 /*!
3  \file
4  \brief Math tools header file.
5 
6  This module provides a number of standard numerical routines
7  to achieve simple basic tasks such as
8 
9  - Numerical quadrature: GaussQuadrature();
10  - LU decomposition functions: LUDecompose(), LUBackSubst();
11  - Scalar and multi-dim. root finder methods: Brent(), Ridder(), Brodyen();
12  - Vector transformation, VectorCartesianComponents();
13  - Ordinary differential equation solvers: ODESolve() with RK4Solve()
14  or CK45Solve();
15  - Table handling: LocateIndex(), Table2DInterpolate(), GenerateTable2D(),
16  InverseLookupTable2D().
17 
18 
19  \authors A. Mignone (mignone@ph.unito.it)
20  \date Sep 22, 2014
21 */
22 /* ///////////////////////////////////////////////////////////////////// */
23 
24 /* ---- ODE solver labels ---- */
25 
26 #define ODE_RK2 2
27 #define ODE_RK4 4
28 #define ODE_CK45 45
29 
30 #define MAXITS 200
31 #define EPS_FD_JAC 1.0e-7
32 #define TOLF EPS_FD_JAC
33 #define TOLX EPS_FD_JAC
34 #define STPMX 100.0
35 #define TOLMIN 1.0e-6
36 #define ALF 1.0e-4
37 #define MAX_ROOT_EQNS 8
38 
39 /* ***********************************************************
40  \cond REPEAT_FUNCTION_DOCUMENTATION_IN_HEADER_FILES
41  Function prototyping
42  *********************************************************** */
43 
44 /* -- Functions containd in math_lu_decomp.c -- */
45 
46 int LUDecompose (double **, int, int *, double *);
47 void LUBackSubst (double **, int, int *, double b[]);
48 
49 /* -- Functions containd in math_misc.c -- */
50 
51 double BesselJ0(double);
52 double BesselJ1(double);
53 double BesselIO(double);
54 double BesselI1(double);
55 double BesselKO(double);
56 double BesselK1(double);
57 double BesselKn(int, double);
58 double RandomNumber (double, double);
59 void VectorCartesianComponents(double *, double, double, double);
60 
61 /* -- Functions containd in math_ode.c -- */
62 
63 void ODE_Solve(double *, int, double, double, double,
64  void (*rhs)(double, double *, double *), int method);
65 
66 /* -- Functions contained in math_qr_decomp.c -- */
67 
68 void QRUpdate(double **, double **, int , double *, double *);
69 void RSolve(double **, int , double *, double *);
70 void QRSolve(double **, int , double *, double *, double *);
71 void QRDecompose (double **, int , double *, double *, int *);
72 void rotate(double **, double **, int , int , double , double );
73 
74 /* -- Functions containd in math_quadrature.c -- */
75 
76 double GaussQuadrature(double (*func)(double), double, double, int, int);
77 
78 /* -- Functions containd in math_root_finders.c -- */
79 
80 int Brent(double (*func)(double, void *), void *, double, double,
81  double, double, double *);
82 
83 int Ridder(double (*func)(double, void *), void *,
84  double, double, double, double, double *);
85 
86 void FDJacobian(int , double *, double *, double **,
87  void (*vecfunc)(int , double *, double *));
88 void LineSearch (int , double *, double , double *,
89  double *, double *, double *, double *, double ,
90  int *, void (*vecfunc)(int , double *, double *));
91 void Broyden(double *, int , int *, void (*vecfunc)(int, double *, double *));
92 
93 
94 /* -- Functions containd in math_table2D.c -- */
95 
96 void InitializeTable2D (Table2D *, double, double, int, double, double, int);
97 void FinalizeTable2D (Table2D *);
98 int Table2DInterpolate (Table2D *, double, double, double *);
99 int InverseLookupTable2D (Table2D *, double, double, double *);
100 void WriteBinaryTable2D (char *, Table2D *);
101 
102 /* -- Functions containd in math_interp.c -- */
103 
104 void MonotoneSplineCoeffs (double *x, double *y, double *dydx, int n,
105  double *a, double *b, double *c, double *d);
106 
107 void SplineCoeffs (double *x, double *f, double dfL, double dfR, int n,
108  double *a, double *b, double *c, double *d);
109 
110 void TridiagonalSolve(double *, double *, double *, double *, double *, int);
111 
112 /* \endcond */
static double a
Definition: init.c:135
void QRDecompose(double **a, int n, double *c, double *d, int *sing)
double BesselK1(double x)
Definition: math_misc.c:159
double RandomNumber(double rmin, double rmax)
Definition: math_misc.c:209
static int n
Definition: analysis.c:3
void FDJacobian(int n, double x[], double fv[], double **df, void(*vecfunc)(int, double[], double[]))
void LineSearch(int n, double xold[], double fold, double g[], double p[], double x[], double mf[], double *f, double stpmax, int *check, void(*vecfunc)(int, double[], double[]))
double BesselI1(double x)
Definition: math_misc.c:107
double BesselJ0(double x)
Definition: math_misc.c:13
void TridiagonalSolve(double *am, double *a0, double *ap, double *b, double *y, int n)
void rotate(double **r, double **qt, int n, int i, double a, double b)
void SplineCoeffs(double *x, double *f, double dfL, double dfR, int n, double *a, double *b, double *c, double *d)
Definition: math_interp.c:95
void WriteBinaryTable2D(char *fname, Table2D *tab)
Definition: math_table2D.c:528
void QRUpdate(double **r, double **qt, int n, double *u, double *v)
void LUBackSubst(double **a, int n, int *indx, double b[])
int Brent(double(*Func)(double, void *), void *param, double x1, double x2, double abs_acc, double rel_acc, double *xroot)
int InverseLookupTable2D(Table2D *tab, double y, double f, double *x)
Definition: math_table2D.c:196
void ODE_Solve(double *y0, int nvar, double xbeg, double xend, double dx, void(*rhs)(double, double *, double *), int method)
Definition: math_ode.c:23
void RSolve(double **a, int n, double *d, double *b)
void MonotoneSplineCoeffs(double *x, double *y, double *dydx, int n, double *a, double *b, double *c, double *d)
Definition: math_interp.c:13
double GaussQuadrature(double(*func)(double), double xb, double xe, int nstep, int order)
int Table2DInterpolate(Table2D *tab, double x, double y, double *f)
Definition: math_table2D.c:430
void QRSolve(double **a, int n, double *c, double *d, double *b)
double BesselJ1(double x)
Definition: math_misc.c:45
void Broyden(double x[], int n, int *check, void(*vecfunc)(int, double[], double[]))
tuple c
Definition: menu.py:375
void VectorCartesianComponents(double *v, double x1, double x2, double x3)
Definition: math_misc.c:227
void InitializeTable2D(Table2D *tab, double xmin, double xmax, int nx, double ymin, double ymax, int ny)
Definition: math_table2D.c:15
double BesselKn(int n, double x)
Definition: math_misc.c:184
int Ridder(double(*Func)(double, void *), void *param, double x1, double x2, double abs_acc, double rel_acc, double *xroot)
void FinalizeTable2D(Table2D *tab)
Definition: math_table2D.c:121
int LUDecompose(double **a, int n, int *indx, double *d)