et_bfrot_global.C
/*
* Copyright (c) 2001 Jerome Novak
*
* This file is part of LORENE.
*
* LORENE is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* LORENE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LORENE; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
char et_bfrot_global_C[] = "$Header: /cvsroot/Lorene/C++/Source/Etoile/et_bfrot_global.C,v 1.17 2015/06/10 14:39:17 a_sourie Exp $" ;
/*
* $Id: et_bfrot_global.C,v 1.17 2015/06/10 14:39:17 a_sourie Exp $
* $Log: et_bfrot_global.C,v $
* Revision 1.17 2015/06/10 14:39:17 a_sourie
* New class Eos_bf_tabul for tabulated 2-fluid EoSs and associated functions for the computation of rotating stars with such EoSs.
*
* Revision 1.16 2014/10/13 08:52:54 j_novak
* Lorene classes and functions now belong to the namespace Lorene.
*
* Revision 1.15 2014/10/06 15:13:07 j_novak
* Modified #include directives to use c++ syntax.
*
* Revision 1.14 2004/09/03 13:55:07 j_novak
* Use of enerps_euler instead of ener_euler in the calculation of mom_angu()
*
* Revision 1.13 2004/03/25 10:29:03 j_novak
* All LORENE's units are now defined in the namespace Unites (in file unites.h).
*
* Revision 1.12 2003/11/20 14:01:26 r_prix
* changed member names to better conform to Lorene coding standards:
* J_euler -> j_euler, EpS_euler -> enerps_euler, Delta_car -> delta_car
*
* Revision 1.11 2003/11/18 18:38:11 r_prix
* use of new member EpS_euler: matter sources in equilibrium() and global quantities
* no longer distinguish Newtonian/relativistic, as all terms should have the right limit...
*
* Revision 1.10 2003/11/13 12:13:15 r_prix
* *) removed all uses of Etoile-type specific quantities: u_euler, press
* and exclusively use ener_euler, s_euler, sphph_euler, J_euler instead
* *) this also fixes a bug in previous expression for mass_g() in 2-fluid case
*
* NOTE: some current Newtonian expressions are still completely broken..
*
* Revision 1.9 2003/09/17 08:27:50 j_novak
* New methods: mass_b1() and mass_b2().
*
* Revision 1.8 2003/02/07 10:47:43 j_novak
* The possibility of having gamma5 xor gamma6 =0 has been introduced for
* tests. The corresponding parameter files have been added.
*
* Revision 1.7 2002/10/16 14:36:36 j_novak
* Reorganization of #include instructions of standard C++, in order to
* use experimental version 3 of gcc.
*
* Revision 1.6 2002/10/14 14:20:08 j_novak
* Error corrected for angu_mom()
*
* Revision 1.5 2002/05/10 09:26:52 j_novak
* Added new class Et_rot_mag for magnetized rotating neutron stars (under development)
*
* Revision 1.4 2002/04/05 09:09:36 j_novak
* The inversion of the EOS for 2-fluids polytrope has been modified.
* Some errors in the determination of the surface were corrected.
*
* Revision 1.3 2002/01/08 14:43:53 j_novak
* better determination of surfaces for 2-fluid stars
*
* Revision 1.2 2002/01/03 15:30:28 j_novak
* Some comments modified.
*
* Revision 1.1.1.1 2001/11/20 15:19:28 e_gourgoulhon
* LORENE
*
* Revision 1.4 2001/08/31 15:07:12 novak
* Retour a la version 1.2, sans la routine prolonge_c1
*
* Revision 1.2 2001/08/28 15:32:17 novak
* The surface is now defined by the baryonic density
*
* Revision 1.1 2001/06/22 15:39:46 novak
* Initial revision
*
*
* $Header: /cvsroot/Lorene/C++/Source/Etoile/et_bfrot_global.C,v 1.17 2015/06/10 14:39:17 a_sourie Exp $
*
*/
// Headers C
#include <cstdlib>
#include <cmath>
// Headers Lorene
#include "et_rot_bifluid.h"
#include "unites.h"
//--------------------------//
// Baryon mass //
//--------------------------//
namespace Lorene {
double Et_rot_bifluid::mass_b1() const {
if (p_mass_b1 == 0x0) { // a new computation is required
assert(nbar.get_etat() == ETATQCQ);
Cmp dens1 = a_car() * bbb() * gam_euler() * eos.get_m1()* nbar();
dens1.std_base_scal() ;
p_mass_b1 = new double( dens1.integrale() ) ;
}
return *p_mass_b1 ;
}
double Et_rot_bifluid::mass_b2() const {
if (p_mass_b2 == 0x0) { // a new computation is required
assert(nbar2.get_etat() == ETATQCQ);
Cmp dens2 = a_car() * bbb() * gam_euler2() * eos.get_m2() * nbar2();
dens2.std_base_scal() ;
p_mass_b2 = new double( dens2.integrale() ) ;
}
return *p_mass_b2 ;
}
double Et_rot_bifluid::mass_b() const {
if (p_mass_b == 0x0)
p_mass_b = new double(mass_b1() + mass_b2() ) ;
return *p_mass_b;
}
//----------------------------//
// Gravitational mass //
//----------------------------//
double Et_rot_bifluid::mass_g() const {
if (p_mass_g == 0x0) { // a new computation is required
Tenseur vtmp (j_euler);
vtmp.change_triad( mp.get_bvect_spher() ); // change to spherical triad
Tenseur tJphi (mp);
tJphi = vtmp(2); // get the phi tetrad-component: J^ph r sin(th)
// relativistic AND Newtonian: enerps_euler has right limit and tnphi->0
Tenseur source = nnn * enerps_euler + 2 * b_car * tnphi * tJphi;
source = a_car * bbb * source ;
source.set_std_base() ;
p_mass_g = new double( source().integrale() ) ;
}
return *p_mass_g ;
}
//----------------------------//
// Angular momentum //
//----------------------------//
double Et_rot_bifluid::angu_mom() const {
if (p_angu_mom == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom = new double( dens.integrale() ) ;
}
return *p_angu_mom ;
}
double Et_rot_bifluid::angu_mom_1() const {
if (p_angu_mom_1 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler1;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_1 = new double( dens.integrale() ) ;
}
return *p_angu_mom_1 ;
}
double Et_rot_bifluid::angu_mom_2() const {
if (p_angu_mom_2 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler2;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_2 = new double( dens.integrale() ) ;
}
return *p_angu_mom_2 ;
}
double Et_rot_bifluid::angu_mom_1_part1_1() const {
if (p_angu_mom_1_part1_1 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler11_1;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_1_part1_1 = new double( dens.integrale() ) ;
}
return *p_angu_mom_1_part1_1 ;
}
double Et_rot_bifluid::angu_mom_2_part1_1() const {
if (p_angu_mom_2_part1_1 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler21_1;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_2_part1_1 = new double( dens.integrale() ) ;
}
return *p_angu_mom_2_part1_1 ;
}
double Et_rot_bifluid::angu_mom_1_part2_1() const {
if (p_angu_mom_1_part2_1 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler12_1;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_1_part2_1 = new double( dens.integrale() ) ;
}
return *p_angu_mom_1_part2_1 ;
}
double Et_rot_bifluid::angu_mom_2_part2_1() const {
if (p_angu_mom_2_part2_1 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler22_1;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_2_part2_1 = new double( dens.integrale() ) ;
}
return *p_angu_mom_2_part2_1 ;
}
double Et_rot_bifluid::angu_mom_1_part1_2() const {
if (p_angu_mom_1_part1_2 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler11_2;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_1_part1_2 = new double( dens.integrale() ) ;
}
return *p_angu_mom_1_part1_2 ;
}
double Et_rot_bifluid::angu_mom_2_part1_2() const {
if (p_angu_mom_2_part1_2 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler21_2;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_2_part1_2 = new double( dens.integrale() ) ;
}
return *p_angu_mom_2_part1_2 ;
}
double Et_rot_bifluid::angu_mom_1_part2_2() const {
if (p_angu_mom_1_part2_2 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler12_2;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_1_part2_2 = new double( dens.integrale() ) ;
}
return *p_angu_mom_1_part2_2 ;
}
double Et_rot_bifluid::angu_mom_2_part2_2() const {
if (p_angu_mom_2_part2_2 == 0x0) { // a new computation is required
Cmp dens(mp) ;
// this should work for both relativistic AND Newtonian,
// provided j_euler has the right limit...
Tenseur tmp = j_euler22_2;
tmp.change_triad( mp.get_bvect_spher() ) ;
dens = tmp(2) ;
dens.mult_rsint() ;
dens = a_car() * b_car()* bbb() * dens ;
dens.std_base_scal() ;
p_angu_mom_2_part2_2 = new double( dens.integrale() ) ;
}
return *p_angu_mom_2_part2_2 ;
}
//----------------------------//
// GRV2 //
//----------------------------//
double Et_rot_bifluid::grv2() const {
using namespace Unites ;
if (p_grv2 == 0x0) { // a new computation is required
Tenseur sou_m(mp);
// should work for both relativistic AND Newtonian, provided sphph_euler has right limit..
sou_m = 2 * qpig * a_car * sphph_euler ;
Tenseur sou_q = 1.5 * ak_car - flat_scalar_prod(logn.gradient_spher(),logn.gradient_spher() ) ;
p_grv2 = new double( double(1) - lambda_grv2(sou_m(), sou_q()) ) ;
}
return *p_grv2 ;
}
//----------------------------//
// GRV3 //
//----------------------------//
double Et_rot_bifluid::grv3(ostream* ost) const {
using namespace Unites ;
if (p_grv3 == 0x0) { // a new computation is required
Tenseur source(mp) ;
// Gravitational term [cf. Eq. (43) of Gourgoulhon & Bonazzola
// ------------------ Class. Quantum Grav. 11, 443 (1994)]
if (relativistic) {
Tenseur alpha = dzeta - logn ;
Tenseur beta = log( bbb ) ;
beta.set_std_base() ;
source = 0.75 * ak_car - flat_scalar_prod(logn.gradient_spher(), logn.gradient_spher() )
+ 0.5 * flat_scalar_prod(alpha.gradient_spher(), beta.gradient_spher() ) ;
Cmp aa = alpha() - 0.5 * beta() ;
Cmp daadt = aa.srdsdt() ; // 1/r d/dth
// What follows is valid only for a mapping of class Map_radial :
const Map_radial* mpr = dynamic_cast<const Map_radial*>(&mp) ;
if (mpr == 0x0) {
cout << "Et_rot_bifluid::grv3: the mapping does not belong"
<< " to the class Map_radial !" << endl ;
abort() ;
}
// Computation of 1/tan(theta) * 1/r daa/dtheta
if (daadt.get_etat() == ETATQCQ) {
Valeur& vdaadt = daadt.va ;
vdaadt = vdaadt.ssint() ; // division by sin(theta)
vdaadt = vdaadt.mult_ct() ; // multiplication by cos(theta)
}
Cmp temp = aa.dsdr() + daadt ;
temp = ( bbb() - a_car()/bbb() ) * temp ;
temp.std_base_scal() ;
// Division by r
Valeur& vtemp = temp.va ;
vtemp = vtemp.sx() ; // division by xi in the nucleus
// Id in the shells
// division by xi-1 in the ZEC
vtemp = (mpr->xsr) * vtemp ; // multiplication by xi/r in the nucleus
// by 1/r in the shells
// by r(xi-1) in the ZEC
// In the ZEC, a multiplication by r has been performed instead
// of the division:
temp.set_dzpuis( temp.get_dzpuis() + 2 ) ;
source = bbb() * source() + 0.5 * temp ;
}
else{
source = - 0.5 * flat_scalar_prod(logn.gradient_spher(),logn.gradient_spher() ) ;
}
source.set_std_base() ;
double int_grav = source().integrale() ;
// Matter term
// -----------
// should work for relativistic AND Newtonian, provided s_euler has the right limit...
source = qpig * a_car * bbb * s_euler ;
source.set_std_base() ;
double int_mat = source().integrale() ;
// Virial error
// ------------
if (ost != 0x0) {
*ost << "Et_rot_bifluid::grv3 : gravitational term : " << int_grav
<< endl ;
*ost << "Et_rot_bifluid::grv3 : matter term : " << int_mat
<< endl ;
}
p_grv3 = new double( (int_grav + int_mat) / int_mat ) ;
}
return *p_grv3 ;
}
//----------------------------//
// R_circ //
//----------------------------//
double Et_rot_bifluid::r_circ2() const {
if (p_r_circ2 == 0x0) { // a new computation is required
// Index of the point at phi=0, theta=pi/2 at the surface of the star:
const Mg3d* mg = mp.get_mg() ;
assert(mg->get_type_t() == SYM) ;
int l_b = nzet - 1 ;
int i_b = mg->get_nr(l_b) - 1 ;
int j_b = mg->get_nt(l_b) - 1 ;
int k_b = 0 ;
p_r_circ2 = new double( bbb()(l_b, k_b, j_b, i_b) * ray_eq2() ) ;
}
return *p_r_circ2 ;
}
//----------------------------//
// Flattening //
//----------------------------//
double Et_rot_bifluid::aplat2() const {
if (p_aplat2 == 0x0) { // a new computation is required
p_aplat2 = new double( ray_pole2() / ray_eq2() ) ;
}
return *p_aplat2 ;
}
//----------------------------//
// Surface area //
//----------------------------//
double Et_rot_bifluid::area2() const {
if (p_area2 == 0x0) { // a new computation is required
const Mg3d& mg = *(mp.get_mg()) ;
int np = mg.get_np(0) ;
int nt = mg.get_nt(0) ;
assert(np == 1) ; //Only valid for axisymmetric configurations
const Map_radial* mp_rad = dynamic_cast<const Map_radial*>(&mp) ;
assert(mp_rad != 0x0) ;
Valeur va_r(mg.get_angu()) ;
va_r.annule_hard() ;
Itbl lsurf2 = l_surf2() ;
Tbl xisurf2 = xi_surf2() ;
for (int k=0; k<np; k++) {
for (int j=0; j<nt; j++) {
int l_star2 = lsurf2(k, j) ;
double xi_star2 = xisurf2(k, j) ;
va_r.set(0, k, j, 0) = mp_rad->val_r_jk(l_star2, xi_star2, j, k) ;
}
}
va_r.std_base_scal() ;
Valeur integ(mg.get_angu()) ;
Valeur dr = va_r.dsdt() ;
integ = sqrt(va_r*va_r + dr*dr) ;
Cmp aaaa = get_a_car()() ;
Valeur a2 = aaaa.va ; a2.std_base_scal() ;
Cmp bbbb = get_bbb()() ;
Valeur b = bbbb.va ; b.std_base_scal() ;
for (int k=0; k<np; k++) {
for (int j=0; j<nt; j++) {
integ.set(0, k, j, 0) *= sqrt(a2.val_point_jk(lsurf2(k, j), xisurf2(k, j), j, k))
* b.val_point_jk(lsurf2(k, j), xisurf2(k, j), j, k) * va_r(0, k, j, 0) ;
}
}
integ.std_base_scal() ;
Valeur integ2 = integ.mult_st() ;
double surftot = 0. ;
for (int j=0; j<nt; j++) {
surftot += (*integ2.c_cf)(0, 0, j, 0) / double(2*j+1) ;
}
p_area2 = new double( 4*M_PI*surftot) ;
}
return *p_area2 ;
}
double Et_rot_bifluid::mean_radius2() const {
return sqrt(area2()/(4*M_PI)) ;
}
//----------------------------//
// Quadrupole moment //
//----------------------------//
double Et_rot_bifluid::mom_quad() const {
using namespace Unites ;
if (p_mom_quad == 0x0) { // a new computation is required
double b = mom_quad_Bo() / ( mass_g() * mass_g() ) ;
p_mom_quad = new double( mom_quad_old() - 4./3. * ( 1./4. + b ) * pow(mass_g(), 3) * ggrav * ggrav ) ;
}
return *p_mom_quad ;
}
double Et_rot_bifluid::mom_quad_Bo() const {
using namespace Unites ;
if (p_mom_quad_Bo == 0x0) { // a new computation is required
Cmp dens(mp) ;
dens = press() ;
dens = a_car() * bbb() * nnn() * dens ;
dens.mult_rsint() ;
dens.std_base_scal() ;
p_mom_quad_Bo = new double( - 32. * dens.integrale() / qpig ) ;
}
return *p_mom_quad_Bo ;
}
double Et_rot_bifluid::mom_quad_old() const {
using namespace Unites ;
if (p_mom_quad_old == 0x0) { // a new computation is required
// Source for of the Poisson equation for nu
// -----------------------------------------
Tenseur source(mp) ;
if (relativistic) {
Tenseur beta = log(bbb) ;
beta.set_std_base() ;
source = qpig * a_car * enerps_euler
+ ak_car - flat_scalar_prod(logn.gradient_spher(),
logn.gradient_spher() + beta.gradient_spher()) ;
}
else {
source = qpig * (nbar + nbar2);
}
source.set_std_base() ;
// Multiplication by -r^2 P_2(cos(theta))
// [cf Eq.(7) of Salgado et al. Astron. Astrophys. 291, 155 (1994) ]
// ------------------------------------------------------------------
// Multiplication by r^2 :
// ----------------------
Cmp& csource = source.set() ;
csource.mult_r() ;
csource.mult_r() ;
if (csource.check_dzpuis(2)) {
csource.inc2_dzpuis() ;
}
// Muliplication by cos^2(theta) :
// -----------------------------
Cmp temp = csource ;
// What follows is valid only for a mapping of class Map_radial :
assert( dynamic_cast<const Map_radial*>(&mp) != 0x0 ) ;
if (temp.get_etat() == ETATQCQ) {
Valeur& vtemp = temp.va ;
vtemp = vtemp.mult_ct() ; // multiplication by cos(theta)
vtemp = vtemp.mult_ct() ; // multiplication by cos(theta)
}
// Muliplication by -P_2(cos(theta)) :
// ----------------------------------
source = 0.5 * source() - 1.5 * temp ;
// Final result
// ------------
p_mom_quad_old = new double(- source().integrale() / qpig ) ;
}
return *p_mom_quad_old ;
}
//--------------------------//
// Stellar surface //
//--------------------------//
const Itbl& Et_rot_bifluid::l_surf() const {
if (p_l_surf == 0x0) { // a new computation is required
assert(p_xi_surf == 0x0) ; // consistency check
int np = mp.get_mg()->get_np(0) ;
int nt = mp.get_mg()->get_nt(0) ;
p_l_surf = new Itbl(np, nt) ;
p_xi_surf = new Tbl(np, nt) ;
double nb0 = 0 ; // definition of the surface
double precis = 1.e-15 ;
int nitermax = 100 ;
int niter ;
// Cmp defining the surface of the star (via the density fields)
//
Cmp surf(mp) ;
surf = -0.2*nbar()(0,0,0,0) ;
surf.annule(0, nzet-1) ;
surf += nbar() ; ;
surf = prolonge_c1(surf, nzet) ;
(surf.va).equipot(nb0, nzet, precis, nitermax, niter, *p_l_surf,
*p_xi_surf) ;
}
return *p_l_surf ;
}
const Itbl& Et_rot_bifluid::l_surf2() const {
if (p_l_surf2 == 0x0) { // a new computation is required
assert(p_xi_surf2 == 0x0) ; // consistency check
int np = mp.get_mg()->get_np(0) ;
int nt = mp.get_mg()->get_nt(0) ;
p_l_surf2 = new Itbl(np, nt) ;
p_xi_surf2 = new Tbl(np, nt) ;
double nb0 = 0 ; // definition of the surface
double precis = 1.e-15 ;
int nitermax = 100 ;
int niter ;
// Cmp defining the surface of the star (via the density fields)
//
Cmp surf2(mp) ;
surf2 = -0.2*nbar2()(0,0,0,0) ;
surf2.annule(0, nzet-1) ;
surf2 += nbar2() ; ;
surf2 = prolonge_c1(surf2, nzet) ;
(surf2.va).equipot(nb0, nzet, precis, nitermax, niter, *p_l_surf2,
*p_xi_surf2) ;
}
return *p_l_surf2 ;
}
const Tbl& Et_rot_bifluid::xi_surf2() const {
if (p_xi_surf2 == 0x0) { // a new computation is required
assert(p_l_surf2 == 0x0) ; // consistency check
l_surf2() ; // the computation is done by l_surf2()
}
return *p_xi_surf2 ;
}
//--------------------------//
// Coordinate radii //
//--------------------------//
double Et_rot_bifluid::ray_eq2() const {
if (p_ray_eq2 == 0x0) { // a new computation is required
const Mg3d& mg = *(mp.get_mg()) ;
int type_t = mg.get_type_t() ;
int nt = mg.get_nt(0) ;
if ( type_t == SYM ) {
assert( ( mg.get_type_p() == SYM) || (mg.get_type_p() == NONSYM) ) ;
int k = 0 ;
int j = nt-1 ;
int l = l_surf2()(k, j) ;
double xi = xi_surf2()(k, j) ;
double theta = M_PI / 2 ;
double phi = 0 ;
p_ray_eq2 = new double( mp.val_r(l, xi, theta, phi) ) ;
}
else {
cout << "Et_rot_bifluid::ray_eq2 : the case type_t = " << type_t
<< " is not contemplated yet !" << endl ;
abort() ;
}
}
return *p_ray_eq2 ;
}
double Et_rot_bifluid::ray_eq2_pis2() const {
if (p_ray_eq2_pis2 == 0x0) { // a new computation is required
const Mg3d& mg = *(mp.get_mg()) ;
int type_t = mg.get_type_t() ;
int type_p = mg.get_type_p() ;
int nt = mg.get_nt(0) ;
int np = mg.get_np(0) ;
if ( type_t == SYM ) {
int j = nt-1 ;
double theta = M_PI / 2 ;
double phi = M_PI / 2 ;
switch (type_p) {
case SYM : {
int k = np / 2 ;
int l = l_surf2()(k, j) ;
double xi = xi_surf2()(k, j) ;
p_ray_eq2_pis2 = new double( mp.val_r(l, xi, theta, phi) ) ;
break ;
}
case NONSYM : {
assert( np % 4 == 0 ) ;
int k = np / 4 ;
int l = l_surf2()(k, j) ;
double xi = xi_surf2()(k, j) ;
p_ray_eq2_pis2 = new double( mp.val_r(l, xi, theta, phi) ) ;
break ;
}
default : {
cout << "Et_rot_bifluid::ray_eq2_pis2 : the case type_p = "
<< type_p << " is not contemplated yet !" << endl ;
abort() ;
}
}
}
else {
cout << "Et_rot_bifluid::ray_eq2_pis2 : the case type_t = " << type_t
<< " is not contemplated yet !" << endl ;
abort() ;
}
}
return *p_ray_eq2_pis2 ;
}
double Et_rot_bifluid::ray_eq2_pi() const {
if (p_ray_eq2_pi == 0x0) { // a new computation is required
const Mg3d& mg = *(mp.get_mg()) ;
int type_t = mg.get_type_t() ;
int type_p = mg.get_type_p() ;
int nt = mg.get_nt(0) ;
int np = mg.get_np(0) ;
if ( type_t == SYM ) {
switch (type_p) {
case SYM : {
p_ray_eq2_pi = new double( ray_eq2() ) ;
break ;
}
case NONSYM : {
int k = np / 2 ;
int j = nt-1 ;
int l = l_surf2()(k, j) ;
double xi = xi_surf2()(k, j) ;
double theta = M_PI / 2 ;
double phi = M_PI ;
p_ray_eq2_pi = new double( mp.val_r(l, xi, theta, phi) ) ;
break ;
}
default : {
cout << "Et_rot_bifluid::ray_eq2_pi : the case type_t = " << type_t
<< " and type_p = " << type_p << endl ;
cout << " is not contemplated yet !" << endl ;
abort() ;
break ;
}
}
}
}
return *p_ray_eq2_pi ;
}
double Et_rot_bifluid::ray_pole2() const {
if (p_ray_pole2 == 0x0) { // a new computation is required
assert( ((mp.get_mg())->get_type_t() == SYM)
|| ((mp.get_mg())->get_type_t() == NONSYM) ) ;
int k = 0 ;
int j = 0 ;
int l = l_surf2()(k, j) ;
double xi = xi_surf2()(k, j) ;
double theta = 0 ;
double phi = 0 ;
p_ray_pole2 = new double( mp.val_r(l, xi, theta, phi) ) ;
}
return *p_ray_pole2 ;
}
}
Lorene::Cmp
Component of a tensorial field *** DEPRECATED : use class Scalar instead ***.
Definition cmp.h:446
Lorene::Cmp::mult_rsint
void mult_rsint()
Multiplication by .
Definition cmp_r_manip.C:116
Lorene::Cmp::get_etat
int get_etat() const
Returns the logical state.
Definition cmp.h:899
Lorene::Cmp::va
Valeur va
The numerical value of the Cmp.
Definition cmp.h:464
Lorene::Cmp::std_base_scal
void std_base_scal()
Sets the spectral bases of the Valeur va to the standard ones for a scalar.
Definition cmp.C:644
Lorene::Cmp::annule
void annule(int l)
Sets the Cmp to zero in a given domain.
Definition cmp.C:348
Lorene::Cmp::get_dzpuis
int get_dzpuis() const
Returns dzpuis.
Definition cmp.h:903
Lorene::Cmp::mult_r
void mult_r()
Multiplication by r everywhere.
Definition cmp_r_manip.C:91
Lorene::Cmp::inc2_dzpuis
void inc2_dzpuis()
Increases by 2 the value of dzpuis and changes accordingly the values of the Cmp in the external comp...
Definition cmp_r_manip.C:192
Lorene::Cmp::set_dzpuis
void set_dzpuis(int)
Set a value to dzpuis.
Definition cmp.C:654
Lorene::Cmp::integrale
double integrale() const
Computes the integral over all space of *this .
Definition cmp_integ.C:55
Lorene::Cmp::srdsdt
const Cmp & srdsdt() const
Returns of *this .
Definition cmp_deriv.C:105
Lorene::Cmp::check_dzpuis
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:715
Lorene::Cmp::dsdr
const Cmp & dsdr() const
Returns of *this .
Definition cmp_deriv.C:84
Lorene::Et_rot_bifluid::p_angu_mom_1_part2_2
double * p_angu_mom_1_part2_2
To compute Xn (2nd version).
Definition et_rot_bifluid.h:261
Lorene::Et_rot_bifluid::gam_euler2
Tenseur gam_euler2
Lorentz factor between the fluid 2 and Eulerian observers.
Definition et_rot_bifluid.h:207
Lorene::Et_rot_bifluid::enerps_euler
Tenseur enerps_euler
the combination : useful because in the Newtonian limit .
Definition et_rot_bifluid.h:201
Lorene::Et_rot_bifluid::p_mass_b1
double * p_mass_b1
Baryon mass of fluid 1.
Definition et_rot_bifluid.h:246
Lorene::Et_rot_bifluid::angu_mom_1_part1_1
virtual double angu_mom_1_part1_1() const
To compute In (1st version).
Definition et_bfrot_global.C:266
Lorene::Et_rot_bifluid::p_mass_b2
double * p_mass_b2
Baryon mass of fluid 2.
Definition et_rot_bifluid.h:247
Lorene::Et_rot_bifluid::grv3
virtual double grv3(ostream *ost=0x0) const
Error on the virial identity GRV3.
Definition et_bfrot_global.C:496
Lorene::Et_rot_bifluid::l_surf
virtual const Itbl & l_surf() const
Description of the surface of fluid 1: returns a 2-D Itbl containing the values of the domain index...
Definition et_bfrot_global.C:811
Lorene::Et_rot_bifluid::j_euler12_1
Tenseur j_euler12_1
To compute Ip (1st version).
Definition et_rot_bifluid.h:188
Lorene::Et_rot_bifluid::mom_quad_Bo
virtual double mom_quad_Bo() const
Part of the quadrupole moment.
Definition et_bfrot_global.C:719
Lorene::Et_rot_bifluid::p_angu_mom_1_part1_2
double * p_angu_mom_1_part1_2
To compute In (2nd version).
Definition et_rot_bifluid.h:258
Lorene::Et_rot_bifluid::j_euler2
Tenseur j_euler2
To compute Jp.
Definition et_rot_bifluid.h:185
Lorene::Et_rot_bifluid::sphph_euler
Tenseur sphph_euler
The component of the stress tensor .
Definition et_rot_bifluid.h:175
Lorene::Et_rot_bifluid::p_angu_mom_2_part2_1
double * p_angu_mom_2_part2_1
To compute Xp (1st version).
Definition et_rot_bifluid.h:256
Lorene::Et_rot_bifluid::area2
virtual double area2() const
Surface area for fluid 2.
Definition et_bfrot_global.C:636
Lorene::Et_rot_bifluid::angu_mom_2_part1_2
virtual double angu_mom_2_part1_2() const
To compute Ip (2nd version).
Definition et_bfrot_global.C:391
Lorene::Et_rot_bifluid::p_xi_surf2
Tbl * p_xi_surf2
Description of the surface of fluid 2: 2-D Tbl containing the values of the radial coordinate on the...
Definition et_rot_bifluid.h:240
Lorene::Et_rot_bifluid::angu_mom_2_part1_1
virtual double angu_mom_2_part1_1() const
To compute Ip (1st version).
Definition et_bfrot_global.C:291
Lorene::Et_rot_bifluid::p_angu_mom_1
double * p_angu_mom_1
Angular momentum of fluid 1.
Definition et_rot_bifluid.h:249
Lorene::Et_rot_bifluid::angu_mom_2
virtual double angu_mom_2() const
Angular momentum of fluid 2.
Definition et_bfrot_global.C:241
Lorene::Et_rot_bifluid::j_euler11_1
Tenseur j_euler11_1
To compute In (1st version).
Definition et_rot_bifluid.h:187
Lorene::Et_rot_bifluid::angu_mom_2_part2_2
virtual double angu_mom_2_part2_2() const
To compute Xp (2nd version).
Definition et_bfrot_global.C:441
Lorene::Et_rot_bifluid::p_ray_eq2
double * p_ray_eq2
Coordinate radius at , .
Definition et_rot_bifluid.h:219
Lorene::Et_rot_bifluid::p_angu_mom_1_part2_1
double * p_angu_mom_1_part2_1
To compute Xn (1st version).
Definition et_rot_bifluid.h:255
Lorene::Et_rot_bifluid::ray_pole2
double ray_pole2() const
Coordinate radius for fluid 2 at [r_unit].
Definition et_bfrot_global.C:1036
Lorene::Et_rot_bifluid::mass_b
virtual double mass_b() const
Total Baryon mass.
Definition et_bfrot_global.C:148
Lorene::Et_rot_bifluid::j_euler1
Tenseur j_euler1
To compute Jn.
Definition et_rot_bifluid.h:184
Lorene::Et_rot_bifluid::j_euler
Tenseur j_euler
Total angular momentum (flat-space!) 3-vector , which is related to of the "3+1" decomposition,...
Definition et_rot_bifluid.h:182
Lorene::Et_rot_bifluid::xi_surf2
const Tbl & xi_surf2() const
Description of the surface of fluid 2: returns a 2-D Tbl containing the values of the radial coordi...
Definition et_bfrot_global.C:878
Lorene::Et_rot_bifluid::p_ray_pole2
double * p_ray_pole2
Coordinate radius at .
Definition et_rot_bifluid.h:228
Lorene::Et_rot_bifluid::mass_g
virtual double mass_g() const
Gravitational mass.
Definition et_bfrot_global.C:162
Lorene::Et_rot_bifluid::angu_mom_2_part2_1
virtual double angu_mom_2_part2_1() const
To compute Xp (1st version).
Definition et_bfrot_global.C:341
Lorene::Et_rot_bifluid::p_aplat2
double * p_aplat2
Flatening r_pole/r_eq of fluid no.2.
Definition et_rot_bifluid.h:244
Lorene::Et_rot_bifluid::p_angu_mom_2_part2_2
double * p_angu_mom_2_part2_2
To compute Xp (2nd version).
Definition et_rot_bifluid.h:262
Lorene::Et_rot_bifluid::p_area2
double * p_area2
Surface area of fluid no.2.
Definition et_rot_bifluid.h:243
Lorene::Et_rot_bifluid::p_angu_mom_2
double * p_angu_mom_2
Angular momentum of fluid 2.
Definition et_rot_bifluid.h:250
Lorene::Et_rot_bifluid::l_surf2
const Itbl & l_surf2() const
Description of the surface of fluid 2: returns a 2-D Itbl containing the values of the domain index...
Definition et_bfrot_global.C:844
Lorene::Et_rot_bifluid::eos
const Eos_bifluid & eos
Equation of state for two-fluids model.
Definition et_rot_bifluid.h:152
Lorene::Et_rot_bifluid::p_angu_mom_2_part1_2
double * p_angu_mom_2_part1_2
To compute Ip (2nd version).
Definition et_rot_bifluid.h:259
Lorene::Et_rot_bifluid::mass_b1
double mass_b1() const
Baryon mass of fluid 1.
Definition et_bfrot_global.C:116
Lorene::Et_rot_bifluid::angu_mom_1_part1_2
virtual double angu_mom_1_part1_2() const
To compute In (2nd version).
Definition et_bfrot_global.C:366
Lorene::Et_rot_bifluid::angu_mom_1_part2_1
virtual double angu_mom_1_part2_1() const
To compute Xn (1st version).
Definition et_bfrot_global.C:316
Lorene::Et_rot_bifluid::ray_eq2
double ray_eq2() const
Coordinate radius for fluid 2 at , [r_unit].
Definition et_bfrot_global.C:896
Lorene::Et_rot_bifluid::r_circ2
virtual double r_circ2() const
Circumferential radius for fluid 2.
Definition et_bfrot_global.C:593
Lorene::Et_rot_bifluid::mass_b2
double mass_b2() const
Baryon mass of fluid 2.
Definition et_bfrot_global.C:132
Lorene::Et_rot_bifluid::mom_quad
virtual double mom_quad() const
Quadrupole moment.
Definition et_bfrot_global.C:703
Lorene::Et_rot_bifluid::aplat2
virtual double aplat2() const
Flatening r_pole/r_eq for fluid 2.
Definition et_bfrot_global.C:618
Lorene::Et_rot_bifluid::grv2
virtual double grv2() const
Error on the virial identity GRV2.
Definition et_bfrot_global.C:471
Lorene::Et_rot_bifluid::p_angu_mom_1_part1_1
double * p_angu_mom_1_part1_1
To compute In (1st version).
Definition et_rot_bifluid.h:252
Lorene::Et_rot_bifluid::p_r_circ2
double * p_r_circ2
Circumferential radius of fluid no.2.
Definition et_rot_bifluid.h:242
Lorene::Et_rot_bifluid::p_ray_eq2_pi
double * p_ray_eq2_pi
Coordinate radius at , .
Definition et_rot_bifluid.h:225
Lorene::Et_rot_bifluid::angu_mom_1_part2_2
virtual double angu_mom_1_part2_2() const
To compute Xn (2nd version).
Definition et_bfrot_global.C:416
Lorene::Et_rot_bifluid::p_angu_mom_2_part1_1
double * p_angu_mom_2_part1_1
To compute Ip (1st version).
Definition et_rot_bifluid.h:253
Lorene::Et_rot_bifluid::p_l_surf2
Itbl * p_l_surf2
Description of the surface of fluid 2: 2-D Itbl containing the values of the domain index l on the su...
Definition et_rot_bifluid.h:234
Lorene::Et_rot_bifluid::nbar2
Tenseur nbar2
Baryon density in the fluid frame, for fluid 2.
Definition et_rot_bifluid.h:162
Lorene::Et_rot_bifluid::angu_mom_1
virtual double angu_mom_1() const
Angular momentum of fluid 1.
Definition et_bfrot_global.C:216
Lorene::Et_rot_bifluid::angu_mom
virtual double angu_mom() const
Angular momentum.
Definition et_bfrot_global.C:190
Lorene::Et_rot_bifluid::p_ray_eq2_pis2
double * p_ray_eq2_pis2
Coordinate radius at , .
Definition et_rot_bifluid.h:222
Lorene::Et_rot_bifluid::ray_eq2_pis2
double ray_eq2_pis2() const
Coordinate radius for fluid 2 at , [r_unit].
Definition et_bfrot_global.C:930
Lorene::Et_rot_bifluid::ray_eq2_pi
double ray_eq2_pi() const
Coordinate radius for fluid 2 at , [r_unit].
Definition et_bfrot_global.C:987
Lorene::Et_rot_bifluid::mean_radius2
virtual double mean_radius2() const
Mean radius for fluid 2.
Definition et_bfrot_global.C:690
Lorene::Et_rot_bifluid::mom_quad_old
virtual double mom_quad_old() const
Part of the quadrupole moment.
Definition et_bfrot_global.C:742
Lorene::Etoile_rot::logn
Tenseur & logn
Metric potential = logn_auto.
Definition etoile.h:1521
Lorene::Etoile_rot::p_mom_quad_old
double * p_mom_quad_old
Part of the quadrupole moment.
Definition etoile.h:1642
Lorene::Etoile_rot::get_bbb
const Tenseur & get_bbb() const
Returns the metric factor B.
Definition etoile.h:1712
Lorene::Etoile_rot::lambda_grv2
static double lambda_grv2(const Cmp &sou_m, const Cmp &sou_q)
Computes the coefficient which ensures that the GRV2 virial identity is satisfied.
Definition et_rot_lambda_grv2.C:79
Lorene::Etoile_rot::bbb
Tenseur bbb
Metric factor B.
Definition etoile.h:1504
Lorene::Etoile_rot::ak_car
Tenseur ak_car
Scalar .
Definition etoile.h:1586
Lorene::Etoile_rot::dzeta
Tenseur & dzeta
Metric potential = beta_auto.
Definition etoile.h:1534
Lorene::Etoile_rot::p_grv3
double * p_grv3
Error on the virial identity GRV3.
Definition etoile.h:1634
Lorene::Etoile_rot::p_grv2
double * p_grv2
Error on the virial identity GRV2.
Definition etoile.h:1633
Lorene::Etoile_rot::p_mom_quad_Bo
double * p_mom_quad_Bo
Part of the quadrupole moment.
Definition etoile.h:1643
Lorene::Etoile_rot::p_mom_quad
double * p_mom_quad
Quadrupole moment.
Definition etoile.h:1641
Lorene::Etoile_rot::p_angu_mom
double * p_angu_mom
Angular momentum.
Definition etoile.h:1631
Lorene::Etoile_rot::b_car
Tenseur b_car
Square of the metric factor B.
Definition etoile.h:1507
Lorene::Etoile_rot::tnphi
Tenseur tnphi
Component of the shift vector.
Definition etoile.h:1515
Lorene::Etoile::nzet
int nzet
Number of domains of *mp occupied by the star.
Definition etoile.h:432
Lorene::Etoile::p_mass_b
double * p_mass_b
Baryon mass.
Definition etoile.h:547
Lorene::Etoile::p_mass_g
double * p_mass_g
Gravitational mass.
Definition etoile.h:548
Lorene::Etoile::p_xi_surf
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:545
Lorene::Etoile::nnn
Tenseur nnn
Total lapse function.
Definition etoile.h:509
Lorene::Etoile::nbar
Tenseur nbar
Baryon density in the fluid frame.
Definition etoile.h:459
Lorene::Etoile::p_l_surf
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:539
Lorene::Etoile::gam_euler
Tenseur gam_euler
Lorentz factor between the fluid and Eulerian observers.
Definition etoile.h:471
Lorene::Etoile::mp
Map & mp
Mapping associated with the star.
Definition etoile.h:429
Lorene::Etoile::get_a_car
const Tenseur & get_a_car() const
Returns the total conformal factor .
Definition etoile.h:733
Lorene::Etoile::press
Tenseur press
Fluid pressure.
Definition etoile.h:461
Lorene::Etoile::relativistic
bool relativistic
Indicator of relativity: true for a relativistic star, false for a Newtonian one.
Definition etoile.h:437
Lorene::Etoile::s_euler
Tenseur s_euler
Trace of the stress tensor in the Eulerian frame.
Definition etoile.h:468
Lorene::Etoile::a_car
Tenseur a_car
Total conformal factor .
Definition etoile.h:515
Lorene::Itbl
Basic integer array class.
Definition itbl.h:122
Lorene::Map_radial
Base class for pure radial mappings.
Definition map.h:1536
Lorene::Map_radial::xsr
Coord xsr
in the nucleus; \ 1/R in the non-compactified shells; \ in the compactified outer domain.
Definition map.h:1549
Lorene::Map_radial::val_r_jk
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...
Lorene::Mg3d
Multi-domain grid.
Definition grilles.h:273
Lorene::Mg3d::get_angu
const Mg3d * get_angu() const
Returns the pointer on the associated angular grid.
Definition mg3d.C:473
Lorene::Mg3d::get_type_t
int get_type_t() const
Returns the type of sampling in the direction: SYM : : symmetry with respect to the equatorial pl...
Definition grilles.h:485
Lorene::Mg3d::get_np
int get_np(int l) const
Returns the number of points in the azimuthal direction ( ) in domain no. l.
Definition grilles.h:462
Lorene::Mg3d::get_type_p
int get_type_p() const
Returns the type of sampling in the direction: SYM : : symmetry with respect to the transformatio...
Definition grilles.h:495
Lorene::Mg3d::get_nt
int get_nt(int l) const
Returns the number of points in the co-latitude direction ( ) in domain no. l.
Definition grilles.h:457
Lorene::Mg3d::get_nr
int get_nr(int l) const
Returns the number of points in the radial direction ( ) in domain no. l.
Definition grilles.h:452
Lorene::Tbl
Basic array class.
Definition tbl.h:161
Lorene::Tenseur
Tensor handling *** DEPRECATED : use class Tensor instead ***.
Definition tenseur.h:301
Lorene::Tenseur::set
Cmp & set()
Read/write for a scalar (see also operator=(const Cmp&) ).
Definition tenseur.C:824
Lorene::Tenseur::set_std_base
void set_std_base()
Set the standard spectal basis of decomposition for each component.
Definition tenseur.C:1170
Lorene::Tenseur::gradient_spher
const Tenseur & gradient_spher() const
Returns the gradient of *this (Spherical coordinates) (scalar field only).
Definition tenseur.C:1548
Lorene::Tenseur::change_triad
void change_triad(const Base_vect &new_triad)
Sets a new vectorial basis (triad) of decomposition and modifies the components accordingly.
Definition tenseur.C:668
Lorene::Valeur
Values and coefficients of a (real-value) function.
Definition valeur.h:287
Lorene::Valeur::mult_ct
const Valeur & mult_ct() const
Returns applied to *this.
Definition valeur_mult_ct.C:98
Lorene::Valeur::val_point_jk
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:900
Lorene::Valeur::sx
const Valeur & sx() const
Returns (r -sampling = RARE ) \ Id (r sampling = FIN ) \ (r -sampling = UNSURR ).
Definition valeur_sx.C:110
Lorene::Valeur::dsdt
const Valeur & dsdt() const
Returns of *this.
Definition valeur_dsdt.C:112
Lorene::Valeur::set
Tbl & set(int l)
Read/write of the value in a given domain (configuration space).
Definition valeur.h:363
Lorene::Valeur::ssint
const Valeur & ssint() const
Returns of *this.
Definition valeur_ssint.C:112
Lorene::Valeur::c_cf
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
Definition valeur.h:302
Lorene::Valeur::mult_st
const Valeur & mult_st() const
Returns applied to *this.
Definition valeur_mult_st.C:97
Lorene::Valeur::std_base_scal
void std_base_scal()
Sets the bases for spectral expansions (member base ) to the standard ones for a scalar.
Definition valeur.C:824
Lorene::Valeur::annule_hard
void annule_hard()
Sets the Valeur to zero in a hard way.
Definition valeur.C:723
Lorene::sqrt
Cmp sqrt(const Cmp &)
Square root.
Definition cmp_math.C:220
Lorene::pow
Cmp pow(const Cmp &, int)
Power .
Definition cmp_math.C:348
Lorene::log
Cmp log(const Cmp &)
Neperian logarithm.
Definition cmp_math.C:296
Lorene::flat_scalar_prod
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...
Definition tenseur_operateur.C:653
Lorene
Lorene prototypes.
Definition app_hor.h:64
Lorene::phi
Coord phi
coordinate centered on the grid
Definition map.h:720
Lorene::integrale
virtual Tbl * integrale(const Cmp &) const =0
Computes the integral over all space of a Cmp .
Unites
Standard units of space, time and mass.