16#include <Octree_Double.h>
17#include <Probleme_base.h>
20#include <Equation_base.h>
22#include <Domaine_VF.h>
26OBS_PTR(
Debog_Pb) Debog_Pb::instance_debog_;
63 Cerr <<
"Error found in Debog_Pb (see debog.log files)" << finl;
84 param.dictionnaire(
"write", 0);
85 param.dictionnaire(
"read", 1);
87 param.lire_avec_accolades(is);
92 Cerr <<
"Error in Debog::interpreter: " << obj <<
" is not a Problem_base object" << finl;
96 Probleme_base& pb = ref_cast(Probleme_base, obj);
118 instance_debog_ = *
this;
146 while (dummy !=
"msg");
151 Cerr <<
"Error in Debog_Pb::goto_msg(" << msg <<
")\n invalid data in DEBOG file" << finl;
159 Cerr <<
"Error in Debog_Pb::goto_msg(" << msg <<
")\n invalid data in DEBOG file" << finl;
166 if (dummy ==
"FinMsg")
175 log_file_ <<
"Skipping message " << n <<
" (looking for " << msg <<
")" << finl;
188 Cerr <<
"Error in Debog.cpp: cannot write geometry data in parallel." << finl;
191 const Domaine& dom = ref_pb_->domaine();
205 if (zvf.
xa().dimension(0) > 0)
229 Octree_Double octree;
239 Cerr <<
"Internal error in Debog::add_renum_item: coordinate array does not match md descriptor" << finl;
243 ArrOfDouble center(dim);
247 for (
int i = 0; i < n; i++)
249 for (
int j = 0; j < dim; j++)
250 center[j] = coord_par(i,j);
258 Cerr <<
"Debog::add_renum_item: Error. Id=" <<
id
259 <<
"\n Item " << i <<
" with following coordinates was found " << k <<
" times within epsilon=" << epsilon <<
" in the reference geometry: " << center << finl;
262 Cerr <<
"If you want to discard nodes comparison in the mesh, add 'noeuds_doubles_ignores 1' option in debog_pb keyword." << finl;
267 Cerr <<
"Warning, this item will be ignored during the comparison..." << finl;
274 renum[i] = elements[0];
281 const Domaine& dom = ref_pb_->domaine();
285 DoubleTab coord_som_seq;
290 ArrOfInt liste_procs(1);
298 const Elem_geom_base& elem = dom_seq.type_elem().valeur();
306 envoyer_broadcast(coord_som_seq, 0);
309 envoyer_broadcast(xp_seq, 0);
315 const DoubleTab& xp = zvf.
xp();
347 envoyer_broadcast(xv_seq, 0);
348 const DoubleTab& xv = zvf.
xv();
352 envoyer_broadcast(avec_aretes, 0);
355 envoyer_broadcast(xa_seq, 0);
356 const DoubleTab& xa = zvf.
xa();
363enum Debog_Exceptions { RENUM_ARRAY_NOT_FOUND };
368 for (
int i = 0; i < n; i++)
377 Cerr <<
"Error, we don't find renum_vector for the array on item: "<<
id << finl;
378 throw RENUM_ARRAY_NOT_FOUND;
397 DoubleVect vecteur_i;
405 if (nbc0 > std::numeric_limits<int>::max())
406 Process::exit(
"Debog_Pb::verifier_matrice() - total number of items too big!");
407 const int nb_colonnes =
static_cast<int>(nbc0);
409 for (
int i = 0; i < nb_colonnes; i++)
425 for (
int j = 0; j < sz; j++)
427 if (renum_colonnes[j] == i)
435 vecteur_i[renum_i] = 1.;
438 msg2 +=
" produit avec base ";
442 vecteur_i[renum_i] = 0.;
452 for (i = 0; i < n; i++)
459 Cerr <<
"Error in Debog_Pb::verifier_Mat_elems no registered MD_Vector for ELEM type" << finl;
482 Nom nom_pb, nom_fic, nom_fic_faces, seuil;
485 is >> nom_fic >> nom_fic_faces >> seuil >> mode_db;
487 Nom n(
"Debog_pb debog Lire debog { nom_pb ");
489 n +=
" fichier_domaine ";
491 n +=
" fichier_faces ";
493 n +=
" fichier_debog DEBOG";
494 n +=
" seuil_absolu ";
496 n +=
" seuil_relatif ";
499 if (mode_db == 0) n +=
"write";
503 if (
je_suis_maitre()) Cerr <<
"Debog_Pb_Wrapper: convert to new syntax: " << finl << n << finl;
: Cette classe decrit un groupe de processeurs sur lesquels
Entree & interpreter(Entree &is) override
SFichier write_debog_data_file_
void add_renum_item(const DoubleTab &coord_ref, const DoubleTab &coord_par, const MD_Vector &md, const Nom &id)
int noeuds_doubles_ignores_
void verifier_Mat_elems(const char *const msg, const Matrice_Base &la_matrice)
const IntVect & find_renum_vector(const MD_Vector &, Nom &id) const
void goto_msg(const char *const msg)
void verifier_matrice(const char *const msg, const Matrice_Base &, const MD_Vector &md_lignes, const MD_Vector &md_colonnes)
md_lignes: descripteur des indices de lignes (cad descripteur du vecteur b dans A*x=b) mb_colonnes: i...
EFichier debog_data_file_
EcrFicCollecte detailed_log_file_
void register_item(const MD_Vector &md, const Nom &id)
void error_function()
methode appelee des qu'une erreur est trouvee dans l'espace reel.
void set_nom_pb_actuel(const Nom &nom)
std::enable_if_t<(std::is_convertible< _TYPE_, double >::value)||(std::is_convertible< _TYPE_, int >::value), void > verifier(const char *const msg, _TYPE_, _TYPE_ *refvalue=0)
void write_geometry_data()
void read_geometry_data()
int test_ignore_msg(const char *const msg)
virtual const MD_Vector & md_vector_sommets() const
const DoubleTab_t & coord_sommets() const
virtual const MD_Vector & md_vector_elements() const
renvoie le descripteur parallele des tableaux aux elements du domaine
const MD_Vector & md_vector_faces() const
const MD_Vector & md_vector_aretes() const
double xa(int num_arete, int k) const
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
double xp(int num_elem, int k) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Une entree dont la source est une chaine de caracteres.
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
virtual void calculer_centres_gravite(DoubleTab_t &) const
Compute all centers of mass of all elements in the domain.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual void set_error_action(Error_Action)
Change le comportement en cas d'erreur de l'entree, voir error_handle_() et get_error_action().
Entree & interpreter_bloc(Entree &is, Bloc_Type bloc_type, int verifier_sans_interpreter)
Interpretation d'un bloc d'instructions prises dans l'entree is.
static Interprete_bloc & interprete_courant()
renvoie l'interprete_bloc en train d'etre lu dans le jeu de donnees.
Classe de base des objets "interprete".
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
virtual trustIdType nb_items_seq_tot() const
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
Classe Matrice_Base Classe de base de la hierarchie des matrices.
virtual DoubleVect & multvect(const DoubleVect &, DoubleVect &) const
Multiplication d'un vecteur par la matrice.
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual int finit_par(const char *const n) const
virtual int debute_par(const char *const n) const
Nom & prefix(const char *const)
Nom & suffix(const char *const)
Extraction de suffixe : Nom x("azerty");.
classe Objet_U Cette classe est la classe de base des 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.
static double precision_geom
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static int_t search_nodes_close_to(double x, double y, double z, const DoubleTab_t &coords, ArrOfInt_t &node_list, double epsilon)
Methode hors classe Cherche parmi les sommets de la liste node_list ceux qui sont a une.
void build_nodes(const DoubleTab_t &coords, const bool include_virtual, const double epsilon=0.)
construit un octree contenant les points de coordonnees coords.
int_t search_elements_box(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax, ArrOfInt_t &elements) const
cherche tous les elements ou points ayant potentiellement une intersection non vide avec la boite don...
static int enter_group(const Comm_Group &group)
Si le processeur local appartient au groupe, le groupe courant pour ce processeur devient "group" et ...
static void create_group(const ArrOfInt &liste_pe, OWN_PTR(Comm_Group) &group, int force_Comm_Group_NoParallel=0)
Creation d'un nouveau groupe de processeurs (utilisation possible n'importe ou dans le code).
static void exit_group()
Retourne dans le groupe ou l'on etait avant le dernier enter_group() reussi (dont le resultat a ete 1...
Helper class to factorize the readOn method of Objet_U classes.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static bool is_parallel()
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),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
void precision(int pre) override
Classe de base des flux de sortie.
_SIZE_ size_array() const
void set_md_vector(const MD_Vector &) override
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const
_SIZE_ size_totale() const
virtual const MD_Vector & get_md_vector() const