16#include <NettoieNoeuds.h>
17#include <Remove_elem.h>
18#include <TRUSTLists.h>
19#include <TRUSTArray.h>
23Implemente_instanciable(
Remove_elem,
"Remove_elem", Interprete_geometrique_base);
38int Remove_elem::lire_motcle_non_standard(
const Motcle& mot,
Entree& is)
45 for (
int i = 0; i < nb_elem; i++)
65 param.
ajouter(
"fonction", &fonction);
72 Cerr <<
"Reading and interpretation of the function " << fonction <<
" ... ";
74 f.setString(fonction);
80 Cerr <<
" Ok" << finl;
87 Cerr <<
"Refinement... OK" << finl;
96 IntTab faces_recreees(nb_faces, nbs);
100 for (
int i = 0; i < nb_faces; i++)
103 ind[0] = sommets(i, 0);
104 ind[1] = sommets(i, 1);
105 ind[2] = (
dimension == 3) ? sommets(i, 2) : -1;
106 ind[3] = (
dimension == 3) ? sommets(i, 3) : -1;
114 if (som_face(ind[3], 0, j) == ind[2] && som_face(ind[3], 1, j) == ind[1] && som_face(ind[3], 2, j) == ind[0])
123 som_face(ind[3], 0, j) = -1;
124 som_face(ind[3], 1, j) = -1;
125 som_face(ind[3], 2, j) = -1;
129 faces_recreees(ii, 0) = sommets(i, 0);
130 faces_recreees(ii, 1) = sommets(i, 1);
133 faces_recreees(ii, 2) = sommets(i, 2);
134 faces_recreees(ii, 3) = sommets(i, 3);
140 faces_recreees.
resize(ii, nbs);
143 sommets.
ref(faces_recreees);
152 IntTab faces_recreees(1, nbs);
156 for (
int i = 0; i < nbsom; i++)
158 for (
int j = 0; j < som_face.
dimension(2); j++)
160 if (som_face(i, 0, j) != -1)
162 faces_recreees.
resize(ii + 1, nbs);
163 faces_recreees(ii, 0) = i;
164 faces_recreees(ii, 1) = som_face(i, 0, j);
167 faces_recreees(ii, 2) = som_face(i, 1, j);
168 faces_recreees(ii, 3) = som_face(i, 2, j);
176 sommets.
ref(faces_recreees);
193 if (som_face(ind[3], 0, j) == ind[2] && som_face(ind[3], 1, j) == ind[1] && som_face(ind[3], 2, j) == ind[0])
202 som_face(ind[3], 0, j) = -1;
203 som_face(ind[3], 1, j) = -1;
204 som_face(ind[3], 2, j) = -1;
208 for (j = 0; j < som_face.
dimension(2); j++)
210 if (som_face(ind[3], 0, j) == -1)
213 som_face(ind[3], 0, j) = ind[2];
214 som_face(ind[3], 1, j) = ind[1];
215 som_face(ind[3], 2, j) = ind[0];
226 ArrOfInt marq_remove(oldsz);
230 IntTab new_elems(oldsz, nbs);
232 int nbfacesom = (
dimension == 2) ? 4 : 4 * 3;
233 IntTab som_face(nbsom, 3, nbfacesom);
240 for (
int i = 0; i < oldsz; i++)
242 f.setVar(0, xg(i, 0));
243 f.setVar(1, xg(i, 1));
245 f.setVar(2, xg(i, 2));
247 if ((
int) (
f.eval() + 0.5))
253 for (
int i = 0; i <
listelem.size(); i++)
261 Cerr <<
"-> " <<
listelem.size() <<
" elements will be removed from the domain " <<
domaine().
le_nom() << finl;
267 for (
int i = 0; i < oldsz; i++)
269 if (marq_remove[i] == 0)
271 for (
int k = 0; k < nbs; k++)
272 new_elems(j, k) = les_elems(i, k);
279 int i0 = les_elems(i, 0);
280 int i1 = les_elems(i, 1);
281 int i2 = les_elems(i, 2);
282 int i3 = les_elems(i, 3);
291 int i0 = les_elems(i, 0);
292 int i1 = les_elems(i, 1);
293 int i2 = les_elems(i, 2);
294 int i3 = les_elems(i, 3);
295 int i4 = les_elems(i, 4);
296 int i5 = les_elems(i, 5);
297 int i6 = les_elems(i, 6);
298 int i7 = les_elems(i, 7);
311 les_elems.
ref(new_elems);
319 Cerr <<
" Regeneration of boundaries" << finl;
322 Faces& les_faces = itr.faces();
324 les_faces.
typer(Type_Face::segment_2D);
326 les_faces.
typer(Type_Face::quadrangle_3D);
329 Cerr <<
" addition of a new boundary issued from removed elements" << finl;
330 Bord& new_bord = dom.
faces_bord().add(Bord());
331 new_bord.
nommer(
"newBord");
336 Faces& les_faces = new_bord.
faces();
342 Cerr <<
"Regeneration of internal faces" << finl;
345 Faces& les_faces = itr.faces();
347 les_faces.
typer(Type_Face::segment_2D);
349 les_faces.
typer(Type_Face::quadrangle_3D);
354 Cerr <<
"END of Remove_elem..." << finl;
361 Cerr <<
"We do not yet know how to Remove_elem the " << dom.type_elem()->
que_suis_je() <<
"s" << finl;
const OctreeRoot_t & construit_octree() const
void calculer_centres_gravite(DoubleTab_t &xp) const
Calcule les centres de gravites des elements du domaine.
DoubleTab_t & les_sommets()
Bords_Internes_t & bords_int()
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
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 typer(const Motcle &)
Type les faces.
int_t dimensionner(int_t)
(Re-)dimensionne les faces On redimensionne les voisins en consequence.
const IntTab_t & les_sommets() const
Renvoie le tableau des sommets de toutes les faces.
void nommer(const Nom &) override
Donne un nom a la frontiere.
void typer_faces(const Motcle &)
Type les faces de la frontiere.
const Faces_t & faces() const
void associer_domaine(Nom &nom_dom)
Domaine_t & domaine(int i=0)
Une chaine de caractere (Nom) en majuscules.
static void nettoie(Domaine_t &)
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(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
int lire_avec_accolades_depuis(Entree &is)
Parse the parameter block { ... } from is.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
class Remove_elem Enleve du maillage les elements specifies par l'utilisateur dans le jeu de donnees
void recreer_faces(Domaine &, Faces &, IntTab &) const
Entree & interpreter_(Entree &) override
void remove_elem_(Domaine &)
void creer_faces(Domaine &, Faces &, IntTab &) const
void remplir_liste(IntTab &, int, int, int, int) const
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.
virtual void ref(const TRUSTTab &)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const