single_param.C

00001 /*
00002  *  Method of class Isol_hor to compute physical parameters of the horizon
00003  *
00004  *    (see file isol_hor.h for documentation).
00005  *
00006  */
00007 
00008 /*
00009  *   Copyright (c) 2004  Jose Luis Jaramillo
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 single_param_C[] = "$Header: /cvsroot/Lorene/C++/Source/Isol_hor/single_param.C,v 1.1 2007/04/13 15:28:35 f_limousin Exp $" ;
00029 
00030 /*
00031  * $Id: single_param.C,v 1.1 2007/04/13 15:28:35 f_limousin Exp $
00032  * $Log: single_param.C,v $
00033  * Revision 1.1  2007/04/13 15:28:35  f_limousin
00034  * Lots of improvements, generalisation to an arbitrary state of
00035  * rotation, implementation of the spatial metric given by Samaya.
00036  *
00037  *
00038  * $Header: /cvsroot/Lorene/C++/Source/Isol_hor/single_param.C,v 1.1 2007/04/13 15:28:35 f_limousin Exp $
00039  *
00040  */
00041 
00042 // C++ headers
00043 #include "headcpp.h"
00044 
00045 // C headers
00046 #include <stdlib.h>
00047 #include <assert.h>
00048 
00049 // Lorene headers
00050 #include "isol_hor.h"
00051 #include "metric.h"
00052 #include "evolution.h"
00053 #include "unites.h"
00054 #include "scalar.h"
00055 #include "vector.h"
00056 #include "graphique.h"
00057 #include "utilitaires.h"
00058 
00059 
00060 
00061 const Scalar Single_hor::b_tilde()const {
00062 
00063   Scalar tmp = contract( beta, 0, tgam.radial_vect()
00064              .down(0, tgam), 0) ;
00065   
00066   return tmp ;
00067 
00068 }
00069 
00070 const Scalar Single_hor::darea_hor() const {
00071   
00072   Scalar tmp = sqrt( get_gam().cov()(2,2) * get_gam().cov()(3,3) - 
00073              get_gam().cov()(2,3) * get_gam().cov()(2,3)) ;
00074   
00075   tmp.std_spectral_base() ;
00076   
00077   return tmp ;
00078   
00079 }
00080 
00081 double Single_hor::area_hor() const {
00082     
00083     Scalar integrand (darea_hor()) ;
00084     integrand.raccord(1) ;
00085 
00086     return mp.integrale_surface(integrand, radius + 1e-15) ;
00087 
00088 }
00089 
00090 double Single_hor::radius_hor() const {
00091 
00092   double resu =  area_hor() / (4. * M_PI);
00093 
00094   resu = pow(resu, 1./2.) ;
00095 
00096   return resu ;
00097 
00098 }
00099 
00100 double Single_hor::ang_mom_hor()const {
00101 
00102   // Vector \partial_phi
00103   Vector phi (ff.get_mp(), CON, *(ff.get_triad()) ) ;
00104 
00105   Scalar tmp (ff.get_mp() ) ;
00106   tmp = 1 ;
00107   tmp.std_spectral_base() ;
00108   tmp.mult_rsint() ;
00109 
00110   phi.set(1) = 0. ;
00111   phi.set(2) = 0. ;
00112   phi.set(3) = tmp ; 
00113   
00114   Scalar k_rphi = contract(contract( get_gam().radial_vect(), 0, 
00115                      get_k_dd(), 0), 0, 
00116                phi, 0) / (8. * M_PI) ;
00117 
00118   Scalar integrand = k_rphi * darea_hor() ;   // we correct with the curved 
00119                                               // element of area 
00120 
00121   double ang_mom = mp.integrale_surface(integrand, radius + 1e-15) ;
00122 
00123   return ang_mom ;
00124 
00125 }
00126 
00127 // Mass  (fundamental constants made 1)
00128 double Single_hor::mass_hor()const {
00129   
00130   double rr = radius_hor() ;
00131 
00132   double  tmp = sqrt( pow( rr, 4) + 4 * pow( ang_mom_hor(), 2) ) / ( 2 * rr ) ;
00133                                           
00134   return tmp ;
00135 
00136 }
00137 
00138 // Surface gravity
00139 double Single_hor::kappa_hor() const{
00140   
00141   double rr = radius_hor() ;
00142 
00143   double jj = ang_mom_hor() ;
00144 
00145   double tmp = (pow( rr, 4) - 4 * pow( jj, 2)) / ( 2 * pow( rr, 3) 
00146              *  sqrt( pow( rr, 4) + 4 * pow( jj, 2) ) ) ;
00147   
00148   return tmp ;
00149 
00150 }
00151 
00152 // Orbital velocity
00153 double Single_hor::omega_hor()const {
00154   
00155   double rr = radius_hor() ;
00156 
00157   double jj = ang_mom_hor() ;
00158 
00159   double tmp = 2 * jj / ( rr *  sqrt( pow( rr, 4) + 4 * pow( jj, 2) ) ) ;
00160   
00161   return tmp ;
00162 
00163 }
00164 
00165 // ADM angular momentum
00166 
00167 double Single_hor::ang_mom_adm()const {
00168 
00169   Scalar integrand =  (get_k_dd()(1,3) - get_gam().cov()(1,3) * trK) / 
00170     (8. * M_PI)  ;
00171 
00172   integrand.mult_rsint() ;  // in order to pass from the triad 
00173                             // component to the coordinate basis
00174 
00175   double tmp = mp.integrale_surface_infini(integrand) ;
00176 
00177   return  tmp ;
00178 
00179 }
00180 
00181 // Expansion
00182 
00183 Scalar Single_hor::expansion() const {
00184 
00185   Scalar expa = contract(get_gam().radial_vect().derive_cov(get_gam()), 0,1) 
00186     + contract(contract(get_k_dd(), 0, get_gam().radial_vect(), 0), 
00187            0, get_gam().radial_vect(), 0) - trK ; 
00188 
00189   return expa ;
00190 }

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