16#include <Champ_front_lu.h>
18#include <LecFicDiffuse.h>
19#include <Interprete.h>
20#include <Domaine_VF.h>
43 os << tab.
size() <<
" ";
44 for(
int i=0; i<tab.
size(); i++)
76void erreur_chfront(
const Nom& nom_fic,
const int dim,
const Nom& nom_domaine)
78 Cerr <<
"****************************************************************************************************************" << finl;
79 Cerr <<
"Error! It seems that several faces into the file " << nom_fic <<
" does not match any faces of the current mesh." << finl;
81 Cerr <<
"First, check that the file " << nom_fic <<
" can be used to define a boundary field on the specified boundary of the current mesh." << finl;
82 Cerr <<
"Second, try to switch to a different algorithm in your data file (find the nearest geometric face of the mesh for each face defined in the " << nom_fic <<
" file):" << finl;
83 Cerr <<
"Replace:" <<finl;
84 Cerr <<
"Champ_front_lu " << nom_domaine <<
" " << dim <<
" " << nom_fic << finl;
86 for (
int i=0; i<dim; i++)
92 Nom chaine=
"moyenne_imposee connexion_approchee fichier";
93 Cerr <<
"Champ_front_recyclage { pb_champ_evaluateur problem_name field_name "<<dim<<finl;
94 Cerr <<
" "<<chaine<<
" "<<nom_fic<<finl;
95 Cerr <<
" ampli_moyenne_imposee "<<un<<finl;
96 Cerr <<
" ampli_moyenne_recyclee "<<zero<<finl;
97 Cerr <<
" ampli_fluctuation "<<zero<<
" }" <<finl;
108 Domaine& domaine=mon_domaine.valeur();
110 const Frontiere& frontiere=fr_dis.
frontiere();
111 const int nb_faces=frontiere.
nb_faces();
125 Cerr <<
"Reading of the " << format <<
" file : " <<
nom_fic << finl;
128 DoubleVect val_lu(dim);
133 trustIdType nb_faces_tot =
mp_sum(nb_faces);
134 if ((trustIdType)nb_val_lues<nb_faces_tot)
136 Cerr <<
"This file contains " << nb_val_lues <<
" faces which is not enough compare to" << finl;
137 Cerr <<
"the faces number (" << nb_faces_tot <<
") of the boundary " << frontiere.
le_nom() << finl;
147 int nb_elems = domaine.nb_elem();
148 int nbfacelem=domaine.nb_faces_elem();
151 const DoubleTab& xv=zvf.
xv();
152 IntTab compteur(nb_faces);
159 for (
int p=0; p<nb_val_lues; p++)
161 tmp=(p*10)/nb_val_lues;
165 Cerr<<
"\rProcess "<<
Process::me()<<
" has read "<<pourcent*10<<
"% of values"<<flush;
169 for (k=0; k<dim; k++)
178 int num_elem=domaine.chercher_elements(x,y,z);
179 if ((num_elem!=-1) && (num_elem<nb_elems))
182 for (
int fac=0; fac<nbfacelem; fac++)
184 int face=elem_faces(num_elem,fac);
188 ok=ok&&(est_egal(point[dir],xv(face,dir)));
201 for (
int face=0; face<nb_faces; face++)
202 if (compteur[face] == 0)
206 ok=ok&&(est_egal(point[dir],xv(ndeb+face,dir)));
217 int face_loc=Case-ndeb;
218 if ((face_loc<0) || (face_loc>=nb_faces))
220 Cerr <<
" The face " << ndeb <<
" found doesn't belong to the boundary sought " << finl;
223 compteur[face_loc] += 1;
224 for (k=0; k<dim; k++)
225 les_val(face_loc,k) = val_lu[k];
228 Cerr<<
"\rProcess "<<
Process::me()<<
" has read 100% of values"<<finl;
232 for (
int face=0; face<nb_faces; face++)
233 if (compteur[face] != 1)
236 if (compteur[face] == 0)
237 Cerr <<
"No value found for the face " << face <<
"/" << nb_faces-1 <<
" of the boundary " << frontiere.
le_nom() <<
" on the processor " <<
Process::me() <<
".";
239 Cerr <<
"Several values found for the face " << face <<
"/" << nb_faces-1 <<
" of the boundary " << frontiere.
le_nom() <<
" on the processor " <<
Process::me() <<
".";
240 Cerr <<
" Coordinates: " << xv(ndeb+face,0) <<
" " << xv(ndeb+face,1);
241 if (
dimension==3) Cerr <<
" " << xv(ndeb+face,2);
246 erreur_chfront(
nom_fic, dim, mon_domaine->le_nom());
classe Ch_front_var_stationnaire Cette classe abstraite represente un champ sur une frontiere,
int lire_dimension(Entree &, const Nom &)
Verification de la dimension du champ Renvoie la dimension du champ.
virtual int initialiser(double temps, const Champ_Inc_base &inco)
Initialisation en debut de calcul.
virtual const Frontiere_dis_base & frontiere_dis() const
Renvoie la frontiere discretisee associee au champ.
virtual const Domaine_dis_base & domaine_dis() const
virtual DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ.
classe Champ_front_lu Classe derivee de Champ_front_var qui represente les
int initialiser(double temps, const Champ_Inc_base &inco) override
Initialisation en debut de calcul.
int is_bin(Nom name)
Renvoie le format du fichier lu.
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
Class defining operators and methods for all reading operation in an input flow (file,...
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
virtual int nb_comp() const
int_t num_premiere_face() const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
int_t nb_faces() const
Renvoie le nombre de faces de la frontiere.
classe Frontiere_dis_base Classe representant une frontiere discretisee.
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
Cette classe implemente les operateurs et les methodes virtuelles de la classe EFichier de la facon s...
int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::in) override
Ouverture du fichier.
void set_bin(bool bin) override
appelle get_entree_master().
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
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.
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")