hole_bhns_upmetr.C

00001 /*
00002  *  Method of class Hole_bhns to compute metric quantities from
00003  *   the companion neutron-star and total metric quantities
00004  *
00005  *    (see file hole_bhns.h for documentation).
00006  *
00007  */
00008 
00009 /*
00010  *   Copyright (c) 2005-2007 Keisuke Taniguchi
00011  *
00012  *   This file is part of LORENE.
00013  *
00014  *   LORENE is free software; you can redistribute it and/or modify
00015  *   it under the terms of the GNU General Public License version 2
00016  *   as published by the Free Software Foundation.
00017  *
00018  *   LORENE is distributed in the hope that it will be useful,
00019  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  *   GNU General Public License for more details.
00022  *
00023  *   You should have received a copy of the GNU General Public License
00024  *   along with LORENE; if not, write to the Free Software
00025  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00026  *
00027  */
00028 
00029 char hole_bhns_upmetr_C[] = "$Header: /cvsroot/Lorene/C++/Source/Hole_bhns/hole_bhns_upmetr.C,v 1.2 2008/05/15 19:08:15 k_taniguchi Exp $" ;
00030 
00031 /*
00032  * $Id: hole_bhns_upmetr.C,v 1.2 2008/05/15 19:08:15 k_taniguchi Exp $
00033  * $Log: hole_bhns_upmetr.C,v $
00034  * Revision 1.2  2008/05/15 19:08:15  k_taniguchi
00035  * Change of some parameters.
00036  *
00037  * Revision 1.1  2007/06/22 01:25:31  k_taniguchi
00038  * *** empty log message ***
00039  *
00040  *
00041  * $Header: /cvsroot/Lorene/C++/Source/Hole_bhns/hole_bhns_upmetr.C,v 1.2 2008/05/15 19:08:15 k_taniguchi Exp $
00042  *
00043  */
00044 
00045 // C++ headers
00046 //#include <>
00047 
00048 // C headers
00049 //#include <>
00050 
00051 // Lorene headers
00052 #include "hole_bhns.h"
00053 #include "star_bhns.h"
00054 #include "utilitaires.h"
00055 #include "unites.h"
00056 
00057 void Hole_bhns::update_metric_bhns(const Star_bhns& star,
00058                    const Hole_bhns& hole_prev,
00059                    double relax) {
00060 
00061     // Fundamental constants and units
00062     // -------------------------------
00063     using namespace Unites ;
00064 
00065     //-----------------------------------------------------
00066     // Computation of quantities coming from the companion
00067     //-----------------------------------------------------
00068 
00069     const Map& mp_ns (star.get_mp()) ;
00070 
00071     double mass = ggrav * mass_bh ;
00072 
00073     // Lapconf function
00074     // ----------------
00075 
00076     if ( (star.get_lapconf_auto()).get_etat() == ETATZERO ) {
00077         lapconf_comp.set_etat_zero() ;
00078     }
00079     else {
00080         lapconf_comp.set_etat_qcq() ;
00081     lapconf_comp.import( star.get_lapconf_auto() ) ;
00082     lapconf_comp.std_spectral_base() ;
00083     }
00084 
00085     // Shift vector
00086     // ------------
00087 
00088     if ( (star.get_shift_auto())(2).get_etat() == ETATZERO ) {
00089         assert( (star.get_shift_auto())(1).get_etat() == ETATZERO ) ;
00090     assert( (star.get_shift_auto())(3).get_etat() == ETATZERO ) ;
00091 
00092         shift_comp.set_etat_zero() ;
00093     }
00094     else {
00095         shift_comp.set_etat_qcq() ;
00096     shift_comp.set_triad(mp.get_bvect_cart()) ;
00097 
00098     Vector comp_shift(star.get_shift_auto()) ;
00099     comp_shift.change_triad(mp_ns.get_bvect_cart()) ;
00100     comp_shift.change_triad(mp.get_bvect_cart()) ;
00101 
00102     assert( *(shift_comp.get_triad()) == *(comp_shift.get_triad()) ) ;
00103 
00104     (shift_comp.set(1)).import( comp_shift(1) ) ;
00105     (shift_comp.set(2)).import( comp_shift(2) ) ;
00106     (shift_comp.set(3)).import( comp_shift(3) ) ;
00107 
00108     shift_comp.std_spectral_base() ;
00109     }
00110 
00111     // Conformal factor
00112     // ----------------
00113 
00114     if ( (star.get_confo_auto()).get_etat() == ETATZERO ) {
00115         confo_comp.set_etat_zero() ;
00116     }
00117     else {
00118         confo_comp.set_etat_qcq() ;
00119     confo_comp.import( star.get_confo_auto() ) ;
00120     confo_comp.std_spectral_base() ;
00121     }
00122 
00123     //----------------------------------------------------
00124     // Relaxation on lapconf_comp, shift_comp, confo_comp
00125     //----------------------------------------------------
00126 
00127     double relax_jm1 = 1. - relax ;
00128 
00129     lapconf_comp = relax * lapconf_comp
00130       + relax_jm1 * (hole_prev.lapconf_comp) ;
00131 
00132     shift_comp = relax * shift_comp + relax_jm1 * (hole_prev.shift_comp) ;
00133 
00134     confo_comp = relax * confo_comp + relax_jm1 * (hole_prev.confo_comp) ;
00135 
00136 
00137     // Coordinates
00138     // -----------
00139     Scalar rr(mp) ;
00140     rr = mp.r ;
00141     rr.std_spectral_base() ;
00142     Scalar st(mp) ;
00143     st = mp.sint ;
00144     st.std_spectral_base() ;
00145     Scalar ct(mp) ;
00146     ct = mp.cost ;
00147     ct.std_spectral_base() ;
00148     Scalar sp(mp) ;
00149     sp = mp.sinp ;
00150     sp.std_spectral_base() ;
00151     Scalar cp(mp) ;
00152     cp = mp.cosp ;
00153     cp.std_spectral_base() ;
00154 
00155     Vector ll(mp, CON, mp.get_bvect_cart()) ;
00156     ll.set_etat_qcq() ;
00157     ll.set(1) = st % cp ;
00158     ll.set(2) = st % sp ;
00159     ll.set(3) = ct ;
00160     ll.std_spectral_base() ;
00161 
00162 
00163     if (kerrschild) {
00164 
00165         //----------------------------------------------
00166         // Metric quantities from the analytic solution
00167         //----------------------------------------------
00168 
00169     lapconf_auto_bh = 1. / sqrt(1.+2.*mass/rr) ;
00170     lapconf_auto_bh.std_spectral_base() ;
00171     lapconf_auto_bh.annule_domain(0) ;
00172     lapconf_auto_bh.raccord(1) ;
00173 
00174     confo_auto_bh = 1. ;
00175     confo_auto_bh.std_spectral_base() ;
00176 
00177     shift_auto_bh = 2. * lapconf_auto_bh*lapconf_auto_bh*mass * ll / rr ;
00178     shift_auto_bh.std_spectral_base() ;
00179     shift_auto_bh.annule_domain(0) ;
00180 
00181     //---------------------------------
00182     // Derivative of metric quantities
00183     //---------------------------------
00184 
00185     d_lapconf_auto_rs.set_etat_qcq() ;
00186     for (int i=1; i<=3; i++)
00187         d_lapconf_auto_rs.set(i) = lapconf_auto_rs.deriv(i) ;
00188 
00189     d_lapconf_auto_rs.std_spectral_base() ;
00190 
00191     d_lapconf_auto_bh.set_etat_qcq() ;
00192     for (int i=1; i<=3; i++) {
00193         d_lapconf_auto_bh.set(i) = pow(lapconf_auto_bh,3.) * mass * ll(i)
00194           / rr / rr ;
00195     }
00196     d_lapconf_auto_bh.std_spectral_base() ;
00197     d_lapconf_auto_bh.annule_domain(0) ;
00198     d_lapconf_auto_bh.inc_dzpuis(2) ;
00199 
00200     d_lapconf_auto = d_lapconf_auto_rs + d_lapconf_auto_bh ;
00201     d_lapconf_auto.std_spectral_base() ;
00202 
00203     d_shift_auto_rs.set_etat_qcq() ;
00204     for (int i=1; i<=3; i++) {
00205         for (int j=1; j<=3; j++) {
00206             d_shift_auto_rs.set(i,j) = shift_auto_rs(j).deriv(i) ;
00207         }
00208     }
00209 
00210     d_shift_auto_rs.std_spectral_base() ;
00211 
00212     d_shift_auto_bh.set_etat_qcq() ;
00213     for (int i=1; i<=3; i++) {
00214         for (int j=1; j<=3; j++) {
00215             d_shift_auto_bh.set(i,j) = 2.*lapconf_auto_bh
00216           *lapconf_auto_bh*mass
00217           * (flat.con()(i,j)
00218              - 2.*lapconf_auto_bh*lapconf_auto_bh*(1.+mass/rr)
00219              * ll(i) * ll(j))
00220           / rr / rr ;
00221         }
00222     }
00223     d_shift_auto_bh.std_spectral_base() ;
00224     d_shift_auto_bh.annule_domain(0) ;
00225     d_shift_auto_bh.inc_dzpuis(2) ;
00226 
00227     d_shift_auto = d_shift_auto_rs + d_shift_auto_bh ;
00228     d_shift_auto.std_spectral_base() ;
00229 
00230     d_confo_auto_rs.set_etat_qcq() ;
00231     for (int i=1; i<=3; i++)
00232         d_confo_auto_rs.set(i) = confo_auto_rs.deriv(i) ;
00233 
00234     d_confo_auto_rs.std_spectral_base() ;
00235 
00236     d_confo_auto_bh.set_etat_qcq() ;
00237     for (int i=1; i<=3; i++)
00238         d_confo_auto_bh.set(i) = 0. ;
00239 
00240     d_confo_auto_bh.std_spectral_base() ;
00241 
00242     d_confo_auto = d_confo_auto_rs + d_confo_auto_bh ;
00243     d_confo_auto.std_spectral_base() ;
00244 
00245     }
00246     else {  // Isotropic coordinates with the maximal slicing
00247 
00248         // Sets C/M^2 for each case of the lapse boundary condition
00249         // --------------------------------------------------------
00250         double cc ;
00251 
00252     if (bc_lapconf_nd) {  // Neumann boundary condition
00253         if (bc_lapconf_fs) {  // First condition
00254             // d(\alpha \psi)/dr = 0
00255             // ---------------------
00256             cc = 2. * (sqrt(13.) - 1.) / 3. ;
00257         }
00258         else {  // Second condition
00259             // d(\alpha \psi)/dr = (\alpha \psi)/(2 rah)
00260             // -----------------------------------------
00261             cc = 4. / 3. ;
00262         }
00263     }
00264     else {  // Dirichlet boundary condition
00265         if (bc_lapconf_fs) {  // First condition
00266             // (\alpha \psi) = 1/2
00267             // -------------------
00268             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00269         abort() ;
00270         }
00271         else {  // Second condition
00272             // (\alpha \psi)  = 1/sqrt(2.) \psi_KS
00273             // -----------------------------------
00274             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00275         abort() ;
00276         //          cc = 2. * sqrt(2.) ;
00277         }
00278     }
00279 
00280         //----------------------------------------------
00281         // Metric quantities from the analytic solution
00282         //----------------------------------------------
00283 
00284     Scalar r_are(mp) ;
00285     r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00286     r_are.std_spectral_base() ;
00287 
00288     lapconf_auto_bh = sqrt(1. - 2.*mass/r_are/rr
00289                    + cc*cc*pow(mass/r_are/rr, 4.)) * sqrt(r_are) ;
00290     lapconf_auto_bh.std_spectral_base() ;
00291     lapconf_auto_bh.annule_domain(0) ;
00292     lapconf_auto_bh.raccord(1) ;
00293 
00294     confo_auto_bh = sqrt(r_are) ;
00295     confo_auto_bh.std_spectral_base() ;
00296     confo_auto_bh.annule_domain(0) ;
00297     confo_auto_bh.raccord(1) ;
00298 
00299     shift_auto_bh = mass * mass * cc * ll / rr / rr / pow(r_are, 3.) ;
00300     shift_auto_bh.std_spectral_base() ;
00301     shift_auto_bh.annule_domain(0) ;
00302     for (int i=1; i<=3; i++)
00303         shift_auto_bh.set(i).raccord(1) ;
00304 
00305     //---------------------------------
00306     // Derivative of metric quantities
00307     //---------------------------------
00308 
00309     d_lapconf_auto_rs.set_etat_qcq() ;
00310     for (int i=1; i<=3; i++)
00311         d_lapconf_auto_rs.set(i) = lapconf_auto_rs.deriv(i) ;
00312 
00313     d_lapconf_auto_rs.std_spectral_base() ;
00314 
00315     d_lapconf_auto_bh.set_etat_qcq() ;
00316     for (int i=1; i<=3; i++) {
00317         d_lapconf_auto_bh.set(i) = sqrt(r_are)
00318           * (mass/r_are/rr - 2.*cc*cc*pow(mass/r_are/rr,4.))
00319           * ll(i) / rr
00320           + 0.5 * sqrt(r_are)
00321           * (sqrt(1. - 2.*mass/r_are/rr + cc*cc*pow(mass/r_are/rr,4.))-1.)
00322           * sqrt(1. - 2.*mass/r_are/rr + cc*cc*pow(mass/r_are/rr,4.))
00323           * ll(i) / rr ;
00324     }
00325     d_lapconf_auto_bh.std_spectral_base() ;
00326     d_lapconf_auto_bh.annule_domain(0) ;
00327     d_lapconf_auto_bh.inc_dzpuis(2) ;
00328 
00329     d_lapconf_auto = d_lapconf_auto_rs + d_lapconf_auto_bh ;
00330     d_lapconf_auto.std_spectral_base() ;
00331     d_lapconf_auto.annule_domain(0) ;
00332     for (int i=1; i<=3; i++)
00333         d_lapconf_auto.set(i).raccord(1) ;
00334 
00335     d_shift_auto_rs.set_etat_qcq() ;
00336     for (int i=1; i<=3; i++) {
00337         for (int j=1; j<=3; j++) {
00338             d_shift_auto_rs.set(i,j) = shift_auto_rs(j).deriv(i) ;
00339         }
00340     }
00341 
00342     d_shift_auto_rs.std_spectral_base() ;
00343 
00344     d_shift_auto_bh.set_etat_qcq() ;
00345     for (int i=1; i<=3; i++) {
00346         for (int j=1; j<=3; j++) {
00347             d_shift_auto_bh.set(i,j) =
00348           mass*mass*cc*(flat.con()(i,j)
00349                 -3.*sqrt(1. - 2.*mass/r_are/rr
00350                      +cc*cc*pow(mass/r_are/rr,4.))
00351                 *ll(i)*ll(j))
00352           / pow(r_are*rr,3.) ;
00353         }
00354     }
00355     d_shift_auto_bh.std_spectral_base() ;
00356     d_shift_auto_bh.annule_domain(0) ;
00357     d_shift_auto_bh.inc_dzpuis(2) ;
00358 
00359     d_shift_auto = d_shift_auto_rs + d_shift_auto_bh ;
00360     d_shift_auto.std_spectral_base() ;
00361     d_shift_auto.annule_domain(0) ;
00362     for (int i=1; i<=3; i++) {
00363         for (int j=1; j<=3; j++) {
00364             d_shift_auto.set(i,j).raccord(1) ;
00365         }
00366     }
00367 
00368     d_confo_auto_rs.set_etat_qcq() ;
00369     for (int i=1; i<=3; i++)
00370         d_confo_auto_rs.set(i) = confo_auto_rs.deriv(i) ;
00371 
00372     d_confo_auto_rs.std_spectral_base() ;
00373 
00374     d_confo_auto_bh.set_etat_qcq() ;
00375     for (int i=1; i<=3; i++) {
00376         d_confo_auto_bh.set(i) = 0.5*sqrt(r_are)
00377           *(sqrt(1. - 2.*mass/r_are/rr +cc*cc*pow(mass/r_are/rr,4.)) - 1.)
00378           * ll(i) / rr ;
00379     }
00380     d_confo_auto_bh.std_spectral_base() ;
00381     d_confo_auto_bh.annule_domain(0) ;
00382     d_confo_auto_bh.inc_dzpuis(2) ;
00383 
00384     d_confo_auto = d_confo_auto_rs + d_confo_auto_bh ;
00385     d_confo_auto.std_spectral_base() ;
00386     d_confo_auto.annule_domain(0) ;
00387     for (int i=1; i<=3; i++)
00388         d_confo_auto.set(i).raccord(1) ;
00389 
00390     }
00391 
00392     //-------------------------
00393     // Total metric quantities
00394     //-------------------------
00395 
00396     lapconf_auto = lapconf_auto_rs + lapconf_auto_bh ;
00397     lapconf_auto.std_spectral_base() ;
00398     lapconf_auto.annule_domain(0) ;
00399     lapconf_auto.raccord(1) ;
00400 
00401     lapconf_tot = lapconf_auto_rs + lapconf_auto_bh + lapconf_comp ;
00402     lapconf_tot.std_spectral_base() ;
00403     lapconf_tot.annule_domain(0) ;
00404     lapconf_tot.raccord(1) ;
00405 
00406     shift_auto = shift_auto_rs + shift_auto_bh ;
00407     shift_auto.std_spectral_base() ;
00408     shift_auto.annule_domain(0) ;
00409     for (int i=1; i<=3; i++) {
00410         shift_auto.set(i).raccord(1) ;
00411     }
00412 
00413     shift_tot = shift_auto_rs + shift_auto_bh + shift_comp ;
00414     shift_tot.std_spectral_base() ;
00415     shift_tot.annule_domain(0) ;
00416     for (int i=1; i<=3; i++) {
00417         shift_tot.set(i).raccord(1) ;
00418     }
00419 
00420     confo_auto = confo_auto_rs + confo_auto_bh ;
00421     confo_auto.std_spectral_base() ;
00422     confo_auto.annule_domain(0) ;
00423     confo_auto.raccord(1) ;
00424 
00425     confo_tot = confo_auto_rs + confo_auto_bh + confo_comp ;
00426     confo_tot.std_spectral_base() ;
00427     confo_tot.annule_domain(0) ;
00428     confo_tot.raccord(1) ;
00429 
00430     lapse_auto = lapconf_auto / confo_tot ;
00431     lapse_auto.std_spectral_base() ;
00432 
00433     lapse_tot = lapconf_tot / confo_tot ;
00434     lapse_tot.std_spectral_base() ;
00435 
00436     // The derived quantities are obsolete
00437     // -----------------------------------
00438 
00439     del_deriv() ;
00440 
00441 }

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