16#include <Matrice_Morse.h>
17#include <Equation_base.h>
18#include <Matrix_tools.h>
19#include <Op_VDF_Elem.h>
20#include <Domaine_Cl_VDF.h>
21#include <Array_tools.h>
22#include <Periodique.h>
23#include <Matrix_tools.h>
24#include <Domaine_VDF.h>
28 if (multi_scalar_diff)
29 dimensionner_multiscalar(le_dom, le_dom_cl, la_matrice, multi_scalar_diff);
31 dimensionner_old(le_dom, le_dom_cl, la_matrice);
54 IntVect rang_voisin(n1*nb_comp);
57 for (
int num_face = ndeb; num_face < nfin; num_face++)
59 const int elem1 = face_voisins(num_face,0), elem2 = face_voisins(num_face,1);
60 (rang_voisin(elem2))++;
61 (rang_voisin(elem1))++;
65 for (
const auto& itr : les_cl)
67 const Cond_lim& la_cl = itr;
68 if (sub_type(Periodique,la_cl.valeur()))
70 const Periodique& la_cl_perio = ref_cast(Periodique,la_cl.valeur());
71 const Front_VF& la_front_dis = ref_cast(Front_VF,la_cl->frontiere_dis());
76 for (
int face = 0; face < nfaces; face++)
82 ind_face_global = face+numdeb;
84 const int elem1 = face_voisins(ind_face_global,0), elem2 = face_voisins(ind_face_global,1);
86 (rang_voisin(elem2))++;
87 (rang_voisin(elem1))++;
95 for(
int i = 0; i < n1; i++)
96 for (
int k = 0; k < nb_comp; k++) tab1(i*nb_comp+1+k) = rang_voisin(i) + tab1(i*nb_comp+k);
100 for (
int i = 0; i < n1*nb_comp; i++)
102 tab2[tab1[i]-1] = i+1;
103 rang_voisin[i] = (int)tab1[i];
107 for (
int num_face = ndeb; num_face < nfin; num_face++)
109 const int elem1 = face_voisins(num_face,0), elem2 = face_voisins(num_face,1);
110 for (
int k = 0; k < nb_comp; k++)
112 tab2[rang_voisin[elem2*nb_comp+k]] = elem1*nb_comp+1+k;
113 rang_voisin[elem2*nb_comp+k]++;
115 tab2[rang_voisin[elem1*nb_comp+k]] = elem2*nb_comp+1+k;
116 rang_voisin[elem1*nb_comp+k]++;
121 for (
int i=0; i<les_cl.size(); i++)
123 const Cond_lim& la_cl = les_cl[i];
124 if (sub_type(Periodique,la_cl.valeur()) )
126 const Periodique& la_cl_perio = ref_cast(Periodique,la_cl.valeur());
127 const Front_VF& la_front_dis = ref_cast(Front_VF,la_cl->frontiere_dis());
129 IntVect fait(nfaces);
131 for (
int ind_face_local = 0; ind_face_local < nfaces; ind_face_local++)
133 if (fait[ind_face_local] == 0)
135 const int num_face = numdeb + ind_face_local;
136 fait[ind_face_local] = 1;
139 const int elem1 = face_voisins(num_face,0), elem2 = face_voisins(num_face,1);
141 for (
int k = 0; k < nb_comp; k++)
143 tab2[rang_voisin[elem2*nb_comp+k]] = elem1*nb_comp+1+k;
144 rang_voisin[elem2*nb_comp+k]++;
146 tab2[rang_voisin[elem1*nb_comp+k]] = elem2*nb_comp+1+k;
147 rang_voisin[elem1*nb_comp+k]++;
163 for (
int e = 0; e < ne; e++)
164 for (
int i = 0, f, n; i < e_f.dimension(1); i++)
165 if ((f = e_f(e, i)) >= 0)
166 for (
int j = 0; j < 2; j++)
167 if ((n = f_e(f, j)) >= 0)
168 for (
int k = 0; k < M; k++)
169 for (
int m = (multi_scalar_diff ? 0 : k); m < (multi_scalar_diff ? M : k + 1); m++)
170 sten.append_line(M * e + k, M * n + m);
172 tableau_trier_retirer_doublons(sten);
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
int_t nb_elem_tot() const
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int nb_faces() const
renvoie le nombre global 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 premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
const Domaine & domaine() const
virtual const Champ_Inc_base & inconnue() const =0
int num_premiere_face() const
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
void dimensionner(int n, _SIZE_ nnz)
Size the matrix with n lines and n columns and nnz zero-values coefficients.
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
void modifier_pour_Cl(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, DoubleTab &) const
void dimensionner(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, const bool) const
int face_associee(int i) const
_SIZE_ size_totale() const