00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
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
00062
00063 using namespace Unites ;
00064
00065
00066
00067
00068
00069 const Map& mp_ns (star.get_mp()) ;
00070
00071 double mass = ggrav * mass_bh ;
00072
00073
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
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
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
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
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
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
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 {
00247
00248
00249
00250 double cc ;
00251
00252 if (bc_lapconf_nd) {
00253 if (bc_lapconf_fs) {
00254
00255
00256 cc = 2. * (sqrt(13.) - 1.) / 3. ;
00257 }
00258 else {
00259
00260
00261 cc = 4. / 3. ;
00262 }
00263 }
00264 else {
00265 if (bc_lapconf_fs) {
00266
00267
00268 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00269 abort() ;
00270 }
00271 else {
00272
00273
00274 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00275 abort() ;
00276
00277 }
00278 }
00279
00280
00281
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
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
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
00437
00438
00439 del_deriv() ;
00440
00441 }