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 }
1.4.6