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 sol_Dirac_A_C[] = "$Header: /cvsroot/Lorene/C++/Source/Tensor/vector_divfree_A.C,v 1.3 2009/10/23 13:18:46 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 #include <stdlib.h>
00051 #include <assert.h>
00052 #include <math.h>
00053
00054
00055 #include "metric.h"
00056 #include "diff.h"
00057 #include "proto.h"
00058 #include "param.h"
00059
00060
00061
00062
00063
00064
00065
00066 void Vector_divfree::sol_Dirac_A(const Scalar& aaa, Scalar& tilde_vr, Scalar& tilde_eta,
00067 const Param* par_bc) const {
00068
00069 const Map_af* mp_aff = dynamic_cast<const Map_af*>(mp) ;
00070 assert(mp_aff != 0x0) ;
00071
00072 const Mg3d& mgrid = *mp_aff->get_mg() ;
00073 assert(mgrid.get_type_r(0) == RARE) ;
00074 if (aaa.get_etat() == ETATZERO) {
00075 tilde_vr = 0 ;
00076 tilde_eta = 0 ;
00077 return ;
00078 }
00079 assert(aaa.get_etat() != ETATNONDEF) ;
00080 int nz = mgrid.get_nzone() ;
00081 int nzm1 = nz - 1 ;
00082 bool ced = (mgrid.get_type_r(nzm1) == UNSURR) ;
00083 int n_shell = ced ? nz-2 : nzm1 ;
00084 int nz_bc = nzm1 ;
00085 if (par_bc != 0x0)
00086 if (par_bc->get_n_int() > 0) nz_bc = par_bc->get_int() ;
00087 n_shell = (nz_bc < n_shell ? nz_bc : n_shell) ;
00088 bool cedbc = (ced && (nz_bc == nzm1)) ;
00089 #ifndef NDEBUG
00090 if (!cedbc) {
00091 assert(par_bc != 0x0) ;
00092 assert(par_bc->get_n_tbl_mod() >= 3) ;
00093 }
00094 #endif
00095 int nt = mgrid.get_nt(0) ;
00096 int np = mgrid.get_np(0) ;
00097
00098 Scalar source = aaa ;
00099 Scalar source_coq = aaa ;
00100 source_coq.annule_domain(0) ;
00101 if (ced) source_coq.annule_domain(nzm1) ;
00102 source_coq.mult_r() ;
00103 source.set_spectral_va().ylm() ;
00104 source_coq.set_spectral_va().ylm() ;
00105 Base_val base = source.get_spectral_base() ;
00106 base.mult_x() ;
00107
00108 tilde_vr.annule_hard() ;
00109 tilde_vr.set_spectral_base(base) ;
00110 tilde_vr.set_spectral_va().set_etat_cf_qcq() ;
00111 tilde_vr.set_spectral_va().c_cf->annule_hard() ;
00112 tilde_eta.annule_hard() ;
00113 tilde_eta.set_spectral_base(base) ;
00114 tilde_eta.set_spectral_va().set_etat_cf_qcq() ;
00115 tilde_eta.set_spectral_va().c_cf->annule_hard() ;
00116
00117 Mtbl_cf sol_part_vr(mgrid, base) ; sol_part_vr.annule_hard() ;
00118 Mtbl_cf sol_part_eta(mgrid, base) ; sol_part_eta.annule_hard() ;
00119 Mtbl_cf sol_hom1_vr(mgrid, base) ; sol_hom1_vr.annule_hard() ;
00120 Mtbl_cf sol_hom1_eta(mgrid, base) ; sol_hom1_eta.annule_hard() ;
00121 Mtbl_cf sol_hom2_vr(mgrid, base) ; sol_hom2_vr.annule_hard() ;
00122 Mtbl_cf sol_hom2_eta(mgrid, base) ; sol_hom2_eta.annule_hard() ;
00123
00124 int l_q, m_q, base_r ;
00125
00126
00127
00128
00129 {int lz = 0 ;
00130 int nr = mgrid.get_nr(lz) ;
00131 double alpha = mp_aff->get_alpha()[lz] ;
00132 Matrice ope(2*nr, 2*nr) ;
00133 ope.set_etat_qcq() ;
00134
00135 for (int k=0 ; k<np+1 ; k++) {
00136 for (int j=0 ; j<nt ; j++) {
00137
00138 base.give_quant_numbers(lz, k, j, m_q, l_q, base_r) ;
00139 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 0)) {
00140 Diff_dsdx od(base_r, nr) ; const Matrice& md = od.get_matrice() ;
00141 Diff_sx os(base_r, nr) ; const Matrice& ms = os.get_matrice() ;
00142
00143 for (int lin=0; lin<nr; lin++)
00144 for (int col=0; col<nr; col++)
00145 ope.set(lin,col) = md(lin,col) + 2*ms(lin,col) ;
00146 for (int lin=0; lin<nr; lin++)
00147 for (int col=0; col<nr; col++)
00148 ope.set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
00149 for (int lin=0; lin<nr; lin++)
00150 for (int col=0; col<nr; col++)
00151 ope.set(lin+nr,col) = -ms(lin,col) ;
00152 for (int lin=0; lin<nr; lin++)
00153 for (int col=0; col<nr; col++)
00154 ope.set(lin+nr,col+nr) = md(lin,col) + ms(lin,col) ;
00155
00156 ope *= 1./alpha ;
00157 int ind1 = nr ;
00158
00159 if (l_q==1) {
00160 ind1 += 1 ;
00161 int pari = 1 ;
00162 for (int col=0 ; col<nr; col++) {
00163 ope.set(nr-1,col) = pari ;
00164 ope.set(nr-1,col+nr) = -pari ;
00165 pari = - pari ;
00166 }
00167 ope.set(2*nr-1, nr) = 1;
00168 }
00169 else{
00170 for (int col=0; col<2*nr; col++)
00171 ope.set(ind1+nr-2, col) = 0 ;
00172 for (int col=0; col<2*nr; col++) {
00173 ope.set(nr-1, col) = 0 ;
00174 ope.set(2*nr-1, col) = 0 ;
00175 }
00176 int pari = 1 ;
00177 if (base_r == R_CHEBP) {
00178 for (int col=0; col<nr; col++) {
00179 ope.set(nr-1, col) = pari ;
00180 ope.set(2*nr-1, col+nr) = pari ;
00181 pari = - pari ;
00182 }
00183 }
00184 else {
00185 ope.set(nr-1, nr-1) = 1 ;
00186 ope.set(2*nr-1, 2*nr-1) = 1 ;
00187 }
00188
00189 ope.set(ind1+nr-2, ind1) = 1 ;
00190 }
00191
00192 ope.set_lu() ;
00193
00194 Tbl sec(2*nr) ;
00195 sec.set_etat_qcq() ;
00196 for (int lin=0; lin<nr; lin++)
00197 sec.set(lin) = 0 ;
00198 for (int lin=0; lin<nr; lin++)
00199 sec.set(nr+lin) = (*source.get_spectral_va().c_cf)
00200 (lz, k, j, lin) ;
00201 sec.set(2*nr-1) = 0 ;
00202 sec.set(ind1+nr-2) = 0 ;
00203 Tbl sol = ope.inverse(sec) ;
00204
00205
00206
00207 for (int i=0; i<nr; i++) {
00208 sol_part_vr.set(lz, k, j, i) = sol(i) ;
00209 sol_part_eta.set(lz, k, j, i) = sol(i+nr) ;
00210 }
00211 sec.annule_hard() ;
00212 sec.set(ind1+nr-2) = 1 ;
00213
00214 sol = ope.inverse(sec) ;
00215
00216 for (int i=0; i<nr; i++) {
00217 sol_hom2_vr.set(lz, k, j, i) = sol(i) ;
00218 sol_hom2_eta.set(lz, k, j, i) = sol(i+nr) ;
00219 }
00220 }
00221 }
00222 }
00223 }
00224
00225
00226
00227
00228
00229 for (int lz=1; lz <= n_shell; lz++) {
00230 int nr = mgrid.get_nr(lz) ;
00231 assert(mgrid.get_nt(lz) == nt) ;
00232 assert(mgrid.get_np(lz) == np) ;
00233 double alpha = mp_aff->get_alpha()[lz] ;
00234 double ech = mp_aff->get_beta()[lz] / alpha ;
00235 Matrice ope(2*nr, 2*nr) ;
00236 ope.set_etat_qcq() ;
00237
00238 for (int k=0 ; k<np+1 ; k++) {
00239 for (int j=0 ; j<nt ; j++) {
00240
00241 base.give_quant_numbers(lz, k, j, m_q, l_q, base_r) ;
00242 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 0)) {
00243 Diff_xdsdx oxd(base_r, nr) ; const Matrice& mxd = oxd.get_matrice() ;
00244 Diff_dsdx od(base_r, nr) ; const Matrice& md = od.get_matrice() ;
00245 Diff_id oid(base_r, nr) ; const Matrice& mid = oid.get_matrice() ;
00246
00247 for (int lin=0; lin<nr; lin++)
00248 for (int col=0; col<nr; col++)
00249 ope.set(lin,col) = mxd(lin,col) + ech*md(lin,col)
00250 + 2*mid(lin,col) ;
00251 for (int lin=0; lin<nr; lin++)
00252 for (int col=0; col<nr; col++)
00253 ope.set(lin,col+nr) = -l_q*(l_q+1)*mid(lin,col) ;
00254 for (int lin=0; lin<nr; lin++)
00255 for (int col=0; col<nr; col++)
00256 ope.set(lin+nr,col) = -mid(lin,col) ;
00257 for (int lin=0; lin<nr; lin++)
00258 for (int col=0; col<nr; col++)
00259 ope.set(lin+nr,col+nr) = mxd(lin,col) + ech*md(lin,col) + mid(lin,col) ;
00260
00261 int ind0 = 0 ;
00262 int ind1 = nr ;
00263 for (int col=0; col<2*nr; col++) {
00264 ope.set(ind0+nr-1, col) = 0 ;
00265 ope.set(ind1+nr-1, col) = 0 ;
00266 }
00267 ope.set(ind0+nr-1, ind0) = 1 ;
00268 ope.set(ind1+nr-1, ind1) = 1 ;
00269
00270 ope.set_lu() ;
00271
00272 Tbl sec(2*nr) ;
00273 sec.set_etat_qcq() ;
00274 for (int lin=0; lin<nr; lin++)
00275 sec.set(lin) = 0 ;
00276 for (int lin=0; lin<nr; lin++)
00277 sec.set(nr+lin) = (*source_coq.get_spectral_va().c_cf)
00278 (lz, k, j, lin) ;
00279 sec.set(ind0+nr-1) = 0 ;
00280 sec.set(ind1+nr-1) = 0 ;
00281 Tbl sol = ope.inverse(sec) ;
00282 for (int i=0; i<nr; i++) {
00283 sol_part_vr.set(lz, k, j, i) = sol(i) ;
00284 sol_part_eta.set(lz, k, j, i) = sol(i+nr) ;
00285 }
00286
00287
00288 sec.annule_hard() ;
00289 sec.set(ind0+nr-1) = 1 ;
00290 sol = ope.inverse(sec) ;
00291
00292
00293 for (int i=0; i<nr; i++) {
00294 sol_hom1_vr.set(lz, k, j, i) = sol(i) ;
00295 sol_hom1_eta.set(lz, k, j, i) = sol(i+nr) ;
00296 }
00297 sec.set(ind0+nr-1) = 0 ;
00298 sec.set(ind1+nr-1) = 1 ;
00299 sol = ope.inverse(sec) ;
00300
00301
00302
00303 for (int i=0; i<nr; i++) {
00304 sol_hom2_vr.set(lz, k, j, i) = sol(i) ;
00305 sol_hom2_eta.set(lz, k, j, i) = sol(i+nr) ;
00306 }
00307 }
00308 }
00309 }
00310 }
00311
00312
00313
00314
00315 if (cedbc) {int lz = nzm1 ;
00316 int nr = mgrid.get_nr(lz) ;
00317 assert(mgrid.get_nt(lz) == nt) ;
00318 assert(mgrid.get_np(lz) == np) ;
00319 double alpha = mp_aff->get_alpha()[lz] ;
00320 Matrice ope(2*nr, 2*nr) ;
00321 ope.set_etat_qcq() ;
00322
00323 for (int k=0 ; k<np+1 ; k++) {
00324 for (int j=0 ; j<nt ; j++) {
00325
00326 base.give_quant_numbers(lz, k, j, m_q, l_q, base_r) ;
00327 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 0)) {
00328 Diff_dsdx od(base_r, nr) ; const Matrice& md = od.get_matrice() ;
00329 Diff_sx os(base_r, nr) ; const Matrice& ms = os.get_matrice() ;
00330
00331
00332 for (int lin=0; lin<nr; lin++)
00333 for (int col=0; col<nr; col++)
00334 ope.set(lin,col) = - md(lin,col) + 2*ms(lin,col) ;
00335 for (int lin=0; lin<nr; lin++)
00336 for (int col=0; col<nr; col++)
00337 ope.set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
00338 for (int lin=0; lin<nr; lin++)
00339 for (int col=0; col<nr; col++)
00340 ope.set(lin+nr,col) = -ms(lin,col) ;
00341 for (int lin=0; lin<nr; lin++)
00342 for (int col=0; col<nr; col++)
00343 ope.set(lin+nr,col+nr) = -md(lin,col) + ms(lin,col) ;
00344
00345 ope *= 1./alpha ;
00346 int ind0 = 0 ;
00347 int ind1 = nr ;
00348 for (int col=0; col<2*nr; col++) {
00349 ope.set(ind0+nr-1, col) = 0 ;
00350 ope.set(ind1+nr-2, col) = 0 ;
00351 ope.set(ind1+nr-1, col) = 0 ;
00352 }
00353 for (int col=0; col<nr; col++) {
00354 ope.set(ind0+nr-1, col+ind0) = 1 ;
00355 ope.set(ind1+nr-1, col+ind1) = 1 ;
00356 }
00357 ope.set(ind1+nr-2, ind1+1) = 1 ;
00358
00359 ope.set_lu() ;
00360
00361 Tbl sec(2*nr) ;
00362 sec.set_etat_qcq() ;
00363 for (int lin=0; lin<nr; lin++)
00364 sec.set(lin) = 0 ;
00365 for (int lin=0; lin<nr; lin++)
00366 sec.set(nr+lin) = (*source.get_spectral_va().c_cf)
00367 (lz, k, j, lin) ;
00368 sec.set(ind0+nr-1) = 0 ;
00369 sec.set(ind1+nr-2) = 0 ;
00370 sec.set(ind1+nr-1) = 0 ;
00371 Tbl sol = ope.inverse(sec) ;
00372
00373 for (int i=0; i<nr; i++) {
00374 sol_part_vr.set(lz, k, j, i) = sol(i) ;
00375 sol_part_eta.set(lz, k, j, i) = sol(i+nr) ;
00376 }
00377 sec.annule_hard() ;
00378 sec.set(ind1+nr-2) = 1 ;
00379 sol = ope.inverse(sec) ;
00380 for (int i=0; i<nr; i++) {
00381 sol_hom1_vr.set(lz, k, j, i) = sol(i) ;
00382 sol_hom1_eta.set(lz, k, j, i) = sol(i+nr) ;
00383 }
00384 }
00385 }
00386 }
00387 }
00388
00389 int taille = 2*nz_bc + 1;
00390 if (cedbc) taille-- ;
00391 Mtbl_cf& mvr = *tilde_vr.set_spectral_va().c_cf ;
00392 Mtbl_cf& meta = *tilde_eta.set_spectral_va().c_cf ;
00393
00394 Tbl sec_membre(taille) ;
00395 Matrice systeme(taille, taille) ;
00396 int ligne ; int colonne ;
00397 Tbl pipo(1) ;
00398 const Tbl& mub = (cedbc ? pipo : par_bc->get_tbl_mod(2) );
00399 double c_vr = (cedbc ? 0 : par_bc->get_tbl_mod(0)(0) ) ;
00400 double d_vr = (cedbc ? 0 : par_bc->get_tbl_mod(0)(1) ) ;
00401 double c_eta = (cedbc ? 0 : par_bc->get_tbl_mod(0)(2) ) ;
00402 double d_eta = (cedbc ? 0 : par_bc->get_tbl_mod(0)(3) ) ;
00403
00404
00405
00406 Mtbl_cf dhom1_vr = sol_hom1_vr ;
00407 Mtbl_cf dhom2_vr = sol_hom2_vr ;
00408 Mtbl_cf dpart_vr = sol_part_vr ;
00409 Mtbl_cf dhom1_eta = sol_hom1_eta ;
00410 Mtbl_cf dhom2_eta = sol_hom2_eta ;
00411 Mtbl_cf dpart_eta = sol_part_eta ;
00412 if (!cedbc) {
00413 dhom1_vr.dsdx() ;
00414 dhom2_vr.dsdx() ;
00415 dpart_vr.dsdx() ;
00416 dhom1_eta.dsdx() ;
00417 dhom2_eta.dsdx() ;
00418 dpart_eta.dsdx() ;
00419 }
00420
00421
00422
00423 for (int k=0 ; k<np+1 ; k++)
00424 for (int j=0 ; j<nt ; j++) {
00425 base.give_quant_numbers(0, k, j, m_q, l_q, base_r) ;
00426 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q > 0)) {
00427 ligne = 0 ;
00428 colonne = 0 ;
00429 systeme.annule_hard() ;
00430 sec_membre.annule_hard() ;
00431
00432
00433 if ((nz==1)&&(mgrid.get_type_r(0) == RARE)) {
00434
00435 double alpha = mp_aff->get_alpha()[nz_bc] ;
00436 systeme.set(ligne, colonne) =
00437 c_vr*sol_hom2_vr.val_out_bound_jk(nz_bc, j, k)
00438 + d_vr*dhom2_vr.val_out_bound_jk(nz_bc, j, k) / alpha
00439 + c_eta*sol_hom2_eta.val_out_bound_jk(nz_bc, j, k)
00440 + d_eta*dhom2_eta.val_out_bound_jk(nz_bc, j, k) / alpha ;
00441
00442 sec_membre.set(ligne) -= c_vr*sol_part_vr.val_out_bound_jk(nz_bc, j, k)
00443 + d_vr*dpart_vr.val_out_bound_jk(nz_bc, j, k)/alpha
00444 + c_eta*sol_part_eta.val_out_bound_jk(nz_bc, j, k)
00445 + d_eta*dpart_eta.val_out_bound_jk(nz_bc, j, k)/alpha
00446 - mub(k, j) ;
00447 }
00448 else {
00449
00450
00451 int nr = mgrid.get_nr(0) ;
00452
00453 systeme.set(ligne, colonne) = sol_hom2_vr.val_out_bound_jk(0, j, k) ;
00454 sec_membre.set(ligne) = -sol_part_vr.val_out_bound_jk(0, j, k) ;
00455 ligne++ ;
00456
00457 systeme.set(ligne, colonne) = sol_hom2_eta.val_out_bound_jk(0, j, k) ;
00458 sec_membre.set(ligne) = -sol_part_eta.val_out_bound_jk(0, j, k) ;
00459 colonne++ ;
00460
00461
00462 for (int zone=1 ; zone<nz_bc ; zone++) {
00463 nr = mgrid.get_nr(zone) ;
00464 ligne-- ;
00465
00466
00467 systeme.set(ligne, colonne) =
00468 - sol_hom1_vr.val_in_bound_jk(zone, j, k) ;
00469 systeme.set(ligne, colonne+1) =
00470 - sol_hom2_vr.val_in_bound_jk(zone, j, k) ;
00471
00472 sec_membre.set(ligne) += sol_part_vr.val_in_bound_jk(zone, j, k) ;
00473 ligne++ ;
00474
00475 systeme.set(ligne, colonne) =
00476 - sol_hom1_eta.val_in_bound_jk(zone, j, k) ;
00477 systeme.set(ligne, colonne+1) =
00478 - sol_hom2_eta.val_in_bound_jk(zone, j, k) ;
00479
00480 sec_membre.set(ligne) += sol_part_eta.val_in_bound_jk(zone, j, k) ;
00481 ligne++ ;
00482
00483
00484 systeme.set(ligne, colonne) =
00485 sol_hom1_vr.val_out_bound_jk(zone, j, k) ;
00486 systeme.set(ligne, colonne+1) =
00487 sol_hom2_vr.val_out_bound_jk(zone, j, k) ;
00488
00489 sec_membre.set(ligne) -= sol_part_vr.val_out_bound_jk(zone, j, k) ;
00490 ligne++ ;
00491
00492 systeme.set(ligne, colonne) =
00493 sol_hom1_eta.val_out_bound_jk(zone, j, k) ;
00494 systeme.set(ligne, colonne+1) =
00495 sol_hom2_eta.val_out_bound_jk(zone, j, k) ;
00496
00497 sec_membre.set(ligne) -= sol_part_eta.val_out_bound_jk(zone, j, k) ;
00498
00499 colonne += 2 ;
00500 }
00501
00502
00503 nr = mgrid.get_nr(nz_bc) ;
00504 double alpha = mp_aff->get_alpha()[nz_bc] ;
00505 ligne-- ;
00506
00507
00508 systeme.set(ligne, colonne) =
00509 - sol_hom1_vr.val_in_bound_jk(nz_bc, j, k) ;
00510 if (!cedbc) systeme.set(ligne, colonne+1) =
00511 - sol_hom2_vr.val_in_bound_jk(nz_bc, j, k) ;
00512
00513 sec_membre.set(ligne) += sol_part_vr.val_in_bound_jk(nz_bc, j, k) ;
00514 ligne++ ;
00515
00516 systeme.set(ligne, colonne) =
00517 - sol_hom1_eta.val_in_bound_jk(nz_bc, j, k) ;
00518 if (!cedbc) systeme.set(ligne, colonne+1) =
00519 - sol_hom2_eta.val_in_bound_jk(nz_bc, j, k) ;
00520
00521 sec_membre.set(ligne) += sol_part_eta.val_in_bound_jk(nz_bc, j, k) ;
00522 ligne++ ;
00523
00524 if (!cedbc) {
00525 systeme.set(ligne, colonne) =
00526 c_vr*sol_hom1_vr.val_out_bound_jk(nz_bc, j, k)
00527 + d_vr*dhom1_vr.val_out_bound_jk(nz_bc, j, k) / alpha
00528 + c_eta*sol_hom1_eta.val_out_bound_jk(nz_bc, j, k)
00529 + d_eta*dhom1_eta.val_out_bound_jk(nz_bc, j, k) / alpha ;
00530 systeme.set(ligne, colonne+1) =
00531 c_vr*sol_hom2_vr.val_out_bound_jk(nz_bc, j, k)
00532 + d_vr*dhom2_vr.val_out_bound_jk(nz_bc, j, k) / alpha
00533 + c_eta*sol_hom2_eta.val_out_bound_jk(nz_bc, j, k)
00534 + d_eta*dhom2_eta.val_out_bound_jk(nz_bc, j, k) / alpha ;
00535
00536 sec_membre.set(ligne) -= c_vr*sol_part_vr.val_out_bound_jk(nz_bc, j, k)
00537 + d_vr*dpart_vr.val_out_bound_jk(nz_bc, j, k)/alpha
00538 + c_eta*sol_part_eta.val_out_bound_jk(nz_bc, j, k)
00539 + d_eta*dpart_eta.val_out_bound_jk(nz_bc, j, k)/alpha
00540 - mub(k, j) ;
00541 }
00542 }
00543
00544
00545
00546
00547 systeme.set_lu() ;
00548 Tbl facteur = systeme.inverse(sec_membre) ;
00549 int conte = 0 ;
00550
00551
00552
00553
00554 int nr = mgrid.get_nr(0) ;
00555 for (int i=0 ; i<nr ; i++) {
00556 mvr.set(0, k, j, i) = sol_part_vr(0, k, j, i)
00557 + facteur(conte)*sol_hom2_vr(0, k, j, i) ;
00558 meta.set(0, k, j, i) = sol_part_eta(0, k, j, i)
00559 + facteur(conte)*sol_hom2_eta(0, k, j, i) ;
00560 }
00561 conte++ ;
00562 for (int zone=1 ; zone<=n_shell ; zone++) {
00563 nr = mgrid.get_nr(zone) ;
00564 for (int i=0 ; i<nr ; i++) {
00565 mvr.set(zone, k, j, i) = sol_part_vr(zone, k, j, i)
00566 + facteur(conte)*sol_hom1_vr(zone, k, j, i)
00567 + facteur(conte+1)*sol_hom2_vr(zone, k, j, i) ;
00568
00569 meta.set(zone, k, j, i) = sol_part_eta(zone, k, j, i)
00570 + facteur(conte)*sol_hom1_eta(zone, k, j, i)
00571 + facteur(conte+1)*sol_hom2_eta(zone, k, j, i) ;
00572 }
00573 conte+=2 ;
00574 }
00575 if (cedbc) {
00576 nr = mgrid.get_nr(nzm1) ;
00577 for (int i=0 ; i<nr ; i++) {
00578 mvr.set(nzm1, k, j, i) = sol_part_vr(nzm1, k, j, i)
00579 + facteur(conte)*sol_hom1_vr(nzm1, k, j, i) ;
00580
00581 meta.set(nzm1, k, j, i) = sol_part_eta(nzm1, k, j, i)
00582 + facteur(conte)*sol_hom1_eta(nzm1, k, j, i) ;
00583 }
00584 }
00585
00586 }
00587 }
00588
00589
00590 if (tilde_vr.set_spectral_va().c != 0x0)
00591 delete tilde_vr.set_spectral_va().c ;
00592 tilde_vr.set_spectral_va().c = 0x0 ;
00593 tilde_vr.set_spectral_va().ylm_i() ;
00594
00595 if (tilde_eta.set_spectral_va().c != 0x0)
00596 delete tilde_eta.set_spectral_va().c ;
00597 tilde_eta.set_spectral_va().c = 0x0 ;
00598 tilde_eta.set_spectral_va().ylm_i() ;
00599
00600
00601
00602 }