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_bc_C[] = "$Header: /cvsroot/Lorene/C++/Source/Hole_bhns/hole_bhns_bc.C,v 1.2 2008/05/15 19:04:10 k_taniguchi Exp $" ;
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include <math.h>
00050
00051
00052 #include "hole_bhns.h"
00053 #include "valeur.h"
00054 #include "grilles.h"
00055 #include "unites.h"
00056
00057
00058
00059
00060
00061 const Valeur Hole_bhns::bc_lapconf() const {
00062
00063
00064
00065 using namespace Unites ;
00066
00067 const Mg3d* mg = mp.get_mg() ;
00068 const Mg3d* mg_angu = mg->get_angu() ;
00069 Valeur bc(mg_angu) ;
00070
00071 int nt = mg->get_nt(0) ;
00072 int np = mg->get_np(0) ;
00073
00074 Scalar tmp(mp) ;
00075
00076
00077
00078 if (bc_lapconf_nd) {
00079
00080 Scalar st(mp) ;
00081 st = mp.sint ;
00082 st.std_spectral_base() ;
00083 Scalar ct(mp) ;
00084 ct = mp.cost ;
00085 ct.std_spectral_base() ;
00086 Scalar sp(mp) ;
00087 sp = mp.sinp ;
00088 sp.std_spectral_base() ;
00089 Scalar cp(mp) ;
00090 cp = mp.cosp ;
00091 cp.std_spectral_base() ;
00092
00093 Scalar rr(mp) ;
00094 rr = mp.r ;
00095 rr.std_spectral_base() ;
00096
00097 if (bc_lapconf_fs) {
00098
00099 if (kerrschild) {
00100 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00101 abort() ;
00102 }
00103 else {
00104 tmp = - d_lapconf_comp(1) % st % cp
00105 - d_lapconf_comp(2) % st % sp - d_lapconf_comp(3) % ct ;
00106 }
00107
00108 }
00109 else {
00110
00111 Scalar tmp1(mp) ;
00112 tmp1 = 0.5 * (lapconf_auto_rs + lapconf_comp) / rr ;
00113 tmp1.std_spectral_base() ;
00114 tmp1.inc_dzpuis(2) ;
00115
00116 if (kerrschild) {
00117 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00118 abort() ;
00119 }
00120 else {
00121
00122
00123 tmp = - d_lapconf_comp(1) % st % cp
00124 - d_lapconf_comp(2) % st % sp - d_lapconf_comp(3) % ct
00125 + tmp1 ;
00126 }
00127
00128 }
00129 }
00130 else {
00131
00132 if (bc_lapconf_fs) {
00133
00134
00135 if (kerrschild) {
00136 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00137 abort() ;
00138
00139 }
00140 else {
00141 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00142 abort() ;
00143
00144
00145 }
00146
00147 }
00148 else {
00149
00150 if (kerrschild) {
00151 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00152 abort() ;
00153 }
00154 else {
00155 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00156 abort() ;
00157
00158
00159 }
00160
00161 }
00162 }
00163
00164 bc = 1. ;
00165 for (int j=0; j<nt; j++) {
00166 for (int k=0; k<np; k++) {
00167 bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00168 }
00169 }
00170
00171 bc.std_base_scal() ;
00172 return bc ;
00173
00174 }
00175
00176 const Valeur Hole_bhns::bc_shift_x(double ome_orb, double y_rot) const {
00177
00178
00179
00180 using namespace Unites ;
00181
00182 const Mg3d* mg = mp.get_mg() ;
00183 const Mg3d* mg_angu = mg->get_angu() ;
00184 Valeur bc(mg_angu) ;
00185
00186 Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00187
00188 Scalar rr(mp) ;
00189 rr = mp.r ;
00190 rr.std_spectral_base() ;
00191 Scalar st(mp) ;
00192 st = mp.sint ;
00193 st.std_spectral_base() ;
00194 Scalar cp(mp) ;
00195 cp = mp.cosp ;
00196 cp.std_spectral_base() ;
00197 Scalar yy(mp) ;
00198 yy = mp.y ;
00199 yy.std_spectral_base() ;
00200
00201 double mass = ggrav * mass_bh ;
00202 double ori_y_bh = mp.get_ori_y() ;
00203
00204 Scalar tmp(mp) ;
00205
00206 if (kerrschild) {
00207
00208
00209
00210 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00211 abort() ;
00212
00213 }
00214 else {
00215
00216 double cc ;
00217
00218
00219
00220
00221 if (bc_lapconf_nd) {
00222 if (bc_lapconf_fs) {
00223
00224
00225 cc = 2. * (sqrt(13.) - 1.) / 3. ;
00226 }
00227 else {
00228
00229
00230 cc = 4. / 3. ;
00231 }
00232 }
00233 else {
00234 if (bc_lapconf_fs) {
00235
00236
00237 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00238 abort() ;
00239 }
00240 else {
00241
00242
00243 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00244 abort() ;
00245
00246 }
00247 }
00248
00249 Scalar r_are(mp) ;
00250 r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00251 r_are.std_spectral_base() ;
00252
00253
00254
00255
00256
00257
00258
00259 tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * st * cp
00260 - shift_comp(1)
00261 + (ome_orb - omega_spin) * yy + ome_orb * (ori_y_bh - y_rot) ;
00262
00263 }
00264
00265 int nt = mg->get_nt(0) ;
00266 int np = mg->get_np(0) ;
00267
00268 bc = 1. ;
00269 for (int j=0; j<nt; j++) {
00270 for (int k=0; k<np; k++) {
00271 bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00272 }
00273 }
00274
00275 bc.base = *bases[0] ;
00276
00277 for (int i=0; i<3; i++)
00278 delete bases[i] ;
00279
00280 delete [] bases ;
00281
00282 return bc ;
00283
00284 }
00285
00286 const Valeur Hole_bhns::bc_shift_y(double ome_orb, double x_rot) const {
00287
00288
00289
00290 using namespace Unites ;
00291
00292 const Mg3d* mg = mp.get_mg() ;
00293 const Mg3d* mg_angu = mg->get_angu() ;
00294 Valeur bc(mg_angu) ;
00295
00296 Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00297
00298 Scalar rr(mp) ;
00299 rr = mp.r ;
00300 rr.std_spectral_base() ;
00301 Scalar st(mp) ;
00302 st = mp.sint ;
00303 st.std_spectral_base() ;
00304 Scalar sp(mp) ;
00305 sp = mp.sinp ;
00306 sp.std_spectral_base() ;
00307 Scalar xx(mp) ;
00308 xx = mp.x ;
00309 xx.std_spectral_base() ;
00310
00311 double mass = ggrav * mass_bh ;
00312 double ori_x_bh = mp.get_ori_x() ;
00313
00314 Scalar tmp(mp) ;
00315
00316 if (kerrschild) {
00317
00318
00319
00320 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00321 abort() ;
00322
00323 }
00324 else {
00325
00326 double cc ;
00327
00328
00329
00330
00331 if (bc_lapconf_nd) {
00332 if (bc_lapconf_fs) {
00333
00334
00335 cc = 2. * (sqrt(13.) - 1.) / 3. ;
00336 }
00337 else {
00338
00339
00340 cc = 4. / 3. ;
00341 }
00342 }
00343 else {
00344 if (bc_lapconf_fs) {
00345
00346
00347 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00348 abort() ;
00349 }
00350 else {
00351
00352
00353 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00354 abort() ;
00355
00356 }
00357 }
00358
00359 Scalar r_are(mp) ;
00360 r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00361 r_are.std_spectral_base() ;
00362
00363
00364
00365
00366
00367
00368
00369 tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * st * sp
00370 - shift_comp(2)
00371 - (ome_orb - omega_spin) * xx - ome_orb * (ori_x_bh - x_rot) ;
00372
00373 }
00374
00375 int nt = mg->get_nt(0) ;
00376 int np = mg->get_np(0) ;
00377
00378 bc = 1. ;
00379 for (int j=0; j<nt; j++) {
00380 for (int k=0; k<np; k++) {
00381 bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00382 }
00383 }
00384
00385 bc.base = *bases[1] ;
00386
00387 for (int i=0; i<3; i++)
00388 delete bases[i] ;
00389
00390 delete [] bases ;
00391
00392 return bc ;
00393
00394 }
00395
00396 const Valeur Hole_bhns::bc_shift_z() const {
00397
00398
00399
00400 using namespace Unites ;
00401
00402 const Mg3d* mg = mp.get_mg() ;
00403 const Mg3d* mg_angu = mg->get_angu() ;
00404 Valeur bc(mg_angu) ;
00405
00406 Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00407
00408 Scalar rr(mp) ;
00409 rr = mp.r ;
00410 rr.std_spectral_base() ;
00411 Scalar ct(mp) ;
00412 ct = mp.cost ;
00413 ct.std_spectral_base() ;
00414
00415 double mass = ggrav * mass_bh ;
00416
00417 Scalar tmp(mp) ;
00418
00419 if (kerrschild) {
00420
00421
00422
00423 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00424 abort() ;
00425
00426 }
00427 else {
00428
00429 double cc ;
00430
00431
00432
00433
00434 if (bc_lapconf_nd) {
00435 if (bc_lapconf_fs) {
00436
00437
00438 cc = 2. * (sqrt(13.) - 1.) / 3. ;
00439 }
00440 else {
00441
00442
00443 cc = 4. / 3. ;
00444 }
00445 }
00446 else {
00447 if (bc_lapconf_fs) {
00448
00449
00450 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00451 abort() ;
00452 }
00453 else {
00454
00455
00456 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00457 abort() ;
00458
00459 }
00460 }
00461
00462 Scalar r_are(mp) ;
00463 r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00464 r_are.std_spectral_base() ;
00465
00466
00467
00468
00469
00470 tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * ct
00471 - shift_comp(3) ;
00472
00473 }
00474
00475 int nt = mg->get_nt(0) ;
00476 int np = mg->get_np(0) ;
00477
00478 bc = 1. ;
00479 for (int j=0; j<nt; j++) {
00480 for (int k=0; k<np; k++) {
00481 bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00482 }
00483 }
00484
00485 bc.base = *bases[2] ;
00486
00487 for (int i=0; i<3; i++)
00488 delete bases[i] ;
00489
00490 delete [] bases ;
00491
00492 return bc ;
00493
00494 }
00495
00496 const Valeur Hole_bhns::bc_confo(double ome_orb, double x_rot,
00497 double y_rot) const {
00498
00499
00500
00501 using namespace Unites ;
00502
00503 const Mg3d* mg = mp.get_mg() ;
00504 const Mg3d* mg_angu = mg->get_angu() ;
00505 Valeur bc(mg_angu) ;
00506
00507 Scalar rr(mp) ;
00508 rr = mp.r ;
00509 rr.std_spectral_base() ;
00510 Scalar st(mp) ;
00511 st = mp.sint ;
00512 st.std_spectral_base() ;
00513 Scalar ct(mp) ;
00514 ct = mp.cost ;
00515 ct.std_spectral_base() ;
00516 Scalar sp(mp) ;
00517 sp = mp.sinp ;
00518 sp.std_spectral_base() ;
00519 Scalar cp(mp) ;
00520 cp = mp.cosp ;
00521 cp.std_spectral_base() ;
00522
00523 Vector ll(mp, CON, mp.get_bvect_cart()) ;
00524 ll.set_etat_qcq() ;
00525 ll.set(1) = st % cp ;
00526 ll.set(2) = st % sp ;
00527 ll.set(3) = ct ;
00528 ll.std_spectral_base() ;
00529
00530 Scalar divshift(mp) ;
00531 divshift = shift_auto_rs(1).deriv(1) + shift_auto_rs(2).deriv(2)
00532 + shift_auto_rs(3).deriv(3) + d_shift_comp(1,1) + d_shift_comp(2,2)
00533 + d_shift_comp(3,3) ;
00534 divshift.std_spectral_base() ;
00535
00536 Scalar llshift(mp) ;
00537 llshift = ll(1) % (shift_auto_rs(1) + shift_comp(1))
00538 + ll(2) % (shift_auto_rs(2) + shift_comp(2))
00539 + ll(3) % (shift_auto_rs(3) + shift_comp(3)) ;
00540 llshift.std_spectral_base() ;
00541
00542 Scalar llshift_auto_rs(mp) ;
00543 llshift_auto_rs = ll(1)%shift_auto_rs(1) + ll(2)%shift_auto_rs(2)
00544 + ll(3)%shift_auto_rs(3) ;
00545 llshift_auto_rs.std_spectral_base() ;
00546
00547 Scalar lldllsh = llshift_auto_rs.dsdr()
00548 + ll(1) * ( ll(1)%d_shift_comp(1,1) + ll(2)%d_shift_comp(1,2)
00549 + ll(3)%d_shift_comp(1,3) )
00550 + ll(2) * ( ll(1)%d_shift_comp(2,1) + ll(2)%d_shift_comp(2,2)
00551 + ll(3)%d_shift_comp(2,3) )
00552 + ll(3) * ( ll(1)%d_shift_comp(3,1) + ll(2)%d_shift_comp(3,2)
00553 + ll(3)%d_shift_comp(3,3) ) ;
00554 lldllsh.std_spectral_base() ;
00555
00556 Scalar tmp2 = divshift ;
00557 Scalar tmp3 = -3.*lldllsh ;
00558
00559 tmp2.dec_dzpuis(2) ;
00560 tmp3.dec_dzpuis(2) ;
00561
00562 Scalar tmp(mp) ;
00563
00564 double mass = ggrav * mass_bh ;
00565
00566 if (kerrschild) {
00567
00568 cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00569 abort() ;
00570
00571 }
00572 else {
00573
00574 double cc ;
00575
00576
00577
00578
00579 if (bc_lapconf_nd) {
00580 if (bc_lapconf_fs) {
00581
00582
00583 cc = 2. * (sqrt(13.) - 1.) / 3. ;
00584 }
00585 else {
00586
00587
00588 cc = 4. / 3. ;
00589 }
00590 }
00591 else {
00592 if (bc_lapconf_fs) {
00593
00594
00595 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00596 abort() ;
00597 }
00598 else {
00599
00600
00601 cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00602 abort() ;
00603
00604 }
00605 }
00606
00607 Scalar r_are(mp) ;
00608 r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00609 r_are.std_spectral_base() ;
00610
00611 Scalar tmp1 = - 0.5 * (confo_auto_rs + confo_comp) / rr ;
00612 Scalar tmp7 = - ll(1)%d_confo_comp(1) - ll(2)%d_confo_comp(2)
00613 - ll(3)%d_confo_comp(3) ;
00614 tmp7.std_spectral_base() ;
00615 tmp7.dec_dzpuis(2) ;
00616
00617
00618
00619
00620
00621
00622
00623 Scalar tmp8 = 0.125*cc*(0.25*cc*pow(confo_tot,4.)/r_are/lapconf_tot
00624 - sqrt(r_are)) / rr ;
00625 tmp8.std_spectral_base() ;
00626
00627 tmp = tmp7 + tmp1
00628 + pow(confo_tot,4.) * (tmp2 + tmp3) / 12. / lapconf_tot
00629 + tmp8 ;
00630
00631 }
00632
00633 int nt = mg->get_nt(0) ;
00634 int np = mg->get_np(0) ;
00635
00636 bc = 1. ;
00637 for (int j=0; j<nt; j++) {
00638 for (int k=0; k<np; k++) {
00639 bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00640 }
00641 }
00642
00643 bc.std_base_scal() ;
00644 return bc ;
00645
00646 }