116 int nitermax = par.
get_int(0) ;
119 int nz_search = par.
get_int(2) ;
120 int adapt_flag = par.
get_int(3) ;
129 int nz = mg->get_nzone() ;
130 int nt = mg->get_nt(0) ;
131 int np = mg->get_np(0) ;
136 assert(ent.
get_mp() ==
this) ;
137 assert(nzadapt < nz) ;
138 assert(nzadapt > 0) ;
139 assert(nz_search >= nzadapt) ;
140 for (
int l=1; l<nz; l++) {
141 assert( mg->get_nt(l) == nt ) ;
142 assert( mg->get_np(l) == np ) ;
146 assert(ent_limit.
get_etat() == ETATQCQ) ;
152 const double xi_max = 1 ;
158 if ( (adapt_flag == 0) || (nzadapt == 0) ) {
172 double* nalpha =
new double[nz] ;
173 double* nbeta =
new double[nz] ;
178 Tbl xtgg(np, nt, 1) ;
180 Tbl xtff(np, nt, 1) ;
186 double ent0 = ent_limit(0) ;
194 (ent.
va).equipot_outward(ent0, nz_search, precis, nitermax, niter0,
197 niter = ( niter0 > niter ) ? niter0 : niter ;
206 assert(l_ext.
get_etat() == ETATQCQ) ;
208 double r_eq =
val_r_jk(0, xi_max, j_bord, k_bord) ;
210 double* pxtgg = xtgg.
t ;
211 int* pl_ext = l_ext.
t ;
212 double* px_ext = x_ext.
t ;
214 for (
int k=0; k<np; k++) {
215 for (
int j=0; j<nt; j++) {
217 *pxtgg =
val_r_jk(*pl_ext, *px_ext, j, k) - r_eq ;
231 int base_p = ( ((ent.
va).base).b[0] ) &
MSQ_P ;
245 double* pxtff = xtff.
t ;
257 double* cf =
new double[(np+2)*nt] ;
258 double* cf0 =
new double[(np+2)*nt] ;
259 double* ff0 =
new double[np*nt] ;
261 for (
int i=0; i < np*nt; i++) {
266 cfpcossin(deg, dimc, cf) ;
272 for (
int k=0; k<np-1; k += 4) {
273 for(
int j=0; j<2*nt; j++) {
278 for(
int j=0; j<2*nt; j++) {
285 for(
int j=0; j<2*nt; j++) {
292 cipcossin(deg, dimc, deg, cf0, ff0) ;
295 for (
int i=0; i < np*nt; i++) {
304 for (
int k=0; k<np-1; k += 4) {
305 for(
int j=0; j<2*nt; j++) {
310 for(
int j=0; j<2*nt; j++) {
317 for(
int j=0; j<2*nt; j++) {
323 cipcossin(deg, dimc, deg, cf0, ff0) ;
326 for (
int i=0; i < np*nt; i++) {
338 cout <<
"Map_et::adapt: unknown phi basis !" << endl ;
339 cout <<
" base_p = " << base_p << endl ;
350 double mu = - fact_lamu *
min(xtgg) ;
355 nalpha[0] = r_eq - lambda - mu ;
366 *(nff.
t[0]) = ( xtff + lambda ) / nalpha[0] ;
367 *(ngg.
t[0]) = ( xtgg + mu ) / nalpha[0] ;
375 double r_eqlm1 = r_eq ;
380 for (
int l=1; l<nzadapt; l++) {
382 ent0 = ent_limit(l) ;
389 (ent.
va).equipot_outward(ent0, nz_search, precis, nitermax, niter0,
392 niter = ( niter0 > niter ) ? niter0 : niter ;
401 assert(l_ext.
get_etat() == ETATQCQ) ;
403 r_eq =
val_r_jk(l, xi_max, j_bord, k_bord) ;
409 for (
int k=0; k<np; k++) {
410 for (
int j=0; j<nt; j++) {
412 *pxtgg =
val_r_jk(*pl_ext, *px_ext, j, k) - r_eq ;
424 lambda = - fact_lamu *
max(xtff) ;
425 mu = - fact_lamu *
min(xtgg) ;
430 nalpha[l] = .5 * ( r_eq - r_eqlm1 + lambda - mu ) ;
431 nbeta[l] = .5 * ( r_eq + r_eqlm1 - lambda - mu ) ;
436 *(nff.
t[l]) = ( xtff + lambda ) / nalpha[l] ;
437 *(ngg.
t[l]) = ( xtgg + mu ) / nalpha[l] ;
448 if (mg->get_type_r(nzadapt) == UNSURR) {
453 xtff = 1 / (xtff + r_eqlm1) -
double(1) / r_eqlm1 ;
455 lambda = - fact_lamu *
min(xtff) ;
457 nalpha[nzadapt] = .5 * ( lambda - double(1) / r_eqlm1 ) ;
458 nbeta[nzadapt] = - nalpha[nzadapt] ;
461 *(nff.
t[nzadapt]) = ( xtff + lambda ) / nalpha[nzadapt] ;
468 r_eq =
val_r_jk(nzadapt, xi_max, j_bord, k_bord) ;
470 lambda = - fact_lamu *
max(xtff) ;
472 nalpha[nzadapt] = .5 * ( r_eq - r_eqlm1 + lambda ) ;
473 nbeta[nzadapt] = .5 * ( r_eq + r_eqlm1 - lambda ) ;
477 *(nff.
t[nzadapt]) = ( xtff + lambda ) / nalpha[nzadapt] ;
489 for (
int l=nzadapt+1; l<nz; l++) {
491 nalpha[l] =
alpha[l] ;
496 if (
ff.get_etat() == ETATZERO) {
497 for (
int l=nzadapt+1; l<nz; l++) {
502 assert(
ff.get_etat() == ETATQCQ) ;
503 assert(
ff.c != 0x0) ;
504 assert(
ff.c->get_etat() == ETATQCQ) ;
505 for (
int l=nzadapt+1; l<nz; l++) {
506 *(nff.
t[l]) = *(
ff.c->t[l]) ;
510 if (
gg.get_etat() == ETATZERO) {
511 for (
int l=nzadapt+1; l<nz; l++) {
516 assert(
gg.get_etat() == ETATQCQ) ;
517 assert(
gg.c != 0x0) ;
518 assert(
gg.c->get_etat() == ETATQCQ) ;
519 for (
int l=nzadapt+1; l<nz; l++) {
520 *(ngg.
t[l]) = *(
gg.c->t[l]) ;
530 for (
int l=0; l<nz; l++) {
532 if (mg->get_type_r(l) == UNSURR) {
533 alpha[l] = nalpha[l] / fact_echelle ;
534 beta[l] = nbeta[l] / fact_echelle ;
537 alpha[l] = fact_echelle * nalpha[l] ;
538 beta[l] = fact_echelle * nbeta[l] ;
550 if (nbr_filtre !=0) {
553 ff.set_etat_cf_qcq() ;
554 gg.set_etat_cf_qcq() ;
555 for (
int l=0 ; l<nzadapt+1 ; l++)
556 for (
int k=np-nbr_filtre ; k<np ; k++)
557 for (
int j=0 ; j<nt ; j++) {
558 if (
ff.c_cf->t[l]->get_etat() != ETATZERO)
559 ff.c_cf->set(l, k,j,0) = 0 ;
561 if (
gg.c_cf->t[l]->get_etat() != ETATZERO)
562 gg.c_cf->set(l,k,j,0) = 0 ;