LORENE
star_bin_hydro_xcts.C
1 /*
2  * Methods of the class Star_bin_xcts for computing hydro quantities
3  * (see file star.h for documentation)
4  */
5 
6 /*
7  * Copyright (c) 2010 Michal Bejger
8  *
9  * This file is part of LORENE.
10  *
11  * LORENE is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2
13  * as published by the Free Software Foundation.
14  *
15  * LORENE is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with LORENE; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23  *
24  */
25 
26 char star_bin_hydro_xcts_C[] = "$Header: /cvsroot/Lorene/C++/Source/Star/star_bin_hydro_xcts.C,v 1.3 2014/10/13 08:53:38 j_novak Exp $" ;
27 
28 /*
29  * $Id: star_bin_hydro_xcts.C,v 1.3 2014/10/13 08:53:38 j_novak Exp $
30  * $Log: star_bin_hydro_xcts.C,v $
31  * Revision 1.3 2014/10/13 08:53:38 j_novak
32  * Lorene classes and functions now belong to the namespace Lorene.
33  *
34  * Revision 1.2 2010/12/09 10:43:53 m_bejger
35  * Small changes, annule --> annule_domain
36  *
37  * Revision 1.1 2010/05/04 07:51:05 m_bejger
38  * Initial version
39  *
40  * $Header: /cvsroot/Lorene/C++/Source/Star/star_bin_hydro_xcts.C,v 1.3 2014/10/13 08:53:38 j_novak Exp $
41  *
42  */
43 
44 // Headers Lorene
45 #include "star.h"
46 #include "utilitaires.h"
47 
48 namespace Lorene {
50 
51  int nzm1 = mp.get_mg()->get_nzone() - 1 ;
52 
53  Sym_tensor gamma_cov (gamma.cov()) ;
54  Sym_tensor gamma_con (gamma.con()) ;
55 
56  gamma_cov.change_triad(mp.get_bvect_cart()) ;
57  gamma_con.change_triad(mp.get_bvect_cart()) ;
58 
59  //----------------------------------
60  // Specific relativistic enthalpy ---> hhh
61  //----------------------------------
62 
63  Scalar hhh = exp(ent) ; // = 1 at the Newtonian limit
64  hhh.std_spectral_base() ;
65 
66  //---------------------------------------------------
67  // Lorentz factor between the co-orbiting
68  // observer and the Eulerian one
69  // Eqs. 23 and 24 from Gourgoulhon et al. (2001)
70  //---------------------------------------------------
71 
72  Scalar gam0 = 1 / sqrt( 1 - contract(gamma_cov, 0, 1, bsn * bsn, 0, 1)) ;
73  gam0.std_spectral_base() ;
74 
75  //------------------------------------------
76  // Lorentz factor and 3-velocity of the fluid
77  // with respect to the Eulerian observer
78  //------------------------------------------
79 
80  if (irrotational) {
81 
82  // See Eq. 32 from Gourgoulhon et al. (2001)
83  gam_euler = sqrt( 1 + contract(gamma_con, 0, 1, d_psi * d_psi, 0, 1)
84  / (hhh%hhh) ) ;
86 
87  u_euler = contract(gamma_con, 0, d_psi, 0)
88  /( hhh % gam_euler ) ;
90 
91  } else {
92 
93  // Rigid rotation
94  // --------------
95 
96  gam_euler = gam0 ;
98  u_euler = bsn ;
99 
100  }
101 
102  //------------------------------------
103  // Energy density E with respect to the Eulerian observer
104  // Eq. 53 from Gourgoulhon et al. (2001)
105  //--------------------------------------
106 
107  ener_euler = gam_euler % gam_euler % ( ener + press ) - press ;
108 
109  //-------------------------------------------
110  // Trace of the stress tensor with respect to the Eulerian observer
111  // See Eq (54) from Gourgoulhon et al. (2001)
112  //-------------------------------------------
113 
114  s_euler = 3 * press + ( ener_euler + press ) %
115  contract(gamma_cov, 0, 1, u_euler * u_euler, 0 ,1) ;
116 
117  //-------------------------------------------
118  // Spatial part of the stress-energy tensor with respect
119  // to the Eulerian observer.
120  //-------------------------------------------
121 
122  for(int i=1; i<=3; i++) {
123  for(int j=1; j<=3; j++){
124  stress_euler.set(i,j) = (ener_euler + press )*u_euler(i)
125  *u_euler(j) + press * gamma_con(i,j) ;
126  }
127  }
128 
129  //-------------------------------------------
130  // Lorentz factor between the fluid and ---> gam
131  // co-orbiting observers
132  // See Eq (58) from Gourgoulhon et al. (2001)
133  //--------------------------------------------
134 
135  if (irrotational) {
136 
137  Scalar tmp = ( 1 - contract(gamma_cov, 0, 1, bsn * u_euler, 0, 1) ) ;
138  tmp.std_spectral_base() ;
139  Scalar gam = gam0 % gam_euler % tmp ;
140 
141  //-------------------------------------------
142  // Spatial projection of the fluid 3-velocity
143  // with respect to the co-orbiting observer
144  //--------------------------------------------
145 
146  wit_w = - gam_euler / gam * u_euler + gam0 * bsn ;
147 
148  wit_w.std_spectral_base() ; // set the bases for spectral expansions
149  wit_w.annule_domain(nzm1) ; // zero in the ZEC
150 
151 
152  //-------------------------------------------
153  // Logarithm of the Lorentz factor between
154  // the fluid and co-orbiting observers
155  //--------------------------------------------
156 
157  loggam = log( gam ) ;
158  loggam.std_spectral_base() ; // set the bases for spectral expansions
159 
160  //------------------------------------------------
161  // Velocity fields set to zero in external domains
162  //------------------------------------------------
163 
164  loggam.annule_domain(nzm1) ; // zero in the ZEC only
165  loggam.set_dzpuis(0) ;
166 
167  wit_w.annule(nzet,nzm1) ; // zero outside the star
168  u_euler.annule(nzet,nzm1) ; // zero outside the star
169 
170 
171  } else {
172 
173  loggam = 0 ;
174  wit_w.set_etat_zero() ;
175  }
176 
177  // The derived quantities are obsolete
178  // -----------------------------------
179 
180  del_deriv() ;
181 
182 }
183 }
const Mg3d * get_mg() const
Gives the Mg3d on which the mapping is defined.
Definition: map.h:765
const Base_vect_cart & get_bvect_cart() const
Returns the Cartesian basis associated with the coordinates (x,y,z) of the mapping,...
Definition: map.h:791
virtual const Sym_tensor & con() const
Read-only access to the contravariant representation.
Definition: metric.C:290
virtual const Sym_tensor & cov() const
Read-only access to the covariant representation.
Definition: metric.C:280
int get_nzone() const
Returns the number of domains.
Definition: grilles.h:448
Tensor field of valence 0 (or component of a tensorial field).
Definition: scalar.h:387
virtual void std_spectral_base()
Sets the spectral bases of the Valeur va to the standard ones for a scalar field.
Definition: scalar.C:784
void set_dzpuis(int)
Modifies the dzpuis flag.
Definition: scalar.C:808
Vector wit_w
Spatial projection of the fluid 3-velocity with respect to the co-orbiting observer.
Definition: star.h:1115
Vector bsn
3-vector shift, divided by N, of the rotating coordinates, .
Definition: star.h:1126
Scalar loggam
Logarithm of the Lorentz factor between the fluid and the co-orbiting observer.
Definition: star.h:1120
virtual void hydro_euler()
Computes the hydrodynamical quantities relative to the Eulerian observer from those in the fluid fram...
bool irrotational
true for an irrotational star, false for a corotating one
Definition: star.h:1099
virtual void del_deriv() const
Deletes all the derived quantities.
Vector d_psi
Gradient of (in the irrotational case) (Spherical components with respect to the mapping of the star...
Definition: star.h:1109
Scalar ener
Total energy density in the fluid frame.
Definition: star.h:193
Scalar ener_euler
Total energy density in the Eulerian frame.
Definition: star.h:198
Scalar gam_euler
Lorentz factor between the fluid and Eulerian observers.
Definition: star.h:204
Scalar s_euler
Trace of the stress scalar in the Eulerian frame.
Definition: star.h:201
Metric gamma
3-metric
Definition: star.h:235
Sym_tensor stress_euler
Spatial part of the stress-energy tensor with respect to the Eulerian observer.
Definition: star.h:212
Scalar press
Fluid pressure.
Definition: star.h:194
Scalar ent
Log-enthalpy.
Definition: star.h:190
Vector u_euler
Fluid 3-velocity with respect to the Eulerian observer.
Definition: star.h:207
Map & mp
Mapping associated with the star.
Definition: star.h:180
int nzet
Number of domains of *mp occupied by the star.
Definition: star.h:183
Class intended to describe valence-2 symmetric tensors.
Definition: sym_tensor.h:223
virtual void std_spectral_base()
Sets the standard spectal bases of decomposition for each component.
Definition: vector.C:316
Cmp sqrt(const Cmp &)
Square root.
Definition: cmp_math.C:220
Cmp exp(const Cmp &)
Exponential.
Definition: cmp_math.C:270
Cmp log(const Cmp &)
Neperian logarithm.
Definition: cmp_math.C:296
virtual void change_triad(const Base_vect &new_triad)
Sets a new vectorial basis (triad) of decomposition and modifies the components accordingly.
virtual void annule(int l_min, int l_max)
Sets the Tensor to zero in several domains.
Definition: tensor.C:671
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
Definition: tensor.C:666
virtual void set_etat_zero()
Sets the logical state of all components to ETATZERO (zero state).
Definition: tensor.C:497
Scalar & set(const Itbl &ind)
Returns the value of a component (read/write version).
Definition: tensor.C:654
Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .
Lorene prototypes.
Definition: app_hor.h:64