bin_bhns_extr_global.C

00001 /*
00002  *  Methods of class Bin_bhns_extr to compute global quantities
00003  *
00004  *    (see file bin_bhns_extr.h for documentation).
00005  *
00006  */
00007 
00008 /*
00009  *   Copyright (c) 2004-2005 Keisuke Taniguchi
00010  *
00011  *   This file is part of LORENE.
00012  *
00013  *   LORENE is free software; you can redistribute it and/or modify
00014  *   it under the terms of the GNU General Public License version 2
00015  *   as published by the Free Software Foundation.
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 char bin_bhns_extr_global_C[] = "$Header: /cvsroot/Lorene/C++/Source/Bin_bhns_extr/bin_bhns_extr_global.C,v 1.2 2005/02/28 23:07:12 k_taniguchi Exp $" ;
00029 
00030 /*
00031  * $Id: bin_bhns_extr_global.C,v 1.2 2005/02/28 23:07:12 k_taniguchi Exp $
00032  * $Log: bin_bhns_extr_global.C,v $
00033  * Revision 1.2  2005/02/28 23:07:12  k_taniguchi
00034  * Suppression of the ADM mass and so on.
00035  *
00036  * Revision 1.1  2004/11/30 20:46:13  k_taniguchi
00037  * *** empty log message ***
00038  *
00039  *
00040  * $Header: /cvsroot/Lorene/C++/Source/Bin_bhns_extr/bin_bhns_extr_global.C,v 1.2 2005/02/28 23:07:12 k_taniguchi Exp $
00041  *
00042  */
00043 
00044 // C headers
00045 #include <math.h>
00046 
00047 // Lorene headers
00048 #include "bin_bhns_extr.h"
00049 #include "coord.h"
00050 #include "unites.h"
00051 
00052           //--------------------------------------------------//
00053           //          X coordinate of the barycenter          //
00054           //--------------------------------------------------//
00055 
00056 double Bin_bhns_extr::xa_barycenter_extr() const {
00057 
00058   using namespace Unites ;
00059 
00060     if (p_xa_barycenter_extr == 0x0) {    // a new computation is required
00061 
00062         p_xa_barycenter_extr = new double ;
00063 
00064     *p_xa_barycenter_extr = 0 ;
00065 
00066         const Map& mp = star.get_mp() ;
00067         Cmp xxa(mp) ;
00068     xxa = mp.xa ;   // Absolute X coordinate
00069     xxa.std_base_scal() ;
00070 
00071     if (star.in_kerrschild()) { // Kerr-Schild background metric
00072 
00073         const Coord& xx = mp.x ;
00074         const Coord& yy = mp.y ;
00075         const Coord& zz = mp.z ;
00076 
00077         Tenseur r_bh(mp) ;
00078         r_bh.set_etat_qcq() ;
00079         r_bh.set() = pow( (xx+separ)*(xx+separ) + yy*yy + zz*zz, 0.5) ;
00080         r_bh.set_std_base() ;
00081 
00082         Tenseur msr(mp) ;
00083         msr = ggrav * mass_bh / r_bh ;
00084         msr.set_std_base() ;
00085 
00086         Cmp tmp = sqrt(1. + 2.*msr()) ;
00087         tmp.std_base_scal() ;
00088 
00089         Tenseur acar = star.get_a_car() ;
00090         acar.set_std_base() ;
00091 
00092         Tenseur g_euler = star.get_gam_euler() ;
00093         g_euler.set_std_base() ;
00094 
00095         Tenseur nbary = star.get_nbar() ;
00096         nbary.set_std_base() ;
00097 
00098         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary()
00099           * tmp * xxa ;
00100         dens.std_base_scal() ;
00101 
00102         *p_xa_barycenter_extr = dens.integrale() / mass_b_extr() ;
00103 
00104     }
00105     else { // Conformally flat background metrci
00106 
00107         Tenseur acar = star.get_a_car() ;
00108         acar.set_std_base() ;
00109 
00110         Tenseur g_euler = star.get_gam_euler() ;
00111         g_euler.set_std_base() ;
00112 
00113         Tenseur nbary = star.get_nbar() ;
00114         nbary.set_std_base() ;
00115 
00116         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary() * xxa ;
00117         dens.std_base_scal() ;
00118 
00119         *p_xa_barycenter_extr = dens.integrale() / mass_b_extr() ;
00120 
00121     }
00122 
00123     }
00124 
00125     return *p_xa_barycenter_extr ;
00126 
00127 }
00128 
00129           //--------------------------------------------------//
00130           //          Y coordinate of the barycenter          //
00131           //--------------------------------------------------//
00132 
00133 double Bin_bhns_extr::ya_barycenter_extr() const {
00134 
00135   using namespace Unites ;
00136 
00137     if (p_ya_barycenter_extr == 0x0) {    // a new computation is required
00138 
00139         p_ya_barycenter_extr = new double ;
00140 
00141     *p_ya_barycenter_extr = 0 ;
00142 
00143         const Map& mp = star.get_mp() ;
00144         Cmp yya(mp) ;
00145     yya = mp.ya ;   // Absolute Y coordinate
00146     yya.std_base_scal() ;
00147 
00148     if (star.in_kerrschild()) { // Kerr-Schild background metric
00149 
00150         const Coord& xx = mp.x ;
00151         const Coord& yy = mp.y ;
00152         const Coord& zz = mp.z ;
00153 
00154         Tenseur r_bh(mp) ;
00155         r_bh.set_etat_qcq() ;
00156         r_bh.set() = pow( (xx+separ)*(xx+separ) + yy*yy + zz*zz, 0.5) ;
00157         r_bh.set_std_base() ;
00158 
00159         Tenseur msr(mp) ;
00160         msr = ggrav * mass_bh / r_bh ;
00161         msr.set_std_base() ;
00162 
00163         Cmp tmp = sqrt(1. + 2.*msr()) ;
00164         tmp.std_base_scal() ;
00165 
00166         Tenseur acar = star.get_a_car() ;
00167         acar.set_std_base() ;
00168 
00169         Tenseur g_euler = star.get_gam_euler() ;
00170         g_euler.set_std_base() ;
00171 
00172         Tenseur nbary = star.get_nbar() ;
00173         nbary.set_std_base() ;
00174 
00175         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary()
00176           * tmp * yya ;
00177         dens.std_base_scal() ;
00178 
00179         *p_ya_barycenter_extr = dens.integrale() / mass_b_extr() ;
00180 
00181     }
00182     else { // Conformally flat background metric
00183            // It should be zero !
00184 
00185         Tenseur acar = star.get_a_car() ;
00186         acar.set_std_base() ;
00187 
00188         Tenseur g_euler = star.get_gam_euler() ;
00189         g_euler.set_std_base() ;
00190 
00191         Tenseur nbary = star.get_nbar() ;
00192         nbary.set_std_base() ;
00193 
00194         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary() * yya ;
00195         dens.std_base_scal() ;
00196 
00197         *p_ya_barycenter_extr = dens.integrale() / mass_b_extr() ;
00198 
00199     }
00200 
00201     }
00202 
00203     return *p_ya_barycenter_extr ;
00204 
00205 }
00206 
00207           //-------------------------------//
00208           //          Baryon mass          //
00209           //-------------------------------//
00210 
00211 double Bin_bhns_extr::mass_b_extr() const {
00212 
00213   using namespace Unites ;
00214 
00215     if (p_mass_b_extr == 0x0) {    // a new computation is required
00216 
00217         p_mass_b_extr = new double ;
00218 
00219         if (star.is_relativistic()) {  // Relativistic case
00220 
00221         *p_mass_b_extr = 0 ;
00222 
00223         if (star.in_kerrschild()) { // Kerr-Schild background metric
00224 
00225             const Map& mp = star.get_mp() ;
00226 
00227         const Coord& xx = mp.x ;
00228         const Coord& yy = mp.y ;
00229         const Coord& zz = mp.z ;
00230 
00231         Tenseur r_bh(mp) ;
00232         r_bh.set_etat_qcq() ;
00233         r_bh.set() = pow( (xx+separ)*(xx+separ) + yy*yy + zz*zz, 0.5) ;
00234         r_bh.set_std_base() ;
00235 
00236         Tenseur msr(mp) ;
00237         msr = ggrav * mass_bh / r_bh ;
00238         msr.set_std_base() ;
00239 
00240         Cmp tmp = sqrt(1. + 2.*msr()) ;
00241         tmp.std_base_scal() ;
00242 
00243         Tenseur acar = star.get_a_car() ;
00244         acar.set_std_base() ;
00245 
00246         Tenseur g_euler = star.get_gam_euler() ;
00247         g_euler.set_std_base() ;
00248 
00249         Tenseur nbary = star.get_nbar() ;
00250         nbary.set_std_base() ;
00251 
00252         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary() * tmp ;
00253         dens.std_base_scal() ;
00254 
00255         *p_mass_b_extr = dens.integrale() ;
00256 
00257         }
00258         else { // Conformally flat background metric
00259 
00260             Tenseur acar = star.get_a_car() ;
00261         acar.set_std_base() ;
00262 
00263         Tenseur g_euler = star.get_gam_euler() ;
00264         g_euler.set_std_base() ;
00265 
00266         Tenseur nbary = star.get_nbar() ;
00267         nbary.set_std_base() ;
00268 
00269         Cmp dens = acar() * sqrt(acar()) * g_euler() * nbary() ;
00270         dens.std_base_scal() ;
00271 
00272         *p_mass_b_extr = dens.integrale() ;
00273 
00274         }
00275 
00276     }
00277     else {
00278 
00279         cout << "BH-NS binary system should be relativistic!!!" << endl ;
00280         abort() ;
00281 
00282     }
00283     }
00284 
00285     return *p_mass_b_extr ;
00286 
00287 }

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