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(),
120 hole2.n_auto.set(), 0, precision) ;
125 hole1.n_auto.set().raccord(1) ;
126 hole2.n_auto.set().raccord(1) ;
129 hole1.n_auto.set() = relax*
hole1.n_auto() + (1-relax)*lapse_un_old() ;
130 hole2.n_auto.set() = relax*
hole2.n_auto() + (1-relax)*lapse_deux_old() ;
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)) ;
154 Cmp source_un (-
pow(
hole1.psi_tot(), 5.)*kk_un/8.) ;
157 Cmp source_deux (-
pow(
hole2.psi_tot(), 5.)*kk_deux/8.) ;
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++)
167 lim_un.
set(0, k, j, 0) = -0.5/
hole1.rayon*
hole1.psi_tot()(1, k, j, 0) ;
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++)
176 lim_deux.
set(0, k, j, 0) = -0.5/
hole2.rayon*
hole2.psi_tot()(1, k, j, 0) ;
180 neumann_binaire (source_un, source_deux, lim_un, lim_deux,
181 hole1.psi_auto.set(),
hole2.psi_auto.set(), 0, precision) ;
183 hole1.psi_auto.set() =
hole1.psi_auto() + 1./2. ;
184 hole2.psi_auto.set() =
hole2.psi_auto() + 1./2. ;
186 hole1.psi_auto.set().raccord(1) ;
187 hole2.psi_auto.set().raccord(1) ;
190 hole1.psi_auto.set() = relax*
hole1.psi_auto() + (1-relax)*psi_un_old() ;
191 hole2.psi_auto.set() = relax*
hole2.psi_auto() + (1-relax)*psi_deux_old() ;
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 ;
279 Base_val** bases_un =
hole1.mp.get_mg()->std_base_vect_cart() ;
280 Base_val** bases_deux =
hole2.mp.get_mg()->std_base_vect_cart() ;
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 ;
325 Valeur lim_x_deux (*
hole2.mp.get_mg()->get_angu()) ;
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] ;
333 Valeur lim_y_deux (*
hole2.mp.get_mg()->get_angu()) ;
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] ;
341 Valeur lim_z_deux (*
hole2.mp.get_mg()->get_angu()) ;
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,
362 hole1.shift_auto,
hole2.shift_auto, 0, precision) ;
364 for (
int i=0 ; i<3 ; i++) {
365 hole1.shift_auto.set(i).raccord(1) ;
366 hole2.shift_auto.set(i).raccord(1) ;
371 (1-relax)*shift_un_old ;
373 (1-relax)*shift_deux_old ;
377 hole1.regul = diff_un ;
378 hole2.regul = diff_deux ;
380 cout <<
"Difference relatives : " << diff_un <<
" " << diff_deux << endl ;