TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Op_Dift_VEF_P1NCP1B_Face.cpp
1/****************************************************************************
2* Copyright (c) 2024, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#include <Op_Dift_VEF_P1NCP1B_Face.h>
17#include <Neumann_sortie_libre.h>
18#include <Domaine_Cl_VEF.h>
19#include <Champ_Uniforme.h>
20#include <Domaine_VEF.h>
21#include <Champ_P1NC.h>
22#include <Periodique.h>
23#include <TRUSTLists.h>
24
25#include <Solv_GCP.h>
26#include <Symetrie.h>
27#include <Domaine.h>
28#include <SSOR.h>
29
30Implemente_instanciable(Op_Dift_VEF_P1NCP1B_Face, "Op_Dift_VEF_P1NCP1B_P1NC", Op_Dift_VEF_base);
31// XD diffusion_p1ncp1b diffusion_deriv p1ncp1b BRACE not_set
32
33// XD difusion_p1b diffusion_deriv p1b NO_BRACE not_set
34
36
38
39void Op_Dift_VEF_P1NCP1B_Face::associer(const Domaine_dis_base& domaine_dis, const Domaine_Cl_dis_base& domaine_cl_dis, const Champ_Inc_base& ch_transporte)
40{
41 le_dom_vef = ref_cast(Domaine_VEF, domaine_dis);
42 la_zcl_vef = ref_cast(Domaine_Cl_VEF, domaine_cl_dis);
43 inconnue_ = ref_cast(Champ_P1NC, ch_transporte);
44 solveur.typer("Solv_GCP");
45 OWN_PTR(Precond_base) p;
46 p.typer("SSOR");
47 ref_cast(Solv_GCP,solveur.valeur()).set_precond(p);
48 solveur.nommer("diffusion_solver");
49}
50
51DoubleTab& Op_Dift_VEF_P1NCP1B_Face::calculer_gradient_elem(const DoubleTab& vit, DoubleTab& grad) const
52{
53 const Domaine_VEF& domaine_VEF = domaine_vef();
54 const DoubleTab& face_normales = domaine_VEF.face_normales();
55 const IntTab& elem_faces = domaine_VEF.elem_faces();
56 const IntTab& face_voisins = domaine_VEF.face_voisins();
57 const int nfe = domaine_VEF.domaine().nb_faces_elem(), nb_elem_tot = domaine_VEF.domaine().nb_elem_tot();
58 int elem, indice, face, compi, compj;
59
60 for (elem = 0; elem < nb_elem_tot; elem++)
61 for (indice = 0; indice < nfe; indice++)
62 {
63 face = elem_faces(elem, indice);
64 int signe = 1;
65 if (elem != face_voisins(face, 0)) signe = -1;
66 for (compi = 0; compi < dimension; compi++)
67 for (compj = 0; compj < dimension; compj++)
68 grad(elem, compi, compj) += signe * vit(face, compi) * face_normales(face, compj);
69 }
70 return grad;
71}
72
73DoubleTab& Op_Dift_VEF_P1NCP1B_Face::calculer_gradient_som(const DoubleTab& vit, DoubleTab& grad) const
74{
75 const Domaine_VEF& domaine_VEF = domaine_vef();
76 const DoubleTab& face_normales = domaine_VEF.face_normales();
77 const IntTab& som_elem = domaine_VEF.domaine().les_elems(), &elem_faces = domaine_VEF.elem_faces(), &face_voisins = domaine_VEF.face_voisins();
78
79 double mijK, miiK, miK = 1. / (dimension + 1) / (dimension + 1);
80 const int nfe = domaine_VEF.domaine().nb_faces_elem(), nb_elem_tot = domaine_VEF.domaine().nb_elem_tot();
81 const int nps = domaine_VEF.numero_premier_sommet(), nb_som_elem = domaine_VEF.domaine().nb_som_elem();
82 const int nb_som = grad.dimension(0) - nb_elem_tot;
83 const IntTab& elem_som = domaine_VEF.domaine().les_elems();
84 DoubleTab secmem(nb_som, dimension, dimension);
85
86 if (Objet_U::dimension == 2)
87 {
88 mijK = 1. / 12.;
89 miiK = 1. / 6.;
90 }
91 else
92 {
93 mijK = 1. / 18.;
94 miiK = 1. / 12.;
95 }
96
97 if (masse.nb_lignes() < 2)
98 {
99 Cerr << "On remplit la matrice de masse" << finl;
100 (ref_cast_non_const(DoubleTab, savgrad)).resize(nb_som, dimension, dimension);
101 Matrice_Morse_Sym& mat = ref_cast_non_const(Matrice_Morse_Sym, masse);
102 int rang;
103 int nnz = 0;
104 IntLists voisins(nb_som);
105 DoubleLists coeffs(nb_som);
106 DoubleVect diag(nb_som);
107 int elem;
108 for (elem = 0; elem < nb_elem_tot; elem++)
109 {
110 double vol = domaine_VEF.volumes(elem);
111 double coeff_ij = mijK * vol - miK * vol;
112 double coeff_ii = miiK * vol - miK * vol;
113 for (int isom = 0; isom < nb_som_elem; isom++)
114 {
115 int som = elem_som(elem, isom);
116 int ii = domaine_VEF.domaine().get_renum_som_perio(som);
117 diag[ii] += coeff_ii;
118 for (int jsom = isom + 1; jsom < nb_som_elem; jsom++)
119 {
120 int sombis = elem_som(elem, jsom);
121 int j = domaine_VEF.domaine().get_renum_som_perio(sombis);
122 int i = ii;
123 if (i > j)
124 {
125 int kl = j;
126 j = i;
127 i = kl;
128 }
129 rang = voisins[i].rang(j);
130 if (rang == -1)
131 {
132 voisins[i].add(j);
133 coeffs[i].add(coeff_ij);
134 nnz++;
135 }
136 else
137 {
138 coeffs[i][rang] += coeff_ij;
139 }
140 }
141 }
142 }
143
144 {
145 for (int i = 0; i < nb_som; i++)
146 if (diag(i) == 0)
147 diag(i) = 1.;
148 }
149
150 mat.dimensionner(nb_som, nnz + nb_som);
151 mat.remplir(voisins, coeffs, diag);
152 mat.compacte();
153 mat.set_est_definie(1);
154 }
155 int elem, indice, face, compi, compj, som;
156 ArrOfDouble sigma(dimension);
157 static double coeff_som = 1. / (dimension) / (dimension + 1);
158 double signe;
159
160 for (elem = 0; elem < nb_elem_tot; elem++)
161 {
162 sigma = 0;
163 for (indice = 0; indice < nfe; indice++)
164 {
165 face = elem_faces(elem, indice);
166 for (int comp = 0; comp < dimension; comp++)
167 sigma[comp] += vit(face, comp);
168 }
169 for (indice = 0; indice < nfe; indice++)
170 {
171 som = domaine_VEF.domaine().get_renum_som_perio(som_elem(elem, indice));
172 face = elem_faces(elem, indice);
173 signe = 1;
174 if (elem != face_voisins(face, 0))
175 signe = -1;
176 for (compi = 0; compi < dimension; compi++)
177 for (compj = 0; compj < dimension; compj++)
178 secmem(som, compi, compj) += coeff_som * signe * sigma[compi] * face_normales(face, compj);
179 }
180 }
181 //Cerr << "Avant CL secmem = " << secmem << finl;
182 const Domaine_Cl_VEF& domaine_Cl_VEF = domaine_cl_vef();
183 const Conds_lim& les_cl = domaine_Cl_VEF.les_conditions_limites();
184 const IntTab& face_sommets = domaine_VEF.face_sommets();
185 int nb_bords = les_cl.size();
186 for (int n_bord = 0; n_bord < nb_bords; n_bord++)
187 {
188 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
189 {
190 if (!sub_type(Periodique, la_cl.valeur()))
191 {
192 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
193 int num1 = le_bord.num_premiere_face();
194 int num2 = num1 + le_bord.nb_faces();
195 for (face = num1; face < num2; face++)
196 {
197 for (indice = 0; indice < (nfe - 1); indice++)
198 {
199 som = domaine_VEF.domaine().get_renum_som_perio(face_sommets(face, indice));
200 for (compi = 0; compi < dimension; compi++)
201 for (compj = 0; compj < dimension; compj++)
202 secmem(som, compi, compj) += 1. / dimension * vit(face, compi) * face_normales(face, compj);
203 }
204 }
205 }
206 }
207 }
208 //Cerr << "Apres CL secmem = " << secmem << finl;
209 double coeff = 1. / (dimension + 1.);
210 {
211 DoubleVect secmemij;
212 DoubleVect gradij;
213 domaine_VEF.domaine().creer_tableau_sommets(secmemij);
214 domaine_VEF.domaine().creer_tableau_sommets(gradij);
215 DoubleTab& sgrad = ref_cast_non_const(DoubleTab, savgrad);
216
217 for (compi = 0; compi < dimension; compi++)
218 for (compj = 0; compj < dimension; compj++)
219 {
220 int i;
221 for (i = 0; i < nb_som; i++)
222 {
223 int soml = domaine_VEF.domaine().get_renum_som_perio(i);
224 secmemij(soml) = secmem(soml, compi, compj);
225 gradij(soml) = sgrad(soml, compi, compj);
226 }
227 for (elem = 0; elem < nb_elem_tot; elem++)
228 for (indice = 0; indice < nfe; indice++)
229 {
230 som = domaine_VEF.domaine().get_renum_som_perio(som_elem(elem, indice));
231 secmemij(som) -= coeff * grad(elem, compi, compj);
232 }
233 (ref_cast_non_const(SolveurSys, solveur)).resoudre_systeme(masse, secmemij, gradij);
234 for (i = 0; i < nb_som; i++)
235 {
236 int soml = domaine_VEF.domaine().get_renum_som_perio(i);
237 double x = gradij(soml);
238 grad(nps + soml, compi, compj) = x;
239 sgrad(soml, compi, compj) = x;
240 }
241 }
242 }
243 for (elem = 0; elem < nb_elem_tot; elem++)
244 {
245 double vol = domaine_VEF.volumes(elem);
246 for (compi = 0; compi < dimension; compi++)
247 for (compj = 0; compj < dimension; compj++)
248 grad(elem, compi, compj) /= vol;
249 for (indice = 0; indice < nfe; indice++)
250 {
251 som = nps + domaine_VEF.domaine().get_renum_som_perio(som_elem(elem, indice));
252 for (compi = 0; compi < dimension; compi++)
253 for (compj = 0; compj < dimension; compj++)
254 grad(elem, compi, compj) -= coeff * grad(som, compi, compj);
255 }
256 }
257
258 DoubleTab tmp(grad);
259 int ntot = tmp.dimension(0);
260 for (int ind = 0; ind < ntot; ind++)
261 for (compi = 0; compi < dimension; compi++)
262 for (compj = 0; compj < dimension; compj++)
263 tmp(ind, compi, compj) = 0.5 * (grad(ind, compi, compj) + grad(ind, compj, compi));
264 grad = tmp;
265 return grad;
266}
267
269{
270 const Domaine_VEF& domaine_VEF = domaine_vef();
271 const DoubleTab& face_normales = domaine_VEF.face_normales();
272 const Domaine_Cl_VEF& domaine_Cl_VEF = domaine_cl_vef();
273 const Conds_lim& les_cl = domaine_Cl_VEF.les_conditions_limites();
274 const int nb_bords = les_cl.size();
275 for (int n_bord = 0; n_bord < nb_bords; n_bord++)
276 {
277 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
278 {
279 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
280 int num1 = le_bord.num_premiere_face();
281 int num2 = num1 + le_bord.nb_faces();
282 if (sub_type(Periodique, la_cl.valeur()))
283 {
284 //periodicite
285 const Periodique& la_cl_perio = ref_cast(Periodique, la_cl.valeur());
286 ArrOfInt fait(le_bord.nb_faces());
287 for (int face = num1; face < num2; face++)
288 {
289 if (!fait[face - num1])
290 {
291 int face_associee = num1 + la_cl_perio.face_associee(face - num1);
292 fait[face - num1] = (fait[face_associee - num1] = 1);
293 for (int comp = 0; comp < dimension; comp++)
294 {
295 div(face, comp) += div(face_associee, comp);
296 div(face_associee, comp) = div(face, comp);
297 }
298 }
299 }
300 }
301 else
302 {
303 if (sub_type(Symetrie, la_cl.valeur()))
304 {
305 for (int face = num1; face < num2; face++)
306 {
307 double psc = 0;
308 double norme = 0;
309 int comp;
310 for (comp = 0; comp < dimension; comp++)
311 psc += div(face, comp) * face_normales(face, comp);
312 for (comp = 0; comp < dimension; comp++)
313 norme += face_normales(face, comp) * face_normales(face, comp);
314
315 // psc/=norme; // Fixed bug: Arithmetic exception
316 if (std::fabs(norme) >= DMINFLOAT)
317 psc /= norme;
318 for (comp = 0; comp < dimension; comp++)
319 div(face, comp) -= psc * face_normales(face, comp);
320 }
321 }
322 }
323 }
324 }
325 return div;
326}
327
328DoubleTab& Op_Dift_VEF_P1NCP1B_Face::calculer_divergence_elem(double nu, const DoubleTab& nu_turb, const DoubleTab& grad, DoubleTab& div) const
329{
330 const Domaine_VEF& domaine_VEF = domaine_vef();
331 const DoubleTab& face_normales = domaine_VEF.face_normales();
332 const IntTab& elem_faces = domaine_VEF.elem_faces(), &face_voisins = domaine_VEF.face_voisins();
333 const int nfe = domaine_VEF.domaine().nb_faces_elem(), nb_elem_tot = domaine_VEF.domaine().nb_elem_tot();
334
335 int elem, indice, face, compi, compj;
336 //ArrOfDouble sigma(dimension);
337 for (elem = 0; elem < nb_elem_tot; elem++)
338 {
339 double nu_tot = nu + nu_turb(elem);
340 for (indice = 0; indice < nfe; indice++)
341 {
342 face = elem_faces(elem, indice);
343 double signe = 1;
344 if (elem != face_voisins(face, 0))
345 signe = -1;
346 for (compi = 0; compi < dimension; compi++)
347 for (compj = 0; compj < dimension; compj++)
348 div(face, compi) -= nu_tot * grad(elem, compi, compj) * signe * face_normales(face, compj);
349 }
350 }
351 return div;
352}
353DoubleTab& Op_Dift_VEF_P1NCP1B_Face::calculer_divergence_som(double nu, const DoubleTab& nu_turb, const DoubleTab& grad, DoubleTab& div) const
354{
355 const Domaine_VEF& domaine_VEF = domaine_vef();
356 const DoubleTab& face_normales = domaine_VEF.face_normales();
357 const IntTab& som_elem = domaine_VEF.domaine().les_elems();
358 const IntTab& elem_faces = domaine_VEF.elem_faces();
359 const IntTab& face_voisins = domaine_VEF.face_voisins();
360 int nfe = domaine_VEF.domaine().nb_faces_elem();
361 int nb_elem_tot = domaine_VEF.domaine().nb_elem_tot();
362 int nps = domaine_VEF.numero_premier_sommet();
363 int elem, indice, indice2, face, compi, compj, som;
364 ArrOfDouble sigma(dimension);
365 static double coeff_som = 1. / (dimension) / (dimension + 1);
366 for (elem = 0; elem < nb_elem_tot; elem++)
367 {
368 double nu_tot = nu + nu_turb(elem);
369 for (indice = 0; indice < nfe; indice++)
370 {
371 som = nps + domaine_VEF.domaine().get_renum_som_perio(som_elem(elem, indice));
372 face = elem_faces(elem, indice);
373 double signe = 1;
374 if (elem != face_voisins(face, 0))
375 signe = -1;
376 for (int comp = 0; comp < dimension; comp++)
377 {
378 sigma[comp] = signe * face_normales(face, comp);
379 }
380 for (indice2 = 0; indice2 < nfe; indice2++)
381 for (compi = 0; compi < dimension; compi++)
382 for (compj = 0; compj < dimension; compj++)
383 div(elem_faces(elem, indice2), compi) -= coeff_som * nu_tot * grad(som, compi, compj) * sigma[compj];
384 }
385 }
386 const Domaine_Cl_VEF& domaine_Cl_VEF = domaine_cl_vef();
387 const Conds_lim& les_cl = domaine_Cl_VEF.les_conditions_limites();
388 const IntTab& face_sommets = domaine_VEF.face_sommets();
389 int nb_bords = les_cl.size();
390 for (int n_bord = 0; n_bord < nb_bords; n_bord++)
391 {
392 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
393 {
394 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
395 int num1 = le_bord.num_premiere_face();
396 int num2 = num1 + le_bord.nb_faces();
397 if (sub_type(Neumann_sortie_libre, la_cl.valeur()))
398 for (int face2 = num1; face2 < num2; face2++)
399 {
400 double nu_tot = nu + nu_turb(face_voisins(face2, 0));
401 for (indice = 0; indice < (nfe - 1); indice++)
402 {
403 som = nps + domaine_VEF.domaine().get_renum_som_perio(face_sommets(face2, indice));
404 for (compi = 0; compi < dimension; compi++)
405 for (compj = 0; compj < dimension; compj++)
406 div(face2, compi) -= nu_tot / dimension * face_normales(face2, compj) * grad(som, compi, compj);
407 }
408 }
409 }
410 }
411 return div;
412}
413
414DoubleTab& Op_Dift_VEF_P1NCP1B_Face::ajouter(const DoubleTab& inconnue, DoubleTab& resu) const
415{
416 const Domaine_VEF& domaine_VEF = domaine_vef();
417 const DoubleTab& nu_turb = diffusivite_turbulente().valeurs();
418 const double nu = diffusivite(0);
419 const int nb_elem_tot = domaine_VEF.domaine().nb_elem_tot(), nb_som_tot = domaine_VEF.domaine().nb_som_tot();
420
421 DoubleTab gradient(nb_elem_tot + nb_som_tot, dimension, dimension);
422 gradient = 0.;
423
424 calculer_gradient_elem(inconnue, gradient);
425 calculer_gradient_som(inconnue, gradient);
426 calculer_divergence_elem(nu, nu_turb, gradient, resu);
427 calculer_divergence_som(nu, nu_turb, gradient, resu);
429
431
432 modifier_flux(*this);
433 return resu;
434}
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
Classe Champ_Inc_base.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
Definition Conds_lim.h:32
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
int_t nb_elem_tot() const
Definition Domaine.h:132
int_t get_renum_som_perio(int_t i) const
Definition Domaine.h:281
IntTab_t & les_elems()
Definition Domaine.h:129
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
Definition Domaine.h:484
virtual void creer_tableau_sommets(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
Cree un tableau ayant une "ligne" par sommet du maillage.
Definition Domaine.cpp:1000
int_t nb_som_tot() const
Renvoie le nombre total de sommets du domaine i.e. le nombre de sommets reels et virtuels sur le proc...
Definition Domaine.h:123
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VEF
Definition Domaine_VEF.h:54
int numero_premier_sommet() const
virtual double face_normales(int face, int comp) const
Definition Domaine_VF.h:47
double volumes(int i) const
Definition Domaine_VF.h:113
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
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
Definition Domaine_VF.h:543
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
Classe Matrice_Morse_Sym Represente une matrice M (creuse) symetrique stockee au format Morse.
void compacte(int elim_coeff_nul=0)
Suppression des doublons on ordonne tab2;.
void dimensionner(int n, _SIZE_ nnz)
Size the matrix with n lines and n columns and nnz zero-values coefficients.
void remplir(const IntLists &, const DoubleLists &, const DoubleVect &)
void set_est_definie(int)
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
static int dimension
Definition Objet_U.h:99
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
const Champ_Fonc_base & diffusivite_turbulente() const
const Domaine_VEF & domaine_vef() const
const Domaine_Cl_VEF & domaine_cl_vef() const
class Op_Dift_VEF_P1NCP1B_Face Cette classe represente l'operateur de diffusion
DoubleTab & calculer_gradient_elem(const DoubleTab &, DoubleTab &) const
DoubleTab & corriger_div_pour_Cl(DoubleTab &) const
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &, const Champ_Inc_base &) override
DoubleTab & calculer_divergence_elem(double, const DoubleTab &, const DoubleTab &, DoubleTab &) const
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
DoubleTab & calculer_divergence_som(double, const DoubleTab &, const DoubleTab &, DoubleTab &) const
DoubleTab & calculer_gradient_som(const DoubleTab &, DoubleTab &) const
const Champ_base & diffusivite() const override
void modifier_flux(const Operateur_base &) const
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
int face_associee(int i) const
Definition Periodique.h:35
class SolveurSys Un SolveurSys represente n'importe qu'elle classe
Definition SolveurSys.h:32
Classe de base des flux de sortie.
Definition Sortie.h:52
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
Definition Symetrie.h:37
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")