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
00030 char sym_tensor_tt_etamu_C[] = "$Header: /cvsroot/Lorene/C++/Source/Tensor/sym_tensor_tt_etamu.C,v 1.16 2006/10/24 13:03:19 j_novak Exp $" ;
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 #include <stdlib.h>
00100 #include <assert.h>
00101
00102
00103 #include "tensor.h"
00104
00105
00106
00107
00108
00109 const Scalar& Sym_tensor_tt::khi() const {
00110
00111 if (p_khi == 0x0) {
00112
00113
00114 assert(dynamic_cast<const Base_vect_spher*>(triad) != 0x0) ;
00115
00116
00117
00118 p_khi = new Scalar(operator()(1,1)) ;
00119 p_khi->mult_r() ;
00120 p_khi->mult_r() ;
00121 }
00122
00123 return *p_khi ;
00124
00125 }
00126
00127
00128
00129
00130
00131
00132
00133 const Scalar& Sym_tensor_tt::eta(Param* par) const {
00134
00135
00136 if (p_eta == 0x0) {
00137
00138
00139
00140 assert(dynamic_cast<const Base_vect_spher*>(triad) != 0x0) ;
00141
00142
00143
00144 int dzp = operator()(1,1).get_dzpuis() ;
00145 int dzp_resu = ((dzp == 0) ? 0 : dzp-1) ;
00146
00147 Scalar source_eta(*mp) ;
00148
00149 if (p_khi == 0x0) {
00150
00151
00152 source_eta = - operator()(1,1).dsdr() ;
00153
00154
00155
00156
00157
00158
00159
00160 source_eta.mult_r_dzpuis( dzp ) ;
00161
00162
00163 source_eta -= 3. * operator()(1,1) ;
00164
00165 source_eta.mult_r_dzpuis(dzp_resu) ;
00166 }
00167 else {
00168
00169
00170 source_eta = - p_khi->dsdr() ;
00171 int diff_dzp = source_eta.get_dzpuis() - dzp_resu ;
00172 assert( diff_dzp >= 0 ) ;
00173 source_eta.dec_dzpuis(diff_dzp) ;
00174
00175 Scalar tmp(*p_khi) ;
00176 tmp.div_r_dzpuis(dzp_resu) ;
00177
00178 source_eta -= tmp ;
00179
00180 }
00181
00182
00183
00184
00185 if (dynamic_cast<const Map_af*>(mp) != 0x0) {
00186 p_eta = new Scalar( source_eta.poisson_angu() ) ;
00187 }
00188 else {
00189 Scalar resu (*mp) ;
00190 resu = 0. ;
00191 mp->poisson_angu(source_eta, *par, resu) ;
00192 p_eta = new Scalar( resu ) ;
00193 }
00194
00195 }
00196
00197 return *p_eta ;
00198
00199 }
00200
00201
00202
00203
00204
00205
00206
00207
00208 void Sym_tensor_tt::set_rr_eta_mu(const Scalar& hrr, const Scalar& eta_i,
00209 const Scalar& mu_i) {
00210
00211
00212 assert( dynamic_cast<const Base_vect_spher*>(triad) != 0x0 ) ;
00213
00214 set(1,1) = hrr ;
00215
00216
00217
00218 p_eta = new Scalar( eta_i ) ;
00219
00220 p_mu = new Scalar( mu_i ) ;
00221
00222 update( hrr.get_dzpuis() ) ;
00223
00224 }
00225
00226
00227
00228
00229
00230
00231 void Sym_tensor_tt::set_rr_mu(const Scalar& hrr, const Scalar& mu_i) {
00232
00233
00234 assert( dynamic_cast<const Base_vect_spher*>(triad) != 0x0 ) ;
00235
00236 set(1,1) = hrr ;
00237
00238
00239
00240 p_mu = new Scalar( mu_i ) ;
00241
00242 eta() ;
00243
00244 update( hrr.get_dzpuis() ) ;
00245
00246 }
00247
00248
00249
00250
00251
00252
00253 void Sym_tensor_tt::set_khi_eta_mu(const Scalar& khi_i, const Scalar& eta_i,
00254 const Scalar& mu_i) {
00255
00256
00257 assert( dynamic_cast<const Base_vect_spher*>(triad) != 0x0 ) ;
00258
00259 set(1,1) = khi_i ;
00260 set(1,1).div_r() ;
00261 set(1,1).div_r() ;
00262
00263
00264
00265
00266 p_khi = new Scalar( khi_i ) ;
00267
00268 p_eta = new Scalar( eta_i ) ;
00269
00270 p_mu = new Scalar( mu_i ) ;
00271
00272 update( khi_i.get_dzpuis() ) ;
00273
00274 }
00275
00276
00277
00278
00279
00280
00281 void Sym_tensor_tt::set_khi_mu(const Scalar& khi_i, const Scalar& mu_i,
00282 int dzp, Param* par1, Param* par2, Param* par3) {
00283
00284
00285 assert( dynamic_cast<const Base_vect_spher*>(triad) != 0x0 ) ;
00286
00287 set(1,1) = khi_i ;
00288
00289
00290
00291 assert( khi_i.check_dzpuis(0) ) ;
00292 if (dzp == 0) {
00293 set(1,1).div_r() ;
00294 set(1,1).div_r() ;
00295 }
00296 else {
00297 assert(dzp == 2) ;
00298 set(1,1).div_r_dzpuis(1) ;
00299 set(1,1).div_r_dzpuis(2) ;
00300 }
00301
00302 p_khi = new Scalar ( khi_i ) ;
00303
00304 p_mu = new Scalar( mu_i ) ;
00305
00306 if (dynamic_cast<const Map_af*>(mp) != 0x0) {
00307 eta() ;
00308
00309
00310
00311 update(dzp) ;
00312 }
00313 else {
00314 eta(par1) ;
00315
00316
00317
00318 update(dzp, par2, par3) ;
00319 }
00320
00321 }
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331 void Sym_tensor_tt::update(int dzp, Param* par1, Param* par2) {
00332
00333
00334 assert(dynamic_cast<const Base_vect_spher*>(triad) != 0x0) ;
00335
00336 assert( (p_eta != 0x0) && (p_mu != 0x0) ) ;
00337
00338 Itbl idx(2) ;
00339 idx.set(0) = 1 ;
00340
00341
00342
00343 idx.set(1) = 2 ;
00344 *cmp[position(idx)] = p_eta->srdsdt() - p_mu->srstdsdp() ;
00345
00346 if (dzp == 0) {
00347 assert( cmp[position(idx)]->check_dzpuis(2) ) ;
00348 cmp[position(idx)]->dec_dzpuis(2) ;
00349 }
00350
00351 assert( cmp[position(idx)]->check_dzpuis(dzp) ) ;
00352
00353
00354
00355 idx.set(1) = 3 ;
00356 *cmp[position(idx)] = p_eta->srstdsdp() + p_mu->srdsdt() ;
00357
00358 if (dzp == 0) {
00359 assert( cmp[position(idx)]->check_dzpuis(2) ) ;
00360 cmp[position(idx)]->dec_dzpuis(2) ;
00361 }
00362
00363 assert( cmp[position(idx)]->check_dzpuis(dzp) ) ;
00364
00365
00366
00367
00368
00369
00370 Scalar tautst = operator()(1,2).dsdr() ;
00371
00372
00373
00374
00375
00376
00377 tautst.mult_r_dzpuis( operator()(1,2).get_dzpuis() ) ;
00378
00379
00380
00381 tautst += 3 * operator()(1,2) - operator()(1,1).dsdt() ;
00382 tautst.mult_sint() ;
00383
00384 Scalar tmp = operator()(1,1) ;
00385 tmp.mult_cost() ;
00386
00387 tautst -= tmp ;
00388
00389 Scalar taut = tautst ;
00390 taut.mult_sint() ;
00391
00392
00393
00394
00395 Scalar taupst = - operator()(1,3).dsdr() ;
00396
00397
00398
00399
00400
00401
00402 taupst.mult_r_dzpuis( operator()(1,3).get_dzpuis() ) ;
00403
00404
00405
00406
00407 taupst -= 3 * operator()(1,3) ;
00408 taupst.mult_sint() ;
00409
00410 Scalar taup = taupst ;
00411 taup.mult_sint() ;
00412
00413
00414
00415
00416 tmp = tautst ;
00417 tmp.mult_cost() ;
00418
00419
00420 tmp = taut.dsdt() + tmp + taup.stdsdp() ;
00421
00422 Scalar tmp2 (*mp) ;
00423 if (dynamic_cast<const Map_af*>(mp) != 0x0) {
00424 tmp2 = tmp.poisson_angu() ;
00425 }
00426 else {
00427 tmp2 = 0. ;
00428 mp->poisson_angu(tmp, *par1, tmp2) ;
00429 }
00430
00431
00432 tmp2.div_sint() ;
00433 tmp2.div_sint() ;
00434
00435 idx.set(0) = 3 ;
00436 idx.set(1) = 3 ;
00437 *cmp[position(idx)] = tmp2 ;
00438
00439
00440
00441
00442 tmp = taupst ;
00443 tmp.mult_cost() ;
00444
00445
00446 tmp = - taut.stdsdp() + taup.dsdt() + tmp ;
00447
00448 if (dynamic_cast<const Map_af*>(mp) != 0x0) {
00449 tmp2 = tmp.poisson_angu() ;
00450 }
00451 else {
00452 tmp2 = 0. ;
00453 mp->poisson_angu(tmp, *par2, tmp2) ;
00454 }
00455
00456 tmp2.div_sint() ;
00457 tmp2.div_sint() ;
00458
00459 idx.set(0) = 2 ;
00460 idx.set(1) = 3 ;
00461 *cmp[position(idx)] = tmp2 ;
00462
00463
00464
00465 idx.set(1) = 2 ;
00466 *cmp[position(idx)] = - operator()(1,1) - operator()(3,3) ;
00467
00468
00469 Sym_tensor_trans::del_deriv() ;
00470
00471
00472
00473 }
00474
00475
00476
00477
00478
00479
00480 void Sym_tensor_tt::set_A_tildeB(const Scalar& a_in, const Scalar& tb_in,
00481 Param* par_bc, Param* par_mat) {
00482
00483 Scalar zero(*mp) ;
00484 zero.set_etat_zero() ;
00485 set_AtB_trace(a_in, tb_in, zero, par_bc, par_mat) ;
00486 return ;
00487 }
00488
00489
00490
00491
00492
00493