16#include <Matrice_Grossiere.h>
17#include <Matrice_Morse_Sym.h>
20 int imax,
int jmax,
int kmax, ArrOfInt& virt_blocs)
22 const int ni =
renum_.dimension(2) - 2;
23 const int nj =
renum_.dimension(1) - 2;
24 const int nk =
renum_.dimension(0) - 2;
28 for (
int k = kmin; k < kmax; k++)
29 for (
int j = jmin; j < jmax; j++)
30 for (
int i = imin; i < imax; i++)
32 int ii = (i + ni ) % ni;
33 int jj = (j + nj) % nj;
34 int kk = (k + nk) % nk;
45 for (
int k = kmin; k < kmax; k++)
46 for (
int j = jmin; j < jmax; j++)
47 for (
int i = imin; i < imax; i++)
60 int imax,
int jmax,
int kmax, ArrOfInt& items_to_send)
65 for (
int k = kmin; k < kmax; k++)
66 for (
int j = jmin; j < jmax; j++)
67 for (
int i = imin; i < imax; i++)
69 int index=
renum(i, j, k);
76 const int real_size_i ,
const double shear_perio)
87 x[0] = (int) floor(istmp);
88 x[1] = (int) floor(istmp)+1;
104 else if(nb_points==7)
116 for (
int pt = 0; pt < nb_points ; pt++)
119 for (
int pt_autre = 0; pt_autre < nb_points ; pt_autre++)
122 denum *= (x[pt] - x[pt_autre]);
128 for (
int pt = 0; pt < nb_points ; pt++)
138 for (
int pt_autre = 0; pt_autre < nb_points ; pt_autre++)
154 for (
int pt = 0; pt < nb_points ; pt++)
158 ii_p_[pt] = (i + real_size_i + x[pt] % real_size_i + real_size_i) % real_size_i;
160 else if (shear_perio<0.)
162 ii_m_[pt] = (i + real_size_i + x[pt] % real_size_i + real_size_i) % real_size_i;
175 int i_voisin,
int j_voisin,
int k_voisin,
176 const double coeff,
const double shear_perio)
178 const int indice=
renum(i, j, k);
179 const int indice_voisin =
renum(i_voisin, j_voisin, k_voisin);
181 const bool voisin_shear = !(shear_perio == 0.);
184 const double x = -coeff;
185 if (indice_voisin > indice)
189 if (indice_voisin < nreels)
203 else if (shear_perio<0.)
214 voisins_[indice].add(indice_voisin);
232 else if(shear_perio<0.)
258 int i_voisin,
int j_voisin,
int k_voisin,
259 const double coeff,
const double shear_perio)
261 const int indice=
renum(i, j, k);
262 const int indice_voisin =
renum(i_voisin, j_voisin, k_voisin);
264 const bool voisin_shear = !(shear_perio == 0.);
267 const double x = -coeff;
270 if ( (0 <= indice_voisin) && ( indice_voisin < nreels ) )
284 else if (shear_perio<0.)
313 else if(shear_perio<0.)
335 int i_voisin,
int j_voisin,
int k_voisin,
338 const int indice=
renum(i, j, k);
339 const int indice_voisin =
renum(i_voisin, j_voisin, k_voisin);
342 const double x = -coeff;
343 if (indice_voisin > indice)
347 if (indice_voisin < nreels)
349 voisins_[indice].add(indice_voisin);
364 int i_voisin,
int j_voisin,
int k_voisin,
367 const int indice=
renum(i, j, k);
368 const int indice_voisin =
renum(i_voisin, j_voisin, k_voisin);
371 const double x = -coeff;
374 if ( (0 <= indice_voisin) && ( indice_voisin < nreels ) )
DoubleLists coeffs_virt_2_
ArrOfDouble ponderation_shear_p_
const int & renum(int i, int j, int k) const
void interpolation_for_shear_periodicity(const int i, const int send_i, const double istmp, const int real_size_i, const double shear_perio)
void ajoute_coeff(int i, int j, int k, int i_voisin, int j_voisin, int k_voisin, const double coeff, const double shear_perio)
ajoute deux coefficients diagonal/extra-diagonal a la matrice
ArrOfDouble ponderation_shear_m_
int order_interpolation_poisson_solver_
void ajoute_coeff2(int i, int j, int k, int i_voisin, int j_voisin, int k_voisin, const double coeff, const double shear_perio)
ajoute deux coefficients diagonal/extra-diagonal a la matrice
void add_dist_bloc(int pe, int imin, int jmin, int kmin, int imax, int jmax, int kmax, ArrOfInt &items_to_send)
void add_virt_bloc(int pe, int &count, int imin, int jmin, int kmin, int imax, int jmax, int kmax, ArrOfInt &virt_blocs)
static int me()
renvoie mon rang dans le groupe de communication courant.
void append_array(_TYPE_ valeur)
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)