change_var.C

00001 /*
00002  *   Copyright (c) 2003 Philippe Grandclement
00003  *
00004  *   This file is part of LORENE.
00005  *
00006  *   LORENE is free software; you can redistribute it and/or modify
00007  *   it under the terms of the GNU General Public License version 2
00008  *   as published by the Free Software Foundation.
00009  *
00010  *   LORENE is distributed in the hope that it will be useful,
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  *   GNU General Public License for more details.
00014  *
00015  *   You should have received a copy of the GNU General Public License
00016  *   along with LORENE; if not, write to the Free Software
00017  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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  * $Id: change_var.C,v 1.5 2004/05/14 08:51:01 p_grandclement Exp $
00025  * $Log: change_var.C,v $
00026  * Revision 1.5  2004/05/14 08:51:01  p_grandclement
00027  * *** empty log message ***
00028  *
00029  * Revision 1.4  2004/03/05 09:18:48  p_grandclement
00030  * Addition of operator sec_order_r2
00031  *
00032  * Revision 1.3  2003/12/11 16:10:38  e_gourgoulhon
00033  * Changed #include <iostream.h> to #include "headcpp.h".
00034  *
00035  * Revision 1.2  2003/12/11 15:53:31  p_grandclement
00036  * includ stdlib
00037  *
00038  * Revision 1.1  2003/12/11 14:48:48  p_grandclement
00039  * Addition of ALL (and that is a lot !) the files needed for the general elliptic solver ... UNDER DEVELOPEMENT...
00040  *
00041  * 
00042  * $Header: /cvsroot/Lorene/C++/Source/Change_var/change_var.C,v 1.5 2004/05/14 08:51:01 p_grandclement Exp $
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 // Les fonctions elementaires dont on a besoin
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 // Construction du changement de variable ...
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 // Construction du changement de variable ...
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 // Construction du changement de variable ...
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 

Generated on Tue Feb 7 01:35:15 2012 for LORENE by  doxygen 1.4.6