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 
21 char 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
61 namespace Lorene {
62 double one (double) {
63  return 1 ;
64 }
65 
66 double zero (double) {
67  return 0 ;
68 }
69 
70 double ide (double x) {
71  return x ;
72 }
73 
74 double part_ln (double x) {
75  return 1+x*x*log(x)/3. ;
76 }
77 
78 double part_ln_der (double x) {
79  return 2./3.*x*log(x)+x/3. ;
80 }
81 
82 double moins_log (double x) {
83  return -log(x) ;
84 }
85 
86 double plus_sur (double x) {
87  return 1./x ;
88 }
89 
90 double plus_log (double x) {
91  return log(x) ;
92 }
93 
94 double moins_sur (double x) {
95  return -1./x ;
96 }
97 
98 // Construction du changement de variable ...
99 Change_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 ...
157 Change_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 ...
214 Change_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 
271 Change_var::Change_var (const Change_var& so) :
272  func_F(so.func_F), der_F(so.der_F), func_G(so.func_G), der_G(so.der_G) {}
273 
275 
276 double Change_var::val_F (double air) {
277  return (mult_F * (*func_F)(air) + add_F) ;
278 }
279 
280 double Change_var::val_der_F (double air) {
281  return (mult_F * (*der_F)(air)) ;
282 }
283 
284 double Change_var::val_G (double air) {
285  return (*func_G)(air) ;
286 }
287 
288 double 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