23char pde_frontiere_bin_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/PDE/pde_frontiere_bin.C,v 1.7 2014/10/13 08:53:29 j_novak Exp $" ;
80void dirichlet_binaire (
const Cmp& source_un,
const Cmp& source_deux,
81 const Valeur& boundary_un,
const Valeur& boundary_deux,
82 Cmp& sol_un, Cmp& sol_deux,
int num_front,
86 assert (source_un.get_mp() == sol_un.get_mp()) ;
87 assert (source_deux.get_mp() == sol_deux.get_mp()) ;
89 Valeur limite_un (boundary_un.get_mg()) ;
90 Valeur limite_deux (boundary_deux.get_mg()) ;
92 Cmp sol_un_old (sol_un.get_mp()) ;
93 Cmp sol_deux_old (sol_deux.get_mp()) ;
95 Mtbl xa_mtbl_un (source_un.get_mp()->xa) ;
96 Mtbl ya_mtbl_un (source_un.get_mp()->ya) ;
97 Mtbl za_mtbl_un (source_un.get_mp()->za) ;
98 Mtbl xa_mtbl_deux (source_deux.get_mp()->xa) ;
99 Mtbl ya_mtbl_deux (source_deux.get_mp()->ya) ;
100 Mtbl za_mtbl_deux (source_deux.get_mp()->za) ;
102 double xabs, yabs, zabs ;
103 double air, theta, phi ;
106 int nbrep_un = boundary_un.get_mg()->get_np(num_front) ;
107 int nbret_un = boundary_un.get_mg()->get_nt(num_front) ;
108 int nbrep_deux = boundary_deux.get_mg()->get_np(num_front) ;
109 int nbret_deux = boundary_deux.get_mg()->get_nt(num_front) ;
111 int nz_un = boundary_un.get_mg()->get_nzone() ;
112 int nz_deux = boundary_deux.get_mg()->get_nzone() ;
116 for (
int k=0 ; k<nbrep_un ; k++)
117 for (
int j=0 ; j<nbret_un ; j++)
118 limite_un.set(num_front, k, j, 0) =
119 sol_un.va.val_point_jk(num_front+1, -1, j, k) ;
120 limite_un.set_base (boundary_un.base) ;
123 for (
int k=0 ; k<nbrep_deux ; k++)
124 for (
int j=0 ; j<nbret_deux ; j++)
125 limite_deux.set(num_front, k, j, 0) =
126 sol_deux.va.val_point_jk(num_front+1, -1, j, k) ;
127 limite_deux.set_base (boundary_deux.base) ;
135 sol_un_old = sol_un ;
136 sol_deux_old = sol_deux ;
138 sol_un = source_un.poisson_dirichlet(limite_un, num_front) ;
139 sol_deux = source_deux.poisson_dirichlet(limite_deux, num_front) ;
141 xa_mtbl_deux = source_deux.get_mp()->xa ;
142 ya_mtbl_deux = source_deux.get_mp()->ya ;
143 za_mtbl_deux = source_deux.get_mp()->za ;
146 for (
int k=0 ; k<nbrep_deux ; k++)
147 for (
int j=0 ; j<nbret_deux ; j++) {
148 xabs = xa_mtbl_deux (num_front+1, k, j, 0) ;
149 yabs = ya_mtbl_deux (num_front+1, k, j, 0) ;
150 zabs = za_mtbl_deux (num_front+1, k, j, 0) ;
152 source_un.get_mp()->convert_absolute
153 (xabs, yabs, zabs, air, theta, phi) ;
154 valeur = sol_un.val_point(air, theta, phi) ;
156 limite_deux.set(num_front, k, j, 0) =
157 boundary_deux(num_front, k, j, 0) - valeur ;
160 xa_mtbl_un = source_un.get_mp()->xa ;
161 ya_mtbl_un = source_un.get_mp()->ya ;
162 za_mtbl_un = source_un.get_mp()->za ;
164 for (
int k=0 ; k<nbrep_un ; k++)
165 for (
int j=0 ; j<nbret_un ; j++) {
166 xabs = xa_mtbl_un (num_front+1, k, j, 0) ;
167 yabs = ya_mtbl_un (num_front+1, k, j, 0) ;
168 zabs = za_mtbl_un (num_front+1, k, j, 0) ;
170 source_deux.get_mp()->convert_absolute
171 (xabs, yabs, zabs, air, theta, phi) ;
172 valeur = sol_deux.val_point(air, theta, phi) ;
174 limite_un.set(num_front, k, j, 0) =
175 boundary_un(num_front, k, j, 0) - valeur ;
179 Tbl diff_un (
diffrelmax(sol_un, sol_un_old)) ;
180 for (
int i=num_front+1 ; i<nz_un ; i++)
181 if (diff_un(i) > erreur)
182 erreur = diff_un(i) ;
184 Tbl diff_deux (
diffrelmax(sol_deux, sol_deux_old)) ;
185 for (
int i=num_front+1 ; i<nz_deux ; i++)
186 if (diff_deux(i) > erreur)
187 erreur = diff_deux(i) ;
189 cout <<
"Pas " << conte <<
" : Difference " << erreur << endl ;
192 if (erreur < precision)
199void dirichlet_binaire (
const Cmp& source_un,
const Cmp& source_deux,
200 double bound_un,
double bound_deux,
201 Cmp& sol_un, Cmp& sol_deux,
int num_front,
204 Valeur boundary_un (source_un.get_mp()->get_mg()->get_angu()) ;
206 boundary_un.annule_hard() ;
208 boundary_un = bound_un ;
209 boundary_un.std_base_scal() ;
211 Valeur boundary_deux (source_deux.get_mp()->get_mg()->get_angu()) ;
213 boundary_deux.annule_hard() ;
215 boundary_deux = bound_deux ;
216 boundary_deux.std_base_scal() ;
218 dirichlet_binaire (source_un, source_deux, boundary_un, boundary_deux,
219 sol_un, sol_deux, num_front, precision) ;
224void dirichlet_binaire (
const Scalar& source_un,
const Scalar& source_deux,
225 const Valeur& boundary_un,
const Valeur& boundary_deux,
226 Scalar& sol_un, Scalar& sol_deux,
int num_front,
230 assert (source_un.get_mp() == sol_un.get_mp()) ;
231 assert (source_deux.get_mp() == sol_deux.get_mp()) ;
233 Valeur limite_un (boundary_un.get_mg()) ;
234 Valeur limite_deux (boundary_deux.get_mg()) ;
236 Scalar sol_un_old (sol_un.get_mp()) ;
237 Scalar sol_deux_old (sol_deux.get_mp()) ;
239 Mtbl xa_mtbl_un (source_un.get_mp().xa) ;
240 Mtbl ya_mtbl_un (source_un.get_mp().ya) ;
241 Mtbl za_mtbl_un (source_un.get_mp().za) ;
242 Mtbl xa_mtbl_deux (source_deux.get_mp().xa) ;
243 Mtbl ya_mtbl_deux (source_deux.get_mp().ya) ;
244 Mtbl za_mtbl_deux (source_deux.get_mp().za) ;
246 double xabs, yabs, zabs ;
247 double air, theta, phi ;
250 int nbrep_un = boundary_un.get_mg()->get_np(num_front) ;
251 int nbret_un = boundary_un.get_mg()->get_nt(num_front) ;
252 int nbrep_deux = boundary_deux.get_mg()->get_np(num_front) ;
253 int nbret_deux = boundary_deux.get_mg()->get_nt(num_front) ;
255 int nz_un = boundary_un.get_mg()->get_nzone() ;
256 int nz_deux = boundary_deux.get_mg()->get_nzone() ;
260 for (
int k=0 ; k<nbrep_un ; k++)
261 for (
int j=0 ; j<nbret_un ; j++)
262 limite_un.set(num_front, k, j, 0) =
263 sol_un.get_spectral_va().val_point_jk(num_front+1, -1, j, k) ;
264 limite_un.set_base (boundary_un.base) ;
267 for (
int k=0 ; k<nbrep_deux ; k++)
268 for (
int j=0 ; j<nbret_deux ; j++)
269 limite_deux.set(num_front, k, j, 0) =
270 sol_deux.get_spectral_va().val_point_jk(num_front+1, -1, j, k) ;
271 limite_deux.set_base (boundary_deux.base) ;
279 sol_un_old = sol_un ;
280 sol_deux_old = sol_deux ;
282 sol_un = source_un.poisson_dirichlet(limite_un, num_front) ;
283 sol_deux = source_deux.poisson_dirichlet(limite_deux, num_front) ;
285 xa_mtbl_deux = source_deux.get_mp().xa ;
286 ya_mtbl_deux = source_deux.get_mp().ya ;
287 za_mtbl_deux = source_deux.get_mp().za ;
290 for (
int k=0 ; k<nbrep_deux ; k++)
291 for (
int j=0 ; j<nbret_deux ; j++) {
292 xabs = xa_mtbl_deux (num_front+1, k, j, 0) ;
293 yabs = ya_mtbl_deux (num_front+1, k, j, 0) ;
294 zabs = za_mtbl_deux (num_front+1, k, j, 0) ;
296 source_un.get_mp().convert_absolute
297 (xabs, yabs, zabs, air, theta, phi) ;
298 valeur = sol_un.val_point(air, theta, phi) ;
300 limite_deux.set(num_front, k, j, 0) =
301 boundary_deux(num_front, k, j, 0) - valeur ;
304 xa_mtbl_un = source_un.get_mp().xa ;
305 ya_mtbl_un = source_un.get_mp().ya ;
306 za_mtbl_un = source_un.get_mp().za ;
308 for (
int k=0 ; k<nbrep_un ; k++)
309 for (
int j=0 ; j<nbret_un ; j++) {
310 xabs = xa_mtbl_un (num_front+1, k, j, 0) ;
311 yabs = ya_mtbl_un (num_front+1, k, j, 0) ;
312 zabs = za_mtbl_un (num_front+1, k, j, 0) ;
314 source_deux.get_mp().convert_absolute
315 (xabs, yabs, zabs, air, theta, phi) ;
316 valeur = sol_deux.val_point(air, theta, phi) ;
318 limite_un.set(num_front, k, j, 0) =
319 boundary_un(num_front, k, j, 0) - valeur ;
324 Tbl diff_un (
diffrelmax(sol_un, sol_un_old)) ;
325 for (
int i=num_front+1 ; i<nz_un ; i++)
326 if (diff_un(i) > erreur)
327 erreur = diff_un(i) ;
329 Tbl diff_deux (
diffrelmax(sol_deux, sol_deux_old)) ;
330 for (
int i=num_front+1 ; i<nz_deux ; i++)
331 if (diff_deux(i) > erreur)
332 erreur = diff_deux(i) ;
334 cout <<
"Pas " << conte <<
" : Difference " << erreur << endl ;
337 if (erreur < precision)
347void neumann_binaire (
const Cmp& source_un,
const Cmp& source_deux,
348 const Valeur& boundary_un,
const Valeur& boundary_deux,
349 Cmp& sol_un, Cmp& sol_deux,
int num_front,
353 assert (source_un.get_mp() == sol_un.get_mp()) ;
354 assert (source_deux.get_mp() == sol_deux.get_mp()) ;
357 double orient_un = source_un.get_mp()->get_rot_phi() ;
358 assert ((orient_un==0) || (orient_un==M_PI)) ;
359 double orient_deux = source_deux.get_mp()->get_rot_phi() ;
360 assert ((orient_deux==0) || (orient_deux==M_PI)) ;
361 int same_orient = (orient_un==orient_deux) ? 1 : -1 ;
363 Valeur limite_un (boundary_un.get_mg()) ;
364 Valeur limite_deux (boundary_deux.get_mg()) ;
366 Cmp sol_un_old (sol_un.get_mp()) ;
367 Cmp sol_deux_old (sol_deux.get_mp()) ;
369 Mtbl xa_mtbl_un (source_un.get_mp()->xa) ;
370 Mtbl ya_mtbl_un (source_un.get_mp()->ya) ;
371 Mtbl za_mtbl_un (source_un.get_mp()->za) ;
373 Mtbl cost_mtbl_un (source_un.get_mp()->cost) ;
374 Mtbl sint_mtbl_un (source_un.get_mp()->sint) ;
375 Mtbl cosp_mtbl_un (source_un.get_mp()->cosp) ;
376 Mtbl sinp_mtbl_un (source_un.get_mp()->sinp) ;
379 Mtbl xa_mtbl_deux (source_deux.get_mp()->xa) ;
380 Mtbl ya_mtbl_deux (source_deux.get_mp()->ya) ;
381 Mtbl za_mtbl_deux (source_deux.get_mp()->za) ;
383 Mtbl cost_mtbl_deux (source_deux.get_mp()->cost) ;
384 Mtbl sint_mtbl_deux (source_deux.get_mp()->sint) ;
385 Mtbl cosp_mtbl_deux (source_deux.get_mp()->cosp) ;
386 Mtbl sinp_mtbl_deux (source_deux.get_mp()->sinp) ;
388 double xabs, yabs, zabs ;
389 double air, theta, phi ;
392 int nbrep_un = boundary_un.get_mg()->get_np(num_front) ;
393 int nbret_un = boundary_un.get_mg()->get_nt(num_front) ;
394 int nbrep_deux = boundary_deux.get_mg()->get_np(num_front) ;
395 int nbret_deux = boundary_deux.get_mg()->get_nt(num_front) ;
397 int nz_un = boundary_un.get_mg()->get_nzone() ;
398 int nz_deux = boundary_deux.get_mg()->get_nzone() ;
403 Cmp der_un (sol_un.dsdr()) ;
404 Cmp der_deux (sol_deux.dsdr()) ;
406 for (
int k=0 ; k<nbrep_un ; k++)
407 for (
int j=0 ; j<nbret_un ; j++)
408 limite_un.set(num_front, k, j, 0) =
409 der_un.va.val_point_jk(num_front+1, -1, j, k) ;
410 limite_un.set_base (boundary_un.base) ;
412 for (
int k=0 ; k<nbrep_deux ; k++)
413 for (
int j=0 ; j<nbret_deux ; j++)
414 limite_deux.set(num_front, k, j, 0) =
415 der_deux.va.val_point_jk(num_front+1, -1, j, k) ;
416 limite_deux.set_base (boundary_deux.base) ;
423 sol_un_old = sol_un ;
424 sol_deux_old = sol_deux ;
426 sol_un = source_un.poisson_neumann(limite_un, num_front) ;
427 sol_deux = source_deux.poisson_neumann(limite_deux, num_front) ;
430 Tenseur copie_un (sol_un) ;
431 Tenseur grad_sol_un (copie_un.gradient()) ;
432 grad_sol_un.dec2_dzpuis() ;
433 grad_sol_un.set(0) = grad_sol_un(0)*same_orient ;
434 grad_sol_un.set(1) = grad_sol_un(1)*same_orient ;
436 for (
int k=0 ; k<nbrep_deux ; k++)
437 for (
int j=0 ; j<nbret_deux ; j++) {
438 xabs = xa_mtbl_deux (num_front+1, k, j, 0) ;
439 yabs = ya_mtbl_deux (num_front+1, k, j, 0) ;
440 zabs = za_mtbl_deux (num_front+1, k, j, 0) ;
442 source_un.get_mp()->convert_absolute
443 (xabs, yabs, zabs, air, theta, phi) ;
445 valeur = sint_mtbl_deux (num_front+1, k, j, 0) * (
446cosp_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(0).val_point(air, theta, phi)+
447sinp_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(1).val_point(air, theta, phi))+
448cost_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(2).val_point(air, theta, phi);
450 limite_deux.set(num_front, k, j, 0) =
451 boundary_deux(num_front, k, j, 0) - valeur ;
454 Tenseur copie_deux (sol_deux) ;
455 Tenseur grad_sol_deux (copie_deux.gradient()) ;
456 grad_sol_deux.dec2_dzpuis() ;
457 grad_sol_deux.set(0) = grad_sol_deux(0)*same_orient ;
458 grad_sol_deux.set(1) = grad_sol_deux(1)*same_orient ;
460 for (
int k=0 ; k<nbrep_un ; k++)
461 for (
int j=0 ; j<nbret_un ; j++) {
462 xabs = xa_mtbl_un (num_front+1, k, j, 0) ;
463 yabs = ya_mtbl_un (num_front+1, k, j, 0) ;
464 zabs = za_mtbl_un (num_front+1, k, j, 0) ;
466 source_deux.get_mp()->convert_absolute
467 (xabs, yabs, zabs, air, theta, phi) ;
469 valeur = sint_mtbl_un (num_front+1, k, j, 0) * (
470cosp_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(0).val_point(air, theta, phi)+
471sinp_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(1).val_point(air, theta, phi))+
472cost_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(2).val_point(air, theta, phi);
474 limite_un.set(num_front, k, j, 0) =
475 boundary_un(num_front, k, j, 0) - valeur ;
479 Tbl diff_un (
diffrelmax(sol_un, sol_un_old)) ;
480 for (
int i=num_front+1 ; i<nz_un ; i++)
481 if (diff_un(i) > erreur)
482 erreur = diff_un(i) ;
484 Tbl diff_deux (
diffrelmax(sol_deux, sol_deux_old)) ;
485 for (
int i=num_front+1 ; i<nz_deux ; i++)
486 if (diff_deux(i) > erreur)
487 erreur = diff_deux(i) ;
489 cout <<
"Pas " << conte <<
" : Difference " << erreur << endl ;
492 if (erreur < precision)
498void neumann_binaire (
const Cmp& source_un,
const Cmp& source_deux,
499 double bound_un,
double bound_deux,
500 Cmp& sol_un, Cmp& sol_deux,
int num_front,
503 Valeur boundary_un (source_un.get_mp()->get_mg()->get_angu()) ;
505 boundary_un.annule_hard () ;
507 boundary_un = bound_un ;
508 boundary_un.std_base_scal() ;
510 Valeur boundary_deux (source_deux.get_mp()->get_mg()->get_angu()) ;
512 boundary_deux.annule_hard() ;
514 boundary_deux = bound_deux ;
515 boundary_deux.std_base_scal() ;
517 neumann_binaire (source_un, source_deux, boundary_un, boundary_deux,
518 sol_un, sol_deux, num_front, precision) ;
520void neumann_binaire (
const Scalar& source_un,
const Scalar& source_deux,
521 const Valeur& boundary_un,
const Valeur& boundary_deux,
522 Scalar& sol_un, Scalar& sol_deux,
int num_front,
526 assert (source_un.get_mp() == sol_un.get_mp()) ;
527 assert (source_deux.get_mp() == sol_deux.get_mp()) ;
530 double orient_un = source_un.get_mp().get_rot_phi() ;
531 assert ((orient_un==0) || (orient_un==M_PI)) ;
532 double orient_deux = source_deux.get_mp().get_rot_phi() ;
533 assert ((orient_deux==0) || (orient_deux==M_PI)) ;
534 int same_orient = (orient_un==orient_deux) ? 1 : -1 ;
536 Valeur limite_un (boundary_un.get_mg()) ;
537 Valeur limite_deux (boundary_deux.get_mg()) ;
539 Scalar sol_un_old (sol_un.get_mp()) ;
540 Scalar sol_deux_old (sol_deux.get_mp()) ;
542 Mtbl xa_mtbl_un (source_un.get_mp().xa) ;
543 Mtbl ya_mtbl_un (source_un.get_mp().ya) ;
544 Mtbl za_mtbl_un (source_un.get_mp().za) ;
546 Mtbl cost_mtbl_un (source_un.get_mp().cost) ;
547 Mtbl sint_mtbl_un (source_un.get_mp().sint) ;
548 Mtbl cosp_mtbl_un (source_un.get_mp().cosp) ;
549 Mtbl sinp_mtbl_un (source_un.get_mp().sinp) ;
551 Mtbl xa_mtbl_deux (source_deux.get_mp().xa) ;
552 Mtbl ya_mtbl_deux (source_deux.get_mp().ya) ;
553 Mtbl za_mtbl_deux (source_deux.get_mp().za) ;
555 Mtbl cost_mtbl_deux (source_deux.get_mp().cost) ;
556 Mtbl sint_mtbl_deux (source_deux.get_mp().sint) ;
557 Mtbl cosp_mtbl_deux (source_deux.get_mp().cosp) ;
558 Mtbl sinp_mtbl_deux (source_deux.get_mp().sinp) ;
560 double xabs, yabs, zabs ;
561 double air, theta, phi ;
564 const Metric_flat& ff_un (source_un.get_mp().flat_met_cart()) ;
565 const Metric_flat& ff_deux (source_deux.get_mp().flat_met_cart()) ;
567 int nbrep_un = boundary_un.get_mg()->get_np(num_front) ;
568 int nbret_un = boundary_un.get_mg()->get_nt(num_front) ;
569 int nbrep_deux = boundary_deux.get_mg()->get_np(num_front) ;
570 int nbret_deux = boundary_deux.get_mg()->get_nt(num_front) ;
572 int nz_un = boundary_un.get_mg()->get_nzone() ;
573 int nz_deux = boundary_deux.get_mg()->get_nzone() ;
578 Scalar der_un (sol_un.dsdr()) ;
579 Scalar der_deux (sol_deux.dsdr()) ;
581 for (
int k=0 ; k<nbrep_un ; k++)
582 for (
int j=0 ; j<nbret_un ; j++)
583 limite_un.set(num_front, k, j, 0) =
584 der_un.get_spectral_va().val_point_jk(num_front+1, -1, j, k) ;
585 limite_un.set_base (boundary_un.base) ;
587 for (
int k=0 ; k<nbrep_deux ; k++)
588 for (
int j=0 ; j<nbret_deux ; j++)
589 limite_deux.set(num_front, k, j, 0) =
590 der_deux.get_spectral_va().val_point_jk(num_front+1, -1, j, k) ;
591 limite_deux.set_base (boundary_deux.base) ;
598 sol_un_old = sol_un ;
599 sol_deux_old = sol_deux ;
601 sol_un = source_un.poisson_neumann(limite_un, num_front) ;
602 sol_deux = source_deux.poisson_neumann(limite_deux, num_front) ;
605 Scalar copie_un (sol_un) ;
606 Vector grad_sol_un (copie_un.derive_cov(ff_un)) ;
607 grad_sol_un.dec_dzpuis(2) ;
608 grad_sol_un.set(1) = grad_sol_un(1)*same_orient ;
609 grad_sol_un.set(2) = grad_sol_un(2)*same_orient ;
612 for (
int k=0 ; k<nbrep_deux ; k++)
613 for (
int j=0 ; j<nbret_deux ; j++) {
614 xabs = xa_mtbl_deux (num_front+1, k, j, 0) ;
615 yabs = ya_mtbl_deux (num_front+1, k, j, 0) ;
616 zabs = za_mtbl_deux (num_front+1, k, j, 0) ;
618 source_un.get_mp().convert_absolute
619 (xabs, yabs, zabs, air, theta, phi) ;
621 valeur = sint_mtbl_deux (num_front+1, k, j, 0) * (
622cosp_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(1).val_point(air, theta, phi)+
623sinp_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(2).val_point(air, theta, phi))+
624cost_mtbl_deux(num_front+1, k, j, 0)*grad_sol_un(3).val_point(air, theta, phi);
626 limite_deux.set(num_front, k, j, 0) =
627 boundary_deux(num_front, k, j, 0) - valeur ;
630 Scalar copie_deux (sol_deux) ;
631 Vector grad_sol_deux (copie_deux.derive_cov(ff_deux)) ;
632 grad_sol_deux.dec_dzpuis(2) ;
633 grad_sol_deux.set(1) = grad_sol_deux(1)*same_orient ;
634 grad_sol_deux.set(2) = grad_sol_deux(2)*same_orient ;
636 for (
int k=0 ; k<nbrep_un ; k++)
637 for (
int j=0 ; j<nbret_un ; j++) {
638 xabs = xa_mtbl_un (num_front+1, k, j, 0) ;
639 yabs = ya_mtbl_un (num_front+1, k, j, 0) ;
640 zabs = za_mtbl_un (num_front+1, k, j, 0) ;
642 source_deux.get_mp().convert_absolute
643 (xabs, yabs, zabs, air, theta, phi) ;
645 valeur = sint_mtbl_un (num_front+1, k, j, 0) * (
646cosp_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(1).val_point(air, theta, phi)+
647sinp_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(2).val_point(air, theta, phi))+
648cost_mtbl_un(num_front+1, k, j, 0)*grad_sol_deux(3).val_point(air, theta, phi);
652 limite_un.set(num_front, k, j, 0) =
653 boundary_un(num_front, k, j, 0) - valeur ;
657 Tbl diff_un (
diffrelmax(sol_un, sol_un_old)) ;
658 for (
int i=num_front+1 ; i<nz_un ; i++)
659 if (diff_un(i) > erreur)
660 erreur = diff_un(i) ;
662 Tbl diff_deux (
diffrelmax(sol_deux, sol_deux_old)) ;
663 for (
int i=num_front+1 ; i<nz_deux ; i++)
664 if (diff_deux(i) > erreur)
665 erreur = diff_deux(i) ;
667 cout <<
"Pas " << conte <<
" : Difference " << erreur << endl ;
670 Scalar source1 (source_un) ;
671 Scalar solution1 (sol_un) ;
676 if (erreur < precision)
Tbl diffrelmax(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (max version).