16#include <Check_espace_virtuel.h>
17#include <Echange_impose_base.h>
18#include <Op_Grad_P0_to_Face.h>
19#include <Dirichlet_homogene.h>
20#include <Neumann_homogene.h>
21#include <Domaine_Cl_VDF.h>
22#include <Neumann_paroi.h>
23#include <Periodique.h>
25#include <Perf_counters.h>
43 const DoubleTab& inco = semi_impl.count(
"pression") ? semi_impl.at(
"pression") :
equation().
inconnue().
valeurs();
44 assert_espace_virtuel_vect(inco);
48 const DoubleTab& xv = zvdf.
xv();
54 for (
int n_bord = 0; n_bord < zvdf.
nb_front_Cl(); n_bord++)
55 for (
int k = 0; k < N; k++)
62 for (
int num_face = ndeb; num_face < nfin; num_face++)
66 secmem(num_face, k) -= (inco(n1, k) - inco(n0, k)) / dist;
68 else if (sub_type(
Dirichlet, la_cl.valeur()))
73 for (
int num_face = ndeb, num_face_cl = 0; num_face < nfin; num_face++, num_face_cl++)
79 secmem(num_face, k) -= (inco(n0, k) - cl.
val_imp(num_face_cl, k)) / (
xp(n0, ori) - xv(num_face, ori));
83 for (
int num_face = ndeb; num_face < nfin; num_face++)
89 secmem(num_face, k) -= inco(n0, k) / (
xp(n0, ori) - xv(num_face, ori));
95 for (
int num_face = ndeb, num_face_cl = 0; num_face < nfin; num_face++, num_face_cl++)
101 secmem(num_face, k) -= (inco(n0, k) - cl.
T_ext(num_face_cl, k)) * cl.
h_imp_grad(num_face_cl, k);
103 secmem(num_face, k) += (inco(n0, k) - cl.
T_ext(num_face_cl, k)) * cl.
h_imp_grad(num_face_cl, k);
112 for (
int num_face = ndeb, num_face_cl = 0; num_face < nfin; num_face++, num_face_cl++)
115 secmem(num_face, k) -= cl.
flux_impose(num_face_cl, k);
117 secmem(num_face, k) += cl.
flux_impose(num_face_cl, k);
121 for (
int num_face = ndeb; num_face < nfin; num_face++)
129 if (face_opposee == num_face)
133 if ((n1 < 0) || ((n1 == n0) &&
face_voisins(face_opposee, 1) >= 0))
137 secmem(num_face, k) -= (inco(n1, k) - inco(n0, k)) / (
xp(n1, ori) -
xp(n0, ori));
143 for (
int k = 0; k < N; k++)
146 secmem(num_face, k) -= (inco(n1, k) - inco(n0, k)) / (
xp(n1, ori) -
xp(n0, ori));
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual double get_temps_defaut() const
virtual bool has_valeurs_au_temps(double temps) const
Champ_front_base & champ_front()
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Classe Dirichlet_homogene Cette classe est la classe de base de la hierarchie des conditions aux limi...
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
virtual double val_imp(int i) const
Renvoie la valeur imposee sur la i-eme composante du champ a la frontiere au temps par defaut du cham...
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
double xv(int num_face, int k) const
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.
classe Echange_impose_base: Cette condition limite sert uniquement pour l'equation d'energie.
virtual double T_ext(int num) const
Renvoie la valeur de la temperature imposee sur la i-eme composante du champ de frontiere.
virtual bool has_h_imp_grad() const
virtual double h_imp_grad(int num) const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Champ_Inc_base & inconnue() const =0
int num_premiere_face() const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Classe Neumann_homogene Cette classe est la classe de base de la hierarchie des conditions aux limite...
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
virtual double flux_impose(int i) const
Renvoie la valeur du flux impose sur la i-eme composante du champ representant le flux a la frontiere...
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
class Op_Grad_P0_to_Face Cette classe represente l'operateur de gradient
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl) const override
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl) const override
DoubleVect volume_entrelaces
classe Periodique Cette classe represente une condition aux limites periodique.
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")