map_et_deriv.C

00001 /*
00002  * Computations of Cmp partial derivatives for a Map_et mapping
00003  */
00004 
00005 /*
00006  *   Copyright (c) 1999-2003 Eric Gourgoulhon
00007  *
00008  *   This file is part of LORENE.
00009  *
00010  *   LORENE is free software; you can redistribute it and/or modify
00011  *   it under the terms of the GNU General Public License as published by
00012  *   the Free Software Foundation; either version 2 of the License, or
00013  *   (at your option) any later version.
00014  *
00015  *   LORENE is distributed in the hope that it will be useful,
00016  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *   GNU General Public License for more details.
00019  *
00020  *   You should have received a copy of the GNU General Public License
00021  *   along with LORENE; if not, write to the Free Software
00022  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00023  *
00024  */
00025 
00026 
00027 char map_et_deriv_C[] = "$Header: /cvsroot/Lorene/C++/Source/Map/map_et_deriv.C,v 1.9 2012/01/17 10:33:33 j_penner Exp $" ;
00028 
00029 /*
00030  * $Id: map_et_deriv.C,v 1.9 2012/01/17 10:33:33 j_penner Exp $
00031  * $Log: map_et_deriv.C,v $
00032  * Revision 1.9  2012/01/17 10:33:33  j_penner
00033  * added a derivative with respect to the computational coordinate xi
00034  *
00035  * Revision 1.8  2004/06/22 08:49:58  p_grandclement
00036  * Addition of everything needed for using the logarithmic mapping
00037  *
00038  * Revision 1.7  2004/05/07 13:19:24  j_novak
00039  * Prevention of warnings
00040  *
00041  * Revision 1.6  2004/04/08 17:16:07  f_limousin
00042  * Add comments
00043  *
00044  * Revision 1.5  2004/04/08 16:39:23  f_limousin
00045  * Add the case dzpuis different of 0 for methods dsdr, srdsdt, srstdsdp
00046  * for Scalar's.
00047  *
00048  * Revision 1.4  2004/01/26 16:16:17  j_novak
00049  * Methods of gradient for Scalar s. The input can have any dzpuis.
00050  *
00051  * Revision 1.3  2003/10/20 19:45:53  e_gourgoulhon
00052  * check_dzpuis in dsdt and stdsdp.
00053  *
00054  * Revision 1.2  2003/10/15 10:37:43  e_gourgoulhon
00055  * Added new methods dsdt and stdsdp.
00056  *
00057  * Revision 1.1.1.1  2001/11/20 15:19:27  e_gourgoulhon
00058  * LORENE
00059  *
00060  * Revision 1.3  2000/02/25  09:01:28  eric
00061  * Remplacement de ci.get_dzpuis() == 0  par ci.check_dzpuis(0).
00062  * Suppression de l'affectation des dzpuis Mtbl/Mtnl_cf a la fin car
00063  *   c'est fait par Cmp::set_dzpuis.
00064  *
00065  * Revision 1.2  2000/01/26  13:09:52  eric
00066  * Reprototypage complet des routines de derivation:
00067  * le resultat est desormais suppose alloue a l'exterieur de la routine
00068  * et est passe en argument (Cmp& resu), si bien que le prototypage
00069  * complet devient:
00070  *            void DERIV(const Cmp& ci, Cmp& resu) const
00071  *
00072  * Revision 1.1  1999/12/17  12:59:29  eric
00073  * Initial revision
00074  *
00075  *
00076  * $Header: /cvsroot/Lorene/C++/Source/Map/map_et_deriv.C,v 1.9 2012/01/17 10:33:33 j_penner Exp $
00077  *
00078  */
00079 
00080 
00081 // Header Lorene
00082 #include "map.h"
00083 #include "cmp.h"
00084 #include "tensor.h"
00085 
00086             //-----------------------//
00087             //        d/d\xi         //
00088             //-----------------------//
00089             
00090             
00091 void Map_et::dsdxi(const Cmp& ci, Cmp& resu) const {
00092 
00093     assert (ci.get_etat() != ETATNONDEF) ; 
00094     assert (ci.get_mp()->get_mg() == mg) ; 
00095     
00096     if (ci.get_etat() == ETATZERO) {
00097     resu.set_etat_zero() ; 
00098     }
00099     else {    
00100     assert( ci.get_etat() == ETATQCQ ) ; 
00101     assert( ci.check_dzpuis(0) ) ; 
00102 
00103     (ci.va).coef() ;    // (ci.va).c_cf is up to date
00104     
00105     resu = (ci.va).dsdx() ;     //  dsdx == d/d\xi
00106     
00107     (resu.va).base = (ci.va).dsdx().base ;  // same basis as d/dxi
00108     
00109     int nz = mg->get_nzone() ; 
00110     if (mg->get_type_r(nz-1) == UNSURR) {
00111         resu.set_dzpuis(2) ;        // r^2 d/dr has been computed in the
00112                         // external domain
00113     }
00114 
00115     }
00116     
00117 }
00118 
00119 void Map_et::dsdxi(const Scalar& uu, Scalar& resu) const {
00120 
00121   assert (uu.get_etat() != ETATNONDEF) ; 
00122   assert (uu.get_mp().get_mg() == mg) ; 
00123     
00124   if (uu.get_etat() == ETATZERO) {
00125     resu.set_etat_zero() ; 
00126   }
00127   else {   
00128     assert( uu.get_etat() == ETATQCQ ) ; 
00129 
00130     const Valeur& uuva = uu.get_spectral_va() ; 
00131 
00132     uuva.coef() ;    // (uu.va).c_cf is up to date
00133     
00134     int nz = mg->get_nzone() ; 
00135     int nzm1 = nz - 1 ;
00136 
00137     if ( uu.get_dzpuis() == 0 ) {
00138       resu = uuva.dsdx() ;     //  dsdxi = d/d\xi
00139     
00140       if (mg->get_type_r(nzm1) == UNSURR) {
00141     resu.set_dzpuis(2) ;    // r^2 d/dr has been computed in the
00142                             // external domain
00143       } 
00144     }
00145     else {
00146       assert(mg->get_type_r(nzm1) == UNSURR) ;
00147 
00148       int dzp = uu.get_dzpuis() ;
00149       
00150       resu = uuva.dsdx() ;
00151       resu.annule_domain(nzm1) ;  // zero in the CED
00152       
00153       // Special treatment in the CED
00154       Valeur tmp_ced = uuva.dsdx() ;
00155       Base_val sauve_base( tmp_ced.get_base() ) ; 
00156       tmp_ced = tmp_ced ;
00157       tmp_ced.set_base(sauve_base) ;   // The above operation does not 
00158                                        //change the basis
00159       tmp_ced = tmp_ced.mult_x() ;  // xi, Id, (xi-1)
00160       tmp_ced = tmp_ced / xsr ; // xi/R, 1/R, (xi-1)/U
00161    
00162       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00163       tmp_ced.set(nzm1) -= dzp * uuva(nzm1) ;
00164       
00165       // Recombination shells + CED : 
00166       resu.set_spectral_va() += tmp_ced ;
00167       
00168       resu.set_dzpuis(dzp+1) ;         
00169     
00170     }
00171 
00172     resu.set_spectral_base( uuva.dsdx().get_base() ) ; // same basis as d/dxi
00173 
00174   }
00175 
00176 }
00177 
00178             //---------------------//
00179             //        d/dr         //
00180             //---------------------//
00181             
00182             
00183 void Map_et::dsdr(const Cmp& ci, Cmp& resu) const {
00184 
00185     assert (ci.get_etat() != ETATNONDEF) ; 
00186     assert (ci.get_mp()->get_mg() == mg) ; 
00187     
00188     if (ci.get_etat() == ETATZERO) {
00189     resu.set_etat_zero() ; 
00190     }
00191     else {    
00192     assert( ci.get_etat() == ETATQCQ ) ; 
00193     assert( ci.check_dzpuis(0) ) ; 
00194 
00195     (ci.va).coef() ;    // (ci.va).c_cf is up to date
00196     
00197     resu = (ci.va).dsdx() * dxdr ;     //  dxi/dR, - dxi/dU (ZEC)
00198     
00199     (resu.va).base = (ci.va).dsdx().base ;  // same basis as d/dxi
00200     
00201     int nz = mg->get_nzone() ; 
00202     if (mg->get_type_r(nz-1) == UNSURR) {
00203         resu.set_dzpuis(2) ;        // r^2 d/dr has been computed in the
00204                         // external domain
00205     }
00206 
00207     }
00208     
00209 }
00210 
00211 void Map_et::dsdr(const Scalar& uu, Scalar& resu) const {
00212 
00213   assert (uu.get_etat() != ETATNONDEF) ; 
00214   assert (uu.get_mp().get_mg() == mg) ; 
00215     
00216   if (uu.get_etat() == ETATZERO) {
00217     resu.set_etat_zero() ; 
00218   }
00219   else {   
00220     assert( uu.get_etat() == ETATQCQ ) ; 
00221 
00222     const Valeur& uuva = uu.get_spectral_va() ; 
00223 
00224     uuva.coef() ;    // (uu.va).c_cf is up to date
00225     
00226     int nz = mg->get_nzone() ; 
00227     int nzm1 = nz - 1 ;
00228 
00229     if ( uu.get_dzpuis() == 0 ) {
00230       resu = uuva.dsdx() * dxdr ;     //  dxdr = dxi/dR, - dxi/dU (ZEC)
00231     
00232       if (mg->get_type_r(nzm1) == UNSURR) {
00233     resu.set_dzpuis(2) ;    // r^2 d/dr has been computed in the
00234                             // external domain
00235       } 
00236     }
00237     else {
00238       assert(mg->get_type_r(nzm1) == UNSURR) ;
00239 
00240       int dzp = uu.get_dzpuis() ;
00241       
00242       resu = uuva.dsdx() * dxdr ;
00243       resu.annule_domain(nzm1) ;  // zero in the CED
00244       
00245       // Special treatment in the CED
00246       Valeur tmp_ced = uuva.dsdx() ;
00247       Base_val sauve_base( tmp_ced.get_base() ) ; 
00248       tmp_ced = tmp_ced * dxdr ;
00249       tmp_ced.set_base(sauve_base) ;   // The above operation does not 
00250                                        //change the basis
00251       tmp_ced = tmp_ced.mult_x() ;  // xi, Id, (xi-1)
00252       tmp_ced = tmp_ced / xsr ; // xi/R, 1/R, (xi-1)/U
00253    
00254       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00255       tmp_ced.set(nzm1) -= dzp * uuva(nzm1) ;
00256       
00257       // Recombination shells + CED : 
00258       resu.set_spectral_va() += tmp_ced ;
00259       
00260       resu.set_dzpuis(dzp+1) ;         
00261     
00262     }
00263 
00264     resu.set_spectral_base( uuva.dsdx().get_base() ) ; // same basis as d/dxi
00265 
00266   }
00267 
00268 }
00269 
00270 void Map_et::dsdradial(const Scalar& uu, Scalar& resu) const {
00271 
00272   assert (uu.get_etat() != ETATNONDEF) ; 
00273   assert (uu.get_mp().get_mg() == mg) ; 
00274     
00275   if (uu.get_etat() == ETATZERO) {
00276     resu.set_etat_zero() ; 
00277   }
00278   else {   
00279     assert( uu.get_etat() == ETATQCQ ) ; 
00280 
00281     const Valeur& uuva = uu.get_spectral_va() ; 
00282 
00283     uuva.coef() ;    // (uu.va).c_cf is up to date
00284     
00285     int nz = mg->get_nzone() ; 
00286     int nzm1 = nz - 1 ;
00287 
00288     if ( uu.get_dzpuis() == 0 ) {
00289       resu = uuva.dsdx() * dxdr ;     //  dxdr = dxi/dR, - dxi/dU (ZEC)
00290     
00291       if (mg->get_type_r(nzm1) == UNSURR) {
00292     resu.set_dzpuis(2) ;    // r^2 d/dr has been computed in the
00293                             // external domain
00294       } 
00295     }
00296     else {
00297       assert(mg->get_type_r(nzm1) == UNSURR) ;
00298 
00299       int dzp = uu.get_dzpuis() ;
00300       
00301       resu = uuva.dsdx() * dxdr ;
00302       resu.annule_domain(nzm1) ;  // zero in the CED
00303       
00304       // Special treatment in the CED
00305       Valeur tmp_ced = uuva.dsdx() ;
00306       Base_val sauve_base( tmp_ced.get_base() ) ; 
00307       tmp_ced = tmp_ced * dxdr ;
00308       tmp_ced.set_base(sauve_base) ;   // The above operation does not 
00309                                        //change the basis
00310       tmp_ced = tmp_ced.mult_x() ;  // xi, Id, (xi-1)
00311       tmp_ced = tmp_ced / xsr ; // xi/R, 1/R, (xi-1)/U
00312    
00313       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00314       tmp_ced.set(nzm1) -= dzp * uuva(nzm1) ;
00315       
00316       // Recombination shells + CED : 
00317       resu.set_spectral_va() += tmp_ced ;
00318       
00319       resu.set_dzpuis(dzp+1) ;         
00320     
00321     }
00322 
00323     resu.set_spectral_base( uuva.dsdx().get_base() ) ; // same basis as d/dxi
00324 
00325   }
00326 
00327 }
00328 
00329             //------------------------//
00330             //      1/r d/dtheta      //
00331             //------------------------//
00332 
00333 void Map_et::srdsdt(const Cmp& ci, Cmp& resu) const {
00334 
00335     assert (ci.get_etat() != ETATNONDEF) ; 
00336     assert (ci.get_mp()->get_mg() == mg) ; 
00337     
00338     if (ci.get_etat() == ETATZERO) {
00339     resu.set_etat_zero() ; 
00340     }
00341     else {
00342 
00343     assert( ci.get_etat() == ETATQCQ ) ; 
00344     assert( ci.check_dzpuis(0) ) ; 
00345 
00346     (ci.va).coef() ;    // (ci.va).c_cf is up to date
00347 
00348     // Computation of 1/R df/dtheta'   ---> srdfdt
00349     // ----------------------------
00350     Valeur srdfdt = ci.va ; 
00351     
00352     srdfdt = srdfdt.dsdt() ;    // d/dtheta'
00353     srdfdt = srdfdt.sx() ;      // 1/xi, Id, 1/(xi-1)
00354     
00355     Base_val sauve_base( srdfdt.base ) ; 
00356     
00357     srdfdt = srdfdt * xsr ; // xi/R, 1/R, (xi-1)/U
00358     
00359     srdfdt.base = sauve_base ;   // The above operation does not change the basis
00360 
00361     // Computation of 1/(dR/dx) 1/R dR/dtheta' df/dx   ----> adfdx
00362     // ----------------------------------------------
00363 
00364     Valeur adfdx = ci.va ; 
00365 
00366     adfdx = adfdx.dsdx()  ;     // df/dx 
00367             
00368     sauve_base = adfdx.base ; 
00369     adfdx = adfdx * dxdr * srdrdt ;  // 1/(dR/dx) 1/R dR/dtheta' df/dx
00370     adfdx.base = sauve_base ; 
00371 
00372     // Final result 
00373     // ------------
00374 
00375     resu = srdfdt - adfdx ;
00376 
00377     int nz = mg->get_nzone() ; 
00378     if (mg->get_type_r(nz-1) == UNSURR) {
00379         resu.set_dzpuis(2) ;        // r d/dtheta has been computed in
00380                         // the external domain
00381     }
00382 
00383     }
00384     
00385 }
00386 
00387 void Map_et::srdsdt(const Scalar& uu, Scalar& resu) const {
00388 
00389   assert (uu.get_etat() != ETATNONDEF) ; 
00390   assert (uu.get_mp().get_mg() == mg) ; 
00391     
00392   if (uu.get_etat() == ETATZERO) {
00393     resu.set_etat_zero() ; 
00394   }
00395   else {
00396 
00397     assert( uu.get_etat() == ETATQCQ ) ; 
00398 
00399     const Valeur& uuva = uu.get_spectral_va() ;
00400     uuva.coef() ;   // (uu.va).c_cf is up to date
00401 
00402     int nz = mg->get_nzone() ; 
00403     int nzm1 = nz - 1 ;
00404   
00405     // Computation of 1/R df/dtheta'   ---> srdfdt
00406     // ----------------------------
00407     Valeur srdfdt = uuva ; 
00408     
00409     srdfdt = srdfdt.dsdt() ;    // d/dtheta'
00410    
00411     srdfdt = srdfdt.sx() ;      // 1/xi, Id, 1/(xi-1)
00412         
00413     Base_val sauve_base( srdfdt.base ) ; 
00414     
00415     srdfdt = srdfdt * xsr ; // xi/R, 1/R, (xi-1)/U
00416     
00417     srdfdt.base = sauve_base ;   // The above operation does not change the basis
00418     // Computation of 1/(dR/dx) 1/R dR/dtheta' df/dx   ----> adfdx
00419     // ----------------------------------------------
00420 
00421     Valeur adfdx = uuva ; 
00422 
00423     adfdx = adfdx.dsdx()  ;     // df/dx 
00424             
00425     sauve_base = adfdx.base ; 
00426     adfdx = adfdx * dxdr * srdrdt ;  // 1/(dR/dx) 1/R dR/dtheta' df/dx
00427     adfdx.base = sauve_base ; 
00428 
00429     if (uu.get_dzpuis() == 0) {
00430 
00431       // Final result 
00432       // ------------
00433 
00434       resu = srdfdt - adfdx ;
00435 
00436       //s int nz = mg->get_nzone() ; 
00437       if (mg->get_type_r(nz-1) == UNSURR) {
00438     resu.set_dzpuis(2) ;        // r^2 (1/r d/dtheta) has been computed in
00439     // the external domain
00440       }
00441     
00442     }
00443 
00444     else {
00445       assert(mg->get_type_r(nzm1) == UNSURR) ;
00446           
00447       int dzp = uu.get_dzpuis() ;
00448 
00449       Valeur tmp = srdfdt - adfdx ;
00450       tmp.annule(nzm1) ; 
00451      
00452       // Special treatment in the CED
00453       //-----------------------------
00454  
00455       Valeur tmp_ced = - adfdx ;
00456   
00457       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00458 
00459       tmp_ced = tmp_ced.mult_x() ;  // xi, Id, (xi-1)
00460       //s Base_val sauve_base( tmp_ced.get_base() ) ; 
00461       tmp_ced = tmp_ced / xsr ; // xi/R, 1/R, (xi-1)/U
00462         
00463       tmp_ced = tmp_ced + uuva.dsdt() ;
00464       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00465                  
00466       // Recombination shells + CED : 
00467       resu = tmp + tmp_ced ;
00468                 
00469       resu.set_dzpuis(dzp+1) ;         
00470     }
00471             
00472   }
00473 
00474 }
00475 
00476 
00477             //------------------------------------//
00478             //       1/(r sin(theta))  d/dphi     //
00479             //------------------------------------//
00480 
00481 void Map_et::srstdsdp(const Cmp& ci, Cmp& resu) const {
00482 
00483     assert (ci.get_etat() != ETATNONDEF) ; 
00484     assert (ci.get_mp()->get_mg() == mg) ; 
00485 
00486     if (ci.get_etat() == ETATZERO) {
00487     resu.set_etat_zero() ; 
00488     }
00489     else {
00490 
00491     assert( ci.get_etat() == ETATQCQ) ; 
00492     assert( ci.check_dzpuis(0) ) ; 
00493 
00494     (ci.va).coef() ;    // (ci.va).c_cf is up to date
00495 
00496     // Computation of 1/(R sin(theta')) df/dphi'   ---> srstdfdp
00497     // -----------------------------------------
00498 
00499     Valeur srstdfdp = ci.va ; 
00500     
00501     srstdfdp = srstdfdp.dsdp() ;    // d/dphi
00502     srstdfdp = srstdfdp.ssint() ;   // 1/sin(theta)
00503     srstdfdp = srstdfdp.sx() ;  // 1/xi, Id, 1/(xi-1)
00504     
00505     Base_val sauve_base( srstdfdp.base ) ; 
00506     
00507     srstdfdp = srstdfdp * xsr ; // xi/R, 1/R, (xi-1)/U
00508     
00509     srstdfdp.base = sauve_base ;   // The above operation does not change the basis
00510 
00511     // Computation of 1/(dR/dx) 1/(R sin(theta') dR/dphi' df/dx   --> bdfdx
00512     // --------------------------------------------------------
00513     Valeur bdfdx = ci.va ; 
00514 
00515     bdfdx = bdfdx.dsdx()  ;     // df/dx 
00516             
00517     sauve_base = bdfdx.base ; 
00518     bdfdx = bdfdx * dxdr * srstdrdp  ;  
00519     bdfdx.base = sauve_base ; 
00520 
00521     // Final result 
00522     // ------------
00523 
00524     resu = srstdfdp - bdfdx ;
00525 
00526     int nz = mg->get_nzone() ; 
00527     if (mg->get_type_r(nz-1) == UNSURR) {
00528         resu.set_dzpuis(2) ;        // r/sin(theta) d/dphi has been 
00529                         // computed in the external domain
00530     }
00531 
00532     }
00533     
00534 }
00535 
00536 void Map_et::srstdsdp(const Scalar& uu, Scalar& resu) const {
00537 
00538   assert (uu.get_etat() != ETATNONDEF) ; 
00539   assert (uu.get_mp().get_mg() == mg) ; 
00540     
00541   if (uu.get_etat() == ETATZERO) {
00542     resu.set_etat_zero() ; 
00543   }
00544   else {
00545 
00546     assert( uu.get_etat() == ETATQCQ ) ; 
00547 
00548     const Valeur& uuva = uu.get_spectral_va() ;
00549     uuva.coef() ;    // (uu.va).c_cf is up to date
00550 
00551     int nz = mg->get_nzone() ; 
00552     int nzm1 = nz - 1 ;
00553 
00554     // Computation of 1/(R sin(theta')) df/dphi'   ---> srstdfdp
00555     // -----------------------------------------
00556     
00557     Valeur srstdfdp = uuva ; 
00558     
00559     srstdfdp = srstdfdp.dsdp() ;    // d/dphi
00560     srstdfdp = srstdfdp.ssint() ;   // 1/sin(theta)
00561     srstdfdp = srstdfdp.sx() ;  // 1/xi, Id, 1/(xi-1)
00562     
00563     Base_val sauve_base( srstdfdp.base ) ; 
00564     
00565     srstdfdp = srstdfdp * xsr ; // xi/R, 1/R, (xi-1)/U
00566     
00567     srstdfdp.base = sauve_base ;   // The above operation does not change the basis
00568     
00569     // Computation of 1/(dR/dx) 1/(R sin(theta') dR/dphi' df/dx   --> bdfdx
00570     // --------------------------------------------------------
00571     Valeur bdfdx = uuva ; 
00572 
00573     bdfdx = bdfdx.dsdx()  ;     // df/dx 
00574     
00575     sauve_base = bdfdx.base ; 
00576     bdfdx = bdfdx * dxdr * srstdrdp  ;  
00577     bdfdx.base = sauve_base ; 
00578 
00579 
00580     if (uu.get_dzpuis() == 0) {
00581 
00582     //Final result
00583 
00584     resu = srstdfdp - bdfdx ;
00585  
00586       
00587       if (mg->get_type_r(nz-1) == UNSURR) {
00588     resu.set_dzpuis(2) ;        // r d/dtheta has been computed in
00589     // the external domain
00590       }
00591     }
00592 
00593     else {
00594       assert(mg->get_type_r(nzm1) == UNSURR) ;
00595           
00596       int dzp = uu.get_dzpuis() ;
00597 
00598       Valeur tmp = srstdfdp - bdfdx ;
00599       tmp.annule(nzm1) ; 
00600 
00601       // Special treatment in the CED
00602 
00603       Valeur tmp_ced = - bdfdx ;
00604       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00605 
00606       tmp_ced = tmp_ced.mult_x() ;  // xi, Id, (xi-1)
00607       //s Base_val sauve_base( tmp_ced.get_base() ) ; 
00608       tmp_ced = tmp_ced / xsr ; // xi/R, 1/R, (xi-1)/U
00609       
00610       tmp_ced = tmp_ced + uuva.dsdp().ssint() ;
00611       tmp_ced.annule(0, nz-2) ; // only non zero in the CED
00612 
00613       // Recombination shells + CED : 
00614       resu = tmp + tmp_ced ;
00615       
00616       resu.set_dzpuis(dzp+1) ;         
00617     }
00618   }    
00619 }
00620 
00621             //------------------------//
00622             //        d/dtheta        //
00623             //------------------------//
00624 
00625 void Map_et::dsdt(const Scalar& ci, Scalar& resu) const {
00626 
00627     assert (ci.get_etat() != ETATNONDEF) ; 
00628     assert (ci.get_mp().get_mg() == mg) ; 
00629     
00630     if (ci.get_etat() == ETATZERO) {
00631         resu.set_etat_zero() ; 
00632     }
00633     else {
00634 
00635     //  The relations are true for all dzpuis
00636     //  assert( ci.check_dzpuis(0) ) ; 
00637         assert( ci.get_etat() == ETATQCQ ) ; 
00638 
00639 
00640         // Computation of df/dtheta'   ---> dfdt
00641         // ----------------------------
00642 
00643         const Valeur& dfdt = ci.get_spectral_va().dsdt() ;
00644     
00645 
00646         // Computation of 1/(dR/dxi) dR/dtheta' df/dx   ----> adfdx
00647         // -------------------------------------------
00648 
00649         Valeur adfdx = ci.get_spectral_va().dsdx() ;    // df/dx
00650 
00651         Base_val sauve_base = adfdx.get_base() ; 
00652      
00653         adfdx = adfdx * dxdr * drdt ;  // df/dx / (dR/dx) * dR/dtheta' 
00654     
00655         adfdx.set_base( sauve_base ) ; 
00656 
00657         // Final result 
00658         // ------------
00659 
00660         resu = dfdt - adfdx ;
00661 
00662     }
00663     
00664 }
00665 
00666             //---------------------------------//
00667             //        1/sin(theta) d/dphi      //
00668             //---------------------------------//
00669 
00670 void Map_et::stdsdp(const Scalar& ci, Scalar& resu) const {
00671 
00672     assert (ci.get_etat() != ETATNONDEF) ; 
00673     assert (ci.get_mp().get_mg() == mg) ; 
00674     
00675     if (ci.get_etat() == ETATZERO) {
00676         resu.set_etat_zero() ; 
00677     }
00678     else {
00679 
00680     assert( ci.get_etat() == ETATQCQ ) ; 
00681     //  The relations are true for all dzpuis
00682     //  assert( ci.check_dzpuis(0) ) ; 
00683 
00684         // Computation of 1/sin(theta) df/dphi'   ---> stdfdp
00685         // ----------------------------
00686         
00687         const Valeur& stdfdp = ci.get_spectral_va().stdsdp() ;
00688     
00689 
00690         // Computation of 1/(dR/dxi) 1/sin(theta) dR/dphi' df/dx   ----> adfdx
00691         // -------------------------------------------
00692 
00693         Valeur adfdx = ci.get_spectral_va().dsdx() ;    // df/dx
00694 
00695         Base_val sauve_base = adfdx.get_base() ;
00696      
00697         adfdx = adfdx * dxdr * stdrdp ;  // df/dx / (dR/dx) * 1/sin(th) dR/dphi' 
00698     
00699         adfdx.set_base( sauve_base ) ; 
00700 
00701         // Final result 
00702         // ------------
00703 
00704         resu = stdfdp - adfdx ;
00705 
00706     }
00707     
00708 }
00709 
00710 
00711 

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