89 assert ((relax >0) && (relax<=1)) ;
91 cout <<
"-----------------------------------------------" << endl ;
92 cout <<
"Resolution LAPSE" << endl ;
98 Cmp kk_un (auxi_un(0, 0)+auxi_un(1, 1)+auxi_un(2, 2)) ;
101 Cmp kk_deux (auxi_deux(0, 0)+auxi_deux(1, 1)+auxi_deux(2, 2)) ;
119 dirichlet_binaire (source_un, source_deux, -1., -1.,
hole1.
n_auto.
set(),
139 assert ((relax>0) && (relax<=1)) ;
141 cout <<
"-----------------------------------------------" << endl ;
142 cout <<
"Resolution PSI" << endl ;
148 Cmp kk_un (auxi_un(0, 0)+auxi_un(1, 1)+auxi_un(2, 2)) ;
151 Cmp kk_deux (auxi_deux(0, 0)+auxi_deux(1, 1)+auxi_deux(2, 2)) ;
161 int np_un =
hole1.
mp.get_mg()->get_np(1) ;
162 int nt_un =
hole1.
mp.get_mg()->get_nt(1) ;
165 for (
int k=0 ; k<np_un ; k++)
166 for (
int j=0 ; j<nt_un ; j++)
170 int np_deux =
hole2.
mp.get_mg()->get_np(1) ;
171 int nt_deux =
hole2.
mp.get_mg()->get_nt(1) ;
174 for (
int k=0 ; k<np_deux ; k++)
175 for (
int j=0 ; j<nt_deux ; j++)
180 neumann_binaire (source_un, source_deux, lim_un, lim_deux,
201 cout <<
"------------------------------------------------" << endl ;
202 cout <<
"Resolution shift : Omega = " <<
omega << endl ;
208 if (source_un.
get_etat() == ETATZERO) {
210 for (
int i=0 ; i<3 ; i++)
218 if (source_deux.
get_etat() == ETATZERO) {
220 for (
int i=0 ; i<3 ; i++)
226 for (
int i=0 ; i<3 ; i++) {
227 if (source_un(i).get_etat() != ETATZERO)
229 if (source_deux(i).get_etat() != ETATZERO)
234 double orientation_un =
hole1.
mp.get_rot_phi() ;
235 assert ((orientation_un==0) || (orientation_un == M_PI)) ;
237 double orientation_deux =
hole2.
mp.get_rot_phi() ;
238 assert ((orientation_deux==0) || (orientation_deux == M_PI)) ;
240 int aligne_un = (orientation_un == 0) ? 1 : -1 ;
241 int aligne_deux = (orientation_deux == 0) ? 1 : -1 ;
246 for (
int i=0 ; i<3 ; i++) {
247 if (source_un(i).get_etat() == ETATQCQ)
249 if (source_deux(i).get_etat() == ETATQCQ)
259 int np_un =
hole1.
mp.get_mg()->get_np (1) ;
260 int nt_un =
hole1.
mp.get_mg()->get_nt (1) ;
262 Mtbl xa_mtbl_un (source_un.
get_mp()->get_mg()) ;
264 Mtbl ya_mtbl_un (source_un.
get_mp()->get_mg()) ;
267 xa_mtbl_un = source_un.
get_mp()->xa ;
268 ya_mtbl_un = source_un.
get_mp()->ya ;
270 Mtbl x_mtbl_un (source_un.
get_mp()->get_mg()) ;
272 Mtbl y_mtbl_un (source_un.
get_mp()->get_mg()) ;
275 x_mtbl_un = source_un.
get_mp()->x ;
276 y_mtbl_un = source_un.
get_mp()->y ;
285 for (
int k=0 ; k<np_un ; k++)
286 for (
int j=0 ; j<nt_un ; j++)
287 lim_x_un.
set(0, k, j, 0) = aligne_un*
omega*ya_mtbl_un(0, 0, 0, 0) + aligne_un*
hole1.
omega_local*y_mtbl_un(1,k,j,0) ;
288 lim_x_un.
base = *bases_un[0] ;
293 for (
int k=0 ; k<np_un ; k++)
294 for (
int j=0 ; j<nt_un ; j++)
295 lim_y_un.
set(0, k, j, 0) = -aligne_un*
omega*xa_mtbl_un(0, 0, 0, 0) - aligne_un*
hole1.
omega_local*x_mtbl_un(1,k,j,0) ;;
296 lim_y_un.
base = *bases_un[1] ;
300 for (
int k=0 ; k<np_un ; k++)
301 for (
int j=0 ; j<nt_un ; j++)
302 lim_z_un.
set(0, k, j, 0) = 0 ;
303 lim_z_un.
base = *bases_un[2] ;
306 int np_deux =
hole2.
mp.get_mg()->get_np (1) ;
307 int nt_deux =
hole2.
mp.get_mg()->get_nt (1) ;
309 Mtbl xa_mtbl_deux (source_deux.
get_mp()->get_mg()) ;
311 Mtbl ya_mtbl_deux (source_deux.
get_mp()->get_mg()) ;
314 xa_mtbl_deux = source_deux.
get_mp()->xa ;
315 ya_mtbl_deux = source_deux.
get_mp()->ya ;
317 Mtbl x_mtbl_deux (source_deux.
get_mp()->get_mg()) ;
319 Mtbl y_mtbl_deux (source_deux.
get_mp()->get_mg()) ;
322 x_mtbl_deux = source_deux.
get_mp()->x ;
323 y_mtbl_deux = source_deux.
get_mp()->y ;
328 for (
int k=0 ; k<np_deux ; k++)
329 for (
int j=0 ; j<nt_deux ; j++)
330 lim_x_deux.
set(0, k, j, 0) = aligne_deux*
omega*ya_mtbl_deux(0, 0, 0, 0) + aligne_deux*
hole2.
omega_local*y_mtbl_deux(1,k,j,0) ;
331 lim_x_deux.
base = *bases_deux[0] ;
336 for (
int k=0 ; k<np_deux ; k++)
337 for (
int j=0 ; j<nt_deux ; j++)
338 lim_y_deux.
set(0, k, j, 0) = -aligne_deux*
omega*xa_mtbl_deux(0, 0, 0, 0) - aligne_deux*
hole2.
omega_local*x_mtbl_deux(1,k,j,0) ;
339 lim_y_deux.
base = *bases_deux[1] ;
343 for (
int k=0 ; k<np_deux ; k++)
344 for (
int j=0 ; j<nt_deux ; j++)
345 lim_z_deux.
set(0, k, j, 0) = 0 ;
346 lim_z_deux.
base = *bases_deux[2] ;
348 for (
int i=0 ; i<3 ; i++) {
350 delete bases_deux[i] ;
353 delete [] bases_deux ;
359 poisson_vect_binaire (1./3., source_un, source_deux,
360 lim_x_un, lim_y_un, lim_z_un,
361 lim_x_deux, lim_y_deux, lim_z_deux,
364 for (
int i=0 ; i<3 ; i++) {
371 (1-relax)*shift_un_old ;
373 (1-relax)*shift_deux_old ;
380 cout <<
"Difference relatives : " << diff_un <<
" " << diff_deux << endl ;