16#ifndef Domaine_32_64_included
17#define Domaine_32_64_included
19#include <Domaine_base.h>
21#include <TRUST_Deriv.h>
25#include <medcoupling++.h>
28#include <MEDCouplingFieldTemplate.hxx>
29#include <MEDCouplingUMesh.hxx>
30#include <MEDCouplingRemapper.hxx>
31using MEDCoupling::MEDCouplingRemapper;
32using MEDCoupling::MEDCouplingUMesh;
33using MEDCoupling::MCAuto;
34using MEDCoupling::MEDCouplingFieldDouble;
36#include <OverlapDEC.hxx>
37using MEDCoupling::OverlapDEC;
60template<
typename _SIZE_>
64 Declare_instanciable_sans_constructeur_32_64(
Domaine_32_64 );
241 inline const LIST(OBS_PTR(
Domaine_32_64))& domaines_frontieres()
const {
return domaines_frontieres_; }
345 inline const MEDCouplingUMesh* get_mc_mesh(
bool virt =
false)
const;
346 inline void set_mc_mesh(MCAuto<MEDCouplingUMesh> m)
const { mc_mesh_ = m; }
348 MEDCouplingRemapper* get_remapper(
const Domaine_32_64& other_dom,
bool virt=
false)
const;
351 OverlapDEC* get_dec(
const Domaine_32_64& other_dom, MEDCouplingFieldDouble *dist, MEDCouplingFieldDouble *loc)
const;
429 mutable MCAuto<MEDCouplingUMesh> mc_mesh_, mc_mesh_virt_;
431 mutable std::map<const Domaine_32_64*, MEDCoupling::MEDCouplingRemapper> rmps;
434 mutable std::map<std::pair<const Domaine_32_64*, MEDCoupling::NatureOfField>, OverlapDEC> decs;
436 mutable bool mc_mesh_ready_ =
false, mc_mesh_virt_ready_ =
false;
440 void prepare_rmp_with(
const Domaine_32_64& other_dom,
bool virt)
const;
441 void prepare_dec_with(
const Domaine_32_64& other_dom, MEDCouplingFieldDouble *dist, MEDCouplingFieldDouble *loc)
const;
443 template<
typename _BORD_TYP_>
444 void correct_type_single_border_type(std::list<_BORD_TYP_>& list);
447 mutable DoubleTabs cached_positions_;
456template<
typename _SIZE_>
459 const std::string suff = !std::is_same<_SIZE_, int>::value ?
"_64" :
"";
460 Nom typ_32_64 = typ + suff;
461 elem_.typer(typ_32_64);
462 elem_->associer_domaine(*
this);
473template<
typename _SIZE_>
483template<
typename _SIZE_>
487template<
typename _SIZE_>
495template<
typename _SIZE_>
502template<
typename _SIZE_>
512template<
typename _SIZE_>
528template<
typename _SIZE_>
538template<
typename _SIZE_>
562template<
typename _SIZE_>
585template<
typename _SIZE_>
595template<
typename _SIZE_>
607template<
typename _SIZE_>
610 if (virt ? !mc_mesh_virt_ready_ : !mc_mesh_ready_)
612 return virt ? mc_mesh_virt_ : mc_mesh_;
Empty class used as a base for all the arrays.
Classe Bord Cette classe represente un bord d'un domaine, c'est un type de frontiere.
Classe Bord_Interne La classe sert a representer un ensemble de faces qui sont internes.
Classe Bords Cette classe represente une liste d'objets de type Bord.
int_t nb_faces() const
Renvoie le nombre total de faces de tous les bords de la liste.
Class Bords_Internes Cette classe represente une liste d'objets de type Bords_Interne.
int_t nb_faces() const
Renvoie le nombre total de faces contenues dans la liste des Bord_Interne, i.
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
classe Domaine_32_64 un Domaine est un maillage compose d'un ensemble d'elements geometriques de meme...
int_t nb_faces_bords_int() const
Bord_Interne_32_64< _SIZE_ > Bord_Interne_t
IntVect_T< _SIZE_ > IntVect_t
void calculer_mon_centre_de_gravite(ArrOfDouble &c)
Calcule le centre de gravite du domaine.
double volume_total() const
void construire_elem_virt_pe_num()
Sous_Domaine_t & ss_domaine(int i)
SmallArrOfTID_t & chercher_elements(const DoubleVect &pos, SmallArrOfTID_t &elem, int reel=0) const
Recherche des elements contenant les points dont les coordonnees sont specifiees.
Bords_Internes_t mes_bords_int_
Domaine_32_64 & domaine_frontiere(int i)
virtual void clear()
Reset the Domaine completely except for its name.
ArrOfInt_t renum_som_perio_
int_t nb_faces_groupes_faces(Type_Face type) const
const Sous_Domaine_t & ss_domaine(int i) const
ArrOfDouble & cg_moments()
const Joint_t & joint(const Nom &nom) const
void rang_elems_sommet(SmallArrOfTID_t &elems, double x, double y=0, double z=0) const
int_t nb_faces_raccord(Type_Face type) const
const OWN_PTR(Elem_geom_base_32_64< _SIZE_ >) &type_elem() const
const Joints_t & faces_joint() const
Groupe_Faces_t & groupe_faces(int i)
const Frontiere_t & frontiere(const Nom &) const
int_t nb_aretes_tot() const
renvoie le nombre d'aretes total (reelles+virtuelles).
Frontiere_32_64< _SIZE_ > Frontiere_t
int_t nb_faces_bord(int num_bord) const
const Raccord_t & raccord(const Nom &nom) const
virtual const MD_Vector & md_vector_sommets() const
int_t chercher_elements(double x, double y=0, double z=0, int reel=0) const
Renvoie le rang de l'element contenant le point dont les coordonnees sont specifiees.
ArrsOfInt_T< _SIZE_ > ArrsOfInt_t
Bord_t & bord(const Nom &nom)
Joints_t mes_faces_joint_
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
void construire_elem_virt_pe_num(IntTab_t &elem_virt_pe_num_cpy) const
int_t nb_elem_tot() const
int_t nb_faces_specifiques() const
Renvoie le nombre de faces speciales du domaine.
OWN_PTR(Raccord_base_32_64< _SIZE_ >) Raccord_t
Bord_Interne_t & bords_interne(int i)
int_t nb_faces_bord() const
Frontiere_t & frontiere(int i)
const Groupes_Faces_t & groupes_faces() const
SmallArrOfTID_t & chercher_elements(const DoubleTab &pos, SmallArrOfTID_t &elem, int reel=0) const
Recherche des elements contenant les points dont les coordonnees sont specifiees.
int_t nb_faces_raccord(int num_rac) const
SmallArrOfTID_T< _SIZE_ > SmallArrOfTID_t
LIST(OBS_PTR(Domaine_32_64)) domaines_frontieres_
OWN_PTR(OctreeRoot_t) deriv_octree_
Sous_Domaine_t & ss_domaine(const Nom &nom)
const IntTab_t & aretes_som() const
renvoie le tableau de connectivite aretes/sommets.
DoubleTab_T< _SIZE_ > DoubleTab_t
const OctreeRoot_t & construit_octree() const
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
LIST(OBS_PTR(Sous_Domaine_t)) les_ss_domaines_
void creer_mes_domaines_frontieres(const Domaine_VF &domaine_vf)
SmallArrOfTID_t & chercher_aretes(const DoubleTab &pos, SmallArrOfTID_t &arr, int reel=0) const
Raccord_t & raccord(int i)
void calculer_centres_gravite(DoubleTab_t &xp) const
Calcule les centres de gravites des elements du domaine.
int_t nb_faces_frontiere() const
Renvoie le nombre de faces frontiere du domaine (somme des nombres de bords, de raccords et de bords ...
int_t nb_faces_bords_int(Type_Face type) const
Raccords_t mes_faces_raccord_
static int identifie_item_unique(IntList &item_possible, DoubleTab &coord_possible, const DoubleVect &coord_ref)
Bord_32_64< _SIZE_ > Bord_t
virtual void calculer_volumes(DoubleVect_t &volumes, DoubleVect_t &inv_volumes) const
Calcule les volumes des elements du domaine.
void init_faces_virt_bord(const MD_Vector &md_vect_faces, MD_Vector &md_vect_faces_bord)
DoubleTab_t & les_sommets()
const ArrOfInt_t & ind_faces_virt_bord() const
int_t nb_faces_bord(Type_Face type) const
void set_mc_mesh_ready(bool flag) const
void set_renum_som_perio(IntTab_t &renum)
int rang_frontiere(const Nom &) const
int_t nb_faces_bords_int(int num_bord) const
const Raccords_t & faces_raccord() const
void fill_from_list(std::list< Domaine_32_64 * > &lst)
Fills the Domaine from a list of Domaine objects by aggregating them.
Joint_32_64< _SIZE_ > Joint_t
Entree & readOn_has_perio(Entree &s, bool &has_perio)
Lit les objets constituant un Domaine a partir d'un flot d'entree.
int_t get_renum_som_perio(int_t i) const
ArrOfInt_T< _SIZE_ > ArrOfInt_t
const LIST(OBS_PTR(Sous_Domaine_t)) &ss_domaines() const
int associer_(Objet_U &) override
Association d'un Sous_Domaine au Domaine.
int_t nb_faces_raccord() const
double & coord(int_t i, int j)
int_t nb_faces_groupes_faces() const
const Frontiere_t & frontiere(int i) const
const DoubleTab_t & les_sommets() const
int nb_frontieres_internes() const
ArrOfInt_t ind_faces_virt_bord_
int nb_ss_domaines() const
const Groupe_Faces_t & groupe_faces(const Nom &nom) const
int_t nb_faces_joint() const
IntTab_t & set_aretes_som()
int_t nb_faces_groupes_faces(int num_g) const
Bord_Interne_t & bords_interne(const Nom &nom)
void add(const Sous_Domaine_t &sd)
DoubleTab getBoundingBox() const
Frontiere_t & frontiere(const Nom &)
int_t chercher_sommets(double x, double y=0, double z=0, int reel=0) const
Raccords_t & faces_raccord()
IntTab_t & set_elem_aretes()
const Joint_t & joint(int i) const
void resetSommetsCoordinates()
const IntTab_t & les_elems() const
void fixer_premieres_faces_frontiere()
void init_renum_perio()
Initialize the renumerotation array for periodicity.
int_t nb_faces_joint(int num_joint) const
Sous_Domaine_32_64< _SIZE_ > Sous_Domaine_t
const Sous_Domaine_t & ss_domaine(const Nom &nom) const
void merge_wo_vertices_with(Domaine_32_64 &z)
Merge another Domaine into this, without considering vertices which are handled separately.
const OctreeRoot_t & construit_octree(int &) const
construction de l'octree si pas deja fait
void construire_renum_som_perio(const Conds_lim &, const Domaine_dis_base &)
const Bord_Interne_t & bords_interne(const Nom &nom) const
const Bords_Internes_t & bords_int() const
Joint_t & joint(const Nom &nom)
void renum(const IntVect_t &nums)
Bords_Internes_32_64< _SIZE_ > Bords_Internes_t
Joints_32_64< _SIZE_ > Joints_t
int_t nb_faces_joint(Type_Face type) const
Bords_32_64< _SIZE_ > Bords_t
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
void read_former_domaine(Entree &s, bool &read_perio)
read what was (before TRUST 1.9.2) the "domaine" part from the input stream i.e. (roughly) the elemen...
DoubleTabs_T< _SIZE_ > DoubleTabs_t
Bords_Internes_t & bords_int()
void read_vertices(Entree &s)
only read vertices from the stream s
int_t nb_faces_frontiere(Type_Face type) const
Renvoie le nombre de faces frontiere du domaine du type specifie.
Groupes_Faces_t mes_groupes_faces_
OWN_PTR(Elem_geom_base_32_64< _SIZE_ >) &type_elem()
const ArrOfInt_t & get_renum_som_perio() const
int_t nb_faces_specifiques(Type_Face type) const
Renvoie le nombre de faces specifique du domaine du type specifie.
OctreeRoot_32_64< _SIZE_ > OctreeRoot_t
int_t nb_aretes() const
Renvoie le nombre d'aretes reelles.
Groupes_Faces_32_64< _SIZE_ > Groupes_Faces_t
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
SmallArrOfTID_t & chercher_sommets(const DoubleTab &pos, SmallArrOfTID_t &som, int reel=0) const
void calculer_centres_gravite_aretes(DoubleTab_t &xa) const
Calcule les centres de gravites des aretes du domaine.
const Raccord_t & raccord(int i) const
Raccord_t & raccord(const Nom &nom)
const DoubleTab_t & coord_sommets() const
const ArrOfDouble & cg_moments() const
void check_domaine()
associate the read objects to the domaine and check that the reading objects are coherent
DoubleVect_T< _SIZE_ > DoubleVect_t
Joint_t & joint_of_pe(int)
void exporter_mon_centre_de_gravite(ArrOfDouble c)
IntTab_t elem_virt_pe_num_
const Bord_Interne_t & bords_interne(int i) const
void correct_type_of_borders_after_merge()
Correcting type of borders if they were empty before merge (ie equal to vide_0D).
void ajouter(const DoubleTab_t &soms, IntVect_t &nums)
Ajoute des noeuds au domaine avec elimination des noeuds double au retour nums contient les nouveaux ...
void saveSommetsCoordinates()
ArrOfDouble_T< _SIZE_ > ArrOfDouble_t
void build_mc_mesh(bool virt=false) const
Build the MEDCoupling mesh corresponding to the TRUST mesh.
int_t arete_sommets(int_t i, int j) const
renvoie le numero du jeme sommet de la ieme arete.
void renum_joint_common_items(const IntVect_t &nums, const int_t elem_offset)
Renumerotation des noeuds et des elements presents dans les items communs des joints.
int_t face_bords_interne_conjuguee(int_t face) const
Renvoie -1 si face n'est pas une face de bord interne Renvoie le numero de la face dupliquee sinon.
SmallArrOfTID_t & indice_elements(const IntTab &som, SmallArrOfTID_t &elem, int reel=0) const
Cherche les numeros (indices) des elements contenants les sommets specifies par le parametre "sommets...
OWN_PTR(Elem_geom_base_32_64< _SIZE_ >) elem_
virtual void creer_tableau_sommets(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
Cree un tableau ayant une "ligne" par sommet du maillage.
const LIST(OBS_PTR(Domaine_32_64)) &domaines_frontieres() const
virtual const MD_Vector & md_vector_elements() const
renvoie le descripteur parallele des tableaux aux elements du domaine
bool is_mc_mesh_ready() const
int_t elem_aretes(int_t i, int j) const
renvoie le numero de la jeme arete du ieme element.
int_t nb_som_tot() const
Renvoie le nombre total de sommets du domaine i.e. le nombre de sommets reels et virtuels sur le proc...
Raccords_32_64< _SIZE_ > Raccords_t
double coord(int_t i, int j) const
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
void ajouter(const DoubleTab_t &soms)
Ajoute des noeuds (ou sommets) au domaine (sans verifier les doublons).
int nb_groupes_faces() const
const IntTab_t & elem_aretes() const
renvoie le tableau de connectivite elements/aretes.
const Bords_t & faces_bord() const
const Bord_t & bord(int i) const
void ecrire_noms_bords(Sortie &) const
Ecriture des noms des bords sur un flot de sortie.
const IntTab_t & elem_virt_pe_num() const
const Joint_t & joint_of_pe(int) const
Groupes_Faces_t & groupes_faces()
Groupe_Faces_32_64< _SIZE_ > Groupe_Faces_t
IntTab_T< _SIZE_ > IntTab_t
int comprimer()
Concatene les bords de meme nom et ceci pour: les bords, les bords periodiques, les bords internes et...
const Bord_t & bord(const Nom &nom) const
const Noms & bords_perio() const
const Groupe_Faces_t & groupe_faces(int i) const
int_t sommet_elem(int_t i, int j) const
Renvoie le numero (global) du j-ieme sommet du i-ieme element.
int comprimer_joints()
Concatene les joints de meme nom.
Base class for domains description. This class holds all the data shared by all domains and not sensi...
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Classe Elem_geom_base Cette classe est la classe de base pour la definition d'elements.
Class defining operators and methods for all reading operation in an input flow (file,...
Classe Groupe_Face La classe sert a representer une selection de faces lu dans le fichier med.
Class Groupes_Faces Cette classe represente une liste d'objets de type Groupe_Faces.
int_t nb_faces() const
Renvoie le nombre total de faces contenues dans la liste des Groupe_Faces, i.
La classe Joint est une Frontiere qui contient les faces et les sommets de joint avec le domaine PEvo...
Classe Joints Cette classe represente une liste d'objet de type Joint.
int_t nb_faces() const
Renvoie le nombre de face total des Joints_32_64 de la liste.
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
class Nom Une chaine de caractere pour nommer les objets de TRUST
Un tableau de chaine de caracteres (VECT(Nom)).
classe Objet_U Cette classe est la classe de base des Objets de TRUST
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe Raccord_base Cette classe est simplement une frontiere, c'est la classe de base de la.
Classe Raccords Cette represente une liste d'objets de type Raccord.
int_t nb_faces() const
Renvoie le nombre de face total des Raccords_32_64 de la liste.
Reorder_Mesh allows the user to trigger the renumbering of the mesh entities.
Classe de base des flux de sortie.
Sous_Domaine represents a volumic sub-domain i.e. a sub set of elements of a Domaine.