LORENE
et_rot_global.C
1/*
2 * Methods for computing global quantities within the class Etoile_rot
3 *
4 * (see file etoile.h for documentation)
5 */
6
7/*
8 * Copyright (c) 2000-2001 Eric Gourgoulhon
9 *
10 * This file is part of LORENE.
11 *
12 * LORENE is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * LORENE is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with LORENE; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 *
26 */
27
28
29
30
31/*
32 * $Id: et_rot_global.C,v 1.12 2023/07/04 08:59:53 j_novak Exp $
33 * $Log: et_rot_global.C,v $
34 * Revision 1.12 2023/07/04 08:59:53 j_novak
35 * Added method "r_circ_merid()" to compute the circumferential meridional radius.
36 *
37 * Revision 1.11 2017/10/06 12:36:34 a_sourie
38 * Cleaning of tabulated 2-fluid EoS class + superfluid rotating star model.
39 *
40 * Revision 1.10 2016/12/05 16:17:54 j_novak
41 * Suppression of some global variables (file names, loch, ...) to prevent redefinitions
42 *
43 * Revision 1.9 2015/06/12 12:38:25 j_novak
44 * Implementation of the corrected formula for the quadrupole momentum.
45 *
46 * Revision 1.8 2015/06/10 14:37:44 a_sourie
47 * Corrected the formula for the quadrupole.
48 *
49 * Revision 1.7 2014/10/13 08:52:57 j_novak
50 * Lorene classes and functions now belong to the namespace Lorene.
51 *
52 * Revision 1.6 2014/10/06 15:13:09 j_novak
53 * Modified #include directives to use c++ syntax.
54 *
55 * Revision 1.5 2012/08/12 17:48:35 p_cerda
56 * Magnetstar: New classes for magnetstar. Allowing for non-equatorial symmetry in Etoile et al. Adding B_phi in Et_rot_mag.
57 *
58 * Revision 1.4 2004/03/25 10:29:06 j_novak
59 * All LORENE's units are now defined in the namespace Unites (in file unites.h).
60 *
61 * Revision 1.3 2003/11/03 16:47:13 e_gourgoulhon
62 * Corrected error in grv2() in the Newtonian case.
63 *
64 * Revision 1.2 2002/04/05 09:09:37 j_novak
65 * The inversion of the EOS for 2-fluids polytrope has been modified.
66 * Some errors in the determination of the surface were corrected.
67 *
68 * Revision 1.1.1.1 2001/11/20 15:19:28 e_gourgoulhon
69 * LORENE
70 *
71 * Revision 1.5 2000/11/19 18:52:09 eric
72 * grv2() operationnelle.
73 *
74 * Revision 1.4 2000/10/12 15:34:55 eric
75 * Calcul de la masse grav, de GRV3 et du moment quadrupolaire.
76 *
77 * Revision 1.3 2000/08/31 11:25:58 eric
78 * *** empty log message ***
79 *
80 * Revision 1.2 2000/08/25 12:28:16 eric
81 * *** empty log message ***
82 *
83 * Revision 1.1 2000/07/20 15:32:56 eric
84 * Initial revision
85 *
86 *
87 * $Header: /cvsroot/Lorene/C++/Source/Etoile/et_rot_global.C,v 1.12 2023/07/04 08:59:53 j_novak Exp $
88 *
89 */
90
91// Headers C
92#include <cstdlib>
93#include <cmath>
94
95// Headers Lorene
96#include "etoile.h"
97#include "unites.h"
98
99 //--------------------------//
100 // Stellar surface //
101 //--------------------------//
102
103namespace Lorene {
104const Itbl& Etoile_rot::l_surf() const {
105
106 if (p_l_surf == 0x0) { // a new computation is required
107
108 assert(p_xi_surf == 0x0) ; // consistency check
109
110 int np = mp.get_mg()->get_np(0) ;
111 int nt = mp.get_mg()->get_nt(0) ;
112
113 p_l_surf = new Itbl(np, nt) ;
114 p_xi_surf = new Tbl(np, nt) ;
115
116 double ent0 = 0 ; // definition of the surface
117 double precis = 1.e-15 ;
118 int nitermax = 100 ;
119 int niter ;
120
121 (ent().va).equipot(ent0, nzet, precis, nitermax, niter, *p_l_surf,
122 *p_xi_surf) ;
123
124 }
125
126 return *p_l_surf ;
127
128}
129
130 //--------------------------//
131 // Baryon mass //
132 //--------------------------//
133
134double Etoile_rot::mass_b() const {
135
136 if (p_mass_b == 0x0) { // a new computation is required
137
138 if (relativistic) {
139
140 Cmp dens = a_car() * bbb() * gam_euler() * nbar() ;
141
142 dens.std_base_scal() ;
143
144 p_mass_b = new double( dens.integrale() ) ;
145
146
147 }
148 else{ // Newtonian case
149 assert(nbar.get_etat() == ETATQCQ) ;
150
151 p_mass_b = new double( nbar().integrale() ) ;
152
153 }
154
155 }
156
157 return *p_mass_b ;
158
159}
160
161
162 //----------------------------//
163 // Gravitational mass //
164 //----------------------------//
165
166double Etoile_rot::mass_g() const {
167
168 if (p_mass_g == 0x0) { // a new computation is required
169
170 if (relativistic) {
171
172 Tenseur source = nnn * (ener_euler + s_euler)
173 + 2 * bbb * (ener_euler + press)
174 * tnphi * uuu ;
175 source = a_car * bbb * source ;
176
177 source.set_std_base() ;
178
179 p_mass_g = new double( source().integrale() ) ;
180
181
182 }
183 else{ // Newtonian case
184 p_mass_g = new double( mass_b() ) ; // in the Newtonian case
185 // M_g = M_b
186 }
187 }
188
189 return *p_mass_g ;
190
191}
192
193 //----------------------------//
194 // Angular momentum //
195 //----------------------------//
196
197double Etoile_rot::angu_mom() const {
198
199 if (p_angu_mom == 0x0) { // a new computation is required
200
201 Cmp dens = uuu() ;
202
203 dens.mult_r() ; // Multiplication by
204 dens.va = (dens.va).mult_st() ; // r sin(theta)
205
206 if (relativistic) {
207 dens = a_car() * b_car() * (ener_euler() + press())
208 * dens ;
209 }
210 else { // Newtonian case
211 dens = nbar() * dens ;
212 }
213
214 dens.std_base_scal() ;
215
216 p_angu_mom = new double( dens.integrale() ) ;
217
218 }
219
220 return *p_angu_mom ;
221
222}
223
224
225 //----------------------------//
226 // T/W //
227 //----------------------------//
228
229double Etoile_rot::tsw() const {
230
231 if (p_tsw == 0x0) { // a new computation is required
232
233 double tcin = 0.5 * omega * angu_mom() ;
234
235 if (relativistic) {
236
237 Cmp dens = a_car() * bbb() * gam_euler() * ener() ;
238 dens.std_base_scal() ;
239 double mass_p = dens.integrale() ;
240
241 p_tsw = new double( tcin / ( mass_p + tcin - mass_g() ) ) ;
242
243 }
244 else { // Newtonian case
245 Cmp dens = 0.5 * nbar() * logn() ;
246 dens.std_base_scal() ;
247 double wgrav = dens.integrale() ;
248 p_tsw = new double( tcin / fabs(wgrav) ) ;
249 }
250
251
252 }
253
254 return *p_tsw ;
255
256}
257
258
259 //----------------------------//
260 // GRV2 //
261 //----------------------------//
262
263double Etoile_rot::grv2() const {
264
265 using namespace Unites ;
266 if (p_grv2 == 0x0) { // a new computation is required
267
268 Tenseur sou_m(mp) ;
269 if (relativistic) {
270 sou_m = 2 * qpig * a_car * (press + (ener_euler+press)
271 * uuu*uuu ) ;
272 }
273 else {
274 sou_m = 2 * qpig * (press + nbar * uuu*uuu ) ;
275 }
276
277 Tenseur sou_q = 1.5 * ak_car
278 - flat_scalar_prod(logn.gradient_spher(),
279 logn.gradient_spher() ) ;
280
281 p_grv2 = new double( double(1) - lambda_grv2(sou_m(), sou_q()) ) ;
282
283 }
284
285 return *p_grv2 ;
286
287}
288
289
290 //----------------------------//
291 // GRV3 //
292 //----------------------------//
293
294double Etoile_rot::grv3(ostream* ost) const {
295
296 using namespace Unites ;
297
298 if (p_grv3 == 0x0) { // a new computation is required
299
300 Tenseur source(mp) ;
301
302 // Gravitational term [cf. Eq. (43) of Gourgoulhon & Bonazzola
303 // ------------------ Class. Quantum Grav. 11, 443 (1994)]
304
305 if (relativistic) {
306 Tenseur alpha = dzeta - logn ;
307 Tenseur beta = log( bbb ) ;
308 beta.set_std_base() ;
309
310 source = 0.75 * ak_car
311 - flat_scalar_prod(logn.gradient_spher(),
312 logn.gradient_spher() )
313 + 0.5 * flat_scalar_prod(alpha.gradient_spher(),
314 beta.gradient_spher() ) ;
315
316 Cmp aa = alpha() - 0.5 * beta() ;
317 Cmp daadt = aa.srdsdt() ; // 1/r d/dth
318
319 // What follows is valid only for a mapping of class Map_radial :
320 const Map_radial* mpr = dynamic_cast<const Map_radial*>(&mp) ;
321 if (mpr == 0x0) {
322 cout << "Etoile_rot::grv3: the mapping does not belong"
323 << " to the class Map_radial !" << endl ;
324 abort() ;
325 }
326
327 // Computation of 1/tan(theta) * 1/r daa/dtheta
328 if (daadt.get_etat() == ETATQCQ) {
329 Valeur& vdaadt = daadt.va ;
330 vdaadt = vdaadt.ssint() ; // division by sin(theta)
331 vdaadt = vdaadt.mult_ct() ; // multiplication by cos(theta)
332 }
333
334 Cmp temp = aa.dsdr() + daadt ;
335 temp = ( bbb() - a_car()/bbb() ) * temp ;
336 temp.std_base_scal() ;
337
338 // Division by r
339 Valeur& vtemp = temp.va ;
340 vtemp = vtemp.sx() ; // division by xi in the nucleus
341 // Id in the shells
342 // division by xi-1 in the ZEC
343 vtemp = (mpr->xsr) * vtemp ; // multiplication by xi/r in the nucleus
344 // by 1/r in the shells
345 // by r(xi-1) in the ZEC
346
347 // In the ZEC, a multiplication by r has been performed instead
348 // of the division:
349 temp.set_dzpuis( temp.get_dzpuis() + 2 ) ;
350
351 source = bbb() * source() + 0.5 * temp ;
352
353 }
354 else{
355 source = - 0.5 * flat_scalar_prod(logn.gradient_spher(),
356 logn.gradient_spher() ) ;
357 }
358
359 source.set_std_base() ;
360
361 double int_grav = source().integrale() ;
362
363 // Matter term
364 // -----------
365
366 if (relativistic) {
367 source = qpig * a_car * bbb * s_euler ;
368 }
369 else{
370 source = qpig * ( 3 * press + nbar * uuu * uuu ) ;
371 }
372
373 source.set_std_base() ;
374
375 double int_mat = source().integrale() ;
376
377 // Virial error
378 // ------------
379 if (ost != 0x0) {
380 *ost << "Etoile_rot::grv3 : gravitational term : " << int_grav
381 << endl ;
382 *ost << "Etoile_rot::grv3 : matter term : " << int_mat
383 << endl ;
384 }
385
386 p_grv3 = new double( (int_grav + int_mat) / int_mat ) ;
387
388 }
389
390 return *p_grv3 ;
391
392}
393
394
395 //----------------------------//
396 // R_circ //
397 //----------------------------//
398
399double Etoile_rot::r_circ() const {
400
401 if (p_r_circ == 0x0) { // a new computation is required
402
403 // Index of the point at phi=0, theta=pi/2 at the surface of the star:
404 const Mg3d* mg = mp.get_mg() ;
405
406
407 int l_b = nzet - 1 ;
408 int i_b = mg->get_nr(l_b) - 1 ;
409 int j_b;
410 if (mg->get_type_t() == SYM) {
411 j_b = mg->get_nt(l_b) - 1 ;
412 }else{
413 j_b = (mg->get_nt(l_b) - 1)/2 ;
414 }
415 int k_b = 0 ;
416
417 p_r_circ = new double( bbb()(l_b, k_b, j_b, i_b) * ray_eq() ) ;
418
419 }
420
421 return *p_r_circ ;
422
423}
424
426
427 if (p_r_circ_merid == 0x0) { // a new computation is required
428 const Mg3d& mg = *(mp.get_mg()) ;
429 int np = mg.get_np(0) ;
430 int nt = mg.get_nt(0) ;
431 assert(np == 1) ; //Only valid for axisymmetric configurations
432
433 const Map_radial* mp_rad = dynamic_cast<const Map_radial*>(&mp) ;
434 assert(mp_rad != 0x0) ;
435
436 Valeur va_r(mg.get_angu()) ;
437 va_r.annule_hard() ;
438 Itbl lsurf = l_surf() ;
439 Tbl xisurf = xi_surf() ;
440 for (int k=0; k<np; k++) {
441 for (int j=0; j<nt; j++) {
442 int l_star = lsurf(k, j) ;
443 double xi_star = xisurf(k, j) ;
444 va_r.set(0, k, j, 0) = mp_rad->val_r_jk(l_star, xi_star, j, k) ;
445 }
446 }
447 va_r.std_base_scal() ;
448
449 Valeur integ(mg.get_angu()) ;
450 Valeur dr = va_r.dsdt() ;
451 integ = sqrt(va_r*va_r + dr*dr) ;
452 Cmp aaaa = get_a_car()() ;
453 Valeur a2 = aaaa.va ; a2.std_base_scal() ;
454 int k = 0 ;
455 for (int j=0; j<nt; j++) {
456 integ.set(0, k, j, 0)
457 *= sqrt(a2.val_point_jk(lsurf(k, j), xisurf(k, j), j, k)) ;
458 }
459 integ.std_base_scal() ;
460 integ.coef() ;
461 double surftot = (*integ.c_cf)(0, k, 0, 0) ; // Only j=0 has a nonvanishing
462 // integral
463 p_r_circ_merid = new double(surftot ) ;
464
465 }
466
467 return *p_r_circ_merid ;
468
469}
470
471
472 //----------------------------//
473 // Surface area //
474 //----------------------------//
475
476 double Etoile_rot::area() const {
477
478 if (p_area == 0x0) { // a new computation is required
479 const Mg3d& mg = *(mp.get_mg()) ;
480 int np = mg.get_np(0) ;
481 int nt = mg.get_nt(0) ;
482 assert(np == 1) ; //Only valid for axisymmetric configurations
483
484 const Map_radial* mp_rad = dynamic_cast<const Map_radial*>(&mp) ;
485 assert(mp_rad != 0x0) ;
486
487 Valeur va_r(mg.get_angu()) ;
488 va_r.annule_hard() ;
489 Itbl lsurf = l_surf() ;
490 Tbl xisurf = xi_surf() ;
491
492 for (int k=0; k<np; k++) {
493 for (int j=0; j<nt; j++) {
494 int l_star = lsurf(k, j) ;
495 double xi_star = xisurf(k, j) ;
496
497 va_r.set(0, k, j, 0) = mp_rad->val_r_jk(l_star, xi_star, j, k) ;
498 }
499 }
500 va_r.std_base_scal() ;
501
502 Valeur integ(mg.get_angu()) ;
503 Valeur dr = va_r.dsdt() ;
504 integ = sqrt(va_r*va_r + dr*dr) ;
505 Cmp aaaa = get_a_car()() ;
506 Valeur a2 = aaaa.va ; a2.std_base_scal() ;
507 Cmp bbbb = get_bbb()() ;
508 Valeur b = bbbb.va ; b.std_base_scal() ;
509 for (int k=0; k<np; k++) {
510 for (int j=0; j<nt; j++) {
511 integ.set(0, k, j, 0) *= sqrt(a2.val_point_jk(lsurf(k, j), xisurf(k, j), j, k))
512 * b.val_point_jk(lsurf(k, j), xisurf(k, j), j, k) * va_r(0, k, j, 0) ;
513 }
514 }
515 integ.std_base_scal() ;
516 Valeur integ2 = integ.mult_st() ;
517 double surftot = 0. ;
518 for (int j=0; j<nt; j++) {
519 surftot += (*integ2.c_cf)(0, 0, j, 0) / double(2*j+1) ;
520 }
521
522 p_area = new double( 4*M_PI*surftot) ;
523
524 }
525
526 return *p_area ;
527
528}
529
530 double Etoile_rot::mean_radius() const {
531
532 return sqrt(area()/(4*M_PI)) ;
533
534 }
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550 //----------------------------//
551 // Flattening //
552 //----------------------------//
553
554double Etoile_rot::aplat() const {
555
556 if (p_aplat == 0x0) { // a new computation is required
557
558 p_aplat = new double( ray_pole() / ray_eq() ) ;
559
560 }
561
562 return *p_aplat ;
563
564}
565
566
567 //----------------------------//
568 // Z_eq_f //
569 //----------------------------//
570
571double Etoile_rot::z_eqf() const {
572
573 if (p_z_eqf == 0x0) { // a new computation is required
574
575 // Index of the point at phi=0, theta=pi/2 at the surface of the star:
576 const Mg3d* mg = mp.get_mg() ;
577 int l_b = nzet - 1 ;
578 int i_b = mg->get_nr(l_b) - 1 ;
579 int j_b;
580 if (mg->get_type_t() == SYM) {
581 j_b = mg->get_nt(l_b) - 1 ;
582 }else{
583 j_b = (mg->get_nt(l_b) - 1)/2 ;
584 }
585 int k_b = 0 ;
586
587 double u_eq = uuu()(l_b, k_b, j_b, i_b) ;
588 double n_eq = nnn()(l_b, k_b, j_b, i_b) ;
589 double nphi_eq = nphi()(l_b, k_b, j_b, i_b) ;
590
591 p_z_eqf = new double( sqrt((1.-u_eq)/(1.+u_eq))
592 / (n_eq + nphi_eq * r_circ() )
593 - 1. ) ;
594 }
595
596 return *p_z_eqf ;
597
598}
599 //----------------------------//
600 // Z_eq_b //
601 //----------------------------//
602
603double Etoile_rot::z_eqb() const {
604
605 if (p_z_eqb == 0x0) { // a new computation is required
606
607 // Index of the point at phi=0, theta=pi/2 at the surface of the star:
608 const Mg3d* mg = mp.get_mg() ;
609 int l_b = nzet - 1 ;
610 int i_b = mg->get_nr(l_b) - 1 ;
611 int j_b;
612 if (mg->get_type_t() == SYM) {
613 j_b = mg->get_nt(l_b) - 1 ;
614 }else{
615 j_b = (mg->get_nt(l_b) - 1) / 2 ;
616 }
617 int k_b = 0 ;
618
619 double u_eq = uuu()(l_b, k_b, j_b, i_b) ;
620 double n_eq = nnn()(l_b, k_b, j_b, i_b) ;
621 double nphi_eq = nphi()(l_b, k_b, j_b, i_b) ;
622
623 p_z_eqb = new double( sqrt((1.+u_eq)/(1.-u_eq))
624 / (n_eq - nphi_eq * r_circ() )
625 - 1. ) ;
626
627 }
628
629 return *p_z_eqb ;
630
631}
632
633
634 //----------------------------//
635 // Z_pole //
636 //----------------------------//
637
638double Etoile_rot::z_pole() const {
639
640 if (p_z_pole == 0x0) { // a new computation is required
641
642 double n_pole = nnn().val_point(ray_pole(), 0., 0.) ;
643
644 p_z_pole = new double( 1. / n_pole - 1. ) ;
645
646 }
647
648 return *p_z_pole ;
649
650}
651
652
653 //----------------------------//
654 // Quadrupole moment //
655 //----------------------------//
656
657
658double Etoile_rot::mom_quad() const {
659
660 using namespace Unites ;
661
662 if (p_mom_quad == 0x0) { // a new computation is required
663
664 p_mom_quad = new double( mom_quad_old() ) ;
665 if (relativistic) {
666 double b = mom_quad_Bo() / ( mass_g() * mass_g() ) ;
667 *p_mom_quad -= 4./3. * ( 1./4. + b ) * pow(mass_g(), 3) * ggrav * ggrav ;
668 }
669 }
670
671 return *p_mom_quad ;
672
673}
674
675
677
678 using namespace Unites ;
679
680 if (p_mom_quad_Bo == 0x0) { // a new computation is required
681
682 Cmp dens(mp) ;
683
684 dens = press() ;
685 dens = a_car() * bbb() * nnn() * dens ;
686 dens.mult_rsint() ;
687 dens.std_base_scal() ;
688
689 p_mom_quad_Bo = new double( - 32. * dens.integrale() / qpig ) ;
690
691 }
692
693 return *p_mom_quad_Bo ;
694
695}
696
697
698
700
701 using namespace Unites ;
702
703 if (p_mom_quad_old == 0x0) { // a new computation is required
704
705 // Source for of the Poisson equation for nu
706 // -----------------------------------------
707
708 Tenseur source(mp) ;
709
710 if (relativistic) {
711 Tenseur beta = log(bbb) ;
712 beta.set_std_base() ;
713 source = qpig * a_car *( ener_euler + s_euler )
714 + ak_car - flat_scalar_prod(logn.gradient_spher(),
715 logn.gradient_spher() + beta.gradient_spher()) ;
716 }
717 else {
718 source = qpig * nbar ;
719 }
720 source.set_std_base() ;
721
722 // Multiplication by -r^2 P_2(cos(theta))
723 // [cf Eq.(7) of Salgado et al. Astron. Astrophys. 291, 155 (1994) ]
724 // ------------------------------------------------------------------
725
726 // Multiplication by r^2 :
727 // ----------------------
728 Cmp& csource = source.set() ;
729 csource.mult_r() ;
730 csource.mult_r() ;
731 if (csource.check_dzpuis(2)) {
732 csource.inc2_dzpuis() ;
733 }
734
735 // Muliplication by cos^2(theta) :
736 // -----------------------------
737 Cmp temp = csource ;
738
739 // What follows is valid only for a mapping of class Map_radial :
740 assert( dynamic_cast<const Map_radial*>(&mp) != 0x0 ) ;
741
742 if (temp.get_etat() == ETATQCQ) {
743 Valeur& vtemp = temp.va ;
744 vtemp = vtemp.mult_ct() ; // multiplication by cos(theta)
745 vtemp = vtemp.mult_ct() ; // multiplication by cos(theta)
746 }
747
748 // Muliplication by -P_2(cos(theta)) :
749 // ----------------------------------
750 source = 0.5 * source() - 1.5 * temp ;
751
752 // Final result
753 // ------------
754
755 p_mom_quad_old = new double(- source().integrale() / qpig ) ;
756
757 }
758
759 return *p_mom_quad_old ;
760
761}
762
763
764
765
766}
Component of a tensorial field *** DEPRECATED : use class Scalar instead ***.
Definition cmp.h:446
void mult_rsint()
Multiplication by .
int get_etat() const
Returns the logical state.
Definition cmp.h:899
Valeur va
The numerical value of the Cmp.
Definition cmp.h:464
void std_base_scal()
Sets the spectral bases of the Valeur va to the standard ones for a scalar.
Definition cmp.C:647
int get_dzpuis() const
Returns dzpuis.
Definition cmp.h:903
void mult_r()
Multiplication by r everywhere.
Definition cmp_r_manip.C:94
void inc2_dzpuis()
Increases by 2 the value of dzpuis and changes accordingly the values of the Cmp in the external comp...
void set_dzpuis(int)
Set a value to dzpuis.
Definition cmp.C:657
double integrale() const
Computes the integral over all space of *this .
Definition cmp_integ.C:58
const Cmp & srdsdt() const
Returns of *this .
Definition cmp_deriv.C:108
bool check_dzpuis(int dzi) const
Returns false if the last domain is compactified and *this is not zero in this domain and dzpuis is n...
Definition cmp.C:718
const Cmp & dsdr() const
Returns of *this .
Definition cmp_deriv.C:87
double * p_r_circ_merid
Circumferential meridional radius.
Definition etoile.h:1639
Tenseur uuu
Norm of u_euler.
Definition etoile.h:1521
double omega
Rotation angular velocity ([f_unit] ).
Definition etoile.h:1504
double * p_z_pole
Redshift factor at North pole.
Definition etoile.h:1644
virtual double mom_quad() const
Quadrupole moment.
double * p_z_eqf
Forward redshift factor at equator.
Definition etoile.h:1642
virtual double r_circ() const
Circumferential equatorial radius.
Tenseur & logn
Metric potential = logn_auto.
Definition etoile.h:1524
virtual const Itbl & l_surf() const
Description of the stellar surface: returns a 2-D Itbl containing the values of the domain index l on...
double * p_mom_quad_old
Part of the quadrupole moment.
Definition etoile.h:1646
double * p_z_eqb
Backward redshift factor at equator.
Definition etoile.h:1643
virtual double mass_g() const
Gravitational mass.
double * p_r_circ
Circumferential equatorial radius.
Definition etoile.h:1638
virtual double mom_quad_Bo() const
Part of the quadrupole moment.
virtual double aplat() const
Flatening r_pole/r_eq.
virtual double grv3(ostream *ost=0x0) const
Error on the virial identity GRV3.
const Tenseur & get_bbb() const
Returns the metric factor B.
Definition etoile.h:1716
virtual double tsw() const
Ratio T/W.
Tenseur nphi
Metric coefficient .
Definition etoile.h:1513
virtual double mass_b() const
Baryon mass.
static double lambda_grv2(const Cmp &sou_m, const Cmp &sou_q)
Computes the coefficient which ensures that the GRV2 virial identity is satisfied.
Tenseur bbb
Metric factor B.
Definition etoile.h:1507
double * p_area
Surface area.
Definition etoile.h:1640
Tenseur ak_car
Scalar .
Definition etoile.h:1589
Tenseur & dzeta
Metric potential = beta_auto.
Definition etoile.h:1537
virtual double mean_radius() const
Mean radius.
double * p_grv3
Error on the virial identity GRV3.
Definition etoile.h:1637
double * p_grv2
Error on the virial identity GRV2.
Definition etoile.h:1636
double * p_aplat
Flatening r_pole/r_eq.
Definition etoile.h:1641
double * p_mom_quad_Bo
Part of the quadrupole moment.
Definition etoile.h:1647
virtual double grv2() const
Error on the virial identity GRV2.
virtual double r_circ_merid() const
Circumferential meridional radius.
double * p_mom_quad
Quadrupole moment.
Definition etoile.h:1645
virtual double area() const
Surface area.
double * p_angu_mom
Angular momentum.
Definition etoile.h:1634
virtual double angu_mom() const
Angular momentum.
virtual double z_eqf() const
Forward redshift factor at equator.
virtual double mom_quad_old() const
Part of the quadrupole moment.
double * p_tsw
Ratio T/W.
Definition etoile.h:1635
Tenseur b_car
Square of the metric factor B.
Definition etoile.h:1510
virtual double z_eqb() const
Backward redshift factor at equator.
Tenseur tnphi
Component of the shift vector.
Definition etoile.h:1518
virtual double z_pole() const
Redshift factor at North pole.
int nzet
Number of domains of *mp occupied by the star.
Definition etoile.h:435
double * p_mass_b
Baryon mass.
Definition etoile.h:550
double * p_mass_g
Gravitational mass.
Definition etoile.h:551
Tbl * p_xi_surf
Description of the stellar surface: 2-D Tbl containing the values of the radial coordinate on the su...
Definition etoile.h:548
double ray_eq() const
Coordinate radius at , [r_unit].
Tenseur nnn
Total lapse function.
Definition etoile.h:512
Tenseur nbar
Baryon density in the fluid frame.
Definition etoile.h:462
Itbl * p_l_surf
Description of the stellar surface: 2-D Itbl containing the values of the domain index l on the surfa...
Definition etoile.h:542
Tenseur gam_euler
Lorentz factor between the fluid and Eulerian observers.
Definition etoile.h:474
Map & mp
Mapping associated with the star.
Definition etoile.h:432
Tenseur ener
Total energy density in the fluid frame.
Definition etoile.h:463
const Tenseur & get_a_car() const
Returns the total conformal factor .
Definition etoile.h:736
Tenseur press
Fluid pressure.
Definition etoile.h:464
bool relativistic
Indicator of relativity: true for a relativistic star, false for a Newtonian one.
Definition etoile.h:440
Tenseur ener_euler
Total energy density in the Eulerian frame.
Definition etoile.h:468
Tenseur s_euler
Trace of the stress tensor in the Eulerian frame.
Definition etoile.h:471
Tenseur ent
Log-enthalpy (relativistic case) or specific enthalpy (Newtonian case).
Definition etoile.h:460
const Tbl & xi_surf() const
Description of the stellar surface: returns a 2-D Tbl containing the values of the radial coordinat...
Tenseur a_car
Total conformal factor .
Definition etoile.h:518
double ray_pole() const
Coordinate radius at [r_unit].
Basic integer array class.
Definition itbl.h:122
Base class for pure radial mappings.
Definition map.h:1551
Coord xsr
in the nucleus; \ 1/R in the non-compactified shells; \ in the compactified outer domain.
Definition map.h:1564
virtual double val_r_jk(int l, double xi, int j, int k) const =0
Returns the value of the radial coordinate r for a given and a given collocation point in in a give...
Multi-domain grid.
Definition grilles.h:279
const Mg3d * get_angu() const
Returns the pointer on the associated angular grid.
Definition mg3d.C:604
int get_type_t() const
Returns the type of sampling in the direction: SYM : : symmetry with respect to the equatorial pl...
Definition grilles.h:502
int get_np(int l) const
Returns the number of points in the azimuthal direction ( ) in domain no. l.
Definition grilles.h:479
int get_nt(int l) const
Returns the number of points in the co-latitude direction ( ) in domain no. l.
Definition grilles.h:474
int get_nr(int l) const
Returns the number of points in the radial direction ( ) in domain no. l.
Definition grilles.h:469
Basic array class.
Definition tbl.h:161
Tensor handling *** DEPRECATED : use class Tensor instead ***.
Definition tenseur.h:304
Cmp & set()
Read/write for a scalar (see also operator=(const Cmp&) ).
Definition tenseur.C:830
void set_std_base()
Set the standard spectal basis of decomposition for each component.
Definition tenseur.C:1176
const Tenseur & gradient_spher() const
Returns the gradient of *this (Spherical coordinates) (scalar field only).
Definition tenseur.C:1554
Values and coefficients of a (real-value) function.
Definition valeur.h:297
const Valeur & mult_ct() const
Returns applied to *this.
double val_point_jk(int l, double x, int j, int k) const
Computes the value of the field represented by *this at an arbitrary point in , but collocation point...
Definition valeur.C:903
const Valeur & sx() const
Returns (r -sampling = RARE ) \ Id (r sampling = FIN ) \ (r -sampling = UNSURR ).
Definition valeur_sx.C:113
const Valeur & dsdt() const
Returns of *this.
Tbl & set(int l)
Read/write of the value in a given domain (configuration space).
Definition valeur.h:373
const Valeur & ssint() const
Returns of *this.
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
Definition valeur.h:312
void coef() const
Computes the coeffcients of *this.
const Valeur & mult_st() const
Returns applied to *this.
void std_base_scal()
Sets the bases for spectral expansions (member base ) to the standard ones for a scalar.
Definition valeur.C:827
void annule_hard()
Sets the Valeur to zero in a hard way.
Definition valeur.C:726
Cmp sqrt(const Cmp &)
Square root.
Definition cmp_math.C:223
Cmp pow(const Cmp &, int)
Power .
Definition cmp_math.C:351
Cmp log(const Cmp &)
Neperian logarithm.
Definition cmp_math.C:299
Tenseur flat_scalar_prod(const Tenseur &t1, const Tenseur &t2)
Scalar product of two Tenseur when the metric is : performs the contraction of the last index of t1 w...
Lorene prototypes.
Definition app_hor.h:67
virtual Tbl * integrale(const Cmp &) const =0
Computes the integral over all space of a Cmp .
Standard units of space, time and mass.