74 #include "param_elliptic.h" 76 #include "graphique.h" 78 #include "utilitaires.h" 83 void Vector::poisson_boundary2(
double lam,
Vector& resu,
Scalar boundvr,
Scalar boundeta,
Scalar boundmu,
double dir_vr,
double neum_vr,
double dir_eta,
double neum_eta,
double dir_mu,
double neum_mu)
const {
87 for (
int i=0; i<3; i++)
88 assert(
cmp[i]->check_dzpuis(4)) ;
93 assert( mpaff != 0x0) ;
96 if (fabs(lam + 1.) < 1.e-8) {
98 cout <<
" lambda = -1 is not supported by this code!" << endl;
105 Scalar bound_vr2 = boundvr;
107 Scalar bound_eta2 = boundeta;
121 int nz = mg.
get_nzone() ;
int nzm1 = nz - 1;
129 if (S_r.get_etat() == ETATZERO) {
147 S_r.set_spectral_va().ylm() ;
167 for (
int l=0; l<nz; l++){
185 double alpha = mpaff->
get_alpha()[1] ;
double alp2 = alpha*alpha ;
186 double beta = mpaff->
get_beta()[1] ;
188 int l_q = 0 ;
int m_q = 0;
int base_r = 0 ;
189 for (
int zone=1 ; zone<nzm1 ; zone++) {
192 assert(nt == mg.
get_nt(zone)) ;
193 assert(np == mg.
get_np(zone)) ;
196 double ech = beta / alpha ;
200 for (
int k=0 ; k<np+1 ; k++) {
201 for (
int j=0 ; j<nt ; j++) {
203 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q != 0) ) {
206 int nr_eq1 = nr - dege1 ;
207 int nr_eq2 = nr - dege2 ;
220 for (
int lin=0; lin<nr_eq1; lin++) {
221 for (
int col=0; col<nr; col++)
223 = m2d2(lin,col) + 2*ech*mxd2(lin,col) + ech*ech*md2(lin,col)
224 + 2*(mxd(lin,col) + ech*md(lin,col))
225 - (lam+1)*l_q*(l_q+1)*mid(lin,col) ;
226 for (
int col=0; col<nr; col++)
228 = lam*(mxd(lin,col) + ech*md(lin,col))
229 + 2*(1+lam)*mid(lin,col) ;
231 oper.
set(nr_eq1, 0) = 1 ;
232 for (
int col=1; col<2*nr; col++)
233 oper.
set(nr_eq1, col) = 0 ;
234 oper.
set(nr_eq1+1, 0) = 0 ;
235 oper.
set(nr_eq1+1, 1) = 1 ;
236 for (
int col=2; col<2*nr; col++)
237 oper.
set(nr_eq1+1, col) = 0 ;
238 for (
int lin=0; lin<nr_eq2; lin++) {
239 for (
int col=0; col<nr; col++)
241 = -l_q*(l_q+1)*(lam*(mxd(lin,col) + ech*md(lin,col))
242 - (lam+2)*mid(lin,col)) ;
243 for (
int col=0; col<nr; col++)
244 oper.
set(lin+nr, col+nr)
245 = (lam+1)*(m2d2(lin,col) + 2*ech*mxd2(lin,col)
246 + ech*ech*md2(lin,col)
247 + 2*(mxd(lin,col) + ech*md(lin,col)))
248 -(2*(lam+1)+l_q*(l_q+1))*mid(lin,col) ;
250 for (
int col=0; col<nr; col++)
251 oper.
set(nr+nr_eq2, col) = 0 ;
252 oper.
set(nr+nr_eq2, nr) = 1 ;
253 for (
int col=nr+1; col<2*nr; col++)
254 oper.
set(nr+nr_eq2, col) = 0 ;
255 for (
int col=0; col<nr+1; col++)
256 oper.
set(nr+nr_eq2+1, col) = 0 ;
257 oper.
set(nr+nr_eq2+1, nr+1) = 1 ;
258 for (
int col=nr+2; col<2*nr; col++)
259 oper.
set(nr+nr_eq2+1, col) = 0 ;
267 for (
int i=0; i<nr; i++) {
268 sr.
set(i) = (*S_r.get_spectral_va().c_cf)(zone, k, j, i);
271 Tbl xsr= sr ;
Tbl x2sr= sr ;
272 Tbl xseta= seta ;
Tbl x2seta = seta ;
273 multx2_1d(nr, &x2sr.
t, base_r) ; multx_1d(nr, &xsr.
t, base_r) ;
274 multx2_1d(nr, &x2seta.
t, base_r) ; multx_1d(nr, &xseta.
t, base_r) ;
276 for (
int i=0; i<nr_eq1; i++)
277 sec_membre.
set(i) = alpha*(alpha*x2seta(i) + 2*beta*xseta(i))
279 sec_membre.
set(nr_eq1) = 0 ;
280 sec_membre.
set(nr_eq1+1) = 0 ;
281 for (
int i=0; i<nr_eq2; i++)
282 sec_membre.
set(i+nr) = beta*beta*sr(i)
283 + alpha*(alpha*x2sr(i) + 2*beta*xsr(i)) ;
284 sec_membre.
set(nr+nr_eq2) = 0 ;
285 sec_membre.
set(nr+nr_eq2+1) = 0 ;
290 for (
int i=0; i<nr; i++) {
291 sol_part_eta.
set(zone, k, j, i) = big_res(i) ;
292 sol_part_vr.
set(zone, k, j, i) = big_res(nr+i) ;
298 sec_membre.
set(nr_eq1) = 1 ;
299 big_res = oper.
inverse(sec_membre) ;
300 for (
int i=0 ; i<nr ; i++) {
301 sol_hom_un_eta.
set(zone, k, j, i) = big_res(i) ;
302 sol_hom_un_vr.
set(zone, k, j, i) = big_res(nr+i) ;
304 sec_membre.
set(nr_eq1) = 0 ;
305 sec_membre.
set(nr_eq1+1) = 1 ;
306 big_res = oper.
inverse(sec_membre) ;
307 for (
int i=0 ; i<nr ; i++) {
308 sol_hom_deux_eta.
set(zone, k, j, i) = big_res(i) ;
309 sol_hom_deux_vr.
set(zone, k, j, i) = big_res(nr+i) ;
311 sec_membre.
set(nr_eq1+1) = 0 ;
312 sec_membre.
set(nr+nr_eq2) = 1 ;
313 big_res = oper.
inverse(sec_membre) ;
314 for (
int i=0 ; i<nr ; i++) {
315 sol_hom_trois_eta.
set(zone, k, j, i) = big_res(i) ;
316 sol_hom_trois_vr.
set(zone, k, j, i) = big_res(nr+i) ;
318 sec_membre.
set(nr+nr_eq2) = 0 ;
319 sec_membre.
set(nr+nr_eq2+1) = 1 ;
320 big_res = oper.
inverse(sec_membre) ;
321 for (
int i=0 ; i<nr ; i++) {
322 sol_hom_quatre_eta.
set(zone, k, j, i) = big_res(i) ;
323 sol_hom_quatre_vr.
set(zone, k, j, i) = big_res(nr+i) ;
334 assert(nt == mg.
get_nt(nzm1)) ;
335 assert(np == mg.
get_np(nzm1)) ;
336 alpha = mpaff->
get_alpha()[nzm1] ; alp2 = alpha*alpha ;
341 for (
int k=0 ; k<np+1 ; k++) {
342 for (
int j=0 ; j<nt ; j++) {
344 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q != 0) ) {
346 int dege2 = (l_q == 1 ? 2 : 3);
347 int nr_eq1 = nr - dege1 ;
348 int nr_eq2 = nr - dege2 ;
358 for (
int lin=0; lin<nr_eq1; lin++) {
359 for (
int col=0; col<nr; col++)
361 = (md2(lin,col) - (lam+1)*l_q*(l_q+1)*ms2(lin,col))/alp2 ;
362 for (
int col=0; col<nr; col++)
363 oper.
set(lin,col+nr) =
364 (-lam*mxd(lin,col) + 2*(1+lam)*ms2(lin,col)) / alp2 ;
366 for (
int col=0; col<nr; col++)
367 oper.
set(nr_eq1, col) = 1 ;
368 for (
int col=nr; col<nrtot; col++)
369 oper.
set(nr_eq1, col) = 0 ;
371 for (
int col=0; col<nr; col++) {
372 oper.
set(nr_eq1+1, col) = pari*col*col ;
375 for (
int col=nr; col<nrtot; col++)
376 oper.
set(nr_eq1+1, col) = 0 ;
377 oper.
set(nr_eq1+2, 0) = 1 ;
378 for (
int col=1; col<nrtot; col++)
379 oper.
set(nr_eq1+2, col) = 0 ;
380 for (
int lin=0; lin<nr_eq2; lin++) {
381 for (
int col=0; col<nr; col++)
382 oper.
set(lin+nr,col) = (l_q*(l_q+1)*(lam*mxd(lin,col)
383 + (lam+2)*ms2(lin,col))) / alp2 ;
384 for (
int col=0; col<nr; col++)
385 oper.
set(lin+nr, col+nr) = ((lam+1)*md2(lin,col)
386 - (2*(lam+1) + l_q*(l_q+1))*ms2(lin,col)) / alp2 ;
388 for (
int col=0; col<nr; col++)
389 oper.
set(nr+nr_eq2, col) = 0 ;
390 for (
int col=nr; col<nrtot; col++)
391 oper.
set(nr+nr_eq2, col) = 1 ;
392 for (
int col=0; col<nr; col++)
393 oper.
set(nr+nr_eq2+1, col) = 0 ;
395 for (
int col=0; col<nr; col++) {
396 oper.
set(nr+nr_eq2+1, nr+col) = pari*col*col ;
400 for (
int col=0; col<nr; col++)
401 oper.
set(nr+nr_eq2+2, col) = 0 ;
402 oper.
set(nr+nr_eq2+2, nr) = 1 ;
403 for (
int col=nr+1; col<nrtot; col++)
404 oper.
set(nr+nr_eq2+2, col) = 0 ;
410 for (
int i=0; i<nr_eq1; i++)
412 for (
int i=nr_eq1; i<nr; i++)
413 sec_membre.
set(i) = 0 ;
414 for (
int i=0; i<nr_eq2; i++)
415 sec_membre.
set(i+nr) =(*S_r.get_spectral_va().c_cf)(nzm1, k, j, i);
416 for (
int i=nr_eq2; i<nr; i++)
417 sec_membre.
set(nr+i) = 0 ;
422 for (
int i=0; i<nr; i++) {
423 sol_part_eta.
set(nzm1, k, j, i) = big_res(i) ;
424 sol_part_vr.
set(nzm1, k, j, i) = big_res(i+nr) ;
430 Tbl sol_hom1 = solh(nr, 0, 0., base_r) ;
431 Tbl sol_hom2 = solh(nr, 2, 0., base_r) ;
432 double fac_eta = lam + 2. ;
433 double fac_vr = 2*lam + 2. ;
434 for (
int i=0 ; i<nr ; i++) {
435 sol_hom_deux_eta.
set(nzm1, k, j, i) = sol_hom2(i) ;
436 sol_hom_quatre_eta.
set(nzm1, k, j, i) = fac_eta*sol_hom1(i) ;
437 sol_hom_deux_vr.
set(nzm1, k, j, i) = -2*sol_hom2(i) ;
438 sol_hom_quatre_vr.
set(nzm1, k, j, i) = fac_vr*sol_hom1(i) ;
443 sec_membre.
set(nr-1) = 1 ;
444 big_res = oper.
inverse(sec_membre) ;
446 for (
int i=0; i<nr; i++) {
447 sol_hom_deux_eta.
set(nzm1, k, j, i) = big_res(i) ;
448 sol_hom_deux_vr.
set(nzm1, k, j, i) = big_res(nr+i) ;
450 sec_membre.
set(nr-1) = 0 ;
451 sec_membre.
set(2*nr-1) = 1 ;
452 big_res = oper.
inverse(sec_membre) ;
453 for (
int i=0; i<nr; i++) {
454 sol_hom_quatre_eta.
set(nzm1, k, j, i) = big_res(i) ;
455 sol_hom_quatre_vr.
set(nzm1, k, j, i) = big_res(nr+i) ;
476 int taille = 4*nzm1 -2 ;
477 Tbl sec_membre(taille) ;
478 Matrice systeme(taille, taille) ;
480 int ligne ;
int colonne ;
484 for (
int k=0 ; k<np+1 ; k++)
485 for (
int j=0 ; j<nt ; j++) {
487 if ((nullite_plm(j, nt, k, np, base) == 1)&&(l_q != 0)) {
502 systeme.
set(ligne, colonne)
504 systeme.
set(ligne, colonne+1)
506 systeme.
set(ligne, colonne+2)
508 systeme.
set(ligne, colonne+3)
519 for (
int i=0; i<nr; i++) {
520 systeme.
set(ligne, colonne)
521 -= neum_eta*pari*i*i*sol_hom_un_eta(zone1, k, j, i)/alpha ;
522 systeme.
set(ligne, colonne+1)
523 -= neum_eta*pari*i*i*sol_hom_deux_eta(zone1, k, j, i)/alpha ;
524 systeme.
set(ligne, colonne+2)
525 -= neum_eta*pari*i*i*sol_hom_trois_eta(zone1, k, j, i)/alpha ;
526 systeme.
set(ligne, colonne+3)
527 -= neum_eta*pari*i*i*sol_hom_quatre_eta(zone1, k, j, i)/alpha ;
528 sec_membre.
set(ligne)
529 += neum_eta*pari*i*i* sol_part_eta(zone1, k, j, i)/alpha ;
533 sec_membre.
set(ligne) -= (*bound_eta).val_in_bound_jk(1,j,k);
539 systeme.
set(ligne, colonne)
541 systeme.
set(ligne, colonne+1)
543 systeme.
set(ligne, colonne+2)
545 systeme.
set(ligne, colonne+3)
553 for (
int i=0; i<nr; i++) {
554 systeme.
set(ligne, colonne)
555 -= neum_vr*pari*i*i*sol_hom_un_vr(zone1, k, j, i)/alpha ;
556 systeme.
set(ligne, colonne+1)
557 -= neum_vr*pari*i*i*sol_hom_deux_vr(zone1, k, j, i)/alpha ;
558 systeme.
set(ligne, colonne+2)
559 -= neum_vr*pari*i*i*sol_hom_trois_vr(zone1, k, j, i)/alpha ;
560 systeme.
set(ligne, colonne+3)
561 -= neum_vr*pari*i*i*sol_hom_quatre_vr(zone1, k, j, i)/alpha ;
562 sec_membre.
set(ligne)
563 += neum_vr*pari*i*i* sol_part_vr(zone1, k, j, i)/alpha ;
567 sec_membre.
set(ligne) -= (*bound_vr).val_in_bound_jk(1,j,k);
575 systeme.
set(ligne, colonne)
577 systeme.
set(ligne, colonne+1)
579 systeme.
set(ligne, colonne+2)
581 systeme.
set(ligne, colonne+3)
586 systeme.
set(ligne, colonne)
588 systeme.
set(ligne, colonne+1)
590 systeme.
set(ligne, colonne+2)
592 systeme.
set(ligne, colonne+3)
599 for (
int i=0; i<nr; i++) {
600 systeme.
set(ligne, colonne)
601 += pari*i*i*sol_hom_un_eta(zone1, k, j, i)/alpha ;
602 systeme.
set(ligne, colonne+1)
603 += pari*i*i*sol_hom_deux_eta(zone1, k, j, i)/alpha ;
604 systeme.
set(ligne, colonne+2)
605 += pari*i*i*sol_hom_trois_eta(zone1, k, j, i)/alpha ;
606 systeme.
set(ligne, colonne+3)
607 += pari*i*i*sol_hom_quatre_eta(zone1, k, j, i)/alpha ;
608 sec_membre.
set(ligne)
609 -= pari*i*i* sol_part_eta(zone1, k, j, i)/alpha ;
615 for (
int i=0; i<nr; i++) {
616 systeme.
set(ligne, colonne)
617 += pari*i*i*sol_hom_un_vr(zone1, k, j, i)/alpha ;
618 systeme.
set(ligne, colonne+1)
619 += pari*i*i*sol_hom_deux_vr(zone1, k, j, i)/alpha ;
620 systeme.
set(ligne, colonne+2)
621 += pari*i*i*sol_hom_trois_vr(zone1, k, j, i)/alpha ;
622 systeme.
set(ligne, colonne+3)
623 += pari*i*i*sol_hom_quatre_vr(zone1, k, j, i)/alpha ;
624 sec_membre.
set(ligne)
625 -= pari*i*i* sol_part_vr(zone1, k, j, i)/alpha ;
632 cout <<
"WARNING!! Mapping must contain at least 2 shells!!" << endl;}
633 for (
int zone=2 ; zone<nzm1 ; zone++) {
638 systeme.
set(ligne, colonne)
640 systeme.
set(ligne, colonne+1)
642 systeme.
set(ligne, colonne+2)
644 systeme.
set(ligne, colonne+3)
649 systeme.
set(ligne, colonne)
651 systeme.
set(ligne, colonne+1)
653 systeme.
set(ligne, colonne+2)
655 systeme.
set(ligne, colonne+3)
662 for (
int i=0; i<nr; i++) {
663 systeme.
set(ligne, colonne)
664 -= pari*i*i*sol_hom_un_eta(zone, k, j, i)/alpha ;
665 systeme.
set(ligne, colonne+1)
666 -= pari*i*i*sol_hom_deux_eta(zone, k, j, i)/alpha ;
667 systeme.
set(ligne, colonne+2)
668 -= pari*i*i*sol_hom_trois_eta(zone, k, j, i)/alpha ;
669 systeme.
set(ligne, colonne+3)
670 -= pari*i*i*sol_hom_quatre_eta(zone, k, j, i)/alpha ;
671 sec_membre.
set(ligne)
672 += pari*i*i* sol_part_eta(zone, k, j, i)/alpha ;
678 for (
int i=0; i<nr; i++) {
679 systeme.
set(ligne, colonne)
680 -= pari*i*i*sol_hom_un_vr(zone, k, j, i)/alpha ;
681 systeme.
set(ligne, colonne+1)
682 -= pari*i*i*sol_hom_deux_vr(zone, k, j, i)/alpha ;
683 systeme.
set(ligne, colonne+2)
684 -= pari*i*i*sol_hom_trois_vr(zone, k, j, i)/alpha ;
685 systeme.
set(ligne, colonne+3)
686 -= pari*i*i*sol_hom_quatre_vr(zone, k, j, i)/alpha ;
687 sec_membre.
set(ligne)
688 += pari*i*i* sol_part_vr(zone, k, j, i)/alpha ;
693 systeme.
set(ligne, colonne)
695 systeme.
set(ligne, colonne+1)
697 systeme.
set(ligne, colonne+2)
699 systeme.
set(ligne, colonne+3)
704 systeme.
set(ligne, colonne)
706 systeme.
set(ligne, colonne+1)
708 systeme.
set(ligne, colonne+2)
710 systeme.
set(ligne, colonne+3)
717 for (
int i=0; i<nr; i++) {
718 systeme.
set(ligne, colonne)
719 += pari*i*i*sol_hom_un_eta(zone, k, j, i)/alpha ;
720 systeme.
set(ligne, colonne+1)
721 += pari*i*i*sol_hom_deux_eta(zone, k, j, i)/alpha ;
722 systeme.
set(ligne, colonne+2)
723 += pari*i*i*sol_hom_trois_eta(zone, k, j, i)/alpha ;
724 systeme.
set(ligne, colonne+3)
725 += pari*i*i*sol_hom_quatre_eta(zone, k, j, i)/alpha ;
726 sec_membre.
set(ligne)
727 -= pari*i*i* sol_part_eta(zone, k, j, i)/alpha ;
733 for (
int i=0; i<nr; i++) {
734 systeme.
set(ligne, colonne)
735 += pari*i*i*sol_hom_un_vr(zone, k, j, i)/alpha ;
736 systeme.
set(ligne, colonne+1)
737 += pari*i*i*sol_hom_deux_vr(zone, k, j, i)/alpha ;
738 systeme.
set(ligne, colonne+2)
739 += pari*i*i*sol_hom_trois_vr(zone, k, j, i)/alpha ;
740 systeme.
set(ligne, colonne+3)
741 += pari*i*i*sol_hom_quatre_vr(zone, k, j, i)/alpha ;
742 sec_membre.
set(ligne)
743 -= pari*i*i* sol_part_vr(zone, k, j, i)/alpha ;
755 systeme.
set(ligne, colonne)
757 systeme.
set(ligne, colonne+1)
761 systeme.
set(ligne+1, colonne)
763 systeme.
set(ligne+1, colonne+1)
770 for (
int i=0; i<nr; i++) {
771 systeme.
set(ligne, colonne)
772 -= 4*alpha*pari*i*i*sol_hom_deux_eta(nzm1, k, j, i) ;
773 systeme.
set(ligne, colonne+1)
774 -= 4*alpha*pari*i*i*sol_hom_quatre_eta(nzm1, k, j, i) ;
775 sec_membre.
set(ligne)
776 += 4*alpha*pari*i*i* sol_part_eta(nzm1, k, j, i) ;
782 for (
int i=0; i<nr; i++) {
783 systeme.
set(ligne, colonne)
784 -= 4*alpha*pari*i*i*sol_hom_deux_vr(nzm1, k, j, i) ;
785 systeme.
set(ligne, colonne+1)
786 -= 4*alpha*pari*i*i*sol_hom_quatre_vr(nzm1, k, j, i) ;
787 sec_membre.
set(ligne)
788 += 4*alpha*pari*i*i* sol_part_vr(nzm1, k, j, i) ;
803 for (
int i=0 ; i<nr ; i++) {
804 cf_eta.
set(0, k, j, i) = 0.;
805 cf_vr.
set(0, k, j, i) = 0.;
808 for (
int zone=1 ; zone<nzm1 ; zone++) {
810 for (
int i=0 ; i<nr ; i++) {
811 cf_eta.
set(zone, k, j, i) =
812 sol_part_eta(zone, k, j, i)
813 +facteurs(conte)*sol_hom_un_eta(zone, k, j, i)
814 +facteurs(conte+1)*sol_hom_deux_eta(zone, k, j, i)
815 +facteurs(conte+2)*sol_hom_trois_eta(zone, k, j, i)
816 +facteurs(conte+3)*sol_hom_quatre_eta(zone, k, j, i) ;
817 cf_vr.
set(zone, k, j, i) = sol_part_vr(zone, k, j, i)
818 +facteurs(conte)*sol_hom_un_vr(zone, k, j, i)
819 +facteurs(conte+1)*sol_hom_deux_vr(zone, k, j, i)
820 +facteurs(conte+2)*sol_hom_trois_vr(zone, k, j, i)
821 +facteurs(conte+3)*sol_hom_quatre_vr(zone, k, j, i) ;
826 for (
int i=0 ; i<nr ; i++) {
827 cf_eta.
set(nzm1, k, j, i) = sol_part_eta(nzm1, k, j, i)
828 +facteurs(conte)*sol_hom_deux_eta(nzm1, k, j, i)
829 +facteurs(conte+1)*sol_hom_quatre_eta(nzm1, k, j, i) ;
830 cf_vr.
set(nzm1, k, j, i) = sol_part_vr(nzm1, k, j, i)
831 +facteurs(conte)*sol_hom_deux_vr(nzm1, k, j, i)
832 +facteurs(conte+1)*sol_hom_quatre_vr(nzm1, k, j, i) ;
852 resu.
set_vr_eta_mu(vr, het,
mu().sol_elliptic_boundary(param_mu, (*bound_mu), dir_mu , neum_mu)) ;
const Base_val & get_spectral_base() const
Returns the spectral bases of the Valeur va.
void poisson_boundary2(double lam, Vector &resu, Scalar boundvr, Scalar boundeta, Scalar boundmu, double dir_vr, double neum_vr, double dir_eta, double neum_eta, double dir_mu, double neum_mu) const
Alternative to previous poisson_boundary method for vectors ; this uses method 6 for vectorial solvin...
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
Class for the elementary differential operator (see the base class Diff ).
const double * get_alpha() const
Returns the pointer on the array alpha.
void ylm_i()
Inverse of ylm()
int get_np(int l) const
Returns the number of points in the azimuthal direction ( ) in domain no. l.
void set_etat_cf_qcq()
Sets the logical state to ETATQCQ (ordinary state) for values in the configuration space (Mtbl_cf c_c...
void give_quant_numbers(int, int, int, int &, int &, int &) const
Computes the various quantum numbers and 1d radial base.
void set_lu() const
Calculate the LU-representation, assuming the band-storage has been done.
Tbl & set(int l)
Read/write of the Tbl containing the coefficients in a given domain.
Tbl inverse(const Tbl &sec_membre) const
Solves the linear system represented by the matrix.
void ylm()
Computes the coefficients of *this.
const Mg3d * get_mg() const
Gives the Mg3d on which the mapping is defined.
double & set(int i)
Read/write of a particular element (index i) (1D case)
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
Tensor field of valence 0 (or component of a tensorial field).
virtual void std_spectral_base()
Sets the spectral bases of the Valeur va to the standard ones for a scalar field. ...
const Base_vect * triad
Vectorial basis (triad) with respect to which the tensor components are defined.
Class for the elementary differential operator (see the base class Diff ).
int get_etat() const
Returns the logical state ETATNONDEF (undefined), ETATZERO (null) or ETATQCQ (ordinary).
virtual void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Tensor field of valence 1.
void set_dzpuis(int)
Modifies the dzpuis flag.
double val_out_bound_jk(int l, int j, int k) const
Computes the angular coefficient of index j,k of the field represented by *this at by means of the s...
void annule_hard()
Sets the Scalar to zero in a hard way.
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Class for the elementary differential operator Identity (see the base class Diff ).
double val_in_bound_jk(int l, int j, int k) const
Computes the angular coefficient of index j,k of the field represented by *this at by means of the s...
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
Class for the elementary differential operator (see the base class Diff ).
Class for the elementary differential operator division by (see the base class Diff )...
virtual const Scalar & eta() const
Gives the field such that the angular components of the vector are written: .
Base_val base
Bases on which the spectral expansion is performed.
void set_vr_eta_mu(const Scalar &vr_i, const Scalar &eta_i, const Scalar &mu_i)
Defines the components through potentials and (see members p_eta and p_mu ), as well as the compon...
Scalar ** cmp
Array of size n_comp of pointers onto the components.
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
double * t
The array of double.
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
const double * get_beta() const
Returns the pointer on the array beta.
Scalar sol_elliptic_boundary(Param_elliptic ¶ms, const Mtbl_cf &bound, double fact_dir, double fact_neu) const
Resolution of a general elliptic equation, putting zero at infinity and with inner boundary condition...
int get_nzone() const
Returns the number of domains.
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
Class for the elementary differential operator (see the base class Diff ).
void annule_hard()
Sets the logical state to ETATQCQ (undefined state).
This class contains the parameters needed to call the general elliptic solver.
double & set(int j, int i)
Read/write of a particuliar element.
Spherical orthonormal vectorial bases (triads).
void set_spectral_base(const Base_val &)
Sets the spectral bases of the Valeur va
int get_nr(int l) const
Returns the number of points in the radial direction ( ) in domain no. l.
Bases of the spectral expansions.
void annule_hard()
Sets the Mtbl_cf to zero in a hard way.
Class for the elementary differential operator (see the base class Diff ).
Coefficients storage for the multi-domain spectral method.
virtual const Scalar & mu() const
Gives the field such that the angular components of the vector are written: .
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Class for the elementary differential operator (see the base class Diff ).
int get_nt(int l) const
Returns the number of points in the co-latitude direction ( ) in domain no. l.
Valeur & set_spectral_va()
Returns va (read/write version)
int get_type_r(int l) const
Returns the type of sampling in the radial direction in domain no.
const Map *const mp
Mapping on which the numerical values at the grid points are defined.
void annule_hard()
Sets the Tbl to zero in a hard way.
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
const Valeur & get_spectral_va() const
Returns va (read only version)
void set_poisson_vect_r(int zone, bool only_l_zero=false)
Sets the operator to in all domains, for ; and to in all domains otherwise.