00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 char strot_dirac_solvenq_C[] = "$Header: /cvsroot/Lorene/C++/Source/Star/strot_dirac_solvenq.C,v 1.3 2005/02/17 17:31:29 f_limousin Exp $" ;
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #include<math.h>
00049 #include <assert.h>
00050
00051
00052 #include "star_rot_dirac.h"
00053 #include "unites.h"
00054
00055 void Star_rot_Dirac::solve_logn_f(Scalar& ln_f_new) const {
00056
00057 using namespace Unites ;
00058
00059
00060
00061
00062
00063 Scalar source_logn = qpig* psi4* (ener_euler + s_euler) ;
00064
00065 ln_f_new = source_logn.poisson() ;
00066
00067 }
00068
00069 void Star_rot_Dirac::solve_logn_q(Scalar& ln_q_new) const {
00070
00071 const Metric_flat& mets = mp.flat_met_spher() ;
00072 const Base_vect_spher& bspher = mp.get_bvect_spher() ;
00073
00074 const Vector& dln_psi = ln_psi.derive_cov(mets) ;
00075 const Vector& dln = logn.derive_cov(mets) ;
00076
00077
00078
00079
00080
00081
00082
00083 Scalar source_logn = psi4* aa_quad
00084 - contract(dln.up_down(mets), 0, dln, 0)
00085 - 2.* contract(dln_psi, 0, logn.derive_con(tgamma), 0) ;
00086
00087
00088 Tensor_sym tmp(mp, 2, COV, bspher, 0, 1) ;
00089 tmp = dln.derive_cov(mets) ;
00090 tmp.inc_dzpuis() ;
00091
00092 source_logn -= contract( hh, 0, 1, tmp+dln*dln, 0, 1 ) ;
00093
00094 ln_q_new = source_logn.poisson() ;
00095
00096 }
00097
00098 void Star_rot_Dirac::solve_qqq(Scalar& q_new) const {
00099
00100 using namespace Unites ;
00101
00102 const Metric_flat& mets = mp.flat_met_spher() ;
00103
00104
00105
00106
00107 const Vector& dln_psi = ln_psi.derive_cov(mets) ;
00108 const Vector& dqq = qqq.derive_cov(mets) ;
00109 const Tensor_sym& dhh = hh.derive_cov(mets) ;
00110 const Tensor_sym& dtgam = tgamma.cov().derive_cov(mets) ;
00111
00112 Scalar source_qq = psi4 * qqq * ( qpig* s_euler + 0.75* aa_quad ) ;
00113
00114 Scalar tmp = contract( hh, 0, 1, dqq.derive_cov(mets), 0, 1 ) ;
00115 tmp.inc_dzpuis() ;
00116
00117 source_qq -= tmp ;
00118
00119
00120
00121 tmp = 0.0625 * contract( dhh, 0, 1, dtgam, 0, 1 ).trace(tgamma)
00122 - 0.125 * contract( dhh, 0, 1, dtgam, 0, 2 ).trace(tgamma)
00123 + 2.* contract( dln_psi, 0, ln_psi.derive_con(tgamma), 0) ;
00124
00125 source_qq += psi2 * ( nn * tmp
00126 + 2*contract(dln_psi, 0, nn.derive_con(tgamma), 0) ) ;
00127
00128
00129 q_new = source_qq.poisson() + 1. ;
00130
00131 if (q_new.get_etat() == ETATUN) q_new.std_spectral_base() ;
00132
00133 }