OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
TransportMath.h
Go to the documentation of this file.
1 #ifndef CLASSIC_TransportMath_HH
2 #define CLASSIC_TransportMath_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: TransportMath.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1.2.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 // Description:
12 //
13 // Declared template functions:
14 // Elementary functions acting on TransportFun<T,N> objects.
15 //
16 // ------------------------------------------------------------------------
17 // Class category: FixedAlgebra
18 // ------------------------------------------------------------------------
19 //
20 // $Date: 2004/11/18 22:50:59 $
21 // $Author: jsberg $
22 //
23 // ------------------------------------------------------------------------
24 
26 #include "Utilities/DomainError.h"
27 
28 
29 // Class TransportFun; global functions acting on TransportFun objects.
30 // These functions all work in the Transport approximation.
31 // ------------------------------------------------------------------------
32 
34 template <class T, int N>
36 
38 template <class T, int N>
40 
42 template <class T, int N>
44 
46 template <class T, int N>
48 
50 template <class T, int N>
52 
54 template <class T, int N>
56 
58 template <class T, int N>
60 
62 template <class T, int N>
64 
66 template <class T, int N>
68 
70 template <class T, int N>
72 
74 template <class T, int N>
76 
78 template <class T, int N>
80 
82 template <class T, int N>
84 
85 
86 // Implementation
87 // ------------------------------------------------------------------------
88 
89 template <class T, int N>
92  z[0] = std::pow(x[0], y);
93  T fac = T(y) * std::pow(x[0], y - 1);
94  for(int i = 1; i <= N; ++i) z[i] = fac * x[i];
95  return z;
96 }
97 
98 
99 template <class T, int N>
101  T aZero = x[0];
102  if(aZero <= 0.0) throw DomainError("sqrt(const TransportFun &)");
103  T series[2];
104  series[0] = sqrt(aZero);
105  series[1] = series[0] / (2.0 * aZero);
106  return x.taylor(series);
107 }
108 
109 
110 template <class T, int N>
112  T aZero = x[0];
113  T series[2];
114  series[0] = sin(aZero);
115  series[1] = cos(aZero);
116  return x.taylor(series);
117 }
118 
119 
120 template <class T, int N>
122  T aZero = x[0];
123  T series[2];
124  series[0] = cos(aZero);
125  series[1] = - sin(aZero);
126  return x.taylor(series);
127 }
128 
129 
130 template <class T, int N>
132  return sin(x) / cos(x);
133 }
134 
135 
136 template <class T, int N>
138  return cos(x).inverse();
139 }
140 
141 
142 template <class T, int N>
144  return sin(x).inverse();
145 }
146 
147 
148 template <class T, int N>
150  T aZero = x[0];
151  T series[2];
152  series[0] = series[1] = exp(aZero);
153  return x.taylor(series);
154 }
155 
156 
157 template <class T, int N>
159  T aZero = x[0];
160  if(aZero <= 0) throw DomainError("log(const TransportFun &)");
161 
162  T series[2];
163  series[0] = log(aZero);
164  series[1] = T(1) / aZero;
165  return x.taylor(series);
166 }
167 
168 
169 template <class T, int N>
171  T aZero = x[0];
172  T series[2];
173  series[0] = sinh(aZero);
174  series[1] = cosh(aZero);
175  return x.taylor(series);
176 }
177 
178 
179 template <class T, int N>
181  T aZero = x[0];
182  T series[2];
183  series[0] = cosh(aZero);
184  series[1] = sinh(aZero);
185  return x.taylor(series);
186 }
187 
188 
189 template <class T, int N>
191  return sinh(x) / cosh(x);
192 }
193 
194 #endif // CLASSIC_TransportMath_HH
Definition: rbendmap.h:8
Tps< T > sin(const Tps< T > &x)
Sine.
Definition: TpsMath.h:111
Tps< T > exp(const Tps< T > &x)
Exponential.
Definition: TpsMath.h:165
Tps< T > tan(const Tps< T > &x)
Tangent.
Definition: TpsMath.h:147
Tps< T > cot(const Tps< T > &x)
Cotangent.
Tps< T > sec(const Tps< T > &x)
Secant.
Definition: TpsMath.h:153
Tps< T > log(const Tps< T > &x)
Natural logarithm.
Definition: TpsMath.h:182
Tps< T > cosh(const Tps< T > &x)
Hyperbolic cosine.
Definition: TpsMath.h:222
TransportFun taylor(const T series[2]) const
Taylor series.
Tps< T > csc(const Tps< T > &x)
Cosecant.
Definition: TpsMath.h:159
Transport function in N variables of type T.
Definition: TransportFun.h:40
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Definition: TpsMath.h:76
Tps< T > sqrt(const Tps< T > &x)
Square root.
Definition: TpsMath.h:91
Domain error exception.
Definition: DomainError.h:32
Tps< T > cos(const Tps< T > &x)
Cosine.
Definition: TpsMath.h:129
Tps< T > tanh(const Tps< T > &x)
Hyperbolic tangent.
Definition: TpsMath.h:240
Tps< T > sinh(const Tps< T > &x)
Hyperbolic sine.
Definition: TpsMath.h:204