16#include <EcritureLectureSpecial.h>
17#include <DP_Impose_VEF_Face.h>
18#include <Champ_Don_base.h>
19#include <Equation_base.h>
20#include <Probleme_base.h>
21#include <Synonyme_info.h>
22#include <Matrix_tools.h>
23#include <Array_tools.h>
24#include <Milieu_base.h>
25#include <Domaine_VEF.h>
39 Cerr <<
"DP_Impose_VEF_Face: champ d'orientation non renseigne!" << finl;
49 col_names.add(
"Flow_rate");
50 col_names.add(
"Target_Flow_rate");
55 col_names.add(
"dDP/dQ");
77 os << ident_reg << finl;
78 os <<
"constante" << finl;
81 Cerr <<
"Saving fac_regul at time : " <<
Nom(temps,
"%e") <<
" with value " <<
fac_regul_ << finl;
89 avancer_fichier(is, ident_reg);
91 Cerr <<
"Resuming with the value fac_regul = " <<
fac_regul_ << finl;
99 int taille_bloc = dom.
nb_elem();
107 Cerr <<
"Error when defining the surface plane for the singular porosity :" << finl;
108 Cerr <<
"No mesh faces has been found for the surface plane." << finl;
109 Cerr <<
"Check the coordinate of the surface plane which should match mesh coordinates." << finl;
116 surf = mp_somme_vect(S);
140 for (d = 0; d < D; d++)
141 for (db = 0; db < D; db++)
142 for (n = 0; n < N; n++)
143 sten.
append_line(N * (D * f + d) + n, N * (D * f + db) + n);
145 tableau_trier_retirer_doublons(sten);
156 Matrice_Morse *mat = matrices.count(nom_inco) ? matrices.at(nom_inco) :
nullptr;
164 for (
int i = 0, f; i <
num_faces.size(); i++)
166 for (
int d = 0; d < D; d++)
167 secmem(f, d) += nf(f, d) * pf(f) *
sgn(i) * dp_regul * fac_rho;
172 for (
int i = 0; i <
num_faces.size(); i++)
175 DP_->valeur_aux(xvf, DP);
177 for (
int i = 0, f; i <
num_faces.size(); i++)
181 for (
int d = 0; d < D; d++)
182 for (
int n = 0; n < N; n++)
183 vn(n) += nf(f, d) * vit(f, N * d + n) / fs(f);
185 for (
int d = 0; d < D; d++)
186 for (
int n = 0; n < N; n++)
187 secmem(f, N * d + n) += nf(f, d) * pf(f) *
sgn(i) * (DP(i, 0) + DP(i, 1) * (
surf *
sgn(i) * vn(n) - DP(i, 2))) * fac_rho;
189 for (
int d = 0; d < D; d++)
190 for (
int db = 0; db < D; db++)
191 for (
int n = 0; n < N; n++)
192 (*mat)(N * (D * f + d) + n, N * (D * f + db) + n) -= nf(f, d) * nf(f, db) / fs(f) * pf(f) * DP(i, 1) *
surf * fac_rho;
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
double temps() const
Renvoie le temps du champ.
int reprendre(Entree &is) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const override
void completer() override
Met a jour les references internes a l'objet Source_base.
void mettre_a_jour(double temps) override
DOES NOTHING - to override in derived classes.
int sauvegarder(Sortie &os) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override
void remplir_num_faces(Entree &)
void update_dp_regul(const Equation_base &eqn, double deb, DoubleVect &bilan)
void mettre_a_jour(double temps)
Entree & lire_donnees(Entree &)
Lit les specifications d'un Delta P impose a partir d'un flot d'entree.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
int nb_faces_tot() const
renvoie le nombre total de faces.
void creer_tableau_faces(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
static int is_ecriture_special(int &special, int &a_faire)
indique si le format special a ete demande en lecture active par sauvegarde xyz .
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
int nb_colonnes() const override
Return local number of columns (=size on the current proc).
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const std::string & getString() const
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.
double calculate_Q(const Equation_base &eqn, const IntVect &num_faces, const IntVect &sgn) const
virtual void lire_surfaces(Entree &, const Domaine &, const Domaine_dis_base &, IntVect &, IntVect &, int lire_derniere_accolade=1)
class Perte_Charge_VEF_Face
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
bool is_dilatable() const
const Domaine & domaine() const
Renvoie le domaine associe au probleme.
static double mp_max(double)
static void mp_max_for_each(T &arg1, T &arg2)
C++14 compatible mp_max_for_each: combine multiple mp_max calls into one collective operation.
static int me()
renvoie mon rang dans le groupe de communication courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Classe de base des flux de sortie.
void set_fichier(const Nom &)
void set_col_names(const Noms &col_names)
void set_description(const Nom &nom)
virtual void completer()
Met a jour les references internes a l'objet Source_base.
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)