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
26char 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
48namespace Lorene {
50
51 int nzm1 = mp.get_mg()->get_nzone() - 1 ;
52
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
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
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++){
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 ;
175 }
176
177 // The derived quantities are obsolete
178 // -----------------------------------
179
180 del_deriv() ;
181
182}
183}
Time evolution with partial storage (*** under development ***).
Definition evolution.h:371
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
const Mg3d * get_mg() const
Gives the Mg3d on which the mapping is defined.
Definition map.h:765
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
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 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