16#include <LecFicDiffuse.h>
17#include <VerifierCoin.h>
23Implemente_instanciable(
VerifierCoin,
"VerifierCoin",Interprete_geometrique_base);
34void VerifierCoin::cut_elem(
int elem,
const DoubleTab& xp)
38 int nouveau_sommet = sommets.
dimension(0);
42 sommets(nouveau_sommet,j) = xp(elem,j);
46 Cerr <<
"-> The element number " << elem <<
" is cut in " <<
dimension+1 <<
" elements." << finl;
48 int i0 = les_elems(elem,0);
49 int i1 = les_elems(elem,1);
50 int i2 = les_elems(elem,2);
52 les_elems(elem,0) = i0;
53 les_elems(elem,1) = i1;
54 les_elems(elem,2) = nouveau_sommet;
56 les_elems(oldsz,0) = i1;
57 les_elems(oldsz,1) = i2;
58 les_elems(oldsz,2) = nouveau_sommet;
60 les_elems(oldsz+1,0) = i0;
61 les_elems(oldsz+1,1) = i2;
62 les_elems(oldsz+1,2) = nouveau_sommet;
66 int i3 = les_elems(elem,3);
68 les_elems(elem,3) = i3;
69 les_elems(oldsz,3) = i3;
70 les_elems(oldsz+1,3)= i3;
72 les_elems(oldsz+2,0) = i0;
73 les_elems(oldsz+2,1) = i1;
74 les_elems(oldsz+2,2) = i2;
75 les_elems(oldsz+2,3) = nouveau_sommet;
106 Cerr <<
"Error for "<<
que_suis_je() <<
" interpreter : it can be applied only for triangular or tetraedral meshing." << finl;
112 param.
ajouter(
"Lire_fichier|Read_file",&decoup_som);
113 bool expert_only_obsolete =
false;
114 param.
ajouter_flag(
"expert_only",&expert_only_obsolete);
116 if (expert_only_obsolete)
Process::exit(
"Error: expert_only is not supported anymore for VerifierCoin");
117 int lecture_decoupage_som=(decoup_som!=
""?1:0);
121 Cerr <<
que_suis_je() <<
" interpreter can be used only for sequential calculation." << finl;
122 Cerr <<
"For parallel calculation, please use "<<
que_suis_je() <<
" interpreter" << finl;
123 Cerr <<
"during the domain partitioning step." << finl;
136 ArrOfInt nb_elem_per_som(nbsom);
138 for (
int ne = 0; ne < nbelem; ne++)
140 nb_elem_per_som(les_elems(ne,ns))++;
151 int option_decoupage=-1;
154 if (lecture_decoupage_som)
156 Cerr<<
"The file" << decoup_som <<
" is checked before reading."<<finl;
160 int dim_cas, nbsom_cas;
161 fic >> option_decoupage;
166 Cerr <<
"Error for " <<
que_suis_je()<<
"::interpreter_" << finl;
167 Cerr <<
"The file " << decoup_som <<
" is planned for a case of dimension " << dim_cas <<
"D" << finl;
168 Cerr <<
"while the considered domain " << dom.
le_nom() <<
" has a dimension " <<
dimension <<
"D." << finl;
173 Cerr <<
"Error for " <<
que_suis_je()<<
"::interpreter_" << finl;
174 Cerr <<
"The nodes number (" <<nbsom_cas<<
") readen in the file " << decoup_som << finl;
175 Cerr <<
"dot not correspond to those of the meshing (" << nbsom <<
")" << finl;
176 Cerr <<
"Please check that the file you have specified " << decoup_som << finl;
177 Cerr <<
"is the one to consider for this meshing." << finl;
183 Cerr <<
"Error for " <<
que_suis_je()<<
"::interpreter_" << finl;
184 Cerr <<
"Problem while trying to open the file " << decoup_som << finl;
187 Cerr <<
"option_decoupage " << option_decoupage << finl;
189 for (
int somm=0; somm<nbsom; somm++)
191 if (nb_elem_per_som(somm) != 1)
continue;
193 int somm_lu = -1, elem_opp, somm_opp, somm1, somm2, elem;
194 fic >> somm_lu >> somm_opp >> somm1 >> somm2;
200 fic >> elem >> elem_opp;
201 if(somm_lu!=-1) somm = somm_lu;
204 Cerr <<
"Error in VerifierCoin::interpreter" << finl;
205 Cerr <<
"The node " << somm <<
" is not found." << finl;
206 Cerr <<
"Check the .Zones files are up to date with your mesh file." << finl;
209 Cerr<<
"-> VerifierCoin is applied on the node "<<somm<<
" of coordinates: ";
210 for(
int dir=0; dir<
dimension; dir++) Cerr<<sommets(somm,dir)<<
" ";
213 if (option_decoupage==1 &&
dimension==2 && somm_lu!=-1)
215 les_elems(elem,0) = somm ;
216 les_elems(elem,1) = somm_opp ;
217 les_elems(elem,2) = somm1 ;
219 les_elems(elem_opp,0) = somm ;
220 les_elems(elem_opp,1) = somm_opp ;
221 les_elems(elem_opp,2) = somm2 ;
229 std::map<int,int> som_elem;
230 for (
int elem = 0; elem < nbelem; elem++)
233 int somm = les_elems(elem, ns);
234 if (nb_elem_per_som(somm) == 1) som_elem.insert({somm, elem});
236 for (
auto pair : som_elem)
238 int somm =
pair.first;
239 int elem =
pair.second;
240 nb_elem_per_som(somm) = 0;
241 Cerr <<
"-> VerifierCoin is applied on the node " << somm <<
" of coordinates: ";
242 for (
int dir = 0; dir <
dimension; dir++) Cerr << sommets(somm, dir) <<
" ";
243 Cerr <<
"..." << finl;
void calculer_centres_gravite(DoubleTab_t &xp) const
Calcule les centres de gravites des elements du domaine.
DoubleTab_t & les_sommets()
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Class defining operators and methods for all reading operation in an input flow (file,...
void mettre_a_jour_sous_domaine(Domaine_t &domaine, int_t &elem, int_t num_premier_elem, int_t nb_elem) const
void associer_domaine(Nom &nom_dom)
Domaine_t & domaine(int i=0)
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.
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.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
int lire_avec_accolades_depuis(Entree &is)
Parse the parameter block { ... } from is.
static bool is_parallel()
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static void init_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
Create parallel descriptors for the vertex and element arrays of the domain (necessary because Scatte...
static void uninit_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
methode utilisee par les interpretes qui modifient le domaine (sequentiel), detruit les descripteurs ...
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
classe VerifierCoin Interprete qui resoud un probleme:
Entree & interpreter_(Entree &) override
Fonction principale de l'interprete: resoudre un probleme.