et_rot_diff_hydro.C
/*
* Function Et_rot_diff::hydro_euler
*
* (see file et_rot_diff.h for documentation)
*
*/
/*
* Copyright (c) 2001 Eric Gourgoulhon
*
* 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_rot_diff_hydro_C[] = "$Header: /cvsroot/Lorene/C++/Source/Etoile/et_rot_diff_hydro.C,v 1.3 2014/10/13 08:52:57 j_novak Exp $" ;
/*
* $Id: et_rot_diff_hydro.C,v 1.3 2014/10/13 08:52:57 j_novak Exp $
* $Log: et_rot_diff_hydro.C,v $
* Revision 1.3 2014/10/13 08:52:57 j_novak
* Lorene classes and functions now belong to the namespace Lorene.
*
* Revision 1.2 2014/10/06 15:13:09 j_novak
* Modified #include directives to use c++ syntax.
*
* Revision 1.1.1.1 2001/11/20 15:19:28 e_gourgoulhon
* LORENE
*
* Revision 1.1 2001/10/19 08:18:36 eric
* Initial revision
*
*
* $Header: /cvsroot/Lorene/C++/Source/Etoile/et_rot_diff_hydro.C,v 1.3 2014/10/13 08:52:57 j_novak Exp $
*
*/
// Headers C
#include <cstdlib>
// Headers Lorene
#include "et_rot_diff.h"
#include "utilitaires.h"
namespace Lorene {
void Et_rot_diff::hydro_euler(){
int nz = mp.get_mg()->get_nzone() ;
int nzm1 = nz - 1 ;
// Computation of u_euler
// ----------------------
Cmp x(mp) ;
Cmp y(mp) ;
x = mp.x ;
y = mp.y ;
u_euler.set_etat_qcq() ;
// Cartesian components of differential rotation:
u_euler.set(0) = - omega_field() * y ;
u_euler.set(1) = omega_field() * x ;
u_euler.set(2) = 0 ;
u_euler.annule(nzm1) ;
u_euler.set_triad( mp.get_bvect_cart() ) ; // Triad = Cartesian triad
u_euler.set_std_base() ; // sets the standard bases for spectral expansions
u_euler = ( u_euler - shift ) / nnn ;
u_euler.set_std_base() ; // sets the standard bases for spectral expansions
//## Test
Tenseur utest(mp, 1, CON, mp.get_bvect_spher()) ;
utest.set_etat_qcq() ;
utest.set(0) = 0 ; // Spherical components of differential rotation
utest.set(1) = 0 ;
utest.set(2) = ( omega_field() - nphi() ) / nnn();
utest.set(2).annule(nzm1) ;
utest.set(2).std_base_scal() ;
utest.set(2).mult_rsint() ; // Multiplication by r sin(theta)
utest.set_triad( mp.get_bvect_spher() ) ;
utest.change_triad( mp.get_bvect_cart() ) ;
for (int i=0; i<3; i++) {
Valeur& uu = u_euler.set(i).va ;
Valeur& ut = utest.set(i).va ;
if (uu.get_etat() != ETATZERO) {
uu.coef() ;
if (ut.get_etat() == ETATZERO) {
ut.set_etat_cf_qcq() ;
*(ut.c_cf) = 0 ;
ut.c_cf->base = uu.c_cf->base ;
}
else {
ut.coef() ;
}
Mtbl_cf diff = *(uu.c_cf) - *(ut.c_cf) ;
cout << "Et_rot_diff::hydro_euler: test u_euler(" << i << ") : "
<< max( abs(diff) )(0) << endl ;
}
}
//##
if ( (u_euler(0).get_etat() == ETATZERO) &&
(u_euler(1).get_etat() == ETATZERO) &&
(u_euler(2).get_etat() == ETATZERO) ) {
u_euler = 0 ;
}
// Computation of uuu (norme of u_euler)
// ------------------
// The scalar product is performed on the spherical components:
Tenseur us = u_euler ;
us.change_triad( mp.get_bvect_spher() ) ;
Cmp uuu2 = a_car() * ( us(0) * us(0) + us(1) * us(1) )
+ b_car() * us(2) * us(2) ;
uuu = sqrt( uuu2 ) ;
if (uuu.get_etat() == ETATQCQ) {
((uuu.set()).va).set_base( us(2).va.base ) ; // Same basis as
} // (Omega -N^phi) r sin(theta)
// Lorentz factor
// --------------
Tenseur u2(mp) ;
u2 = unsurc2 * uuu2 ;
Tenseur gam2 = 1 / (1 - u2) ;
gam_euler = sqrt(gam2) ;
gam_euler.set_std_base() ; // sets the standard spectral bases for
// a scalar field
// Energy density E with respect to the Eulerian observer
//------------------------------------
ener_euler = gam2 * ( ener + press ) - press ;
ener_euler.set_std_base() ;
// Trace of the stress tensor with respect to the Eulerian observer
//------------------------------------
s_euler = 3 * press + ( ener_euler + press ) * u2 ;
s_euler.set_std_base() ;
// The derived quantities are obsolete
// -----------------------------------
del_deriv() ;
}
}
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::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::Et_rot_diff::hydro_euler
virtual void hydro_euler()
Computes the hydrodynamical quantities relative to the Eulerian observer from those in the fluid fram...
Definition et_rot_diff_hydro.C:61
Lorene::Et_rot_diff::omega_field
Tenseur omega_field
Field .
Definition et_rot_diff.h:105
Lorene::Etoile_rot::uuu
Tenseur uuu
Norm of u_euler.
Definition etoile.h:1518
Lorene::Etoile_rot::del_deriv
virtual void del_deriv() const
Deletes all the derived quantities.
Definition etoile_rot.C:335
Lorene::Etoile_rot::nphi
Tenseur nphi
Metric coefficient .
Definition etoile.h:1510
Lorene::Etoile_rot::b_car
Tenseur b_car
Square of the metric factor B.
Definition etoile.h:1507
Lorene::Etoile::nnn
Tenseur nnn
Total lapse function.
Definition etoile.h:509
Lorene::Etoile::u_euler
Tenseur u_euler
Fluid 3-velocity with respect to the Eulerian observer.
Definition etoile.h:474
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::ener
Tenseur ener
Total energy density in the fluid frame.
Definition etoile.h:460
Lorene::Etoile::press
Tenseur press
Fluid pressure.
Definition etoile.h:461
Lorene::Etoile::ener_euler
Tenseur ener_euler
Total energy density in the Eulerian frame.
Definition etoile.h:465
Lorene::Etoile::shift
Tenseur shift
Total shift vector.
Definition etoile.h:512
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::Etoile::unsurc2
double unsurc2
: unsurc2=1 for a relativistic star, 0 for a Newtonian one.
Definition etoile.h:442
Lorene::Mtbl_cf
Coefficients storage for the multi-domain spectral method.
Definition mtbl_cf.h:186
Lorene::Mtbl_cf::base
Base_val base
Bases of the spectral expansions.
Definition mtbl_cf.h:200
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_etat_qcq
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Definition tenseur.C:636
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::Tenseur::set_triad
void set_triad(const Base_vect &new_triad)
Assigns a new vectorial basis (triad) of decomposition.
Definition tenseur.C:674
Lorene::Valeur
Values and coefficients of a (real-value) function.
Definition valeur.h:287
Lorene::Valeur::set_etat_cf_qcq
void set_etat_cf_qcq()
Sets the logical state to ETATQCQ (ordinary state) for values in the configuration space (Mtbl_cf c_c...
Definition valeur.C:712
Lorene::Valeur::get_etat
int get_etat() const
Returns the logical state.
Definition valeur.h:726
Lorene::Valeur::c_cf
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
Definition valeur.h:302
Lorene::Valeur::coef
void coef() const
Computes the coeffcients of *this.
Definition valeur_coef.C:148
Lorene::sqrt
Cmp sqrt(const Cmp &)
Square root.
Definition cmp_math.C:220
Lorene::max
Tbl max(const Cmp &)
Maximum values of a Cmp in each domain.
Definition cmp_math.C:435
Lorene::abs
Cmp abs(const Cmp &)
Absolute value.
Definition cmp_math.C:410
Lorene
Lorene prototypes.
Definition app_hor.h:64
Lorene::y
Coord y
y coordinate centered on the grid
Definition map.h:727
Lorene::x
Coord x
x coordinate centered on the grid
Definition map.h:726