16#include <Champ_Generique_Interpolation.h>
17#include <Champ_Generique_refChamp.h>
18#include <Domaine_Cl_dis_base.h>
19#include <Entree_complete.h>
22#include <Champ_Inc_base.h>
23#include <Postraitement.h>
24#include <Domaine_VF.h>
28Implemente_instanciable_sans_constructeur_ni_destructeur(
Sonde,
"Sonde",
Objet_U);
125static int fichier_sondes_cree=0;
163 Cerr <<
"Reading of the probe: " <<
nom_ <<
" on the field: " <<
nom_champ_lu_ << finl;
167 const Motcle nom_domaine = mon_post->domaine()->
le_nom();
170 Motcle nom_macro_test, nom1(
"_not_def"), nom2(
"_not_def");
171 const Motcles& noms_champs_postraitables = mon_post->les_sondes().get_noms_champs_postraitables();
175 nom_macro = nom_macro.
suffix(
"MOYENNE_");
177 nom_macro = nom_macro.
suffix(
"ECART_TYPE_");
182 nom_macro_test = nom_macro_test.
suffix(
"CORRELATION_");
183 for (
auto& itr : noms_champs_postraitables)
185 nom_macro_test = nom_macro_test.
suffix(itr);
189 nom2 = nom_macro_test.
suffix(
"_");
195 if (noms_champs_postraitables.
contient_(nom_macro))
200 const Nom& nom_champ_base = champ_ref->
le_nom();
201 const Noms& compos_base = champ_ref->noms_compo();
205 nom_champ_ref = nom_champ_base +
"_natif_"+ nom_domaine;
208 Nom nume(ncomposante);
209 nom_champ_ref = nom_champ_base+
"_natif_"+ nom_domaine+nume;
218 if ((noms_champs_postraitables.
contient_(nom1)) && (noms_champs_postraitables.
contient_(nom2)))
220 nom_champ_ref =
"Correlation_";
221 nom_champ_ref += nom1+
"_natif_"+nom_domaine+
"_"+nom2+
"_natif_"+nom_domaine;
228 mon_champ = mon_post->get_champ_post(nom_champ_ref);
232 const Noms nom_champ = mon_champ->get_property(
"nom");
233 const Noms noms_comp = mon_champ->get_property(
"composantes");
259 Motcle accolade_fermee(
"}");
269 else if (motlu==
"chsom")
274 else if (motlu==
"grav")
279 else if (motlu==
"gravcl")
284 else if (motlu==
"som")
298 Motcles les_motcles(16);
300 les_motcles[0] =
"periode";
301 les_motcles[1] =
"point";
302 les_motcles[2] =
"points";
303 les_motcles[3] =
"segment";
304 les_motcles[4] =
"plan";
305 les_motcles[5] =
"volume";
306 les_motcles[6] =
"segmentxdx";
307 les_motcles[7] =
"planxdxdy";
308 les_motcles[8] =
"circle";
309 les_motcles[9] =
"position_like";
310 les_motcles[10] =
"numero_elem_sur_maitre";
311 les_motcles[11] =
"segmentpoints";
312 les_motcles[12] =
"segmentfacesx";
313 les_motcles[13] =
"segmentfacesy";
314 les_motcles[14] =
"segmentfacesz";
315 les_motcles[15] =
"radius";
318 while ((fait(0) != 1) || (fait(1) != 1))
321 if (motlu == accolade_fermee)
323 Cerr <<
"Error while reading the probe " <<
nom_ <<finl;
324 Cerr <<
"The data of the probe were not defined" << finl;
327 int rang=les_motcles.search(motlu);
330 Cerr <<
"Error while reading the probe " <<
nom_ <<finl;
331 Cerr << motlu <<
" is not understood; the keywords understood are : " << finl;
350 type_ = les_motcles[rang];
356 for (
int i=0; i<nbre_points; i++)
364 type_ = les_motcles[rang];
378 type_ = les_motcles[rang];
382 if (rang2==12 || rang2==13 || rang2==14)
389 const Motcle mot =
type_.getSuffix(
"SEGMENTFACES");
408 type_+=(Nom)origine(i);
414 type_+=(Nom)extremite(i);
418 dx(i)=(extremite(i))/(nbre_points-1);
420 dx(i)=(extremite(i)-origine(i))/(nbre_points-1);
421 for (
int i=0; i<nbre_points; i++)
429 type_ = les_motcles[rang];
473 type_ = les_motcles[rang];
513 type_ = les_motcles[rang];
519 double radius, teta1, teta2;
526 is >> radius >> teta1 >> teta2;
531 type_+=(Nom)origine(i);
540 for (
int i=0; i<nbre_points; i++)
542 double angle=teta1+(teta2-teta1)*i/(nbre_points-1);
576 type_ = les_motcles[rang];
581 double theta, radius1, radius2;
587 is >> theta >> radius1 >> radius2;
592 type_+=(Nom)origine(i);
602 for (
int i=0; i<nbre_points; i++)
604 double radius = radius1+(radius2-radius1)*i/(nbre_points-1);
617 const Sondes& les_sondes=mon_post->les_sondes();
618 for (
int i=0; i<les_sondes.size(); i++)
619 if (les_sondes(i)->
get_nom()==autre_sonde)
627 Cerr<<
" The probe name "<<autre_sonde<<
" was not found"<<finl;
631 const Sonde& la_sonde_ref=les_sondes(m);
640 Cerr << motlu <<
"is not yet understood!" << finl;
646 if ( (fait[0] == 0) || (fait[1] == 0) || (
dim==-1))
648 Cerr <<
"Error while reading the probe " <<
nom_ << finl;
649 Cerr <<
"The data of the probe have not been properly defined" << finl;
671 if (!fichier_sondes_cree)
672 fichier_sondes.
ouvrir(nom_fich);
674 fichier_sondes.
ouvrir(nom_fich, ios::app);
677 fichier_sondes_cree = 1;
688 const Motcles& noms_champs_postraitables = mon_post->les_sondes().get_noms_champs_postraitables();
695 const Nom& le_nom_champ = champ_ref->
le_nom();
696 const Motcle nom_domaine = mon_post->domaine()->
le_nom();
699 identifiant =
Motcle(le_nom_champ)+
"_natif_"+nom_domaine;
700 if (!mon_post->comprend_champ_post(identifiant))
702 mon_post->creer_champ_post(le_nom_champ,
"natif",is);
709 if ((is_champ_predefini) && (!mon_post->comprend_champ_post(
nom_champ_lu_)))
726 if (mon_post->noms_fichiers_sondes().contient(
nom_)==0)
727 mon_post->noms_fichiers_sondes().add(
nom_);
730 Cerr <<
"The filename " <<
nom_ <<
" is used several times for probes." << finl;
731 Cerr <<
"A probe must have a unique filename to avoid writing conflicts." << finl;
738 return mon_champ->get_ref_domain();
743 return mon_champ->get_property(
"nom");
748 const Noms noms_comp = mon_champ->get_property(
"composantes");
749 Motcle directive = mon_champ->get_directive_pour_discr();
750 int nb_comp = (directive ==
"champ_Fonc_Quad_DG" || directive ==
"champ_elem_DG") ? 1 : noms_comp.size();
757 return mon_champ->get_time();
770 Cerr<<
"The location of the probe named "<<
nom_<<
" are modified (to centers of gravity). Check the .log files to see the new location."<<finl;
772 const DoubleTab& xp = domaineVF.
xp();
773 for (
int i=0; i<nbre_points_tot; i++)
777 Journal()<<
"The point " << i <<
" of the probe "<<
nom_<<
" is moved:";
803 if(
elem_.size() != nbre_points_tot)
804 elem_.resize(nbre_points_tot);
814 Cerr <<
"You can't specify the probe named " <<
nom_ <<
" with "<< nb_coord <<
" coordinates on the domain named " <<domaine_geom.
le_nom()<<finl;
816 Cerr <<
"Change the probe coordinates or use numero_elem_sur_maitre keyword (see documentation)" << finl;
817 Cerr <<
"to specify a cell containing the probe and not its coordinates." << finl;
828 const IntTab& les_elems=mon_champ->get_ref_domaine_dis_base().domaine().les_elems();
831 const DoubleTab& coord=mon_champ->get_ref_domaine_dis_base().domaine().les_sommets();
834 for (
int s=0; s<nb_som; s++)
846 Cerr<<
" On the probe named " <<
nom_ <<
" , the element number "<<
numero_elem_<<
" does not exist on the master processor, we put the position to zero"<<finl;
853 ArrOfDouble tmp(nbre_points_tot);
854 for (
int i=0; i<nbre_points_tot; i++)
857 for (
int i=0; i<nbre_points_tot; i++)
859 Cerr <<
"WARNING: The point number " << i+1 <<
" of the probe named " <<
nom_ <<
" is outside the computational domain " << domaine_geom.
le_nom() << finl;
868 const DoubleTab& xv = domaineVF.
xv();
869 const IntTab& elem_faces = domaineVF.
elem_faces();
872 Cerr <<
"Error: the domain " << domaineVF.
domaine().
le_nom() <<
" is not discretized." << finl;
879 Cerr <<
"Error in your probe : " <<
nom_ << finl;
880 Cerr <<
"You can not project to nodes, the field " << noms_champ[0] << finl;
881 Cerr <<
"which is interpolated on the domain " << dom_interp << finl;
884 Cerr<<
"The location of the probe named "<<
nom_<<
" are modified (to faces). Check the .log files to see the new location."<<finl;
885 const int nfaces_par_element = domaine_geom.
nb_faces_elem() ;
886 for (
int i=0; i<nbre_points_tot; i++)
888 double dist_min=DMAXFLOAT;
892 Journal()<<
"The point " << i <<
" of the probe "<<
nom_<<
" is moved:";
893 for(
int fac=0; fac<nfaces_par_element; fac++)
895 int face=elem_faces(
elem_[i],fac);
919 Journal() <<
" (" << (face_min < domaineVF.
premiere_face_int() ?
"boundary face " :
"internal face ") << face_min<<
")" << finl;
929 Cerr <<
"Error in your probe : " <<
nom_ << finl;
930 Cerr <<
"You can not project to vertexes, the field " << noms_champ[0] << finl;
931 Cerr <<
"which is interpolated on the domain " << dom_interp << finl;
934 Cerr<<
"The location of the probe named "<<
nom_<<
" are modified (to vertexes). Check the .log files to see the new location."<<finl;
935 const IntTab& sommet_elem = domaine_geom.
les_elems();
937 const DoubleTab& coord = domaine_geom.
les_sommets();
938 for (
int i=0; i<nbre_points_tot; i++)
940 double dist_min=DMAXFLOAT;
944 Journal()<<
"The point " << i <<
" of the probe "<<
nom_<<
" is moved:";
945 for(
int isom=0, sommet; isom<sommets_par_element && (sommet = sommet_elem(
elem_[i],isom)) >= 0; isom++)
972 bool supprime_doublons =
true;
973 if (mon_post->DeprecatedKeepDuplicatedProbes) supprime_doublons =
false;
974 ArrOfInt doublon(
elem_.size_array());
975 if (supprime_doublons)
978 int size =
elem_.size();
979 for (
int i=0; i<size; i++)
981 for (
int j=i+1; j<size; j++)
987 for (
int dir = 0; dir <
dimension; dir++)
1002 Cerr <<
"We remove " << doublons <<
" duplicated points from the probe " <<
nom_ << finl;
1009 IntVect prop(
elem_);
1012 ArrOfInt elems2(
elem_);
1014 ArrOfInt elem_recu, doublon_recu;
1015 DoubleTab positions_recu;
1017 for(
int p=1; p<nbproc; p++)
1019 recevoir(doublon_recu,p,2003+p);
1020 recevoir(elem_recu,p,0,2002+p);
1021 recevoir(positions_recu,p,0,2001+p);
1022 for (
int el=0; el<nbre_points_tot; el++)
1023 if (elems2[el]==-1 && elem_recu[el]!=-1)
1025 elems2[el]=elem_recu[el];
1026 doublon[el]=doublon_recu[el];
1035 for(
int p=0; p<nbproc; p++)
1038 for (
int el=0; el<nbre_points_tot; el++)
1039 if (prop[el]==p&&!doublon[el]) size++;
1044 for (
int el=0; el<nbre_points_tot; el++)
1054 assert((size==0)||(min_array(
participant[p])>-1));
1063 envoyer_broadcast(prop, 0);
1069 for (
int el=0; el<prop.
size(); el++)
1073 if (prop(el) ==
me())
1076 for (
int dir = 0; dir <
dimension; dir++)
1080 for (
int dir = 0; dir <
dimension; dir++)
1086 int test =
static_cast<int>(
mp_sum(nbre_points));
1090 elem_.resize(nbre_points);
1128 int reprise = !stat(
nom_fichier_, &f) && mon_post->probleme().reprise_effectuee();
1145 if (
dim == 0 ||
dim == 1)
1151 for (
int i = 0; i < nbre_points; i++)
1153 s <<
" x= " << p(i, 0) <<
" y= " << p(i, 1);
1159 const Noms unites = mon_champ->get_property(
"unites");
1164 s <<
"# Type " <<
get_type() << finl;
1169 s <<
"TRUST Version1 01/09/96" << finl;
1171 s <<
"TRUST" << finl;
1176 for (
int j = 0; j <
dimension; j++) s <<
" " << p(0, j);
1180 Nom nom_grille(
"Grille");
1181 Nom nom_topologie(
"Topologie");
1184 nom_topologie +=
"_";
1185 nom_topologie +=
nom_;
1190 double xn = 0., yn = 0., zn = 0., norme = 0.;
1192 while (p(0, 0) == p(p1, 0) && p(0, 1) == p(p1, 1) && p(0, 2) == p(p1, 2))
1195 assert(p1 < nbre_points);
1197 while (p(0, 0) == p(p_nbre_points2, 0) && p(0, 1) == p(p_nbre_points2, 1) &&
1198 p(0, 2) == p(p_nbre_points2, 2))
1200 p_nbre_points2 += 1;
1201 assert(p_nbre_points2 < nbre_points);
1203 while (p(p1, 0) == p(p_nbre_points2, 0) && p(p1, 1) == p(p_nbre_points2, 1) &&
1204 p(p1, 2) == p(p_nbre_points2, 2))
1206 p_nbre_points2 += 1;
1207 assert(p_nbre_points2 < nbre_points);
1212 xn = (p(p1, 2) - p(0, 2)) * (p(p_nbre_points2, 1) - p(0, 1))
1213 - (p(p1, 1) - p(0, 1)) * (p(p_nbre_points2, 2) - p(0, 2));
1214 yn = (p(p1, 0) - p(0, 0)) * (p(p_nbre_points2, 2) - p(0, 2))
1215 - (p(p1, 2) - p(0, 2)) * (p(p_nbre_points2, 0) - p(0, 0));
1222 zn = (p(p1, 1) - p(0, 1)) * (p(p_nbre_points2, 0) - p(0, 0))
1223 - (p(p1, 0) - p(0, 0)) * (p(p_nbre_points2, 1) - p(0, 1));
1224 norme = std::fabs(xn) + std::fabs(yn) + std::fabs(zn);
1228 s << nom_grille <<
" 3 " << 2 * nbre_points << finl;
1230 for (i = 0; i < nbre_points; i++)
1232 s << p(i, 0) <<
" " << p(i, 1);
1234 else if (
dimension == 2) s <<
" 0." << finl;
1236 for (i = 0; i < nbre_points; i++)
1238 s << p(i, 0) + xn <<
" " << p(i, 1) + yn;
1239 if (
dimension == 3) s <<
" " << p(i, 2) + zn << finl;
1240 else if (
dimension == 2) s <<
" " << zn << finl;
1242 s <<
"TOPOLOGIE" << finl;
1243 s << nom_topologie <<
" " << nom_grille << finl;
1244 s <<
"MAILLE" << finl;
1250 kn = k + nbre_points;
1251 s <<
"VOXEL8 " << k <<
" " << k + 1 <<
" ";
1253 s <<
" " << kn <<
" " << kn + 1 <<
" " << kn +
nbre_points1;
1256 s <<
"FACE" << finl;
1262 s << nom_grille <<
" 3 " << nbre_points << finl;
1264 for (i = 0; i < nbre_points; i++)
1266 s << pbis(i, 0) <<
" " << pbis(i, 1);
1267 s <<
" " << pbis(i, 2) << finl;
1269 s <<
"TOPOLOGIE" << finl;
1270 s << nom_topologie <<
" " << nom_grille << finl;
1271 s <<
"MAILLE" << finl;
1279 s <<
"VOXEL8 " << k <<
" " << k + 1 <<
" ";
1281 s <<
" " << kn <<
" " << kn + 1 <<
" " << kn +
nbre_points1;
1284 s <<
"FACE" << finl;
1297 ma_source->mettre_a_jour(un_temps);
1308 double dt=mon_post->probleme().schema_temps().pas_de_temps();
1317 modf(temps_courant*(1+1e-15)/
periode, &nb);
1325 if (mon_post->les_sondes().get_update_positions())
1327 if (mon_post->probleme().domaine().deformable())
1376 DoubleTab valeurs_pe;
1382 for (
int i = 0; i < nb_val; i++)
1383 for (
int n = 0; n < N; n++)
1386 for(
int p=1; p<nbproc; p++)
1391 recevoir(valeurs_pe,p,0,2002+p);
1394 for(
int i=0; i<nb_val1; i++)
1395 for(
int n = 0; n < N; n++)
1405 double temps_courant = mon_post->probleme().schema_temps().temps_courant();
1410 for(
int i=0; i<valeurs.
dimension(0); i++)
1411 for(
int k=0; k<N; k++)
1412 fichier() <<
" " << valeurs(i,k);
1418 else if (
dim==2 ||
dim==3)
1422 const Noms noms_comp = mon_champ->get_property(
"composantes");
1423 int nb_comp = noms_comp.size();
1424 const Noms unites = mon_champ->get_property(
"unites");
1427 const Noms noms_champ = mon_champ->get_property(
"nom");
1428 nom_post = noms_champ[0];
1431 nom_post = noms_comp[
ncomp];
1433 Nom nom_topologie(
"Topologie");
1434 nom_topologie +=
"_";
1435 nom_topologie +=
nom_;
1437 fichier() <<
"TEMPS " << temps_courant <<
"\n";
1438 fichier() <<
"CHAMPPOINT " << nom_post <<
" " << nom_topologie
1439 <<
" " << temps_courant <<
"\n";
1440 fichier() << nom_post <<
" " << nb_comp <<
" " << unites[0] <<
"\n";
1442 int nbp=nbre_points;
1445 fichier() <<
"type1 " << nbp <<
"\n";
1446 else fichier() <<
"type0 " << nbp <<
"\n";
1448 for(i=0; i<nbre_points; i++)
1451 for(
int j=0; j<N; j++)
1452 fichier() <<
" " << valeurs(i,j);
1459 for(i=0; i<nbre_points; i++)
1462 for(
int j=0; j<N; j++)
1463 fichier() <<
" " << valeurs(i,j);
1494 for (
int iface=0; iface<nbf; iface++)
1502 const int nfin = ndeb + le_bord.
nb_faces();
1503 for (
int i=ndeb; i<nfin; i++)
1515 double eps = mon_champ->get_ref_domain().epsilon();
1518 const DoubleTab& xv = domaineVF.
xv();
1526 tmp[1] = nbre_points-1;
1528 for (
int i = 0; i<coords_bords.
dimension(0); i++)
1531 int elem =
elem_[e];
1534 for (
int j = 0; j < e_f.
dimension(1) && (face = e_f(elem, j)) >= 0; j++)
1536 if(f_e(face, 1) == -1 || f_e(face, 0) == -1)
1539 for (
int idim=0; idim<
dimension; idim++)
1540 dist+=((xv(face,idim)-coords_bords(i,idim))*(xv(face,idim)-coords_bords(i,idim)));
1542 if (sqrt(dist) < eps)
1545 for (
int idim=0; idim<
dimension; idim++)
1565 const DoubleTab& vals_ch = ch_inc.
valeurs();
1571 for (
int iface=0; iface<
faces_bords_.size_array(); iface++)
1579 cl->champ_front().valeurs_face(face-ndeb,valcl);
1581 if (valcl.
size() == 0)
1583 int elem0 = face_voisins(face,0);
1584 int elem1 = face_voisins(face,1);
1593 if (face_voisins(face,0) != -1)
A generic field constructed as an interpolation of another generic field (interpolation at vertices o...
class Champ_Generique_base
static int composante(const Nom &nom_test, const Nom &nom, const Noms &composantes, const Noms &synonyms)
Special field class that encapsulates a reference to a volume field of TRUST of type Champ_base.
const Domaine_Cl_dis_base & domaine_Cl_dis() const
DoubleTab & valeurs() override
Returns the array of field values at the current time.
class Champ_base This class is the base of the fields hierarchy.
virtual DoubleVect & valeur_aux_elems_compo_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp)
virtual DoubleTab & valeur_aux_elems_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs)
class Cond_lim Generic class used to represent any class
SmallArrOfTID_t & chercher_elements(const DoubleTab &pos, SmallArrOfTID_t &elem, int reel=0) const
Searches for the elements containing the points whose coordinates are specified.
DoubleTab_t & les_sommets()
int nb_faces_elem(int=0) const
Returns the number of faces of type i of the geometric elements that make up the domain.
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
int nb_cond_lim() const
Returns the number of boundary conditions.
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
double xv(int num_face, int k) const
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.
double xp(int num_elem, int k) const
virtual int orientation_si_definie(int) const
int premiere_face_int() const
A face is internal if and only if it separates two elements.
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
const Domaine & domaine() const
This class behaves like EChaine until the end of the string is reached.
Class defining operators and methods for all reading operation in an input flow (file,...
int num_premiere_face() const
A character string (Nom) in uppercase.
int debute_par(const char *const n) const override
An array of Motcle objects.
int contient_(const char *const ch) const
class Nom: a character string for naming TRUST objects.
Nom & suffix(const char *const)
Suffix extraction: Nom x("azerty");.
const Nom & le_nom() const override
Returns *this.
An array of character strings (VECT(Nom)).
Base class for TRUST objects (Objet_U).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
static const Nom & nom_du_cas()
Returns a constant reference to the case name. This method is static.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
class Postraitement. The class holds -a list of generic fields champs_post_complet_ containing
class Probleme_base It is a Probleme_U that is not a coupling.
void creer_champ(const Motcle &motlu) override
const Champ_base & get_champ(const Motcle &nom) const override
virtual int expression_predefini(const Motcle &motlu, Nom &expression)
static void mp_max_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static double mp_max(double)
static Sortie & Journal(int message_level=0)
Returns a static Sortie object used as an event journal.
static int nproc()
Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current...
static double mp_sum(double)
Computes the sum of x over all processors in the current group.
static int me()
Returns the rank of the local processor in the current communication group. See Comm_Group::rank() an...
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
class Sonde. This class allows tracking the evolution of a field over time.
void associer_post(const Postraitement &)
Associates the post-processing object with the probe.
virtual void create_champ_generique(Entree &is, const Motcle &motlu)
DoubleTab valeurs_locales
double periode
sampling period
virtual void mettre_a_jour_bords()
virtual int get_nb_compo_champ() const
IntTab rang_cl_
for a given face, index of the CL that this face bears
const DoubleTab & les_positions() const
virtual void validate_type(const Motcle &loc) const
DoubleTab les_positions_sondes_initiales_
coordinates of the initial point probes
const int & get_dim() const
Nom nom_fichier_
the name of the file containing the probe
const DoubleTab & les_positions_sondes_initiales() const
Returns the array of positions of the field that are probed.
virtual void ajouter_bords(const DoubleTab &coords_bords)
DoubleTab les_positions_
coordinates of probes local to each proc
virtual void update_source(double un_temps)
virtual double get_temps_champ() const
virtual const Noms get_noms_champ() const
int dim
the dimension of the probe (point:0,segment:1,plan:2,volume:3)
virtual void fix_probe_position()
const DoubleTab & les_positions_sondes() const
IntVect elem_
elements containing the local point probes
virtual void validate_position() const
DoubleTab valeurs_sur_maitre
valeurs_locales: values on each proc, valeurs_sur_maitre: values gathered on the master
const Nom & get_nom() const
virtual void initialiser()
Initialises the probe.
int nbre_points3
used to create sonde_segment, sonde_plan, etc...
ArrOfInt faces_bords_
array containing the indices of the boundary faces hit by the probe
int numero_elem_
equals -1 if undefined, otherwise the element number on the master
virtual void fill_local_values()
SFichier & fichier()
Returns an output file stream pointing to the output file used by the probe.
virtual void fix_probe_position_grav()
virtual void postraiter()
Performs post-processing.
virtual const Domaine & get_domaine_geom() const
const Nom & get_type() const
virtual void init_bords()
DoubleTab les_positions_sondes_
coordinates of probes across the whole domain after displacement (master only)
Sonde()
Default constructor for a probe.
void ouvrir_fichier()
Opens the file associated with the probe.
virtual void mettre_a_jour(double temps, double tinit)
Updates the probe in time and performs the post-processing.
OBS_PTR(Postraitement) mon_post
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out)
Sortie & flush() override
Forces the data in the buffer to be written to disk. Uses the ofstream class implementation.
Base class for output streams.
_SIZE_ size_array() const
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const