00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 char change_var_C[] = "$Header: /cvsroot/Lorene/C++/Source/Change_var/change_var.C,v 1.5 2004/05/14 08:51:01 p_grandclement Exp $" ;
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #include "headcpp.h"
00047
00048 #include <math.h>
00049 #include <stdlib.h>
00050
00051 #include "proto.h"
00052 #include "change_var.h"
00053
00054
00055 double one (double) {
00056 return 1 ;
00057 }
00058
00059 double zero (double) {
00060 return 0 ;
00061 }
00062
00063 double ide (double x) {
00064 return x ;
00065 }
00066
00067 double part_ln (double x) {
00068 return 1+x*x*log(x)/3. ;
00069 }
00070
00071 double part_ln_der (double x) {
00072 return 2./3.*x*log(x)+x/3. ;
00073 }
00074
00075 double moins_log (double x) {
00076 return -log(x) ;
00077 }
00078
00079 double plus_sur (double x) {
00080 return 1./x ;
00081 }
00082
00083 double plus_log (double x) {
00084 return log(x) ;
00085 }
00086
00087 double moins_sur (double x) {
00088 return -1./x ;
00089 }
00090
00091
00092 Change_var::Change_var (int type_change) {
00093
00094 switch (type_change) {
00095 case STD:
00096 func_F = zero ;
00097 der_F = zero ;
00098 func_G = one ;
00099 der_G = zero ;
00100 break ;
00101
00102 case W_BETA:
00103 func_F = one ;
00104 der_F = zero ;
00105 func_G = ide ;
00106 der_G = one ;
00107 break ;
00108
00109 case W_BETA_INF:
00110 func_F = part_ln ;
00111 der_F = part_ln_der ;
00112 func_G = ide ;
00113 der_G = one ;
00114 break ;
00115
00116 case H_BETA:
00117 func_F = one ;
00118 der_F = zero ;
00119 func_G = one ;
00120 der_G = zero ;
00121 break ;
00122
00123 case LAMBDA_RN:
00124 func_F = moins_log ;
00125 der_F = moins_sur ;
00126 func_G = one ;
00127 der_G = zero ;
00128 break ;
00129
00130 case NU_RN:
00131 func_F = plus_log ;
00132 der_F = plus_sur ;
00133 func_G = one ;
00134 der_G = zero ;
00135 break ;
00136
00137 default:
00138 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
00139 abort() ;
00140 break ;
00141 }
00142
00143 mult_F = 1 ;
00144 add_F = 0 ;
00145
00146 }
00147
00148
00149
00150 Change_var::Change_var (int type_change, double mult) {
00151
00152 switch (type_change) {
00153 case STD:
00154 func_F = zero ;
00155 der_F = zero ;
00156 func_G = one ;
00157 der_G = zero ;
00158 break ;
00159
00160 case W_BETA:
00161 func_F = one ;
00162 der_F = zero ;
00163 func_G = ide ;
00164 der_G = one ;
00165 break ;
00166
00167 case W_BETA_INF:
00168 func_F = part_ln ;
00169 der_F = part_ln_der ;
00170 func_G = ide ;
00171 der_G = one ;
00172 break ;
00173
00174 case H_BETA:
00175 func_F = one ;
00176 der_F = zero ;
00177 func_G = one ;
00178 der_G = zero ;
00179 break ;
00180
00181 case LAMBDA_RN:
00182 func_F = moins_log ;
00183 der_F = moins_sur ;
00184 func_G = one ;
00185 der_G = zero ;
00186 break ;
00187
00188 case NU_RN:
00189 func_F = plus_log ;
00190 der_F = plus_sur ;
00191 func_G = one ;
00192 der_G = zero ;
00193 break ;
00194
00195 default:
00196 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
00197 abort() ;
00198 break ;
00199 }
00200
00201 mult_F = mult ;
00202 add_F = 0 ;
00203
00204 }
00205
00206
00207 Change_var::Change_var (int type_change, double mult, double add) {
00208
00209 switch (type_change) {
00210 case STD:
00211 func_F = zero ;
00212 der_F = zero ;
00213 func_G = one ;
00214 der_G = zero ;
00215 break ;
00216
00217 case W_BETA:
00218 func_F = one ;
00219 der_F = zero ;
00220 func_G = ide ;
00221 der_G = one ;
00222 break ;
00223
00224 case W_BETA_INF:
00225 func_F = part_ln ;
00226 der_F = part_ln_der ;
00227 func_G = ide ;
00228 der_G = one ;
00229 break ;
00230
00231 case H_BETA:
00232 func_F = one ;
00233 der_F = zero ;
00234 func_G = one ;
00235 der_G = zero ;
00236 break ;
00237
00238 case LAMBDA_RN:
00239 func_F = moins_log ;
00240 der_F = moins_sur ;
00241 func_G = one ;
00242 der_G = zero ;
00243 break ;
00244
00245 case NU_RN:
00246 func_F = plus_log ;
00247 der_F = plus_sur ;
00248 func_G = one ;
00249 der_G = zero ;
00250 break ;
00251
00252 default:
00253 cout << "Unknown type in Change_var::Change_var(int)" << endl ;
00254 abort() ;
00255 break ;
00256 }
00257
00258 mult_F = mult ;
00259 add_F = add ;
00260
00261 }
00262
00263
00264 Change_var::Change_var (const Change_var& so) :
00265 func_F(so.func_F), der_F(so.der_F), func_G(so.func_G), der_G(so.der_G) {}
00266
00267 Change_var::~Change_var() {}
00268
00269 double Change_var::val_F (double air) {
00270 return (mult_F * (*func_F)(air) + add_F) ;
00271 }
00272
00273 double Change_var::val_der_F (double air) {
00274 return (mult_F * (*der_F)(air)) ;
00275 }
00276
00277 double Change_var::val_G (double air) {
00278 return (*func_G)(air) ;
00279 }
00280
00281 double Change_var::val_der_G (double air) {
00282 return (*der_G)(air) ;
00283 }
00284