42 IntVect rang_voisin(nfin);
45 for (
int num_face = ndeb; num_face < nfin; num_face++)
50 if(face1 > -1) (rang_voisin(num_face))++;
51 if(face2 > -1) (rang_voisin(num_face))++;
52 if(face3 > -1) (rang_voisin(num_face))++;
53 if(face4 > -1) (rang_voisin(num_face))++;
58 if(face5 > -1) (rang_voisin(num_face))++;
59 if(face6 > -1) (rang_voisin(num_face))++;
65 for (
int num_face = ndeb; num_face < nfin; num_face++)
66 for (
int k = 0; k < nb_comp; k++) tab1(num_face*nb_comp+1+k) = rang_voisin(num_face) + tab1(num_face*nb_comp+k);
68 la_matrice.
dimensionner(nfin*nb_comp,tab1(nfin*nb_comp)-1);
70 for (
int num_face = ndeb; num_face < nfin; num_face++)
75 auto cpt = tab1[num_face]-1;
76 tab2[cpt] = num_face+1;
79 if (face1 > -1) { tab2[cpt] = face1+1; cpt++; }
80 if (face2 > -1) { tab2[cpt] = face2+1; cpt++; }
81 if (face3 > -1) { tab2[cpt] = face3+1; cpt++; }
82 if (face4 > -1) { tab2[cpt] = face4+1; cpt++; }
87 if (face5 > -1) { tab2[cpt] = face5+1; cpt++; }
88 if (face6 > -1) { tab2[cpt] = face6+1; cpt++; }
97 for (
const auto& itr : les_cl)
105 for (
int num_face = ndeb_p; num_face < nfin_p; num_face++)
107 const int ori = orientation(num_face);
112 const int face1b = elem_faces(faces_voisins(num_face,1),ori);
114 auto cpt = tab1[num_face]-1;
116 if (face1b != num_face)
119 const int face3n = face_bord_amont2(le_dom,num_face,(ori+1)%dimension,0), face4n = face_bord_amont2(le_dom,num_face,(ori+1)%dimension,1);
120 if (face3 != -1) { assert(tab2[cpt] == face3+1); tab2[cpt] = face3n+1; cpt++; }
121 if (face4 != -1) { assert(tab2[cpt] == face4+1); tab2[cpt] = face4n+1; cpt++; }
126 face5n = face_bord_amont2(le_dom,num_face,(ori+2)%dimension,0), face6n = face_bord_amont2(le_dom,num_face,(ori+2)%dimension,1);
128 if (face5 != -1) { assert(tab2[cpt] == face5+1); tab2[cpt] = face5n+1; cpt++; }
129 if (face6 != -1) { assert(tab2[cpt] == face6+1); tab2[cpt] = face6n+1; cpt++; }
156 const int nb_comp = champ_inconnue.
line_size();
158 for (
const auto& itr : les_cl)
168 for (
int face = numdeb; face < (numdeb + nfaces); face++)
169 for (
int comp = 0; comp < nb_comp; comp++)
171 modifier_pour_Cl_(face, comp, nb_comp, la_matrice);
173 const int ori = orientation(face);
174 secmem(face, comp) = la_cl_Dirichlet.
val_imp(face - numdeb, nb_comp * ori + comp);
178 if (sub_type(
Symetrie, la_cl.valeur()))
180 for (
int face = numdeb; face < numdeb + nfaces; face++)
181 for (
int comp = 0; comp < nb_comp; comp++)
183 modifier_pour_Cl_(face, comp, nb_comp, la_matrice);
184 secmem(face, comp) = 0.;
192 for (
int face = numdeb; face < numdeb + nfaces; face++)
193 for (
int comp = 0; comp < nb_comp; comp++)
195 modifier_pour_Cl_(face, comp, nb_comp, la_matrice);
197 const int ori = orientation(face);
198 secmem(face, comp) = la_cl_Dirichlet_homogene.
val_imp(face - numdeb, nb_comp * ori + comp);
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int face_bord_amont(int, int, int) const
Determine la face voisine de notre face en prevoyant que cette derniere puisse etre de type bord.
int nb_faces_tot() const
renvoie le nombre total de faces.
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.