28 char sym_tensor_trans_dirac_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Tensor/sym_tensor_trans_dirac.C,v 1.8 2015/08/10 15:32:26 j_novak Exp $" ;
83 const Param* par_bc)
const {
86 assert(mp_aff != 0x0) ;
95 assert(aaa.
get_etat() != ETATNONDEF) ;
98 bool ced = (mgrid.
get_type_r(nzm1) == UNSURR) ;
99 int n_shell = ced ? nz-2 : nzm1 ;
103 n_shell = (nz_bc < n_shell ? nz_bc : n_shell) ;
104 bool cedbc = (ced && (nz_bc == nzm1)) ;
107 assert(par_bc != 0x0) ;
111 int nt = mgrid.
get_nt(0) ;
112 int np = mgrid.
get_np(0) ;
140 int l_q, m_q, base_r ;
146 int nr = mgrid.
get_nr(lz) ;
151 for (
int k=0 ; k<np+1 ; k++) {
152 for (
int j=0 ; j<nt ; j++) {
155 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
159 for (
int lin=0; lin<nr; lin++)
160 for (
int col=0; col<nr; col++)
161 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
162 for (
int lin=0; lin<nr; lin++)
163 for (
int col=0; col<nr; col++)
164 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*ms(lin,col) ;
165 for (
int lin=0; lin<nr; lin++)
166 for (
int col=0; col<nr; col++)
167 ope.
set(lin+nr,col) = -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+nr) = md(lin,col) ;
174 for (
int col=0; col<2*nr; col++)
175 ope.
set(ind1+nr-2, col) = 0 ;
176 for (
int col=0; col<2*nr; col++) {
177 ope.
set(nr-1, col) = 0 ;
178 ope.
set(2*nr-1, col) = 0 ;
182 for (
int col=0; col<nr; col++) {
183 ope.
set(nr-1, col) = pari ;
184 ope.
set(2*nr-1, col+nr) = pari ;
189 ope.
set(nr-1, nr-1) = 1 ;
190 ope.
set(2*nr-1, 2*nr-1) = 1 ;
192 ope.
set(ind1+nr-2, ind1) = 1 ;
197 for (
int lin=0; lin<nr; lin++)
199 for (
int lin=0; lin<nr; lin++)
202 sec.
set(2*nr-1) = 0 ;
203 sec.
set(ind1+nr-2) = 0 ;
205 for (
int i=0; i<nr; i++) {
206 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
207 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
210 sec.
set(ind1+nr-2) = 1 ;
212 for (
int i=0; i<nr; i++) {
213 sol_hom2_mu.
set(lz, k, j, i) = sol(i) ;
214 sol_hom2_x.
set(lz, k, j, i) = sol(i+nr) ;
225 for (
int lz=1; lz <= n_shell; lz++) {
226 int nr = mgrid.
get_nr(lz) ;
227 assert(mgrid.
get_nt(lz) == nt) ;
228 assert(mgrid.
get_np(lz) == np) ;
230 double ech = mp_aff->
get_beta()[lz] / alpha ;
234 for (
int k=0 ; k<np+1 ; k++) {
235 for (
int j=0 ; j<nt ; j++) {
238 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
243 for (
int lin=0; lin<nr; lin++)
244 for (
int col=0; col<nr; col++)
245 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
247 for (
int lin=0; lin<nr; lin++)
248 for (
int col=0; col<nr; col++)
249 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*mid(lin,col) ;
250 for (
int lin=0; lin<nr; lin++)
251 for (
int col=0; col<nr; col++)
252 ope.
set(lin+nr,col) = -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+nr) = mxd(lin,col) + ech*md(lin,col) ;
259 for (
int col=0; col<2*nr; col++) {
260 ope.
set(ind0+nr-1, col) = 0 ;
261 ope.
set(ind1+nr-1, col) = 0 ;
263 ope.
set(ind0+nr-1, ind0) = 1 ;
264 ope.
set(ind1+nr-1, ind1) = 1 ;
270 for (
int lin=0; lin<nr; lin++)
272 for (
int lin=0; lin<nr; lin++)
275 sec.
set(ind0+nr-1) = 0 ;
276 sec.
set(ind1+nr-1) = 0 ;
278 for (
int i=0; i<nr; i++) {
279 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
280 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
283 sec.
set(ind0+nr-1) = 1 ;
285 for (
int i=0; i<nr; i++) {
286 sol_hom1_mu.
set(lz, k, j, i) = sol(i) ;
287 sol_hom1_x.
set(lz, k, j, i) = sol(i+nr) ;
289 sec.
set(ind0+nr-1) = 0 ;
290 sec.
set(ind1+nr-1) = 1 ;
292 for (
int i=0; i<nr; i++) {
293 sol_hom2_mu.
set(lz, k, j, i) = sol(i) ;
294 sol_hom2_x.
set(lz, k, j, i) = sol(i+nr) ;
304 if (cedbc) {
int lz = nzm1 ;
305 int nr = mgrid.
get_nr(lz) ;
306 assert(mgrid.
get_nt(lz) == nt) ;
307 assert(mgrid.
get_np(lz) == np) ;
312 for (
int k=0 ; k<np+1 ; k++) {
313 for (
int j=0 ; j<nt ; j++) {
316 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
320 for (
int lin=0; lin<nr; lin++)
321 for (
int col=0; col<nr; col++)
322 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
323 for (
int lin=0; lin<nr; lin++)
324 for (
int col=0; col<nr; col++)
325 ope.
set(lin,col+nr) = (2-l_q*(l_q+1))*ms(lin,col) ;
326 for (
int lin=0; lin<nr; lin++)
327 for (
int col=0; col<nr; col++)
328 ope.
set(lin+nr,col) = -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+nr) = -md(lin,col) ;
336 for (
int col=0; col<2*nr; col++) {
337 ope.
set(ind0+nr-1, col) = 0 ;
338 ope.
set(ind1+nr-2, col) = 0 ;
339 ope.
set(ind1+nr-1, col) = 0 ;
341 for (
int col=0; col<nr; col++) {
342 ope.
set(ind0+nr-1, col+ind0) = 1 ;
343 ope.
set(ind1+nr-1, col+ind1) = 1 ;
345 ope.
set(ind1+nr-2, ind1+1) = 1 ;
351 for (
int lin=0; lin<nr; lin++)
353 for (
int lin=0; lin<nr; lin++)
356 sec.
set(ind0+nr-1) = 0 ;
357 sec.
set(ind1+nr-2) = 0 ;
358 sec.
set(ind1+nr-1) = 0 ;
360 for (
int i=0; i<nr; i++) {
361 sol_part_mu.
set(lz, k, j, i) = sol(i) ;
362 sol_part_x.
set(lz, k, j, i) = sol(i+nr) ;
365 sec.
set(ind1+nr-2) = 1 ;
367 for (
int i=0; i<nr; i++) {
368 sol_hom1_mu.
set(lz, k, j, i) = sol(i) ;
369 sol_hom1_x.
set(lz, k, j, i) = sol(i+nr) ;
380 int taille = 2*nz_bc + 1;
381 if (cedbc) taille-- ;
385 Tbl sec_membre(taille) ;
386 Matrice systeme(taille, taille) ;
387 int ligne ;
int colonne ;
390 double c_mu = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(0) ) ;
391 double d_mu = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(1) ) ;
392 double c_x = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(2) ) ;
393 double d_x = (cedbc ? 0 : par_bc->
get_tbl_mod(0)(3) ) ;
394 Mtbl_cf dhom1_mu = sol_hom1_mu ;
395 Mtbl_cf dhom2_mu = sol_hom2_mu ;
396 Mtbl_cf dpart_mu = sol_part_mu ;
411 for (
int k=0 ; k<np+1 ; k++)
412 for (
int j=0 ; j<nt ; j++) {
414 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
421 int nr = mgrid.
get_nr(0) ;
433 for (
int zone=1 ; zone<nz_bc ; zone++) {
438 systeme.
set(ligne, colonne) =
440 systeme.
set(ligne, colonne+1) =
446 systeme.
set(ligne, colonne) =
448 systeme.
set(ligne, colonne+1) =
455 systeme.
set(ligne, colonne) =
457 systeme.
set(ligne, colonne+1) =
463 systeme.
set(ligne, colonne) =
465 systeme.
set(ligne, colonne+1) =
474 nr = mgrid.
get_nr(nz_bc) ;
475 double alpha = mp_aff->
get_alpha()[nz_bc] ;
480 systeme.
set(ligne, colonne) =
482 if (!cedbc) systeme.
set(ligne, colonne+1) =
488 systeme.
set(ligne, colonne) =
490 if (!cedbc) systeme.
set(ligne, colonne+1) =
498 systeme.
set(ligne, colonne) =
508 systeme.
set(ligne, colonne+1) =
531 for (
int i=0 ; i<nr ; i++) {
532 mmu.
set(0, k, j, i) = sol_part_mu(0, k, j, i)
533 + facteur(conte)*sol_hom2_mu(0, k, j, i) ;
534 mw.
set(0, k, j, i) = sol_part_x(0, k, j, i)
535 + facteur(conte)*sol_hom2_x(0, k, j, i) ;
538 for (
int zone=1 ; zone<=n_shell ; zone++) {
540 for (
int i=0 ; i<nr ; i++) {
541 mmu.
set(zone, k, j, i) = sol_part_mu(zone, k, j, i)
542 + facteur(conte)*sol_hom1_mu(zone, k, j, i)
543 + facteur(conte+1)*sol_hom2_mu(zone, k, j, i) ;
545 mw.
set(zone, k, j, i) = sol_part_x(zone, k, j, i)
546 + facteur(conte)*sol_hom1_x(zone, k, j, i)
547 + facteur(conte+1)*sol_hom2_x(zone, k, j, i) ;
553 for (
int i=0 ; i<nr ; i++) {
554 mmu.
set(nzm1, k, j, i) = sol_part_mu(nzm1, k, j, i)
555 + facteur(conte)*sol_hom1_mu(nzm1, k, j, i) ;
557 mw.
set(nzm1, k, j, i) = sol_part_x(nzm1, k, j, i)
558 + facteur(conte)*sol_hom1_x(nzm1, k, j, i) ;
588 assert(mp_aff != 0x0) ;
600 bool ced = (mgrid.
get_type_r(nzm1) == UNSURR) ;
601 int n_shell = ced ? nz-2 : nzm1 ;
606 n_shell = (nz_bc < n_shell ? nz_bc : n_shell) ;
607 bool cedbc = (ced && (nz_bc == nzm1)) ;
610 assert(par_bc != 0x0) ;
614 int nt = mgrid.
get_nt(0) ;
615 int np = mgrid.
get_np(0) ;
617 assert (tilde_b.
get_etat() != ETATNONDEF) ;
618 assert (hh.
get_etat() != ETATNONDEF) ;
621 Scalar source_coq = tilde_b ;
626 source.set_spectral_va().ylm() ;
628 bool bnull = (tilde_b.
get_etat() == ETATZERO) ;
633 hoverr.set_spectral_va().ylm() ;
641 bool hnull = (hh.
get_etat() == ETATZERO) ;
643 Base_val base = (bnull ? hoverr.get_spectral_base() : source.get_spectral_base()) ;
647 bool need_calculation = true ;
648 if (par_mat != 0x0) {
649 bool param_new = false ;
654 if (par_mat->
get_int_mod(0) < nz_bc) param_new =
true ;
655 if (par_mat->
get_int_mod(1) != lmax) param_new =
true ;
661 for (
int l=1; l<= n_shell; l++) {
664 mp_aff->
get_alpha()[l]) > 2.e-15) param_new = true ;
677 int* nz_bc_new =
new int(nz_bc) ;
679 int* lmax_new =
new int(lmax) ;
681 int* type_t_new =
new int(mgrid.
get_type_t()) ;
683 int* type_p_new =
new int(mgrid.
get_type_p()) ;
688 for (
int l=0; l<nz; l++)
690 Tbl* palpha =
new Tbl(nz) ;
694 for (
int l=1; l<nzm1; l++)
698 else need_calculation = false ;
730 int l_q, m_q, base_r ;
731 Itbl mat_done(lmax) ;
737 int nr = mgrid.
get_nr(lz) ;
741 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
743 for (
int k=0 ; k<np+1 ; k++) {
744 for (
int j=0 ; j<nt ; j++) {
747 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
748 if (need_calculation) {
753 for (
int lin=0; lin<nr; lin++)
754 for (
int col=0; col<nr; col++)
755 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
756 for (
int lin=0; lin<nr; lin++)
757 for (
int col=0; col<nr; col++)
758 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
759 for (
int lin=0; lin<nr; lin++)
760 for (
int col=0; col<nr; col++)
761 ope.
set(lin,col+2*nr) = 0 ;
762 for (
int lin=0; lin<nr; lin++)
763 for (
int col=0; col<nr; col++)
764 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
765 for (
int lin=0; lin<nr; lin++)
766 for (
int col=0; col<nr; col++)
767 ope.
set(lin+nr,col+nr) = md(lin,col) + 3*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+2*nr) = (2. - l_q*(l_q+1))*ms(lin,col) ;
771 for (
int lin=0; lin<nr; lin++)
772 for (
int col=0; col<nr; col++)
773 ope.
set(lin+2*nr,col) = -0.5*md(lin,col)/double(l_q+1)
774 - 0.5*double(l_q+4)/double(l_q+1)*ms(lin,col) ;
775 for (
int lin=0; lin<nr; lin++)
776 for (
int col=0; col<nr; col++)
777 ope.
set(lin+2*nr,col+nr) = -2*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+2*nr) = (l_q+2)*md(lin,col)
781 + l_q*(l_q+2)*ms(lin,col) ;
784 for (
int col=0; col<3*nr; col++)
785 if (l_q>2) ope.
set(ind2+nr-2, col) = 0 ;
786 for (
int col=0; col<3*nr; col++) {
787 ope.
set(nr-1, col) = 0 ;
788 ope.
set(2*nr-1, col) = 0 ;
789 ope.
set(3*nr-1, col) = 0 ;
793 for (
int col=0; col<nr; col++) {
794 ope.
set(nr-1, col) = pari ;
795 ope.
set(2*nr-1, col+nr) = pari ;
796 ope.
set(3*nr-1, col+2*nr) = pari ;
801 ope.
set(nr-1, nr-1) = 1 ;
802 ope.
set(2*nr-1, 2*nr-1) = 1 ;
803 ope.
set(3*nr-1, 3*nr-1) = 1 ;
806 ope.
set(ind2+nr-2, ind2) = 1 ;
809 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
812 mat_done.
set(l_q) = 1 ;
816 const Matrice& oper = (par_mat == 0x0 ? ope :
821 for (
int lin=0; lin<2*nr; lin++)
823 for (
int lin=0; lin<nr; lin++)
824 sec.
set(2*nr+lin) = (*source.get_spectral_va().c_cf)
828 for (
int lin=0; lin<nr; lin++)
829 sec.
set(lin) = (*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ;
830 for (
int lin=0; lin<nr; lin++)
831 sec.
set(lin+nr) = -0.5*(*hoverr.get_spectral_va().c_cf)
834 for (
int lin=0; lin<nr; lin++)
835 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
837 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ) ;
840 for (
int lin=0; lin<nr; lin++)
841 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
843 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) )
844 + (*source.get_spectral_va().c_cf)(lz, k, j, lin) ;
847 if (l_q>2) sec.
set(ind2+nr-2) = 0 ;
848 sec.
set(3*nr-1) = 0 ;
850 for (
int i=0; i<nr; i++) {
851 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
852 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
853 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
857 sec.
set(ind2+nr-2) = 1 ;
866 for (
int i=0; i<nr; i++) {
867 sol_hom3_hrr.
set(lz, k, j, i) = sol(i) ;
868 sol_hom3_eta.
set(lz, k, j, i) = sol(i+nr) ;
869 sol_hom3_w.
set(lz, k, j, i) = sol(i+2*nr) ;
880 for (
int lz=1; lz<= n_shell; lz++) {
881 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
882 int nr = mgrid.
get_nr(lz) ;
887 double ech = mp_aff->
get_beta()[lz] / alpha ;
890 for (
int k=0 ; k<np+1 ; k++) {
891 for (
int j=0 ; j<nt ; j++) {
894 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
895 if (need_calculation) {
901 for (
int lin=0; lin<nr; lin++)
902 for (
int col=0; col<nr; col++)
903 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
905 for (
int lin=0; lin<nr; lin++)
906 for (
int col=0; col<nr; col++)
907 ope.
set(lin,col+nr) = -l_q*(l_q+1)*mid(lin,col) ;
908 for (
int lin=0; lin<nr; lin++)
909 for (
int col=0; col<nr; col++)
910 ope.
set(lin,col+2*nr) = 0 ;
911 for (
int lin=0; lin<nr; lin++)
912 for (
int col=0; col<nr; col++)
913 ope.
set(lin+nr,col) = -0.5*mid(lin,col) ;
914 for (
int lin=0; lin<nr; lin++)
915 for (
int col=0; col<nr; col++)
916 ope.
set(lin+nr,col+nr) = mxd(lin,col) + ech*md(lin,col)
918 for (
int lin=0; lin<nr; lin++)
919 for (
int col=0; col<nr; col++)
920 ope.
set(lin+nr,col+2*nr) = (2. - l_q*(l_q+1))*mid(lin,col) ;
921 for (
int lin=0; lin<nr; lin++)
922 for (
int col=0; col<nr; col++)
923 ope.
set(lin+2*nr,col) =
924 -0.5/double(l_q+1)*(mxd(lin,col) + ech*md(lin,col)
925 + double(l_q+4)*mid(lin,col)) ;
926 for (
int lin=0; lin<nr; lin++)
927 for (
int col=0; col<nr; col++)
928 ope.
set(lin+2*nr,col+nr) = -2*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+2*nr) =
932 double(l_q+2)*(mxd(lin,col) + ech*md(lin,col)
933 + l_q*mid(lin,col)) ;
934 for (
int col=0; col<3*nr; col++) {
935 ope.
set(ind0+nr-1, col) = 0 ;
936 ope.
set(ind1+nr-1, col) = 0 ;
937 ope.
set(ind2+nr-1, col) = 0 ;
939 ope.
set(ind0+nr-1, ind0) = 1 ;
940 ope.
set(ind1+nr-1, ind1) = 1 ;
941 ope.
set(ind2+nr-1, ind2) = 1 ;
944 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
947 mat_done.
set(l_q) = 1 ;
950 const Matrice& oper = (par_mat == 0x0 ? ope :
955 for (
int lin=0; lin<2*nr; lin++)
957 for (
int lin=0; lin<nr; lin++)
962 for (
int lin=0; lin<nr; lin++)
964 for (
int lin=0; lin<nr; lin++)
968 for (
int lin=0; lin<nr; lin++)
969 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
974 for (
int lin=0; lin<nr; lin++)
975 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
981 sec.
set(ind0+nr-1) = 0 ;
982 sec.
set(ind1+nr-1) = 0 ;
983 sec.
set(ind2+nr-1) = 0 ;
985 for (
int i=0; i<nr; i++) {
986 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
987 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
988 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
991 sec.
set(ind0+nr-1) = 1 ;
993 for (
int i=0; i<nr; i++) {
994 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
995 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
996 sol_hom1_w.
set(lz, k, j, i) = sol(i+2*nr) ;
998 sec.
set(ind0+nr-1) = 0 ;
999 sec.
set(ind1+nr-1) = 1 ;
1001 for (
int i=0; i<nr; i++) {
1002 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1003 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1004 sol_hom2_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1006 sec.
set(ind1+nr-1) = 0 ;
1007 sec.
set(ind2+nr-1) = 1 ;
1009 for (
int i=0; i<nr; i++) {
1010 sol_hom3_hrr.
set(lz, k, j, i) = sol(i) ;
1011 sol_hom3_eta.
set(lz, k, j, i) = sol(i+nr) ;
1012 sol_hom3_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1022 if (cedbc) {
int lz = nzm1 ;
1023 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1024 int nr = mgrid.
get_nr(lz) ;
1028 double alpha = mp_aff->
get_alpha()[lz] ;
1031 for (
int k=0 ; k<np+1 ; k++) {
1032 for (
int j=0 ; j<nt ; j++) {
1035 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
1036 if (need_calculation) {
1041 for (
int lin=0; lin<nr; lin++)
1042 for (
int col=0; col<nr; col++)
1043 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
1044 for (
int lin=0; lin<nr; lin++)
1045 for (
int col=0; col<nr; col++)
1046 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1047 for (
int lin=0; lin<nr; lin++)
1048 for (
int col=0; col<nr; col++)
1049 ope.
set(lin,col+2*nr) = 0 ;
1050 for (
int lin=0; lin<nr; lin++)
1051 for (
int col=0; col<nr; col++)
1052 ope.
set(lin+nr,col) = -0.5*ms(lin,col) ;
1053 for (
int lin=0; lin<nr; lin++)
1054 for (
int col=0; col<nr; col++)
1055 ope.
set(lin+nr,col+nr) = -md(lin,col) + 3*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+2*nr) = (2. - l_q*(l_q+1))*ms(lin,col) ;
1059 for (
int lin=0; lin<nr; lin++)
1060 for (
int col=0; col<nr; col++)
1061 ope.
set(lin+2*nr,col) = 0.5*md(lin,col)/double(l_q+1)
1062 - 0.5*double(l_q+4)/double(l_q+1)*ms(lin,col) ;
1063 for (
int lin=0; lin<nr; lin++)
1064 for (
int col=0; col<nr; col++)
1065 ope.
set(lin+2*nr,col+nr) = -2*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+2*nr) = -(l_q+2)*md(lin,col)
1069 + l_q*(l_q+2)*ms(lin,col) ;
1071 for (
int col=0; col<3*nr; col++) {
1072 ope.
set(ind0+nr-2, col) = 0 ;
1073 ope.
set(ind0+nr-1, col) = 0 ;
1074 ope.
set(ind1+nr-2, col) = 0 ;
1075 ope.
set(ind1+nr-1, col) = 0 ;
1076 ope.
set(ind2+nr-1, col) = 0 ;
1078 for (
int col=0; col<nr; col++) {
1079 ope.
set(ind0+nr-1, col+ind0) = 1 ;
1080 ope.
set(ind1+nr-1, col+ind1) = 1 ;
1081 ope.
set(ind2+nr-1, col+ind2) = 1 ;
1083 ope.
set(ind0+nr-2, ind0+1) = 1 ;
1084 ope.
set(ind1+nr-2, ind1+2) = 1 ;
1087 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1090 mat_done.
set(l_q) = 1 ;
1093 const Matrice& oper = (par_mat == 0x0 ? ope :
1099 for (
int lin=0; lin<2*nr; lin++)
1101 for (
int lin=0; lin<nr; lin++)
1102 sec.
set(2*nr+lin) = (*source.get_spectral_va().c_cf)
1106 for (
int lin=0; lin<nr; lin++)
1107 sec.
set(lin) = (*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ;
1108 for (
int lin=0; lin<nr; lin++)
1109 sec.
set(lin+nr) = -0.5*(*hoverr.get_spectral_va().c_cf)
1112 for (
int lin=0; lin<nr; lin++)
1113 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
1115 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) ) ;
1118 for (
int lin=0; lin<nr; lin++)
1119 sec.
set(2*nr+lin) = -0.5/double(l_q+1)*(
1121 + (l_q+2)*(*hoverr.get_spectral_va().c_cf)(lz, k, j, lin) )
1122 + (*source.get_spectral_va().c_cf)(lz, k, j, lin) ;
1125 sec.
set(ind0+nr-2) = 0 ;
1126 sec.
set(ind0+nr-1) = 0 ;
1127 sec.
set(ind1+nr-1) = 0 ;
1128 sec.
set(ind1+nr-2) = 0 ;
1129 sec.
set(ind2+nr-1) = 0 ;
1131 for (
int i=0; i<nr; i++) {
1132 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1133 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1134 sol_part_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1137 sec.
set(ind0+nr-2) = 1 ;
1139 for (
int i=0; i<nr; i++) {
1140 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1141 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1142 sol_hom1_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1144 sec.
set(ind0+nr-2) = 0 ;
1145 sec.
set(ind1+nr-2) = 1 ;
1147 for (
int i=0; i<nr; i++) {
1148 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1149 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1150 sol_hom2_w.
set(lz, k, j, i) = sol(i+2*nr) ;
1157 int taille = 3*nz_bc + 1 ;
1158 if (cedbc) taille-- ;
1163 Tbl sec_membre(taille) ;
1164 Matrice systeme(taille, taille) ;
1165 int ligne ;
int colonne ;
1168 double chrr = (cedbc ? 0 : par_bc->
get_tbl_mod()(4) ) ;
1169 double dhrr = (cedbc ? 0 : par_bc->
get_tbl_mod()(5) ) ;
1170 double ceta = (cedbc ? 0 : par_bc->
get_tbl_mod()(6) ) ;
1171 double deta = (cedbc ? 0 : par_bc->
get_tbl_mod()(7) ) ;
1172 double cw = (cedbc ? 0 : par_bc->
get_tbl_mod()(8) ) ;
1173 double dw = (cedbc ? 0 : par_bc->
get_tbl_mod()(9) ) ;
1174 Mtbl_cf dhom1_hrr = sol_hom1_hrr ;
1175 Mtbl_cf dhom2_hrr = sol_hom2_hrr ;
1176 Mtbl_cf dhom3_hrr = sol_hom3_hrr ;
1177 Mtbl_cf dpart_hrr = sol_part_hrr ;
1178 Mtbl_cf dhom1_eta = sol_hom1_eta ;
1179 Mtbl_cf dhom2_eta = sol_hom2_eta ;
1180 Mtbl_cf dhom3_eta = sol_hom3_eta ;
1181 Mtbl_cf dpart_eta = sol_part_eta ;
1182 Mtbl_cf dhom1_w = sol_hom1_w ;
1183 Mtbl_cf dhom2_w = sol_hom2_w ;
1184 Mtbl_cf dhom3_w = sol_hom3_w ;
1185 Mtbl_cf dpart_w = sol_part_w ;
1194 for (
int k=0 ; k<np+1 ; k++)
1195 for (
int j=0 ; j<nt ; j++) {
1197 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q > 1)) {
1204 int nr = mgrid.
get_nr(0) ;
1219 for (
int zone=1 ; zone<nz_bc ; zone++) {
1220 nr = mgrid.
get_nr(zone) ;
1224 systeme.
set(ligne, colonne) =
1226 systeme.
set(ligne, colonne+1) =
1228 systeme.
set(ligne, colonne+2) =
1234 systeme.
set(ligne, colonne) =
1236 systeme.
set(ligne, colonne+1) =
1238 systeme.
set(ligne, colonne+2) =
1244 systeme.
set(ligne, colonne) =
1246 systeme.
set(ligne, colonne+1) =
1248 systeme.
set(ligne, colonne+2) =
1255 systeme.
set(ligne, colonne) =
1257 systeme.
set(ligne, colonne+1) =
1259 systeme.
set(ligne, colonne+2) =
1265 systeme.
set(ligne, colonne) =
1267 systeme.
set(ligne, colonne+1) =
1269 systeme.
set(ligne, colonne+2) =
1275 systeme.
set(ligne, colonne) =
1277 systeme.
set(ligne, colonne+1) =
1279 systeme.
set(ligne, colonne+2) =
1288 nr = mgrid.
get_nr(nz_bc) ;
1289 double alpha = mp_aff->
get_alpha()[nz_bc] ;
1294 systeme.
set(ligne, colonne) =
1296 systeme.
set(ligne, colonne+1) =
1298 if (!cedbc) systeme.
set(ligne, colonne+2) =
1304 systeme.
set(ligne, colonne) =
1306 systeme.
set(ligne, colonne+1) =
1308 if (!cedbc) systeme.
set(ligne, colonne+2) =
1314 systeme.
set(ligne, colonne) =
1316 systeme.
set(ligne, colonne+1) =
1318 if (!cedbc) systeme.
set(ligne, colonne+2) =
1326 systeme.
set(ligne, colonne) =
1333 systeme.
set(ligne, colonne+1) =
1342 assert(ligne == 0) ;
1345 systeme.
set(ligne, colonne+2) =
1372 for (
int i=0 ; i<nr ; i++) {
1373 mhrr.
set(0, k, j, i) = sol_part_hrr(0, k, j, i)
1374 + facteur(conte)*sol_hom3_hrr(0, k, j, i) ;
1375 meta.
set(0, k, j, i) = sol_part_eta(0, k, j, i)
1376 + facteur(conte)*sol_hom3_eta(0, k, j, i) ;
1377 mw.
set(0, k, j, i) = sol_part_w(0, k, j, i)
1378 + facteur(conte)*sol_hom3_w(0, k, j, i) ;
1381 for (
int zone=1 ; zone<=n_shell ; zone++) {
1382 nr = mgrid.
get_nr(zone) ;
1383 for (
int i=0 ; i<nr ; i++) {
1384 mhrr.
set(zone, k, j, i) = sol_part_hrr(zone, k, j, i)
1385 + facteur(conte)*sol_hom1_hrr(zone, k, j, i)
1386 + facteur(conte+1)*sol_hom2_hrr(zone, k, j, i)
1387 + facteur(conte+2)*sol_hom3_hrr(zone, k, j, i) ;
1389 meta.
set(zone, k, j, i) = sol_part_eta(zone, k, j, i)
1390 + facteur(conte)*sol_hom1_eta(zone, k, j, i)
1391 + facteur(conte+1)*sol_hom2_eta(zone, k, j, i)
1392 + facteur(conte+2)*sol_hom3_eta(zone, k, j, i) ;
1394 mw.
set(zone, k, j, i) = sol_part_w(zone, k, j, i)
1395 + facteur(conte)*sol_hom1_w(zone, k, j, i)
1396 + facteur(conte+1)*sol_hom2_w(zone, k, j, i)
1397 + facteur(conte+2)*sol_hom3_w(zone, k, j, i) ;
1402 nr = mgrid.
get_nr(nzm1) ;
1403 for (
int i=0 ; i<nr ; i++) {
1404 mhrr.
set(nzm1, k, j, i) = sol_part_hrr(nzm1, k, j, i)
1405 + facteur(conte)*sol_hom1_hrr(nzm1, k, j, i)
1406 + facteur(conte+1)*sol_hom2_hrr(nzm1, k, j, i) ;
1408 meta.
set(nzm1, k, j, i) = sol_part_eta(nzm1, k, j, i)
1409 + facteur(conte)*sol_hom1_eta(nzm1, k, j, i)
1410 + facteur(conte+1)*sol_hom2_eta(nzm1, k, j, i) ;
1412 mw.
set(nzm1, k, j, i) = sol_part_w(nzm1, k, j, i)
1413 + facteur(conte)*sol_hom1_w(nzm1, k, j, i)
1414 + facteur(conte+1)*sol_hom2_w(nzm1, k, j, i) ;
1439 Param* par_mat)
const {
1442 assert(mp_aff != 0x0) ;
1455 int nt = mgrid.
get_nt(0) ;
1456 int np = mgrid.
get_np(0) ;
1465 int lmax = base.
give_lmax(mgrid, 0) + 1;
1472 Mtbl_cf sol_part_hrr(mgrid, base) ; sol_part_hrr.annule_hard() ;
1479 bool need_calculation = true ;
1484 int l_q, m_q, base_r ;
1485 Itbl mat_done(lmax) ;
1491 int nr = mgrid.
get_nr(lz) ;
1492 double alpha = mp_aff->
get_alpha()[lz] ;
1494 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1496 for (
int k=0 ; k<np+1 ; k++) {
1497 for (
int j=0 ; j<nt ; j++) {
1500 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1501 if (need_calculation) {
1506 for (
int lin=0; lin<nr; lin++)
1507 for (
int col=0; col<nr; col++)
1508 ope.
set(lin,col) = md(lin,col) + 3*ms(lin,col) ;
1509 for (
int lin=0; lin<nr; lin++)
1510 for (
int col=0; col<nr; col++)
1511 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1512 for (
int lin=0; lin<nr; lin++)
1513 for (
int col=0; col<nr; col++)
1514 ope.
set(lin+nr,col) = -0.5*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+nr) = md(lin,col) + 3*ms(lin, col);
1520 for (
int col=0; col<2*nr; col++) {
1521 ope.
set(nr-1, col) = 0 ;
1522 ope.
set(2*nr-1, col) = 0 ;
1526 for (
int col=0; col<nr; col++) {
1527 ope.
set(nr-1, col) = pari ;
1528 ope.
set(2*nr-1, col+nr) = pari ;
1533 ope.
set(nr-1, nr-1) = 1 ;
1534 ope.
set(2*nr-1, 2*nr-1) = 1 ;
1538 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1541 mat_done.
set(l_q) = 1 ;
1545 const Matrice& oper = (par_mat == 0x0 ? ope :
1549 for (
int lin=0; lin<nr; lin++)
1551 for (
int lin=0; lin<nr; lin++)
1558 for (
int col=0; col<nr; col++) {
1563 sec.
set(nr-1) = h0 / 3. ;
1565 sec.
set(2*nr-1) = 0 ;
1567 for (
int i=0; i<nr; i++) {
1568 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1569 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1581 for (
int lz=1; lz<nz-1; lz++) {
1582 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1583 int nr = mgrid.
get_nr(lz) ;
1586 assert(mgrid.
get_nt(lz) == nt) ;
1587 assert(mgrid.
get_np(lz) == np) ;
1588 double alpha = mp_aff->
get_alpha()[lz] ;
1589 double ech = mp_aff->
get_beta()[lz] / alpha ;
1592 for (
int k=0 ; k<np+1 ; k++) {
1593 for (
int j=0 ; j<nt ; j++) {
1596 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1597 if (need_calculation) {
1603 for (
int lin=0; lin<nr; lin++)
1604 for (
int col=0; col<nr; col++)
1605 ope.
set(lin,col) = mxd(lin,col) + ech*md(lin,col)
1607 for (
int lin=0; lin<nr; lin++)
1608 for (
int col=0; col<nr; col++)
1609 ope.
set(lin,col+nr) = -l_q*(l_q+1)*mid(lin,col) ;
1610 for (
int lin=0; lin<nr; lin++)
1611 for (
int col=0; col<nr; col++)
1612 ope.
set(lin+nr,col) = -0.5*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+nr) = mxd(lin,col) + ech*md(lin,col)
1618 for (
int col=0; col<2*nr; col++) {
1619 ope.
set(ind0+nr-1, col) = 0 ;
1620 ope.
set(ind1+nr-1, col) = 0 ;
1622 ope.
set(ind0+nr-1, ind0) = 1 ;
1623 ope.
set(ind1+nr-1, ind1) = 1 ;
1626 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1629 mat_done.
set(l_q) = 1 ;
1632 const Matrice& oper = (par_mat == 0x0 ? ope :
1636 for (
int lin=0; lin<nr; lin++)
1639 for (
int lin=0; lin<nr; lin++)
1642 sec.
set(ind0+nr-1) = 0 ;
1643 sec.
set(ind1+nr-1) = 0 ;
1646 for (
int i=0; i<nr; i++) {
1647 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1648 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1651 sec.
set(ind0+nr-1) = 1 ;
1653 for (
int i=0; i<nr; i++) {
1654 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1655 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1657 sec.
set(ind0+nr-1) = 0 ;
1658 sec.
set(ind1+nr-1) = 1 ;
1660 for (
int i=0; i<nr; i++) {
1661 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1662 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1673 if (need_calculation && (par_mat != 0x0)) mat_done.
annule_hard() ;
1674 int nr = mgrid.
get_nr(lz) ;
1677 assert(mgrid.
get_nt(lz) == nt) ;
1678 assert(mgrid.
get_np(lz) == np) ;
1679 double alpha = mp_aff->
get_alpha()[lz] ;
1682 for (
int k=0 ; k<np+1 ; k++) {
1683 for (
int j=0 ; j<nt ; j++) {
1686 if ( (nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1687 if (need_calculation) {
1692 for (
int lin=0; lin<nr; lin++)
1693 for (
int col=0; col<nr; col++)
1694 ope.
set(lin,col) = - md(lin,col) + 3*ms(lin,col) ;
1695 for (
int lin=0; lin<nr; lin++)
1696 for (
int col=0; col<nr; col++)
1697 ope.
set(lin,col+nr) = -l_q*(l_q+1)*ms(lin,col) ;
1698 for (
int lin=0; lin<nr; lin++)
1699 for (
int col=0; col<nr; col++)
1700 ope.
set(lin+nr,col) = -0.5*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+nr) = -md(lin,col) + 3*ms(lin, col) ;
1706 for (
int col=0; col<2*nr; col++) {
1707 ope.
set(ind0+nr-2, col) = 0 ;
1708 ope.
set(ind0+nr-1, col) = 0 ;
1709 ope.
set(ind1+nr-2, col) = 0 ;
1710 ope.
set(ind1+nr-1, col) = 0 ;
1712 for (
int col=0; col<nr; col++) {
1713 ope.
set(ind0+nr-1, col+ind0) = 1 ;
1714 ope.
set(ind1+nr-1, col+ind1) = 1 ;
1716 ope.
set(ind0+nr-2, ind0+1) = 1 ;
1717 ope.
set(ind1+nr-2, ind1+1) = 1 ;
1720 if ((par_mat != 0x0) && (mat_done(l_q) == 0)) {
1723 mat_done.
set(l_q) = 1 ;
1726 const Matrice& oper = (par_mat == 0x0 ? ope :
1730 for (
int lin=0; lin<nr; lin++)
1733 for (
int lin=0; lin<nr; lin++)
1736 sec.
set(ind0+nr-2) = 0 ;
1737 sec.
set(ind0+nr-1) = 0 ;
1738 sec.
set(ind1+nr-2) = 0 ;
1739 sec.
set(ind1+nr-1) = 0 ;
1741 for (
int i=0; i<nr; i++) {
1742 sol_part_hrr.
set(lz, k, j, i) = sol(i) ;
1743 sol_part_eta.
set(lz, k, j, i) = sol(i+nr) ;
1746 sec.
set(ind0+nr-2) = 1 ;
1748 for (
int i=0; i<nr; i++) {
1749 sol_hom1_hrr.
set(lz, k, j, i) = sol(i) ;
1750 sol_hom1_eta.
set(lz, k, j, i) = sol(i+nr) ;
1752 sec.
set(ind0+nr-2) = 0 ;
1753 sec.
set(ind1+nr-2) = 1 ;
1755 for (
int i=0; i<nr; i++) {
1756 sol_hom2_hrr.
set(lz, k, j, i) = sol(i) ;
1757 sol_hom2_eta.
set(lz, k, j, i) = sol(i+nr) ;
1764 int taille = 2*(nz-1) ;
1768 Tbl sec_membre(taille) ;
1769 Matrice systeme(taille, taille) ;
1770 int ligne ;
int colonne ;
1774 for (
int k=0 ; k<np+1 ; k++)
1775 for (
int j=0 ; j<nt ; j++) {
1777 if ((nullite_plm(j, nt, k, np, base) == 1) && (l_q < 2)) {
1784 int nr = mgrid.
get_nr(0) ;
1786 sec_membre.
set(ligne) = -sol_part_hrr.val_out_bound_jk(0, j, k) ;
1792 for (
int zone=1 ; zone<nz-1 ; zone++) {
1793 nr = mgrid.
get_nr(zone) ;
1797 systeme.
set(ligne, colonne) =
1799 systeme.
set(ligne, colonne+1) =
1802 sec_membre.
set(ligne) += sol_part_hrr.val_in_bound_jk(zone, j, k) ;
1805 systeme.
set(ligne, colonne) =
1807 systeme.
set(ligne, colonne+1) =
1814 systeme.
set(ligne, colonne) =
1816 systeme.
set(ligne, colonne+1) =
1819 sec_membre.
set(ligne) -= sol_part_hrr.val_out_bound_jk(zone, j, k) ;
1822 systeme.
set(ligne, colonne) =
1824 systeme.
set(ligne, colonne+1) =
1833 nr = mgrid.
get_nr(nz-1) ;
1837 systeme.
set(ligne, colonne) =
1839 systeme.
set(ligne, colonne+1) =
1842 sec_membre.
set(ligne) += sol_part_hrr.val_in_bound_jk(nz-1, j, k) ;
1845 systeme.
set(ligne, colonne) =
1847 systeme.
set(ligne, colonne+1) =
1862 for (
int i=0 ; i<nr ; i++) {
1863 mhrr.
set(0, k, j, i) = sol_part_hrr(0, k, j, i) ;
1864 meta.
set(0, k, j, i) = sol_part_eta(0, k, j, i) ;
1866 for (
int zone=1 ; zone<nz-1 ; zone++) {
1867 nr = mgrid.
get_nr(zone) ;
1868 for (
int i=0 ; i<nr ; i++) {
1869 mhrr.
set(zone, k, j, i) = sol_part_hrr(zone, k, j, i)
1870 + facteur(conte)*sol_hom1_hrr(zone, k, j, i)
1871 + facteur(conte+1)*sol_hom2_hrr(zone, k, j, i) ;
1873 meta.
set(zone, k, j, i) = sol_part_eta(zone, k, j, i)
1874 + facteur(conte)*sol_hom1_eta(zone, k, j, i)
1875 + facteur(conte+1)*sol_hom2_eta(zone, k, j, i) ;
1879 nr = mgrid.
get_nr(nz-1) ;
1880 for (
int i=0 ; i<nr ; i++) {
1881 mhrr.
set(nz-1, k, j, i) = sol_part_hrr(nz-1, k, j, i)
1882 + facteur(conte)*sol_hom1_hrr(nz-1, k, j, i)
1883 + facteur(conte+1)*sol_hom2_hrr(nz-1, k, j, i) ;
1885 meta.
set(nz-1, k, j, i) = sol_part_eta(nz-1, k, j, i)
1886 + facteur(conte)*sol_hom1_eta(nz-1, k, j, i)
1887 + 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)