00001 /* 00002 * Function Star_rot_Dirac::hydro_euler 00003 * 00004 * (see file star_rot_dirac.h for documentation). 00005 * 00006 */ 00007 00008 /* 00009 * Copyright (c) 2005 Lap-Ming Lin & Jerome Novak 00010 * 00011 * This file is part of LORENE. 00012 * 00013 * LORENE is free software; you can redistribute it and/or modify 00014 * it under the terms of the GNU General Public License version 2 00015 * as published by the Free Software Foundation. 00016 * 00017 * LORENE is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU General Public License for more details. 00021 * 00022 * You should have received a copy of the GNU General Public License 00023 * along with LORENE; if not, write to the Free Software 00024 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00025 * 00026 */ 00027 00028 char strot_dirac_hydro_C[] = "$Header: /cvsroot/Lorene/C++/Source/Star/strot_dirac_hydro.C,v 1.5 2007/12/21 16:07:49 j_novak Exp $" ; 00029 00030 /* 00031 * $Id: strot_dirac_hydro.C,v 1.5 2007/12/21 16:07:49 j_novak Exp $ 00032 * $Log: strot_dirac_hydro.C,v $ 00033 * Revision 1.5 2007/12/21 16:07:49 j_novak 00034 * Use of direct filtering of Vector and Sym_tensor. 00035 * 00036 * Revision 1.4 2007/11/06 16:23:59 j_novak 00037 * Added the flag spectral_filter giving the order of possible spectral filtering 00038 * of the hydro sources of metric equations (some members *_euler). The filtering 00039 * is done in strot_dirac_hydro, if this flag is non-zero. 00040 * 00041 * Revision 1.3 2005/03/14 14:01:34 j_novak 00042 * u_euler is now defined on all the grid. 00043 * 00044 * Revision 1.2 2005/02/17 17:31:56 f_limousin 00045 * Change the name of some quantities to be consistent with other classes 00046 * (for instance nnn is changed to nn, shift to beta, beta to lnq...) 00047 * 00048 * Revision 1.1 2005/01/31 08:51:48 j_novak 00049 * New files for rotating stars in Dirac gauge (still under developement). 00050 * 00051 * 00052 * $Header: /cvsroot/Lorene/C++/Source/Star/strot_dirac_hydro.C,v 1.5 2007/12/21 16:07:49 j_novak Exp $ 00053 * 00054 */ 00055 00056 00057 // C headers 00058 #include<math.h> 00059 #include<assert.h> 00060 00061 // Lorene headers 00062 #include"star_rot_dirac.h" 00063 00064 void Star_rot_Dirac::hydro_euler(){ 00065 00066 // u_euler (fluid 3-velocity w.r.t. the Eulerian frame) 00067 // ----------------------------------------------------- 00068 00069 00070 u_euler.set(1).set_etat_zero() ; 00071 u_euler.set(2).set_etat_zero() ; 00072 00073 u_euler.set(3) = omega ; 00074 u_euler.set(3).std_spectral_base() ; 00075 u_euler.set(3).mult_rsint() ; 00076 u_euler.set(3) += beta(3) ; 00077 00078 u_euler = u_euler / nn ; 00079 00080 // v2 (square of the norm of u_euler) 00081 // ---------------------------------- 00082 00083 v2 = contract(contract(gamma.cov(), 0, u_euler, 0), 0, u_euler, 0) ; 00084 00085 00086 // gam_euler (Lorentz factor between the fluid and Eulerian observers) 00087 // ------------------------------------------------------------------- 00088 00089 gam_euler = 1. / sqrt(1. - v2) ; 00090 00091 gam_euler.std_spectral_base() ; 00092 00093 00094 // ener_euler (energy density w.r.t. the Eulerian observer) 00095 // ------------------------------------------------------ 00096 00097 ener_euler = gam_euler*gam_euler*(ener + press) - press ; 00098 00099 ener_euler.std_spectral_base() ; 00100 if (spectral_filter > 0) { 00101 ener_euler.exponential_filter_r(1, nzet-1, spectral_filter) ; 00102 } 00103 // j_euler (momentum density 3-vector w.r.t. the Eulerian observer) 00104 // ---------------------------------------------------------------- 00105 00106 j_euler = (ener_euler + press)*u_euler ; 00107 j_euler.std_spectral_base() ; 00108 00109 if (spectral_filter > 0) { 00110 j_euler.exponential_filter_r(1, nzet-1, spectral_filter) ; 00111 } 00112 00113 // s_euler (trace of the stress tensor w.r.t. the Eulerian observer) 00114 // ---------------------------------------------------------------- 00115 00116 s_euler = (ener_euler + press)*v2 + 3*press ; 00117 s_euler.std_spectral_base() ; 00118 if (spectral_filter > 0) { 00119 s_euler.exponential_filter_r(1, nzet-1, spectral_filter) ; 00120 } 00121 // stress_euler (stress tensor w.r.t. the Eulerian observer) 00122 // --------------------------------------------------------- 00123 00124 00125 stress_euler = (ener_euler + press)*u_euler*u_euler + press*gamma.con() ; 00126 stress_euler.std_spectral_base() ; 00127 if (spectral_filter > 0) { 00128 stress_euler.exponential_filter_r(1, nzet-1, spectral_filter) ; 00129 } 00130 00131 // The derived quantities are obsolete 00132 // ------------------------------------ 00133 00134 del_deriv() ; 00135 00136 00137 } 00138 00139
1.4.6