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 char sym_ttt_poisson_C[] = "$Header: /cvsroot/Lorene/C++/Source/Tensor/sym_ttt_poisson.C,v 1.4 2004/12/28 10:37:24 j_novak Exp $" ;
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #include "tensor.h"
00055 #include "param_elliptic.h"
00056
00057
00058 Sym_tensor_tt Sym_tensor_tt::poisson(int dzfin) const {
00059
00060
00061 assert(dynamic_cast<const Base_vect_spher*>(triad) != 0x0) ;
00062
00063 assert(dynamic_cast<const Map_af*>(mp) != 0x0) ;
00064 assert( (dzfin == 0) || (dzfin == 2) ) ;
00065 Sym_tensor_tt resu(*mp, *triad, *met_div) ;
00066
00067
00068
00069
00070 const Scalar& source_rr = operator()(1,1) ;
00071 Scalar h_rr(*mp) ;
00072 int nz = mp->get_mg()->get_nzone() ;
00073
00074 if (source_rr.get_etat() != ETATZERO) {
00075
00076
00077
00078
00079
00080 Param_elliptic param_hr(source_rr) ;
00081 for (int lz=0; lz<nz; lz++)
00082 param_hr.set_poisson_tens_rr(lz) ;
00083
00084 h_rr = source_rr.sol_elliptic(param_hr) ;
00085 }
00086 else
00087 h_rr.set_etat_zero() ;
00088
00089 h_rr.inc_dzpuis(dzfin) ;
00090 resu.set(1,1) = h_rr ;
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 Scalar source_eta = -resu(1,1).dsdr() ;
00109 source_eta.mult_r_dzpuis(dzfin) ;
00110 source_eta -= 3.*resu(1,1) ;
00111 Scalar etasurr = source_eta.poisson_angu() ;
00112
00113
00114
00115
00116 Scalar musurr = mu().poisson() ;
00117 musurr.div_r_dzpuis(dzfin) ;
00118
00119 resu.set(1,1).set_spectral_va().ylm_i() ;
00120
00121 Scalar** rcmp = resu.cmp ;
00122
00123 Itbl idx(2) ;
00124 idx.set(0) = 1 ;
00125
00126
00127
00128 idx.set(1) = 2 ;
00129 *rcmp[position(idx)] = etasurr.dsdt() - musurr.stdsdp() ;
00130
00131
00132
00133 idx.set(1) = 3 ;
00134 *rcmp[position(idx)] = etasurr.stdsdp() + musurr.dsdt() ;
00135
00136
00137
00138
00139
00140
00141 Scalar tautst = resu(1,2).dsdr() ;
00142
00143
00144
00145
00146
00147
00148 tautst.mult_r_dzpuis(dzfin) ;
00149
00150
00151 tautst += 3 * resu(1,2) - resu(1,1).dsdt() ;
00152 tautst.mult_sint() ;
00153
00154 Scalar tmp = resu(1,1) ;
00155 tmp.mult_cost() ;
00156
00157 tautst -= tmp ;
00158
00159 Scalar taut = tautst ;
00160 taut.mult_sint() ;
00161
00162
00163
00164
00165 Scalar taupst = - resu(1,3).dsdr() ;
00166
00167
00168
00169
00170
00171
00172 taupst.mult_r_dzpuis(dzfin) ;
00173
00174
00175
00176 taupst -= 3 * resu(1,3) ;
00177 taupst.mult_sint() ;
00178
00179 Scalar taup = taupst ;
00180 taup.mult_sint() ;
00181
00182
00183
00184 tmp = tautst ;
00185 tmp.mult_cost() ;
00186
00187
00188 tmp = taut.dsdt() + tmp + taup.stdsdp() ;
00189
00190 Scalar tmp2 (*mp) ;
00191 tmp2 = tmp.poisson_angu() ;
00192 tmp2.div_sint() ;
00193 tmp2.div_sint() ;
00194
00195 idx.set(0) = 3 ;
00196 idx.set(1) = 3 ;
00197 *rcmp[position(idx)] = tmp2 ;
00198
00199
00200
00201
00202 tmp = taupst ;
00203 tmp.mult_cost() ;
00204
00205
00206 tmp = - taut.stdsdp() + taup.dsdt() + tmp ;
00207
00208 tmp2 = tmp.poisson_angu() ;
00209 tmp2.div_sint() ;
00210 tmp2.div_sint() ;
00211
00212 idx.set(0) = 2 ;
00213 idx.set(1) = 3 ;
00214 *rcmp[position(idx)] = tmp2 ;
00215
00216
00217
00218 idx.set(1) = 2 ;
00219 *rcmp[position(idx)] = - resu(1,1) - resu(3,3) ;
00220
00221 return resu ;
00222 }