star_bin.C

00001  /*
00002  * Methods for the class Star_bin
00003  *
00004  * (see file star.h for documentation)
00005  */
00006 
00007 /*
00008  *   Copyright (c) 2004 Francois Limousin
00009  *
00010  *   This file is part of LORENE.
00011  *
00012  *   LORENE is free software; you can redistribute it and/or modify
00013  *   it under the terms of the GNU General Public License as published by
00014  *   the Free Software Foundation; either version 2 of the License, or
00015  *   (at your option) any later version.
00016  *
00017  *   LORENE is distributed in the hope that it will be useful,
00018  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  *   GNU General Public License for more details.
00021  *
00022  *   You should have received a copy of the GNU General Public License
00023  *   along with LORENE; if not, write to the Free Software
00024  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  */
00027 
00028 
00029 char star_bin_C[] = "$Header: /cvsroot/Lorene/C++/Source/Star/star_bin.C,v 1.18 2006/04/11 14:24:44 f_limousin Exp $" ;
00030 
00031 /*
00032  * $Id: star_bin.C,v 1.18 2006/04/11 14:24:44 f_limousin Exp $
00033  * $Log: star_bin.C,v $
00034  * Revision 1.18  2006/04/11 14:24:44  f_limousin
00035  * New version of the code : improvement of the computation of some
00036  * critical sources, estimation of the dirac gauge, helical symmetry...
00037  *
00038  * Revision 1.17  2005/09/13 19:38:31  f_limousin
00039  * Reintroduction of the resolution of the equations in cartesian coordinates.
00040  *
00041  * Revision 1.16  2005/04/08 12:36:44  f_limousin
00042  * Just to avoid warnings...
00043  *
00044  * Revision 1.15  2005/02/24 16:03:01  f_limousin
00045  * Change the name of some variables (for instance dcov_logn --> dlogn).
00046  *
00047  * Revision 1.14  2005/02/17 17:29:28  f_limousin
00048  * Change the name of some quantities to be consistent with other classes
00049  * (for instance nnn is changed to nn, shift to beta, beta to lnq...)
00050  *
00051  * Revision 1.13  2005/02/11 18:11:57  f_limousin
00052  * Introduction of a new member Map_af.
00053  *
00054  * Revision 1.12  2004/11/11 16:29:49  j_novak
00055  * set_der_0x0 is no longer virtual (to be coherent with Tensor/Scalar classes).
00056  *
00057  * Revision 1.11  2004/07/21 11:49:03  f_limousin
00058  * Remove function sprod.
00059  *
00060  * Revision 1.10  2004/06/22 12:48:52  f_limousin
00061  * Change qq, qq_auto and qq_comp to beta, beta_auto and beta_comp.
00062  *
00063  * Revision 1.9  2004/04/08 16:32:28  f_limousin
00064  * The new variable is ln(Q) instead of Q=psi^2*N. It improves the
00065  * convergence of the code.
00066  *
00067  * Revision 1.8  2004/03/25 10:29:26  j_novak
00068  * All LORENE's units are now defined in the namespace Unites (in file unites.h).
00069  *
00070  * Revision 1.7  2004/03/23 09:54:54  f_limousin
00071  * Add comments
00072  *
00073  * Revision 1.6  2004/02/27 09:50:57  f_limousin
00074  * Scalars ssjm1_logn, ssjm1_qq ... have been added for all metric
00075  * quantities for the resolution of Poisson equations.
00076  * Members bsn and d_psi are now constructed on a cartesian triad.
00077  *
00078  * Revision 1.5  2004/02/21 17:05:13  e_gourgoulhon
00079  * Method Scalar::point renamed Scalar::val_grid_point.
00080  * Method Scalar::set_point renamed Scalar::set_grid_point.
00081  *
00082  * Revision 1.4  2004/01/22 10:07:18  f_limousin
00083  * Add methods set_logn_comp() and set_shift_auto().
00084  *
00085  * Revision 1.3  2004/01/20 15:17:34  f_limousin
00086  * First version
00087  *
00088  *
00089  * $Header: /cvsroot/Lorene/C++/Source/Star/star_bin.C,v 1.18 2006/04/11 14:24:44 f_limousin Exp $
00090  *
00091  */
00092 
00093 // Headers C
00094 #include "math.h"
00095 
00096 // Headers Lorene
00097 #include "etoile.h" 
00098 #include "star.h"
00099 #include "eos.h"
00100 #include "unites.h"     
00101 
00102 // Local prototype
00103 Cmp raccord_c1(const Cmp& uu, int l1) ; 
00104 
00105                 //--------------//
00106                 // Constructors //
00107                 //--------------//
00108 
00109 // Standard constructor
00110 // --------------------
00111 Star_bin::Star_bin(Map& mpi, int nzet_i, const Eos& eos_i, 
00112              bool irrot, bool conf_flat0)
00113     : Star(mpi, nzet_i, eos_i), 
00114       irrotational(irrot), 
00115       psi0(mpi), 
00116       d_psi(mpi, COV, mpi.get_bvect_cart()), 
00117       wit_w(mpi, CON, mpi.get_bvect_cart()), 
00118       loggam(mpi), 
00119       bsn(mpi, CON, mpi.get_bvect_cart()), 
00120       pot_centri(mpi), 
00121       logn_auto(mpi),
00122       logn_comp(mpi), 
00123       dcov_logn(mpi, COV, mpi.get_bvect_cart()),
00124       dcon_logn(mpi, CON, mpi.get_bvect_cart()),
00125       lnq_auto(mpi),
00126       lnq_comp(mpi),
00127       psi4(mpi),
00128       dcov_phi(mpi, COV, mpi.get_bvect_cart()),
00129       dcon_phi(mpi, CON, mpi.get_bvect_cart()),
00130       flat(mpi, mpi.get_bvect_cart()),
00131       gtilde(flat),
00132       beta_auto(mpi, CON, mpi.get_bvect_cart()), 
00133       beta_comp(mpi, CON, mpi.get_bvect_cart()), 
00134       hij(mpi, CON, mpi.get_bvect_cart()),
00135       hij_auto(mpi, CON, mpi.get_bvect_cart()),
00136       hij_comp(mpi, CON, mpi.get_bvect_cart()), 
00137       tkij_auto(mpi, CON, mpi.get_bvect_cart()), 
00138       tkij_comp(mpi, CON, mpi.get_bvect_cart()), 
00139       kcar_auto(mpi), 
00140       kcar_comp(mpi), 
00141       ssjm1_logn(mpi),
00142       ssjm1_lnq(mpi),
00143       ssjm1_khi(mpi),
00144       ssjm1_wbeta(mpi, CON, mpi.get_bvect_cart()),
00145       ssjm1_h11(mpi),
00146       ssjm1_h21(mpi),
00147       ssjm1_h31(mpi),
00148       ssjm1_h22(mpi),
00149       ssjm1_h32(mpi),
00150       ssjm1_h33(mpi),
00151       decouple(mpi),
00152       conf_flat(conf_flat0){
00153     
00154     // Pointers of derived quantities initialized to zero : 
00155     set_der_0x0() ;
00156     
00157     // Quantities defined on a spherical triad in star.C are put on 
00158     // a cartesian one
00159     u_euler.change_triad(mpi.get_bvect_cart()) ;
00160     stress_euler.change_triad(mpi.get_bvect_cart()) ;
00161     beta.change_triad(mpi.get_bvect_cart()) ;
00162     Metric temp_met (mp.flat_met_cart()) ;
00163     gamma = temp_met ;
00164 
00165     // All quantities are initialized to zero : 
00166     psi0 = 0 ; 
00167     d_psi.set_etat_zero() ; 
00168     wit_w.set_etat_zero() ; 
00169     loggam = 0 ; 
00170     bsn.set_etat_zero() ; 
00171     pot_centri = 0 ;
00172   
00173     logn_auto = 0 ;
00174     logn_comp = 0 ; 
00175     dcov_logn.set_etat_zero() ;
00176     dcon_logn.set_etat_zero() ;
00177     beta_auto.set_etat_zero() ; 
00178     beta_comp.set_etat_zero() ; 
00179     lnq_auto = 0 ;
00180     lnq_comp = 0 ;
00181     psi4 = 1 ;
00182     dcov_phi.set_etat_zero() ;
00183     dcon_phi.set_etat_zero() ;
00184     hij.set_etat_zero() ;
00185     hij_auto.set_etat_zero() ;
00186     hij_comp.set_etat_zero() ;
00187 
00188     tkij_auto.set_etat_zero() ; 
00189     tkij_comp.set_etat_zero() ; 
00190     kcar_auto = 0 ;
00191     kcar_comp = 0 ; 
00192     ssjm1_logn = 0 ;
00193     ssjm1_lnq = 0 ;
00194     ssjm1_khi = 0 ;
00195     ssjm1_wbeta.set_etat_zero() ;
00196     ssjm1_h11 = 0 ;
00197     ssjm1_h21 = 0 ;
00198     ssjm1_h31 = 0 ;
00199     ssjm1_h22 = 0 ;
00200     ssjm1_h32 = 0 ;
00201     ssjm1_h33 = 0 ;
00202 }
00203 
00204 // Copy constructor
00205 // ----------------
00206 Star_bin::Star_bin(const Star_bin& star)
00207                : Star(star), 
00208              irrotational(star.irrotational), 
00209              psi0(star.psi0), 
00210              d_psi(star.d_psi), 
00211              wit_w(star.wit_w), 
00212              loggam(star.loggam), 
00213              bsn(star.bsn), 
00214              pot_centri(star.pot_centri), 
00215              logn_auto(star.logn_auto),
00216              logn_comp(star.logn_comp), 
00217              dcov_logn(star.dcov_logn),
00218              dcon_logn(star.dcon_logn),
00219              lnq_auto(star.lnq_auto),
00220              lnq_comp(star.lnq_comp),
00221              psi4(star.psi4),
00222              dcov_phi(star.dcov_phi),
00223              dcon_phi(star.dcon_phi),
00224              flat(star.flat),
00225              gtilde(star.gtilde),
00226              beta_auto(star.beta_auto), 
00227              beta_comp(star.beta_comp), 
00228              hij(star.hij),
00229              hij_auto(star.hij_auto),
00230              hij_comp(star.hij_comp),
00231              tkij_auto(star.tkij_auto), 
00232              tkij_comp(star.tkij_comp), 
00233              kcar_auto(star.kcar_auto), 
00234              kcar_comp(star.kcar_comp), 
00235              ssjm1_logn(star.ssjm1_logn),
00236              ssjm1_lnq(star.ssjm1_lnq),
00237              ssjm1_khi(star.ssjm1_khi),
00238              ssjm1_wbeta(star.ssjm1_wbeta),
00239              ssjm1_h11(star.ssjm1_h11),
00240              ssjm1_h21(star.ssjm1_h21),
00241              ssjm1_h31(star.ssjm1_h31),
00242              ssjm1_h22(star.ssjm1_h22),
00243              ssjm1_h32(star.ssjm1_h32),
00244              ssjm1_h33(star.ssjm1_h33),
00245              decouple(star.decouple),
00246              conf_flat(star.conf_flat)
00247 {
00248     set_der_0x0() ;    
00249 
00250 }    
00251 
00252 // Constructor from a file
00253 // -----------------------
00254 Star_bin::Star_bin(Map& mpi, const Eos& eos_i, FILE* fich)
00255                : Star(mpi, eos_i, fich), 
00256              psi0(mpi), 
00257              d_psi(mpi, COV, mpi.get_bvect_cart()), 
00258              wit_w(mpi, CON, mpi.get_bvect_cart()), 
00259              loggam(mpi), 
00260              bsn(mpi, CON, mpi.get_bvect_cart()), 
00261              pot_centri(mpi), 
00262              logn_auto(mpi, *(mpi.get_mg()), fich),
00263              logn_comp(mpi), 
00264              dcov_logn(mpi, COV, mpi.get_bvect_cart()),
00265              dcon_logn(mpi, CON, mpi.get_bvect_cart()),
00266              lnq_auto(mpi, *(mpi.get_mg()), fich),
00267              lnq_comp(mpi),
00268              psi4(mpi),
00269              dcov_phi(mpi, COV, mpi.get_bvect_cart()),
00270              dcon_phi(mpi, CON, mpi.get_bvect_cart()),
00271              flat(mpi, mpi.get_bvect_cart()),
00272              gtilde(flat),
00273              beta_auto(mpi, mpi.get_bvect_cart(), fich), 
00274              beta_comp(mpi, CON, mpi.get_bvect_cart()), 
00275              hij(mpi, CON, mpi.get_bvect_cart()),
00276              hij_auto(mpi, mpi.get_bvect_cart(), fich),
00277              hij_comp(mpi, CON, mpi.get_bvect_cart()),
00278                  tkij_auto(mpi, CON, mpi.get_bvect_cart()), 
00279              tkij_comp(mpi, CON, mpi.get_bvect_cart()), 
00280              kcar_auto(mpi), 
00281              kcar_comp(mpi), 
00282              ssjm1_logn(mpi, *(mpi.get_mg()), fich),
00283              ssjm1_lnq(mpi, *(mpi.get_mg()), fich),
00284              ssjm1_khi(mpi, *(mpi.get_mg()), fich),
00285              ssjm1_wbeta(mpi, mpi.get_bvect_cart(), fich),
00286              ssjm1_h11(mpi, *(mpi.get_mg()), fich),
00287              ssjm1_h21(mpi, *(mpi.get_mg()), fich),
00288              ssjm1_h31(mpi, *(mpi.get_mg()), fich),
00289              ssjm1_h22(mpi, *(mpi.get_mg()), fich),
00290              ssjm1_h32(mpi, *(mpi.get_mg()), fich),
00291              ssjm1_h33(mpi, *(mpi.get_mg()), fich),
00292              decouple(mpi){
00293 
00294     // Etoile parameters
00295     // -----------------
00296 
00297     // irrotational and conf_flat is read in the file:     
00298     fread(&irrotational, sizeof(bool), 1, fich) ;
00299     fread(&conf_flat, sizeof(bool), 1, fich) ;
00300           
00301    
00302     // Read of the saved fields:
00303     // ------------------------
00304 
00305     if (irrotational) {
00306     Scalar gam_euler_file(mp, *(mp.get_mg()), fich) ; 
00307     gam_euler = gam_euler_file ;    
00308 
00309     Scalar psi0_file(mp, *(mp.get_mg()), fich) ; 
00310     psi0 = psi0_file ; 
00311     }
00312 
00313     // Quantities defined on a spherical triad in star.C are put on 
00314     // a cartesian one
00315     u_euler.change_triad(mpi.get_bvect_cart()) ;
00316     stress_euler.change_triad(mpi.get_bvect_cart()) ;
00317     beta.change_triad(mpi.get_bvect_cart()) ;
00318     Metric temp_met (mp.flat_met_cart()) ;
00319     gamma = temp_met ;
00320 
00321     // All other fields are initialized to zero : 
00322     // ----------------------------------------
00323 
00324     d_psi.set_etat_zero() ; 
00325     wit_w.set_etat_zero() ; 
00326     loggam = 0 ; 
00327     bsn.set_etat_zero() ; 
00328     pot_centri = 0 ;
00329     logn_comp = 0 ; 
00330     dcov_logn.set_etat_zero() ;
00331     dcon_logn.set_etat_zero() ;
00332     beta_comp.set_etat_zero() ; 
00333     lnq_comp = 0 ;
00334     psi4 = 1 ;
00335     dcov_phi.set_etat_zero() ;
00336     dcon_phi.set_etat_zero() ;
00337     hij.set_etat_zero() ;
00338     hij_comp.set_etat_zero() ;
00339 
00340     tkij_auto.set_etat_zero() ; 
00341     tkij_comp.set_etat_zero() ; 
00342     kcar_auto = 0 ;
00343     kcar_comp = 0 ; 
00344  
00345     // Pointers of derived quantities initialized to zero 
00346     // --------------------------------------------------
00347     set_der_0x0() ;
00348     
00349 }
00350 
00351                 //------------//
00352                 // Destructor //
00353                 //------------//
00354 
00355 Star_bin::~Star_bin(){
00356 
00357     del_deriv() ; 
00358 
00359 }
00360 
00361             //----------------------------------//
00362             // Management of derived quantities //
00363             //----------------------------------//
00364 
00365 void Star_bin::del_deriv() const {
00366 
00367     Star::del_deriv() ; 
00368 
00369     if (p_xa_barycenter != 0x0) delete p_xa_barycenter ; 
00370     
00371     set_der_0x0() ; 
00372 }               
00373 
00374 
00375 
00376 
00377 void Star_bin::set_der_0x0() const {
00378 
00379     Star::set_der_0x0() ;
00380 
00381     p_xa_barycenter = 0x0 ; 
00382 
00383 }               
00384 
00385 void Star_bin::del_hydro_euler() {
00386 
00387     Star::del_hydro_euler() ; 
00388 
00389     del_deriv() ; 
00390 
00391 }               
00392 
00393 
00394                 //--------------//
00395                 //  Assignment  //
00396                 //--------------//
00397 
00398 // Assignment to another Star_bin
00399 // --------------------------------
00400 void Star_bin::operator=(const Star_bin& star) {
00401 
00402     // Assignment of quantities common to the derived classes of Star
00403     Star::operator=(star) ;     
00404 
00405     // Assignement of proper quantities of class Star_bin
00406     irrotational = star.irrotational ; 
00407     psi0 = star.psi0 ; 
00408     d_psi = star.d_psi ;
00409     wit_w = star.wit_w ; 
00410     loggam = star.loggam ;
00411     bsn = star.bsn ;
00412     pot_centri = star.pot_centri ;
00413     logn_auto = star.logn_auto ;    
00414     logn_comp = star.logn_comp ;
00415     dcov_logn = star.dcov_logn ;
00416     dcon_logn = star.dcon_logn ;
00417     lnq_auto = star.lnq_auto ;
00418     lnq_comp = star.lnq_comp ;
00419     psi4 = star.psi4 ;
00420     dcov_phi = star.dcov_phi ;
00421     dcon_phi = star.dcon_phi ;
00422     flat = star.flat ;
00423     gtilde = star.gtilde ;
00424     beta_auto = star.beta_auto ;
00425     beta_comp = star.beta_comp ; 
00426     hij = star.hij ;
00427     hij_auto = star.hij_auto ;
00428     hij_comp = star.hij_comp ; 
00429     tkij_auto = star.tkij_auto ;
00430     tkij_comp = star.tkij_comp ;
00431     kcar_auto = star.kcar_auto ;
00432     kcar_comp = star.kcar_comp ;
00433     ssjm1_logn = star.ssjm1_logn ;
00434     ssjm1_lnq = star.ssjm1_lnq ;
00435     ssjm1_khi = star.ssjm1_khi ;
00436     ssjm1_wbeta = star.ssjm1_wbeta ;
00437     ssjm1_h11 = star.ssjm1_h11 ;
00438     ssjm1_h21 = star.ssjm1_h21 ;
00439     ssjm1_h31 = star.ssjm1_h31 ;
00440     ssjm1_h22 = star.ssjm1_h22 ;
00441     ssjm1_h32 = star.ssjm1_h32 ;
00442     ssjm1_h33 = star.ssjm1_h33 ;
00443     decouple = star.decouple ;
00444     conf_flat = star.conf_flat ;
00445     
00446     del_deriv() ;  // Deletes all derived quantities
00447 
00448 }   
00449 
00450 Scalar& Star_bin::set_pot_centri() {
00451 
00452     del_deriv() ;   // sets to 0x0 all the derived quantities
00453     return pot_centri ;
00454     
00455 } 
00456 
00457 Scalar& Star_bin::set_logn_comp() {
00458 
00459     del_deriv() ;   // sets to 0x0 all the derived quantities
00460     return logn_comp ;
00461     
00462 } 
00463 
00464 Vector& Star_bin::set_beta_auto() {
00465     
00466     del_deriv() ;   // sets to 0x0 all the derived quantities
00467     return beta_auto ;
00468     
00469 } 
00470 
00471 Vector& Star_bin::set_beta() {
00472 
00473     del_deriv() ;   // sets to 0x0 all the derived quantities
00474    return beta ;
00475     
00476 } 
00477 
00478 
00479                 //--------------//
00480                 //    Outputs   //
00481                 //--------------//
00482 
00483 // Save in a file
00484 // --------------
00485 void Star_bin::sauve(FILE* fich) const {
00486     
00487     Star::sauve(fich) ; 
00488     
00489     logn_auto.sauve(fich) ;
00490     lnq_auto.sauve(fich) ;
00491     beta_auto.sauve(fich) ;
00492     hij_auto.sauve(fich) ;
00493 
00494     ssjm1_logn.sauve(fich) ;
00495     ssjm1_lnq.sauve(fich) ;
00496     ssjm1_khi.sauve(fich) ;
00497     ssjm1_wbeta.sauve(fich) ;
00498     ssjm1_h11.sauve(fich) ;
00499     ssjm1_h21.sauve(fich) ;
00500     ssjm1_h31.sauve(fich) ;
00501     ssjm1_h22.sauve(fich) ;
00502     ssjm1_h32.sauve(fich) ;
00503     ssjm1_h33.sauve(fich) ;
00504 
00505     fwrite(&irrotational, sizeof(bool), 1, fich) ;      
00506     fwrite(&conf_flat, sizeof(bool), 1, fich) ;     
00507     
00508     if (irrotational) {
00509     gam_euler.sauve(fich) ; // required to construct d_psi from psi0
00510     psi0.sauve(fich) ; 
00511     }
00512  
00513 }
00514 
00515 // Printing
00516 // --------
00517 
00518 ostream& Star_bin::operator>>(ostream& ost) const {
00519     
00520   using namespace Unites ;
00521 
00522     Star::operator>>(ost) ; 
00523     
00524     ost << endl ; 
00525     ost << "Star in a binary system" << endl ; 
00526     ost << "-----------------------" << endl ; 
00527     
00528     if (irrotational) {
00529     ost << "irrotational configuration" << endl ; 
00530     }
00531     else {
00532     ost << "corotating configuration" << endl ; 
00533     }
00534        
00535     ost << "Absolute abscidia of the stellar center: " <<
00536     mp.get_ori_x() / km << " km" << endl ; 
00537     
00538     ost << "Absolute abscidia of the barycenter of the baryon density : " <<
00539     xa_barycenter() / km << " km" << endl ; 
00540     
00541     double r_0 = 0.5 * ( ray_eq() + ray_eq_pi() ) ; 
00542     double d_ns = fabs( mp.get_ori_x() ) + ray_eq_pi() - r_0 ;
00543     double d_tilde = 2 * d_ns / r_0 ;  
00544     
00545     ost << "d_tilde : " << d_tilde << endl ; 
00546 
00547     ost << "Central value of gam_euler : " 
00548         << gam_euler.val_grid_point(0, 0, 0, 0)  << endl ; 
00549 
00550     ost << "Central u_euler (U^r, U^t, U^p) [c] : " 
00551     << u_euler(1).val_grid_point(0, 0, 0, 0) << "  " 
00552     << u_euler(2).val_grid_point(0, 0, 0, 0) << "  " 
00553     << u_euler(3).val_grid_point(0, 0, 0, 0) << endl ; 
00554 
00555     if (irrotational) {
00556     ost << "Central d_psi (r, t, p) [c] :         " 
00557         << d_psi(1).val_grid_point(0, 0, 0, 0) << "  " 
00558         << d_psi(2).val_grid_point(0, 0, 0, 0) << "  " 
00559         << d_psi(3).val_grid_point(0, 0, 0, 0) << endl ; 
00560 
00561     ost << "Central vel. / co-orb. (W^r, W^t, W^p) [c] : " 
00562         << wit_w(1).val_grid_point(0, 0, 0, 0) << "  " 
00563         << wit_w(2).val_grid_point(0, 0, 0, 0) << "  " 
00564         << wit_w(3).val_grid_point(0, 0, 0, 0) << endl ; 
00565 
00566     ost << "Max vel. / co-orb. (W^r, W^t, W^p) [c] : " 
00567         << max(max(wit_w(1))) << "  " 
00568         << max(max(wit_w(2))) << "  " 
00569         << max(max(wit_w(3))) << endl ; 
00570 
00571     ost << "Min vel. / co-orb. (W^r, W^t, W^p) [c] : " 
00572         << min(min(wit_w(1))) << "  " 
00573         << min(min(wit_w(2))) << "  " 
00574         << min(min(wit_w(3))) << endl ; 
00575 
00576     double r_surf = mp.val_r(0,1.,M_PI/4,M_PI/4) ;
00577 
00578     ost << "Velocity at (r_surf,pi/4,pi/4) / co-orb. [c] : "
00579         << wit_w(1).val_point(r_surf,M_PI/4,M_PI/4) << "  "
00580         << wit_w(2).val_point(r_surf,M_PI/4,M_PI/4) << "  "
00581         << wit_w(3).val_point(r_surf,M_PI/4,M_PI/4) << endl ;
00582 
00583     ost << "Central value of loggam : " 
00584         << loggam.val_grid_point(0, 0, 0, 0)  << endl ;     
00585     }
00586 
00587 
00588     ost << "Central value of log(N) auto, comp :         " 
00589     << logn_auto.val_grid_point(0, 0, 0, 0) << "  " 
00590     << logn_comp.val_grid_point(0, 0, 0, 0) << endl ; 
00591 
00592     ost << "Central value of beta (N^r, N^t, N^p) [c] : " 
00593     << beta(1).val_grid_point(0, 0, 0, 0) << "  " 
00594     << beta(2).val_grid_point(0, 0, 0, 0) << "  " 
00595     << beta(3).val_grid_point(0, 0, 0, 0) << endl ; 
00596 
00597     ost << "  ... beta_auto part of it [c] :            " 
00598     << beta_auto(1).val_grid_point(0, 0, 0, 0) << "  " 
00599     << beta_auto(2).val_grid_point(0, 0, 0, 0) << "  " 
00600     << beta_auto(3).val_grid_point(0, 0, 0, 0) << endl ; 
00601 
00602     ost << endl << "Central value of (B^r, B^t, B^p)/N [c] : " 
00603     << bsn(1).val_grid_point(0, 0, 0, 0) << "  " 
00604     << bsn(2).val_grid_point(0, 0, 0, 0) << "  " 
00605     << bsn(3).val_grid_point(0, 0, 0, 0) << endl ; 
00606 
00607 
00608     ost << endl << "Central A^{ij} [c/km] : " << endl ; 
00609     ost << "  A^{xx} auto, comp : " 
00610     << tkij_auto(1, 1).val_grid_point(0, 0, 0, 0) * km  << "  "
00611     << tkij_comp(1, 1).val_grid_point(0, 0, 0, 0) * km << endl ; 
00612     ost << "  A^{xy} auto, comp : " 
00613     << tkij_auto(1, 2).val_grid_point(0, 0, 0, 0) * km  << "  "
00614     << tkij_comp(1, 2).val_grid_point(0, 0, 0, 0) * km << endl ; 
00615     ost << "  A^{xz} auto, comp : " 
00616     << tkij_auto(1, 3).val_grid_point(0, 0, 0, 0) * km  << "  "
00617     << tkij_comp(1, 3).val_grid_point(0, 0, 0, 0) * km << endl ; 
00618     ost << "  A^{yy} auto, comp : " 
00619     << tkij_auto(2, 2).val_grid_point(0, 0, 0, 0) * km  << "  "
00620     << tkij_comp(2, 2).val_grid_point(0, 0, 0, 0) * km << endl ; 
00621     ost << "  A^{yz} auto, comp : " 
00622     << tkij_auto(2, 3).val_grid_point(0, 0, 0, 0) * km  << "  "
00623     << tkij_comp(2, 3).val_grid_point(0, 0, 0, 0) * km << endl ; 
00624     ost << "  A^{zz} auto, comp : " 
00625     << tkij_auto(3, 3).val_grid_point(0, 0, 0, 0) * km  << "  "
00626     << tkij_comp(3, 3).val_grid_point(0, 0, 0, 0) * km << endl ; 
00627 
00628     ost << endl << "Central A_{ij} A^{ij} [c^2/km^2] : " << endl ; 
00629     ost << "   A_{ij} A^{ij}  auto, comp : " 
00630     << kcar_auto.val_grid_point(0, 0, 0, 0) * km*km  << "  "
00631     << kcar_comp.val_grid_point(0, 0, 0, 0) * km*km << endl ; 
00632 
00633     
00634     return ost ; 
00635 }
00636 
00637                 //-------------------------//
00638                 //  Computational routines //
00639                 //-------------------------//
00640 
00641 void Star_bin::fait_d_psi() {
00642 
00643     if (!irrotational) {
00644     d_psi.set_etat_nondef() ; 
00645     return ; 
00646     }
00647 
00648     // Specific relativistic enthalpy           ---> hhh
00649     //----------------------------------
00650     
00651     Scalar hhh = exp(ent) ;  // = 1 at the Newtonian limit
00652  
00653     //  Computation of W^i = - h Gamma_n B^i/N
00654     //----------------------------------------------
00655 
00656     Vector www = hhh * gam_euler * bsn * psi4 ; 
00657       
00658     // Constant value of W^i at the center of the star
00659     //-------------------------------------------------
00660     
00661     Vector v_orb(mp, COV, mp.get_bvect_cart()) ; 
00662     
00663     for (int i=1; i<=3; i++) {
00664     v_orb.set(i) = www(i).val_grid_point(0, 0, 0, 0) ; 
00665     }
00666     
00667     // Gradient of psi 
00668     //----------------
00669 
00670     Vector d_psi0 = psi0.derive_cov(flat) ; 
00671     
00672     d_psi0.change_triad( mp.get_bvect_cart() ) ; 
00673     d_psi0.std_spectral_base() ;
00674 
00675     d_psi = d_psi0 + v_orb ; 
00676     for (int i=1; i<=3; i++) {
00677     if (d_psi(i).get_etat() == ETATZERO)
00678         d_psi.set(i).annule_hard() ;
00679     }
00680 
00681     // C^1 continuation of d_psi outside the star
00682     //  (to ensure a smooth enthalpy field accross the stellar surface)
00683     // ----------------------------------------------------------------
00684     
00685     int nzm1 = mp.get_mg()->get_nzone() - 1 ;    
00686     d_psi.annule(nzet, nzm1) ;   
00687     for (int i=1; i<=3; i++) {
00688     Cmp d_psi_i (d_psi(i)) ;
00689     d_psi_i.va.set_base( d_psi0(i).get_spectral_va().base ) ; 
00690     d_psi_i = raccord_c1(d_psi_i, nzet) ; 
00691     d_psi.set(i) = d_psi_i ; 
00692     }
00693 
00694 } 
00695 
00696 
00697 void Star_bin::relaxation(const Star_bin& star_jm1, double relax_ent, 
00698                 double relax_met, int mer, int fmer_met) {
00699                 
00700     double relax_ent_jm1 = 1. - relax_ent ; 
00701     double relax_met_jm1 = 1. - relax_met ; 
00702 
00703     ent = relax_ent * ent + relax_ent_jm1 * star_jm1.ent ; 
00704 
00705     if ( (mer != 0) && (mer % fmer_met == 0)) {
00706 
00707     logn_auto = relax_met * logn_auto + relax_met_jm1 * star_jm1.logn_auto ;
00708     lnq_auto = relax_met * lnq_auto + relax_met_jm1 * star_jm1.lnq_auto ;
00709     
00710     beta_auto = relax_met * beta_auto 
00711                    + relax_met_jm1 * star_jm1.beta_auto ;
00712     
00713     hij_auto = relax_met * hij_auto + relax_met_jm1 * star_jm1.hij_auto ;
00714     
00715     }
00716 
00717     del_deriv() ; 
00718     
00719     equation_of_state() ; 
00720 
00721 }
00722 
00723 void Star_bin::test_K_Hi() const {
00724 
00725     int nr = mp.get_mg()->get_nr(0) ;
00726     int nt = mp.get_mg()->get_nt(0) ;
00727     int np = mp.get_mg()->get_np(0) ;
00728     
00729     cout << "La jauge de Dirac est elle bien satisfaite ??" << endl ;
00730     cout << "Vector Hi" << endl ;
00731     for (int i=1; i<=3; i++)
00732     cout << "  Comp. " << i << " : " << norme((gtilde.con()
00733                    .divergence(flat))(i)/(nr*nt*np)) << endl ;
00734     
00735     
00736     cout << "Pour comparaison valeur de D_i(g^1i)" << endl ;
00737     for (int i=1; i<=3; i++)
00738     cout << "  i = " << i << " : " << norme((gtilde.con().derive_cov(flat))
00739                           (1, i, i)/(nr*nt*np)) << endl ;
00740     
00741 
00742     
00743 }

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