86 const Param* par_bc)
const {
89 assert(mp_aff != 0x0) ;
98 assert(aaa.
get_etat() != ETATNONDEF) ;
101 bool ced = (mgrid.
get_type_r(nzm1) == UNSURR) ;
102 int n_shell = ced ? nz-2 : nzm1 ;
106 n_shell = (nz_bc < n_shell ? nz_bc : n_shell) ;
107 bool cedbc = (ced && (nz_bc == nzm1)) ;
110 assert(par_bc != 0x0) ;
114 int nt = mgrid.
get_nt(0) ;
115 int np = mgrid.
get_np(0) ;
143 int l_q, m_q, base_r ;
149 int nr = mgrid.
get_nr(lz) ;
154 for (
int k=0 ; k<np+1 ; k++) {
155 for (
int j=0 ; j<nt ; j++) {
158 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
162 for (
int lin=0; lin<nr; lin++)
163 for (
int col=0; col<nr; col++)
164 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
165 for (
int lin=0; lin<nr; lin++)
166 for (
int col=0; col<nr; col++)
167 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*ms(lin,col) ;
168 for (
int lin=0; lin<nr; lin++)
169 for (
int col=0; col<nr; col++)
170 ope.
set(lin+nr,col) = -ms(lin,col) ;
171 for (
int lin=0; lin<nr; lin++)
172 for (
int col=0; col<nr; col++)
173 ope.
set(lin+nr,col+nr) = md(lin,col) ;
177 for (
int col=0; col<2*nr; col++)
178 ope.
set(ind1+nr-2, col) = 0 ;
179 for (
int col=0; col<2*nr; col++) {
180 ope.
set(nr-1, col) = 0 ;
181 ope.
set(2*nr-1, col) = 0 ;
185 for (
int col=0; col<nr; col++) {
186 ope.
set(nr-1, col) = pari ;
187 ope.
set(2*nr-1, col+nr) = pari ;
192 ope.
set(nr-1, nr-1) = 1 ;
193 ope.
set(2*nr-1, 2*nr-1) = 1 ;
195 ope.
set(ind1+nr-2, ind1) = 1 ;
200 for (
int lin=0; lin<nr; lin++)
202 for (
int lin=0; lin<nr; lin++)
205 sec.
set(2*nr-1) = 0 ;
206 sec.
set(ind1+nr-2) = 0 ;
208 for (
int i=0; i<nr; i++) {
209 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
210 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
213 sec.
set(ind1+nr-2) = 1 ;
215 for (
int i=0; i<nr; i++) {
216 sol_hom2_mu.
set(lz, k, j, i) = sol(i) ;
217 sol_hom2_x.
set(lz, k, j, i) = sol(i+nr) ;
228 for (
int lz=1; lz <= n_shell; lz++) {
229 int nr = mgrid.
get_nr(lz) ;
230 assert(mgrid.
get_nt(lz) == nt) ;
231 assert(mgrid.
get_np(lz) == np) ;
233 double ech = mp_aff->
get_beta()[lz] / alpha ;
237 for (
int k=0 ; k<np+1 ; k++) {
238 for (
int j=0 ; j<nt ; j++) {
241 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
246 for (
int lin=0; lin<nr; lin++)
247 for (
int col=0; col<nr; col++)
248 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
250 for (
int lin=0; lin<nr; lin++)
251 for (
int col=0; col<nr; col++)
252 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*mid(lin,col) ;
253 for (
int lin=0; lin<nr; lin++)
254 for (
int col=0; col<nr; col++)
255 ope.
set(lin+nr,col) = -mid(lin,col) ;
256 for (
int lin=0; lin<nr; lin++)
257 for (
int col=0; col<nr; col++)
258 ope.
set(lin+nr,col+nr) = mxd(lin,col) + ech*md(lin,col) ;
262 for (
int col=0; col<2*nr; col++) {
263 ope.
set(ind0+nr-1, col) = 0 ;
264 ope.
set(ind1+nr-1, col) = 0 ;
266 ope.
set(ind0+nr-1, ind0) = 1 ;
267 ope.
set(ind1+nr-1, ind1) = 1 ;
273 for (
int lin=0; lin<nr; lin++)
275 for (
int lin=0; lin<nr; lin++)
278 sec.
set(ind0+nr-1) = 0 ;
279 sec.
set(ind1+nr-1) = 0 ;
281 for (
int i=0; i<nr; i++) {
282 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
283 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
286 sec.
set(ind0+nr-1) = 1 ;
288 for (
int i=0; i<nr; i++) {
289 sol_hom1_mu.
set(lz, k, j, i) = sol(i) ;
290 sol_hom1_x.
set(lz, k, j, i) = sol(i+nr) ;
292 sec.
set(ind0+nr-1) = 0 ;
293 sec.
set(ind1+nr-1) = 1 ;
295 for (
int i=0; i<nr; i++) {
296 sol_hom2_mu.
set(lz, k, j, i) = sol(i) ;
297 sol_hom2_x.
set(lz, k, j, i) = sol(i+nr) ;
307 if (cedbc) {
int lz = nzm1 ;
308 int nr = mgrid.
get_nr(lz) ;
309 assert(mgrid.
get_nt(lz) == nt) ;
310 assert(mgrid.
get_np(lz) == np) ;
315 for (
int k=0 ; k<np+1 ; k++) {
316 for (
int j=0 ; j<nt ; j++) {
319 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
323 for (
int lin=0; lin<nr; lin++)
324 for (
int col=0; col<nr; col++)
325 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
326 for (
int lin=0; lin<nr; lin++)
327 for (
int col=0; col<nr; col++)
328 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*ms(lin,col) ;
329 for (
int lin=0; lin<nr; lin++)
330 for (
int col=0; col<nr; col++)
331 ope.
set(lin+nr,col) = -ms(lin,col) ;
332 for (
int lin=0; lin<nr; lin++)
333 for (
int col=0; col<nr; col++)
334 ope.
set(lin+nr,col+nr) = -md(lin,col) ;
339 for (
int col=0; col<2*nr; col++) {
340 ope.
set(ind0+nr-1, col) = 0 ;
341 ope.
set(ind1+nr-2, col) = 0 ;
342 ope.
set(ind1+nr-1, col) = 0 ;
344 for (
int col=0; col<nr; col++) {
345 ope.
set(ind0+nr-1, col+ind0) = 1 ;
346 ope.
set(ind1+nr-1, col+ind1) = 1 ;
348 ope.
set(ind1+nr-2, ind1+1) = 1 ;
354 for (
int lin=0; lin<nr; lin++)
356 for (
int lin=0; lin<nr; lin++)
359 sec.
set(ind0+nr-1) = 0 ;
360 sec.
set(ind1+nr-2) = 0 ;
361 sec.
set(ind1+nr-1) = 0 ;
363 for (
int i=0; i<nr; i++) {
364 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
365 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
368 sec.
set(ind1+nr-2) = 1 ;
370 for (
int i=0; i<nr; i++) {
371 sol_hom1_mu.
set(lz, k, j, i) = sol(i) ;
372 sol_hom1_x.
set(lz, k, j, i) = sol(i+nr) ;
383 int taille = 2*nz_bc + 1;
384 if (cedbc) taille-- ;
388 Tbl sec_membre(taille) ;
389 Matrice systeme(taille, taille) ;
390 int ligne ;
int colonne ;
393 double c_mu = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(0) ) ;
394 double d_mu = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(1) ) ;
395 double c_x = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(2) ) ;
396 double d_x = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(3) ) ;
397 Mtbl_cf dhom1_mu = sol_hom1_mu ;
398 Mtbl_cf dhom2_mu = sol_hom2_mu ;
399 Mtbl_cf dpart_mu = sol_part_mu ;
414 for (
int k=0 ; k<np+1 ; k++)
415 for (
int j=0 ; j<nt ; j++) {
417 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
424 int nr = mgrid.
get_nr(0) ;
436 for (
int zone=1 ; zone<nz_bc ; zone++) {
441 systeme.
set(ligne, colonne) =
443 systeme.
set(ligne, colonne+1) =
449 systeme.
set(ligne, colonne) =
451 systeme.
set(ligne, colonne+1) =
458 systeme.
set(ligne, colonne) =
460 systeme.
set(ligne, colonne+1) =
466 systeme.
set(ligne, colonne) =
468 systeme.
set(ligne, colonne+1) =
477 nr = mgrid.
get_nr(nz_bc) ;
478 double alpha = mp_aff->
get_alpha()[nz_bc] ;
483 systeme.
set(ligne, colonne) =
485 if (!cedbc) systeme.
set(ligne, colonne+1) =
491 systeme.
set(ligne, colonne) =
493 if (!cedbc) systeme.
set(ligne, colonne+1) =
501 systeme.
set(ligne, colonne) =
511 systeme.
set(ligne, colonne+1) =
534 for (
int i=0 ; i<nr ; i++) {
535 mmu.
set(0, k, j, i) = sol_part_mu(0, k, j, i)
536 + facteur(conte)*sol_hom2_mu(0, k, j, i) ;
537 mw.
set(0, k, j, i) = sol_part_x(0, k, j, i)
538 + facteur(conte)*sol_hom2_x(0, k, j, i) ;
541 for (
int zone=1 ; zone<=n_shell ; zone++) {
543 for (
int i=0 ; i<nr ; i++) {
544 mmu.
set(zone, k, j, i) = sol_part_mu(zone, k, j, i)
545 + facteur(conte)*sol_hom1_mu(zone, k, j, i)
546 + facteur(conte+1)*sol_hom2_mu(zone, k, j, i) ;
548 mw.
set(zone, k, j, i) = sol_part_x(zone, k, j, i)
549 + facteur(conte)*sol_hom1_x(zone, k, j, i)
550 + facteur(conte+1)*sol_hom2_x(zone, k, j, i) ;
556 for (
int i=0 ; i<nr ; i++) {
557 mmu.
set(nzm1, k, j, i) = sol_part_mu(nzm1, k, j, i)
558 + facteur(conte)*sol_hom1_mu(nzm1, k, j, i) ;
560 mw.
set(nzm1, k, j, i) = sol_part_x(nzm1, k, j, i)
561 + facteur(conte)*sol_hom1_x(nzm1, k, j, i) ;
591 assert(mp_aff != 0x0) ;
603 bool ced = (mgrid.
get_type_r(nzm1) == UNSURR) ;
604 int n_shell = ced ? nz-2 : nzm1 ;
609 n_shell = (nz_bc < n_shell ? nz_bc : n_shell) ;
610 bool cedbc = (ced && (nz_bc == nzm1)) ;
613 assert(par_bc != 0x0) ;
617 int nt = mgrid.
get_nt(0) ;
618 int np = mgrid.
get_np(0) ;
620 assert (tilde_b.
get_etat() != ETATNONDEF) ;
621 assert (hh.
get_etat() != ETATNONDEF) ;
624 Scalar source_coq = tilde_b ;
629 source.set_spectral_va().ylm() ;
631 bool bnull = (tilde_b.
get_etat() == ETATZERO) ;
636 hoverr.set_spectral_va().ylm() ;
644 bool hnull = (hh.
get_etat() == ETATZERO) ;
646 Base_val base = (bnull ? hoverr.get_spectral_base() : source.get_spectral_base()) ;
650 bool need_calculation = true ;
651 if (par_mat != 0x0) {
652 bool param_new = false ;
657 if (par_mat->
get_int_mod(0) < nz_bc) param_new =
true ;
658 if (par_mat->
get_int_mod(1) != lmax) param_new =
true ;
664 for (
int l=1; l<= n_shell; l++) {
667 mp_aff->
get_alpha()[l]) > 2.e-15) param_new = true ;
680 int* nz_bc_new =
new int(nz_bc) ;
682 int* lmax_new =
new int(lmax) ;
684 int* type_t_new =
new int(mgrid.
get_type_t()) ;
686 int* type_p_new =
new int(mgrid.
get_type_p()) ;
691 for (
int l=0; l<nz; l++)
693 Tbl* palpha =
new Tbl(nz) ;
697 for (
int l=1; l<nzm1; l++)
701 else need_calculation = false ;
733 int l_q, m_q, base_r ;
734 Itbl mat_done(lmax) ;
740 int nr = mgrid.
get_nr(lz) ;
744 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
746 for (
int k=0 ; k<np+1 ; k++) {
747 for (
int j=0 ; j<nt ; j++) {
750 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
751 if (need_calculation) {
756 for (
int lin=0; lin<nr; lin++)
757 for (
int col=0; col<nr; col++)
758 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
759 for (
int lin=0; lin<nr; lin++)
760 for (
int col=0; col<nr; col++)
761 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
762 for (
int lin=0; lin<nr; lin++)
763 for (
int col=0; col<nr; col++)
764 ope.
set(lin,col+2*nr) = 0 ;
765 for (
int lin=0; lin<nr; lin++)
766 for (
int col=0; col<nr; col++)
767 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
768 for (
int lin=0; lin<nr; lin++)
769 for (
int col=0; col<nr; col++)
770 ope.
set(lin+nr,col+nr) = md(lin,col) + 3*ms(lin,col) ;
771 for (
int lin=0; lin<nr; lin++)
772 for (
int col=0; col<nr; col++)
773 ope.
set(lin+nr,col+2*nr) = (2. - l_q*(l_q+1))*ms(lin,col) ;
774 for (
int lin=0; lin<nr; lin++)
775 for (
int col=0; col<nr; col++)
776 ope.
set(lin+2*nr,col) = -0.5*md(lin,col)/double(l_q+1)
777 - 0.5*double(l_q+4)/double(l_q+1)*ms(lin,col) ;
778 for (
int lin=0; lin<nr; lin++)
779 for (
int col=0; col<nr; col++)
780 ope.
set(lin+2*nr,col+nr) = -2*ms(lin,col) ;
781 for (
int lin=0; lin<nr; lin++)
782 for (
int col=0; col<nr; col++)
783 ope.
set(lin+2*nr,col+2*nr) = (l_q+2)*md(lin,col)
784 + l_q*(l_q+2)*ms(lin,col) ;
787 for (
int col=0; col<3*nr; col++)
788 if (l_q>2) ope.
set(ind2+nr-2, col) = 0 ;
789 for (
int col=0; col<3*nr; col++) {
790 ope.
set(nr-1, col) = 0 ;
791 ope.
set(2*nr-1, col) = 0 ;
792 ope.
set(3*nr-1, col) = 0 ;
796 for (
int col=0; col<nr; col++) {
797 ope.
set(nr-1, col) = pari ;
798 ope.
set(2*nr-1, col+nr) = pari ;
799 ope.
set(3*nr-1, col+2*nr) = pari ;
804 ope.
set(nr-1, nr-1) = 1 ;
805 ope.
set(2*nr-1, 2*nr-1) = 1 ;
806 ope.
set(3*nr-1, 3*nr-1) = 1 ;
809 ope.
set(ind2+nr-2, ind2) = 1 ;
812 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
815 mat_done.
set(l_q) = 1 ;
819 const Matrice& oper = (par_mat == 0x0 ? ope :
824 for (
int lin=0; lin<2*nr; lin++)
826 for (
int lin=0; lin<nr; lin++)
827 sec.
set(2*nr+lin) = (*source.get_spectral_va().c_cf)
831 for (
int lin=0; lin<nr; lin++)
832 sec.
set(lin) = (*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ;
833 for (
int lin=0; lin<nr; lin++)
834 sec.
set(lin+nr) = -0.5*(*hoverr.get_spectral_va().c_cf)
837 for (
int lin=0; lin<nr; lin++)
838 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
840 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ) ;
843 for (
int lin=0; lin<nr; lin++)
844 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
846 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) )
847 + (*source.get_spectral_va().c_cf)(lz, k, j, lin) ;
850 if (l_q>2) sec.
set(ind2+nr-2) = 0 ;
851 sec.
set(3*nr-1) = 0 ;
853 for (
int i=0; i<nr; i++) {
854 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
855 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
856 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
860 sec.
set(ind2+nr-2) = 1 ;
869 for (
int i=0; i<nr; i++) {
870 sol_hom3_hrr.
set(lz, k, j, i) = sol(i) ;
871 sol_hom3_eta.
set(lz, k, j, i) = sol(i+nr) ;
872 sol_hom3_w.
set(lz, k, j, i) = sol(i+2*nr) ;
883 for (
int lz=1; lz<= n_shell; lz++) {
884 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
885 int nr = mgrid.
get_nr(lz) ;
890 double ech = mp_aff->
get_beta()[lz] / alpha ;
893 for (
int k=0 ; k<np+1 ; k++) {
894 for (
int j=0 ; j<nt ; j++) {
897 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
898 if (need_calculation) {
904 for (
int lin=0; lin<nr; lin++)
905 for (
int col=0; col<nr; col++)
906 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
908 for (
int lin=0; lin<nr; lin++)
909 for (
int col=0; col<nr; col++)
910 ope.
set(lin,col+nr) = -l_q*(l_q+1)*mid(lin,col) ;
911 for (
int lin=0; lin<nr; lin++)
912 for (
int col=0; col<nr; col++)
913 ope.
set(lin,col+2*nr) = 0 ;
914 for (
int lin=0; lin<nr; lin++)
915 for (
int col=0; col<nr; col++)
916 ope.
set(lin+nr,col) = -0.5*mid(lin,col) ;
917 for (
int lin=0; lin<nr; lin++)
918 for (
int col=0; col<nr; col++)
919 ope.
set(lin+nr,col+nr) = mxd(lin,col) + ech*md(lin,col)
921 for (
int lin=0; lin<nr; lin++)
922 for (
int col=0; col<nr; col++)
923 ope.
set(lin+nr,col+2*nr) = (2. - l_q*(l_q+1))*mid(lin,col) ;
924 for (
int lin=0; lin<nr; lin++)
925 for (
int col=0; col<nr; col++)
926 ope.
set(lin+2*nr,col) =
927 -0.5/double(l_q+1)*(mxd(lin,col) + ech*md(lin,col)
928 + double(l_q+4)*mid(lin,col)) ;
929 for (
int lin=0; lin<nr; lin++)
930 for (
int col=0; col<nr; col++)
931 ope.
set(lin+2*nr,col+nr) = -2*mid(lin,col) ;
932 for (
int lin=0; lin<nr; lin++)
933 for (
int col=0; col<nr; col++)
934 ope.
set(lin+2*nr,col+2*nr) =
935 double(l_q+2)*(mxd(lin,col) + ech*md(lin,col)
936 + l_q*mid(lin,col)) ;
937 for (
int col=0; col<3*nr; col++) {
938 ope.
set(ind0+nr-1, col) = 0 ;
939 ope.
set(ind1+nr-1, col) = 0 ;
940 ope.
set(ind2+nr-1, col) = 0 ;
942 ope.
set(ind0+nr-1, ind0) = 1 ;
943 ope.
set(ind1+nr-1, ind1) = 1 ;
944 ope.
set(ind2+nr-1, ind2) = 1 ;
947 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
950 mat_done.
set(l_q) = 1 ;
953 const Matrice& oper = (par_mat == 0x0 ? ope :
958 for (
int lin=0; lin<2*nr; lin++)
960 for (
int lin=0; lin<nr; lin++)
965 for (
int lin=0; lin<nr; lin++)
967 for (
int lin=0; lin<nr; lin++)
971 for (
int lin=0; lin<nr; lin++)
972 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
977 for (
int lin=0; lin<nr; lin++)
978 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
984 sec.
set(ind0+nr-1) = 0 ;
985 sec.
set(ind1+nr-1) = 0 ;
986 sec.
set(ind2+nr-1) = 0 ;
988 for (
int i=0; i<nr; i++) {
989 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
990 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
991 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
994 sec.
set(ind0+nr-1) = 1 ;
996 for (
int i=0; i<nr; i++) {
997 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
998 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
999 sol_hom1_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1001 sec.
set(ind0+nr-1) = 0 ;
1002 sec.
set(ind1+nr-1) = 1 ;
1004 for (
int i=0; i<nr; i++) {
1005 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1006 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1007 sol_hom2_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1009 sec.
set(ind1+nr-1) = 0 ;
1010 sec.
set(ind2+nr-1) = 1 ;
1012 for (
int i=0; i<nr; i++) {
1013 sol_hom3_hrr.
set(lz, k, j, i) = sol(i) ;
1014 sol_hom3_eta.
set(lz, k, j, i) = sol(i+nr) ;
1015 sol_hom3_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1025 if (cedbc) {
int lz = nzm1 ;
1026 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1027 int nr = mgrid.
get_nr(lz) ;
1031 double alpha = mp_aff->
get_alpha()[lz] ;
1034 for (
int k=0 ; k<np+1 ; k++) {
1035 for (
int j=0 ; j<nt ; j++) {
1038 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
1039 if (need_calculation) {
1044 for (
int lin=0; lin<nr; lin++)
1045 for (
int col=0; col<nr; col++)
1046 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
1047 for (
int lin=0; lin<nr; lin++)
1048 for (
int col=0; col<nr; col++)
1049 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1050 for (
int lin=0; lin<nr; lin++)
1051 for (
int col=0; col<nr; col++)
1052 ope.
set(lin,col+2*nr) = 0 ;
1053 for (
int lin=0; lin<nr; lin++)
1054 for (
int col=0; col<nr; col++)
1055 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
1056 for (
int lin=0; lin<nr; lin++)
1057 for (
int col=0; col<nr; col++)
1058 ope.
set(lin+nr,col+nr) = -md(lin,col) + 3*ms(lin,col) ;
1059 for (
int lin=0; lin<nr; lin++)
1060 for (
int col=0; col<nr; col++)
1061 ope.
set(lin+nr,col+2*nr) = (2. - l_q*(l_q+1))*ms(lin,col) ;
1062 for (
int lin=0; lin<nr; lin++)
1063 for (
int col=0; col<nr; col++)
1064 ope.
set(lin+2*nr,col) = 0.5*md(lin,col)/double(l_q+1)
1065 - 0.5*double(l_q+4)/double(l_q+1)*ms(lin,col) ;
1066 for (
int lin=0; lin<nr; lin++)
1067 for (
int col=0; col<nr; col++)
1068 ope.
set(lin+2*nr,col+nr) = -2*ms(lin,col) ;
1069 for (
int lin=0; lin<nr; lin++)
1070 for (
int col=0; col<nr; col++)
1071 ope.
set(lin+2*nr,col+2*nr) = -(l_q+2)*md(lin,col)
1072 + l_q*(l_q+2)*ms(lin,col) ;
1074 for (
int col=0; col<3*nr; col++) {
1075 ope.
set(ind0+nr-2, col) = 0 ;
1076 ope.
set(ind0+nr-1, col) = 0 ;
1077 ope.
set(ind1+nr-2, col) = 0 ;
1078 ope.
set(ind1+nr-1, col) = 0 ;
1079 ope.
set(ind2+nr-1, col) = 0 ;
1081 for (
int col=0; col<nr; col++) {
1082 ope.
set(ind0+nr-1, col+ind0) = 1 ;
1083 ope.
set(ind1+nr-1, col+ind1) = 1 ;
1084 ope.
set(ind2+nr-1, col+ind2) = 1 ;
1086 ope.
set(ind0+nr-2, ind0+1) = 1 ;
1087 ope.
set(ind1+nr-2, ind1+2) = 1 ;
1090 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1093 mat_done.
set(l_q) = 1 ;
1096 const Matrice& oper = (par_mat == 0x0 ? ope :
1102 for (
int lin=0; lin<2*nr; lin++)
1104 for (
int lin=0; lin<nr; lin++)
1105 sec.
set(2*nr+lin) = (*source.get_spectral_va().c_cf)
1109 for (
int lin=0; lin<nr; lin++)
1110 sec.
set(lin) = (*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ;
1111 for (
int lin=0; lin<nr; lin++)
1112 sec.
set(lin+nr) = -0.5*(*hoverr.get_spectral_va().c_cf)
1115 for (
int lin=0; lin<nr; lin++)
1116 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
1118 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ) ;
1121 for (
int lin=0; lin<nr; lin++)
1122 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
1124 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) )
1125 + (*source.get_spectral_va().c_cf)(lz, k, j, lin) ;
1128 sec.
set(ind0+nr-2) = 0 ;
1129 sec.
set(ind0+nr-1) = 0 ;
1130 sec.
set(ind1+nr-1) = 0 ;
1131 sec.
set(ind1+nr-2) = 0 ;
1132 sec.
set(ind2+nr-1) = 0 ;
1134 for (
int i=0; i<nr; i++) {
1135 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1136 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1137 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1140 sec.
set(ind0+nr-2) = 1 ;
1142 for (
int i=0; i<nr; i++) {
1143 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1144 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1145 sol_hom1_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1147 sec.
set(ind0+nr-2) = 0 ;
1148 sec.
set(ind1+nr-2) = 1 ;
1150 for (
int i=0; i<nr; i++) {
1151 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1152 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1153 sol_hom2_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1160 int taille = 3*nz_bc + 1 ;
1161 if (cedbc) taille-- ;
1166 Tbl sec_membre(taille) ;
1167 Matrice systeme(taille, taille) ;
1168 int ligne ;
int colonne ;
1171 double chrr = (cedbc ? 0 : par_bc->
get_tbl_mod()(4) ) ;
1172 double dhrr = (cedbc ? 0 : par_bc->
get_tbl_mod()(5) ) ;
1173 double ceta = (cedbc ? 0 : par_bc->
get_tbl_mod()(6) ) ;
1174 double deta = (cedbc ? 0 : par_bc->
get_tbl_mod()(7) ) ;
1175 double cw = (cedbc ? 0 : par_bc->
get_tbl_mod()(8) ) ;
1176 double dw = (cedbc ? 0 : par_bc->
get_tbl_mod()(9) ) ;
1177 Mtbl_cf dhom1_hrr = sol_hom1_hrr ;
1178 Mtbl_cf dhom2_hrr = sol_hom2_hrr ;
1179 Mtbl_cf dhom3_hrr = sol_hom3_hrr ;
1180 Mtbl_cf dpart_hrr = sol_part_hrr ;
1181 Mtbl_cf dhom1_eta = sol_hom1_eta ;
1182 Mtbl_cf dhom2_eta = sol_hom2_eta ;
1183 Mtbl_cf dhom3_eta = sol_hom3_eta ;
1184 Mtbl_cf dpart_eta = sol_part_eta ;
1185 Mtbl_cf dhom1_w = sol_hom1_w ;
1186 Mtbl_cf dhom2_w = sol_hom2_w ;
1187 Mtbl_cf dhom3_w = sol_hom3_w ;
1188 Mtbl_cf dpart_w = sol_part_w ;
1197 for (
int k=0 ; k<np+1 ; k++)
1198 for (
int j=0 ; j<nt ; j++) {
1200 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
1207 int nr = mgrid.
get_nr(0) ;
1222 for (
int zone=1 ; zone<nz_bc ; zone++) {
1223 nr = mgrid.
get_nr(zone) ;
1227 systeme.
set(ligne, colonne) =
1229 systeme.
set(ligne, colonne+1) =
1231 systeme.
set(ligne, colonne+2) =
1237 systeme.
set(ligne, colonne) =
1239 systeme.
set(ligne, colonne+1) =
1241 systeme.
set(ligne, colonne+2) =
1247 systeme.
set(ligne, colonne) =
1249 systeme.
set(ligne, colonne+1) =
1251 systeme.
set(ligne, colonne+2) =
1258 systeme.
set(ligne, colonne) =
1260 systeme.
set(ligne, colonne+1) =
1262 systeme.
set(ligne, colonne+2) =
1268 systeme.
set(ligne, colonne) =
1270 systeme.
set(ligne, colonne+1) =
1272 systeme.
set(ligne, colonne+2) =
1278 systeme.
set(ligne, colonne) =
1280 systeme.
set(ligne, colonne+1) =
1282 systeme.
set(ligne, colonne+2) =
1291 nr = mgrid.
get_nr(nz_bc) ;
1292 double alpha = mp_aff->
get_alpha()[nz_bc] ;
1297 systeme.
set(ligne, colonne) =
1299 systeme.
set(ligne, colonne+1) =
1301 if (!cedbc) systeme.
set(ligne, colonne+2) =
1307 systeme.
set(ligne, colonne) =
1309 systeme.
set(ligne, colonne+1) =
1311 if (!cedbc) systeme.
set(ligne, colonne+2) =
1317 systeme.
set(ligne, colonne) =
1319 systeme.
set(ligne, colonne+1) =
1321 if (!cedbc) systeme.
set(ligne, colonne+2) =
1329 systeme.
set(ligne, colonne) =
1336 systeme.
set(ligne, colonne+1) =
1345 assert(ligne == 0) ;
1348 systeme.
set(ligne, colonne+2) =
1375 for (
int i=0 ; i<nr ; i++) {
1376 mhrr.
set(0, k, j, i) = sol_part_hrr(0, k, j, i)
1377 + facteur(conte)*sol_hom3_hrr(0, k, j, i) ;
1378 meta.
set(0, k, j, i) = sol_part_eta(0, k, j, i)
1379 + facteur(conte)*sol_hom3_eta(0, k, j, i) ;
1380 mw.
set(0, k, j, i) = sol_part_w(0, k, j, i)
1381 + facteur(conte)*sol_hom3_w(0, k, j, i) ;
1384 for (
int zone=1 ; zone<=n_shell ; zone++) {
1385 nr = mgrid.
get_nr(zone) ;
1386 for (
int i=0 ; i<nr ; i++) {
1387 mhrr.
set(zone, k, j, i) = sol_part_hrr(zone, k, j, i)
1388 + facteur(conte)*sol_hom1_hrr(zone, k, j, i)
1389 + facteur(conte+1)*sol_hom2_hrr(zone, k, j, i)
1390 + facteur(conte+2)*sol_hom3_hrr(zone, k, j, i) ;
1392 meta.
set(zone, k, j, i) = sol_part_eta(zone, k, j, i)
1393 + facteur(conte)*sol_hom1_eta(zone, k, j, i)
1394 + facteur(conte+1)*sol_hom2_eta(zone, k, j, i)
1395 + facteur(conte+2)*sol_hom3_eta(zone, k, j, i) ;
1397 mw.
set(zone, k, j, i) = sol_part_w(zone, k, j, i)
1398 + facteur(conte)*sol_hom1_w(zone, k, j, i)
1399 + facteur(conte+1)*sol_hom2_w(zone, k, j, i)
1400 + facteur(conte+2)*sol_hom3_w(zone, k, j, i) ;
1405 nr = mgrid.
get_nr(nzm1) ;
1406 for (
int i=0 ; i<nr ; i++) {
1407 mhrr.
set(nzm1, k, j, i) = sol_part_hrr(nzm1, k, j, i)
1408 + facteur(conte)*sol_hom1_hrr(nzm1, k, j, i)
1409 + facteur(conte+1)*sol_hom2_hrr(nzm1, k, j, i) ;
1411 meta.
set(nzm1, k, j, i) = sol_part_eta(nzm1, k, j, i)
1412 + facteur(conte)*sol_hom1_eta(nzm1, k, j, i)
1413 + facteur(conte+1)*sol_hom2_eta(nzm1, k, j, i) ;
1415 mw.
set(nzm1, k, j, i) = sol_part_w(nzm1, k, j, i)
1416 + facteur(conte)*sol_hom1_w(nzm1, k, j, i)
1417 + facteur(conte+1)*sol_hom2_w(nzm1, k, j, i) ;
1442 Param* par_mat)
const {
1445 assert(mp_aff != 0x0) ;
1458 int nt = mgrid.
get_nt(0) ;
1459 int np = mgrid.
get_np(0) ;
1468 int lmax = base.
give_lmax(mgrid, 0) + 1;
1475 Mtbl_cf sol_part_hrr(mgrid, base) ; sol_part_hrr.annule_hard() ;
1482 bool need_calculation = true ;
1487 int l_q, m_q, base_r ;
1488 Itbl mat_done(lmax) ;
1494 int nr = mgrid.
get_nr(lz) ;
1495 double alpha = mp_aff->
get_alpha()[lz] ;
1497 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1499 for (
int k=0 ; k<np+1 ; k++) {
1500 for (
int j=0 ; j<nt ; j++) {
1503 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1504 if (need_calculation) {
1509 for (
int lin=0; lin<nr; lin++)
1510 for (
int col=0; col<nr; col++)
1511 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
1512 for (
int lin=0; lin<nr; lin++)
1513 for (
int col=0; col<nr; col++)
1514 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1515 for (
int lin=0; lin<nr; lin++)
1516 for (
int col=0; col<nr; col++)
1517 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
1518 for (
int lin=0; lin<nr; lin++)
1519 for (
int col=0; col<nr; col++)
1520 ope.
set(lin+nr,col+nr) = md(lin,col) + 3*ms(lin, col);
1523 for (
int col=0; col<2*nr; col++) {
1524 ope.
set(nr-1, col) = 0 ;
1525 ope.
set(2*nr-1, col) = 0 ;
1529 for (
int col=0; col<nr; col++) {
1530 ope.
set(nr-1, col) = pari ;
1531 ope.
set(2*nr-1, col+nr) = pari ;
1536 ope.
set(nr-1, nr-1) = 1 ;
1537 ope.
set(2*nr-1, 2*nr-1) = 1 ;
1541 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1544 mat_done.
set(l_q) = 1 ;
1548 const Matrice& oper = (par_mat == 0x0 ? ope :
1552 for (
int lin=0; lin<nr; lin++)
1554 for (
int lin=0; lin<nr; lin++)
1561 for (
int col=0; col<nr; col++) {
1566 sec.
set(nr-1) = h0 / 3. ;
1568 sec.
set(2*nr-1) = 0 ;
1570 for (
int i=0; i<nr; i++) {
1571 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1572 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1584 for (
int lz=1; lz<nz-1; lz++) {
1585 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1586 int nr = mgrid.
get_nr(lz) ;
1589 assert(mgrid.
get_nt(lz) == nt) ;
1590 assert(mgrid.
get_np(lz) == np) ;
1591 double alpha = mp_aff->
get_alpha()[lz] ;
1592 double ech = mp_aff->
get_beta()[lz] / alpha ;
1595 for (
int k=0 ; k<np+1 ; k++) {
1596 for (
int j=0 ; j<nt ; j++) {
1599 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1600 if (need_calculation) {
1606 for (
int lin=0; lin<nr; lin++)
1607 for (
int col=0; col<nr; col++)
1608 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
1610 for (
int lin=0; lin<nr; lin++)
1611 for (
int col=0; col<nr; col++)
1612 ope.
set(lin,col+nr) = -l_q*(l_q+1)*mid(lin,col) ;
1613 for (
int lin=0; lin<nr; lin++)
1614 for (
int col=0; col<nr; col++)
1615 ope.
set(lin+nr,col) = -0.5*mid(lin,col) ;
1616 for (
int lin=0; lin<nr; lin++)
1617 for (
int col=0; col<nr; col++)
1618 ope.
set(lin+nr,col+nr) = mxd(lin,col) + ech*md(lin,col)
1621 for (
int col=0; col<2*nr; col++) {
1622 ope.
set(ind0+nr-1, col) = 0 ;
1623 ope.
set(ind1+nr-1, col) = 0 ;
1625 ope.
set(ind0+nr-1, ind0) = 1 ;
1626 ope.
set(ind1+nr-1, ind1) = 1 ;
1629 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1632 mat_done.
set(l_q) = 1 ;
1635 const Matrice& oper = (par_mat == 0x0 ? ope :
1639 for (
int lin=0; lin<nr; lin++)
1642 for (
int lin=0; lin<nr; lin++)
1645 sec.
set(ind0+nr-1) = 0 ;
1646 sec.
set(ind1+nr-1) = 0 ;
1649 for (
int i=0; i<nr; i++) {
1650 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1651 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1654 sec.
set(ind0+nr-1) = 1 ;
1656 for (
int i=0; i<nr; i++) {
1657 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1658 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1660 sec.
set(ind0+nr-1) = 0 ;
1661 sec.
set(ind1+nr-1) = 1 ;
1663 for (
int i=0; i<nr; i++) {
1664 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1665 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1676 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1677 int nr = mgrid.
get_nr(lz) ;
1680 assert(mgrid.
get_nt(lz) == nt) ;
1681 assert(mgrid.
get_np(lz) == np) ;
1682 double alpha = mp_aff->
get_alpha()[lz] ;
1685 for (
int k=0 ; k<np+1 ; k++) {
1686 for (
int j=0 ; j<nt ; j++) {
1689 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1690 if (need_calculation) {
1695 for (
int lin=0; lin<nr; lin++)
1696 for (
int col=0; col<nr; col++)
1697 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
1698 for (
int lin=0; lin<nr; lin++)
1699 for (
int col=0; col<nr; col++)
1700 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1701 for (
int lin=0; lin<nr; lin++)
1702 for (
int col=0; col<nr; col++)
1703 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
1704 for (
int lin=0; lin<nr; lin++)
1705 for (
int col=0; col<nr; col++)
1706 ope.
set(lin+nr,col+nr) = -md(lin,col) + 3*ms(lin, col) ;
1709 for (
int col=0; col<2*nr; col++) {
1710 ope.
set(ind0+nr-2, col) = 0 ;
1711 ope.
set(ind0+nr-1, col) = 0 ;
1712 ope.
set(ind1+nr-2, col) = 0 ;
1713 ope.
set(ind1+nr-1, col) = 0 ;
1715 for (
int col=0; col<nr; col++) {
1716 ope.
set(ind0+nr-1, col+ind0) = 1 ;
1717 ope.
set(ind1+nr-1, col+ind1) = 1 ;
1719 ope.
set(ind0+nr-2, ind0+1) = 1 ;
1720 ope.
set(ind1+nr-2, ind1+1) = 1 ;
1723 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1726 mat_done.
set(l_q) = 1 ;
1729 const Matrice& oper = (par_mat == 0x0 ? ope :
1733 for (
int lin=0; lin<nr; lin++)
1736 for (
int lin=0; lin<nr; lin++)
1739 sec.
set(ind0+nr-2) = 0 ;
1740 sec.
set(ind0+nr-1) = 0 ;
1741 sec.
set(ind1+nr-2) = 0 ;
1742 sec.
set(ind1+nr-1) = 0 ;
1744 for (
int i=0; i<nr; i++) {
1745 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1746 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1749 sec.
set(ind0+nr-2) = 1 ;
1751 for (
int i=0; i<nr; i++) {
1752 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1753 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1755 sec.
set(ind0+nr-2) = 0 ;
1756 sec.
set(ind1+nr-2) = 1 ;
1758 for (
int i=0; i<nr; i++) {
1759 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1760 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1767 int taille = 2*(nz-1) ;
1771 Tbl sec_membre(taille) ;
1772 Matrice systeme(taille, taille) ;
1773 int ligne ;
int colonne ;
1777 for (
int k=0 ; k<np+1 ; k++)
1778 for (
int j=0 ; j<nt ; j++) {
1780 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1787 int nr = mgrid.
get_nr(0) ;
1789 sec_membre.
set(ligne) = -sol_part_hrr.val_out_bound_jk(0, j, k) ;
1795 for (
int zone=1 ; zone<nz-1 ; zone++) {
1796 nr = mgrid.
get_nr(zone) ;
1800 systeme.
set(ligne, colonne) =
1802 systeme.
set(ligne, colonne+1) =
1805 sec_membre.
set(ligne) += sol_part_hrr.val_in_bound_jk(zone, j, k) ;
1808 systeme.
set(ligne, colonne) =
1810 systeme.
set(ligne, colonne+1) =
1817 systeme.
set(ligne, colonne) =
1819 systeme.
set(ligne, colonne+1) =
1822 sec_membre.
set(ligne) -= sol_part_hrr.val_out_bound_jk(zone, j, k) ;
1825 systeme.
set(ligne, colonne) =
1827 systeme.
set(ligne, colonne+1) =
1836 nr = mgrid.
get_nr(nz-1) ;
1840 systeme.
set(ligne, colonne) =
1842 systeme.
set(ligne, colonne+1) =
1845 sec_membre.
set(ligne) += sol_part_hrr.val_in_bound_jk(nz-1, j, k) ;
1848 systeme.
set(ligne, colonne) =
1850 systeme.
set(ligne, colonne+1) =
1865 for (
int i=0 ; i<nr ; i++) {
1866 mhrr.
set(0, k, j, i) = sol_part_hrr(0, k, j, i) ;
1867 meta.
set(0, k, j, i) = sol_part_eta(0, k, j, i) ;
1869 for (
int zone=1 ; zone<nz-1 ; zone++) {
1870 nr = mgrid.
get_nr(zone) ;
1871 for (
int i=0 ; i<nr ; i++) {
1872 mhrr.
set(zone, k, j, i) = sol_part_hrr(zone, k, j, i)
1873 + facteur(conte)*sol_hom1_hrr(zone, k, j, i)
1874 + facteur(conte+1)*sol_hom2_hrr(zone, k, j, i) ;
1876 meta.
set(zone, k, j, i) = sol_part_eta(zone, k, j, i)
1877 + facteur(conte)*sol_hom1_eta(zone, k, j, i)
1878 + facteur(conte+1)*sol_hom2_eta(zone, k, j, i) ;
1882 nr = mgrid.
get_nr(nz-1) ;
1883 for (
int i=0 ; i<nr ; i++) {
1884 mhrr.
set(nz-1, k, j, i) = sol_part_hrr(nz-1, k, j, i)
1885 + facteur(conte)*sol_hom1_hrr(nz-1, k, j, i)
1886 + facteur(conte+1)*sol_hom2_hrr(nz-1, k, j, i) ;
1888 meta.
set(nz-1, k, j, i) = sol_part_eta(nz-1, k, j, i)
1889 + facteur(conte)*sol_hom1_eta(nz-1, k, j, i)
1890 + facteur(conte+1)*sol_hom2_eta(nz-1, k, j, i) ;
int get_type_p() const
Returns the type of sampling in the direction: SYM : : symmetry with respect to the transformatio...
const Base_val & get_spectral_base() const
Returns the spectral bases of the Valeur va.
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
void add_tbl_mod(Tbl &ti, int position=0)
Adds the address of a new modifiable Tbl to the list.
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
void annule_l(int l_min, int l_max, bool ylm_output=false)
Sets all the multipolar components between l_min and l_max to zero.
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
const double * get_alpha() const
Returns the pointer on the array alpha.
int & set(int i)
Read/write of a particular element (index i ) (1D case)
void mult_r()
Multiplication by r everywhere; dzpuis is not changed.
int give_lmax(const Mg3d &mgrid, int lz) const
Returns the highest multipole for a given grid.
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...
int get_n_matrice_mod() const
Returns the number of modifiable Matrice 's addresses in the list.
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.
void annule_hard()
Sets the Itbl to zero in a hard way.
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).
void add_matrice_mod(Matrice &ti, int position=0)
Adds the address of a new modifiable Matrice to the list.
int get_type_t() const
Returns the type of sampling in the direction: SYM : : symmetry with respect to the equatorial pl...
Basic integer array class.
void sol_Dirac_A(const Scalar &aaa, Scalar &tilde_mu, Scalar &xxx, const Param *par_bc=0x0) const
Solves a system of two coupled first-order PDEs obtained from the divergence-free condition (Dirac ga...
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).
void clean_all()
Deletes all the objects stored as modifiables, i.e.
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 add_itbl_mod(Itbl &ti, int position=0)
Adds the address of a new modifiable Itbl to the list.
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...
int get_n_int() const
Returns the number of stored int 's addresses.
const int & get_int(int position=0) const
Returns the reference of a int stored in the list.
void sol_Dirac_l01(const Scalar &hh, Scalar &hrr, Scalar &tilde_eta, Param *par_mat) const
Solves the same system as Sym_tensor_trans::sol_Dirac_tilde_B but only for .
#define R_CHEBP
base de Cheb. paire (rare) seulement
int get_n_itbl_mod() const
Returns the number of modifiable Itbl 's addresses in the list.
const double * get_beta() const
Returns the pointer on the array beta.
Mtbl * c
Values of the function at the points of the multi-grid.
Tbl & get_tbl_mod(int position=0) const
Returns the reference of a modifiable Tbl stored in the list.
int get_nzone() const
Returns the number of domains.
int & get_int_mod(int position=0) const
Returns the reference of a modifiable int stored in the list.
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Itbl & get_itbl_mod(int position=0) const
Returns the reference of a stored modifiable Itbl .
void annule_hard()
Sets the logical state to ETATQCQ (undefined state).
void sol_Dirac_tilde_B(const Scalar &tilde_b, const Scalar &hh, Scalar &hrr, Scalar &tilde_eta, Scalar &www, Param *par_bc=0x0, Param *par_mat=0x0) const
Solves a system of three coupled first-order PDEs obtained from divergence-free conditions (Dirac gau...
int get_n_int_mod() const
Returns the number of modifiable int 's addresses in the list.
double & set(int j, int i)
Read/write of a particuliar element.
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.
int get_n_tbl_mod() const
Returns the number of modifiable Tbl 's addresses in the list.
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 ).
void mult_x()
The basis is transformed as with a multiplication by .
Coefficients storage for the multi-domain spectral method.
const Scalar & dsdr() const
Returns of *this .
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Matrice & get_matrice_mod(int position=0) const
Returns the reference of a modifiable Matrice stored in the list.
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)
virtual const Matrice & get_matrice() const
Returns the matrix associated with the operator.
Class for the elementary differential operator division by (see the base class Diff )...
int get_type_r(int l) const
Returns the type of sampling in the radial direction in domain no.
bool check_dzpuis(int dzi) const
Returns false if the last domain is compactified and *this is not zero in this domain and dzpuis is n...
const Map *const mp
Mapping on which the numerical values at the grid points are defined.
void div_r_dzpuis(int ced_mult_r)
Division by r everywhere but with the output flag dzpuis set to ced_mult_r .
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.
void mult_r_dzpuis(int ced_mult_r)
Multiplication by r everywhere but with the output flag dzpuis set to ced_mult_r ...
void add_int_mod(int &n, int position=0)
Adds the address of a new modifiable int to the list.
const Valeur & get_spectral_va() const
Returns va (read only version)