LORENE
change_var.C
1/*
2 * Copyright (c) 2003 Philippe Grandclement
3 *
4 * This file is part of LORENE.
5 *
6 * LORENE is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 * LORENE is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with LORENE; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 */
20
21char change_var_C[] = "$Header: /cvsroot/Lorene/C++/Source/Change_var/change_var.C,v 1.7 2014/10/13 08:52:46 j_novak Exp $" ;
22
23/*
24 * $Id: change_var.C,v 1.7 2014/10/13 08:52:46 j_novak Exp $
25 * $Log: change_var.C,v $
26 * Revision 1.7 2014/10/13 08:52:46 j_novak
27 * Lorene classes and functions now belong to the namespace Lorene.
28 *
29 * Revision 1.6 2014/10/06 15:13:03 j_novak
30 * Modified #include directives to use c++ syntax.
31 *
32 * Revision 1.5 2004/05/14 08:51:01 p_grandclement
33 * *** empty log message ***
34 *
35 * Revision 1.4 2004/03/05 09:18:48 p_grandclement
36 * Addition of operator sec_order_r2
37 *
38 * Revision 1.3 2003/12/11 16:10:38 e_gourgoulhon
39 * Changed #include <iostream.h> to #include "headcpp.h".
40 *
41 * Revision 1.2 2003/12/11 15:53:31 p_grandclement
42 * includ stdlib
43 *
44 * Revision 1.1 2003/12/11 14:48:48 p_grandclement
45 * Addition of ALL (and that is a lot !) the files needed for the general elliptic solver ... UNDER DEVELOPEMENT...
46 *
47 *
48 * $Header: /cvsroot/Lorene/C++/Source/Change_var/change_var.C,v 1.7 2014/10/13 08:52:46 j_novak Exp $
49 *
50 */
51
52#include "headcpp.h"
53
54#include <cmath>
55#include <cstdlib>
56
57#include "proto.h"
58#include "change_var.h"
59
60// Les fonctions elementaires dont on a besoin
61namespace Lorene {
62double one (double) {
63 return 1 ;
64}
65
66double zero (double) {
67 return 0 ;
68}
69
70double ide (double x) {
71 return x ;
72}
73
74double part_ln (double x) {
75 return 1+x*x*log(x)/3. ;
76}
77
78double part_ln_der (double x) {
79 return 2./3.*x*log(x)+x/3. ;
80}
81
82double moins_log (double x) {
83 return -log(x) ;
84}
85
86double plus_sur (double x) {
87 return 1./x ;
88}
89
90double plus_log (double x) {
91 return log(x) ;
92}
93
94double moins_sur (double x) {
95 return -1./x ;
96}
97
98// Construction du changement de variable ...
99Change_var::Change_var (int type_change) {
100
101 switch (type_change) {
102 case STD:
103 func_F = zero ;
104 der_F = zero ;
105 func_G = one ;
106 der_G = zero ;
107 break ;
108
109 case W_BETA:
110 func_F = one ;
111 der_F = zero ;
112 func_G = ide ;
113 der_G = one ;
114 break ;
115
116 case W_BETA_INF:
117 func_F = part_ln ;
118 der_F = part_ln_der ;
119 func_G = ide ;
120 der_G = one ;
121 break ;
122
123 case H_BETA:
124 func_F = one ;
125 der_F = zero ;
126 func_G = one ;
127 der_G = zero ;
128 break ;
129
130 case LAMBDA_RN:
131 func_F = moins_log ;
132 der_F = moins_sur ;
133 func_G = one ;
134 der_G = zero ;
135 break ;
136
137 case NU_RN:
138 func_F = plus_log ;
139 der_F = plus_sur ;
140 func_G = one ;
141 der_G = zero ;
142 break ;
143
144 default:
145 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
146 abort() ;
147 break ;
148 }
149
150 mult_F = 1 ;
151 add_F = 0 ;
152
153}
154
155
156// Construction du changement de variable ...
157Change_var::Change_var (int type_change, double mult) {
158
159 switch (type_change) {
160 case STD:
161 func_F = zero ;
162 der_F = zero ;
163 func_G = one ;
164 der_G = zero ;
165 break ;
166
167 case W_BETA:
168 func_F = one ;
169 der_F = zero ;
170 func_G = ide ;
171 der_G = one ;
172 break ;
173
174 case W_BETA_INF:
175 func_F = part_ln ;
176 der_F = part_ln_der ;
177 func_G = ide ;
178 der_G = one ;
179 break ;
180
181 case H_BETA:
182 func_F = one ;
183 der_F = zero ;
184 func_G = one ;
185 der_G = zero ;
186 break ;
187
188 case LAMBDA_RN:
189 func_F = moins_log ;
190 der_F = moins_sur ;
191 func_G = one ;
192 der_G = zero ;
193 break ;
194
195 case NU_RN:
196 func_F = plus_log ;
197 der_F = plus_sur ;
198 func_G = one ;
199 der_G = zero ;
200 break ;
201
202 default:
203 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
204 abort() ;
205 break ;
206 }
207
208 mult_F = mult ;
209 add_F = 0 ;
210
211}
212
213// Construction du changement de variable ...
214Change_var::Change_var (int type_change, double mult, double add) {
215
216 switch (type_change) {
217 case STD:
218 func_F = zero ;
219 der_F = zero ;
220 func_G = one ;
221 der_G = zero ;
222 break ;
223
224 case W_BETA:
225 func_F = one ;
226 der_F = zero ;
227 func_G = ide ;
228 der_G = one ;
229 break ;
230
231 case W_BETA_INF:
232 func_F = part_ln ;
233 der_F = part_ln_der ;
234 func_G = ide ;
235 der_G = one ;
236 break ;
237
238 case H_BETA:
239 func_F = one ;
240 der_F = zero ;
241 func_G = one ;
242 der_G = zero ;
243 break ;
244
245 case LAMBDA_RN:
246 func_F = moins_log ;
247 der_F = moins_sur ;
248 func_G = one ;
249 der_G = zero ;
250 break ;
251
252 case NU_RN:
253 func_F = plus_log ;
254 der_F = plus_sur ;
255 func_G = one ;
256 der_G = zero ;
257 break ;
258
259 default:
260 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
261 abort() ;
262 break ;
263 }
264
265 mult_F = mult ;
266 add_F = add ;
267
268}
269
270
272 func_F(so.func_F), der_F(so.der_F), func_G(so.func_G), der_G(so.der_G) {}
273
275
276double Change_var::val_F (double air) {
277 return (mult_F * (*func_F)(air) + add_F) ;
278}
279
280double Change_var::val_der_F (double air) {
281 return (mult_F * (*der_F)(air)) ;
282}
283
284double Change_var::val_G (double air) {
285 return (*func_G)(air) ;
286}
287
288double Change_var::val_der_G (double air) {
289 return (*der_G)(air) ;
290}
291
292}
This class defines a variable change to be used when solving elliptic equations.
Definition change_var.h:98
double mult_F
Pointer on the derivative of .
Definition change_var.h:106
double(* func_G)(double)
Pointer on the derivative of .
Definition change_var.h:103
double add_F
Multiplicative factor for F ## PROVISORY.
Definition change_var.h:107
double(* der_F)(double)
Pointer on the function .
Definition change_var.h:102
double val_F(double x)
Standard destructor.
Definition change_var.C:276
double val_der_F(double x)
Returns the value of at {\tt x}.
Definition change_var.C:280
Change_var(int var)
Additive factor for F ## PROVISORY.
Definition change_var.C:99
double val_der_G(double x)
Returns the value of at {\tt x}.
Definition change_var.C:288
double(* der_G)(double)
Pointer on the function .
Definition change_var.h:104
~Change_var()
Constructor by copy.
Definition change_var.C:274
double val_G(double x)
Returns the value of at {\tt x}.
Definition change_var.C:284
Cmp log(const Cmp &)
Neperian logarithm.
Definition cmp_math.C:296
Lorene prototypes.
Definition app_hor.h:64