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:";
804 if(
elem_.size() != nbre_points_tot)
805 elem_.resize(nbre_points_tot);
815 Cerr <<
"You can't specify the probe named " <<
nom_ <<
" with "<< nb_coord <<
" coordinates on the domain named " <<domaine_geom.
le_nom()<<finl;
817 Cerr <<
"Change the probe coordinates or use numero_elem_sur_maitre keyword (see documentation)" << finl;
818 Cerr <<
"to specify a cell containing the probe and not its coordinates." << finl;
829 const IntTab& les_elems=mon_champ->get_ref_domaine_dis_base().domaine().les_elems();
832 const DoubleTab& coord=mon_champ->get_ref_domaine_dis_base().domaine().les_sommets();
835 for (
int s=0; s<nb_som; s++)
847 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;
854 ArrOfDouble tmp(nbre_points_tot);
855 for (
int i=0; i<nbre_points_tot; i++)
858 for (
int i=0; i<nbre_points_tot; i++)
860 Cerr <<
"WARNING: The point number " << i+1 <<
" of the probe named " <<
nom_ <<
" is outside the computational domain " << domaine_geom.
le_nom() << finl;
869 const DoubleTab& xv = domaineVF.
xv();
870 const IntTab& elem_faces = domaineVF.
elem_faces();
873 Cerr <<
"Error: the domain " << domaineVF.
domaine().
le_nom() <<
" is not discretized." << finl;
880 Cerr <<
"Error in your probe : " <<
nom_ << finl;
881 Cerr <<
"You can not project to nodes, the field " << noms_champ[0] << finl;
882 Cerr <<
"which is interpolated on the domain " << dom_interp << finl;
885 Cerr<<
"The location of the probe named "<<
nom_<<
" are modified (to faces). Check the .log files to see the new location."<<finl;
886 const int nfaces_par_element = domaine_geom.
nb_faces_elem() ;
887 for (
int i=0; i<nbre_points_tot; i++)
889 double dist_min=DMAXFLOAT;
893 Journal()<<
"The point " << i <<
" of the probe "<<
nom_<<
" is moved:";
894 for(
int fac=0; fac<nfaces_par_element; fac++)
896 int face=elem_faces(
elem_[i],fac);
920 Journal() <<
" (" << (face_min < domaineVF.
premiere_face_int() ?
"boundary face " :
"internal face ") << face_min<<
")" << finl;
930 Cerr <<
"Error in your probe : " <<
nom_ << finl;
931 Cerr <<
"You can not project to vertexes, the field " << noms_champ[0] << finl;
932 Cerr <<
"which is interpolated on the domain " << dom_interp << finl;
935 Cerr<<
"The location of the probe named "<<
nom_<<
" are modified (to vertexes). Check the .log files to see the new location."<<finl;
936 const IntTab& sommet_elem = domaine_geom.
les_elems();
938 const DoubleTab& coord = domaine_geom.
les_sommets();
939 for (
int i=0; i<nbre_points_tot; i++)
941 double dist_min=DMAXFLOAT;
945 Journal()<<
"The point " << i <<
" of the probe "<<
nom_<<
" is moved:";
946 for(
int isom=0, sommet; isom<sommets_par_element && (sommet = sommet_elem(
elem_[i],isom)) >= 0; isom++)
973 bool supprime_doublons =
true;
974 if (mon_post->DeprecatedKeepDuplicatedProbes) supprime_doublons =
false;
975 ArrOfInt doublon(
elem_.size_array());
976 if (supprime_doublons)
979 int size =
elem_.size();
980 for (
int i=0; i<size; i++)
982 for (
int j=i+1; j<size; j++)
988 for (
int dir = 0; dir <
dimension; dir++)
1003 Cerr <<
"We remove " << doublons <<
" duplicated points from the probe " <<
nom_ << finl;
1010 IntVect prop(
elem_);
1013 ArrOfInt elems2(
elem_);
1015 ArrOfInt elem_recu, doublon_recu;
1016 DoubleTab positions_recu;
1018 for(
int p=1; p<nbproc; p++)
1020 recevoir(doublon_recu,p,2003+p);
1021 recevoir(elem_recu,p,0,2002+p);
1022 recevoir(positions_recu,p,0,2001+p);
1023 for (
int el=0; el<nbre_points_tot; el++)
1024 if (elems2[el]==-1 && elem_recu[el]!=-1)
1026 elems2[el]=elem_recu[el];
1027 doublon[el]=doublon_recu[el];
1036 for(
int p=0; p<nbproc; p++)
1039 for (
int el=0; el<nbre_points_tot; el++)
1040 if (prop[el]==p&&!doublon[el]) size++;
1045 for (
int el=0; el<nbre_points_tot; el++)
1055 assert((size==0)||(min_array(
participant[p])>-1));
1064 envoyer_broadcast(prop, 0);
1070 for (
int el=0; el<prop.
size(); el++)
1074 if (prop(el) ==
me())
1077 for (
int dir = 0; dir <
dimension; dir++)
1081 for (
int dir = 0; dir <
dimension; dir++)
1087 int test =
static_cast<int>(
mp_sum(nbre_points));
1091 elem_.resize(nbre_points);
1129 int reprise = !stat(
nom_fichier_, &f) && mon_post->probleme().reprise_effectuee();
1146 if (
dim == 0 ||
dim == 1)
1152 for (
int i = 0; i < nbre_points; i++)
1154 s <<
" x= " << p(i, 0) <<
" y= " << p(i, 1);
1160 const Noms unites = mon_champ->get_property(
"unites");
1165 s <<
"# Type " <<
get_type() << finl;
1170 s <<
"TRUST Version1 01/09/96" << finl;
1172 s <<
"TRUST" << finl;
1177 for (
int j = 0; j <
dimension; j++) s <<
" " << p(0, j);
1181 Nom nom_grille(
"Grille");
1182 Nom nom_topologie(
"Topologie");
1185 nom_topologie +=
"_";
1186 nom_topologie +=
nom_;
1191 double xn = 0., yn = 0., zn = 0., norme = 0.;
1193 while (p(0, 0) == p(p1, 0) && p(0, 1) == p(p1, 1) && p(0, 2) == p(p1, 2))
1196 assert(p1 < nbre_points);
1198 while (p(0, 0) == p(p_nbre_points2, 0) && p(0, 1) == p(p_nbre_points2, 1) &&
1199 p(0, 2) == p(p_nbre_points2, 2))
1201 p_nbre_points2 += 1;
1202 assert(p_nbre_points2 < nbre_points);
1204 while (p(p1, 0) == p(p_nbre_points2, 0) && p(p1, 1) == p(p_nbre_points2, 1) &&
1205 p(p1, 2) == p(p_nbre_points2, 2))
1207 p_nbre_points2 += 1;
1208 assert(p_nbre_points2 < nbre_points);
1213 xn = (p(p1, 2) - p(0, 2)) * (p(p_nbre_points2, 1) - p(0, 1))
1214 - (p(p1, 1) - p(0, 1)) * (p(p_nbre_points2, 2) - p(0, 2));
1215 yn = (p(p1, 0) - p(0, 0)) * (p(p_nbre_points2, 2) - p(0, 2))
1216 - (p(p1, 2) - p(0, 2)) * (p(p_nbre_points2, 0) - p(0, 0));
1223 zn = (p(p1, 1) - p(0, 1)) * (p(p_nbre_points2, 0) - p(0, 0))
1224 - (p(p1, 0) - p(0, 0)) * (p(p_nbre_points2, 1) - p(0, 1));
1225 norme = std::fabs(xn) + std::fabs(yn) + std::fabs(zn);
1229 s << nom_grille <<
" 3 " << 2 * nbre_points << finl;
1231 for (i = 0; i < nbre_points; i++)
1233 s << p(i, 0) <<
" " << p(i, 1);
1235 else if (
dimension == 2) s <<
" 0." << finl;
1237 for (i = 0; i < nbre_points; i++)
1239 s << p(i, 0) + xn <<
" " << p(i, 1) + yn;
1240 if (
dimension == 3) s <<
" " << p(i, 2) + zn << finl;
1241 else if (
dimension == 2) s <<
" " << zn << finl;
1243 s <<
"TOPOLOGIE" << finl;
1244 s << nom_topologie <<
" " << nom_grille << finl;
1245 s <<
"MAILLE" << finl;
1251 kn = k + nbre_points;
1252 s <<
"VOXEL8 " << k <<
" " << k + 1 <<
" ";
1254 s <<
" " << kn <<
" " << kn + 1 <<
" " << kn +
nbre_points1;
1257 s <<
"FACE" << finl;
1263 s << nom_grille <<
" 3 " << nbre_points << finl;
1265 for (i = 0; i < nbre_points; i++)
1267 s << pbis(i, 0) <<
" " << pbis(i, 1);
1268 s <<
" " << pbis(i, 2) << finl;
1270 s <<
"TOPOLOGIE" << finl;
1271 s << nom_topologie <<
" " << nom_grille << finl;
1272 s <<
"MAILLE" << finl;
1280 s <<
"VOXEL8 " << k <<
" " << k + 1 <<
" ";
1282 s <<
" " << kn <<
" " << kn + 1 <<
" " << kn +
nbre_points1;
1285 s <<
"FACE" << finl;
1298 ma_source->mettre_a_jour(un_temps);
1309 double dt=mon_post->probleme().schema_temps().pas_de_temps();
1318 modf(temps_courant*(1+1e-15)/
periode, &nb);
1326 if (mon_post->les_sondes().get_update_positions())
1328 if (mon_post->probleme().domaine().deformable())
1378 DoubleTab valeurs_pe;
1384 for (
int i = 0; i < nb_val; i++)
1385 for (
int n = 0; n < N; n++)
1388 for(
int p=1; p<nbproc; p++)
1393 recevoir(valeurs_pe,p,0,2002+p);
1396 for(
int i=0; i<nb_val1; i++)
1397 for(
int n = 0; n < N; n++)
1407 double temps_courant = mon_post->probleme().schema_temps().temps_courant();
1412 for(
int i=0; i<valeurs.
dimension(0); i++)
1413 for(
int k=0; k<N; k++)
1414 fichier() <<
" " << valeurs(i,k);
1420 else if (
dim==2 ||
dim==3)
1424 const Noms noms_comp = mon_champ->get_property(
"composantes");
1425 int nb_comp = noms_comp.size();
1426 const Noms unites = mon_champ->get_property(
"unites");
1429 const Noms noms_champ = mon_champ->get_property(
"nom");
1430 nom_post = noms_champ[0];
1433 nom_post = noms_comp[
ncomp];
1435 Nom nom_topologie(
"Topologie");
1436 nom_topologie +=
"_";
1437 nom_topologie +=
nom_;
1439 fichier() <<
"TEMPS " << temps_courant <<
"\n";
1440 fichier() <<
"CHAMPPOINT " << nom_post <<
" " << nom_topologie
1441 <<
" " << temps_courant <<
"\n";
1442 fichier() << nom_post <<
" " << nb_comp <<
" " << unites[0] <<
"\n";
1444 int nbp=nbre_points;
1447 fichier() <<
"type1 " << nbp <<
"\n";
1448 else fichier() <<
"type0 " << nbp <<
"\n";
1450 for(i=0; i<nbre_points; i++)
1453 for(
int j=0; j<N; j++)
1454 fichier() <<
" " << valeurs(i,j);
1461 for(i=0; i<nbre_points; i++)
1464 for(
int j=0; j<N; j++)
1465 fichier() <<
" " << valeurs(i,j);
1496 for (
int iface=0; iface<nbf; iface++)
1504 const int nfin = ndeb + le_bord.
nb_faces();
1505 for (
int i=ndeb; i<nfin; i++)
1517 double eps = mon_champ->get_ref_domain().epsilon();
1520 const DoubleTab& xv = domaineVF.
xv();
1528 tmp[1] = nbre_points-1;
1530 for (
int i = 0; i<coords_bords.
dimension(0); i++)
1533 int elem =
elem_[e];
1536 for (
int j = 0; j < e_f.
dimension(1) && (face = e_f(elem, j)) >= 0; j++)
1538 if(f_e(face, 1) == -1 || f_e(face, 0) == -1)
1541 for (
int idim=0; idim<
dimension; idim++)
1542 dist+=((xv(face,idim)-coords_bords(i,idim))*(xv(face,idim)-coords_bords(i,idim)));
1544 if (sqrt(dist) < eps)
1547 for (
int idim=0; idim<
dimension; idim++)
1567 const DoubleTab& vals_ch = ch_inc.
valeurs();
1573 for (
int iface=0; iface<
faces_bords_.size_array(); iface++)
1581 cl->champ_front().valeurs_face(face-ndeb,valcl);
1583 if (valcl.
size() == 0)
1585 int elem0 = face_voisins(face,0);
1586 int elem1 = face_voisins(face,1);
1595 if (face_voisins(face,0) != -1)
Un champ generique qui est construit comme une interpolation d'un autre champ generique (interpolatio...
class Champ_Generique_base
static int composante(const Nom &nom_test, const Nom &nom, const Noms &composantes, const Noms &synonyms)
Classe de champ particuliere qui encapsule une reference a un champ volumique de TRUST de type Champ_...
const Domaine_Cl_dis_base & domaine_Cl_dis() const
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_base Cette classe est la base de la hierarchie des champs.
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)
classe Cond_lim Classe generique servant a representer n'importe quelle classe
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.
DoubleTab_t & les_sommets()
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_cond_lim() const
Renvoie le nombre de conditions aux limites.
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
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
virtual int orientation_si_definie(int) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
const Domaine & domaine() const
Cette classe se comporte comme EChaine tant que l'on n'est pas a la fin de la chaine.
Class defining operators and methods for all reading operation in an input flow (file,...
int num_premiere_face() const
Une chaine de caractere (Nom) en majuscules.
int debute_par(const char *const n) const override
Un tableau d'objets de la classe Motcle.
int contient_(const char *const ch) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
Nom & suffix(const char *const)
Extraction de suffixe : Nom x("azerty");.
const Nom & le_nom() const override
Renvoie *this;.
Un tableau de chaine de caracteres (VECT(Nom)).
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 const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Postraitement La classe est dotee -d une liste de champs generiques champs_post_complet_ qui c...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
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)
Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static int me()
renvoie mon rang dans le groupe de communication courant.
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...
classe Sonde Cette classe permet d'effectuer l'evolution d'un champ au cours du temps.
void associer_post(const Postraitement &)
Associer le postraitement a la sonde.
virtual void create_champ_generique(Entree &is, const Motcle &motlu)
DoubleTab valeurs_locales
double periode
periode d'echantillonnage
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_
les coordonnees des sondes ponctuelles initiales
const int & get_dim() const
Nom nom_fichier_
le nom du fichier contenant la sonde
const DoubleTab & les_positions_sondes_initiales() const
Renvoie le tableau des positions du champ qui sont sondees.
virtual void ajouter_bords(const DoubleTab &coords_bords)
DoubleTab les_positions_
les coordonnees des sondes locales sur chaque proc
virtual void update_source(double un_temps)
virtual double get_temps_champ() const
virtual const Noms get_noms_champ() const
int dim
la dimension de la sone (point:0,segment:1,plan:2,volume:3)
virtual void fix_probe_position()
const DoubleTab & les_positions_sondes() const
IntVect elem_
les elements contenant les sondes ponctuelles locales
virtual void validate_position() const
DoubleTab valeurs_sur_maitre
valeurs_locales les valeurs sur chaque proc, valeurs_sur_maitre les valeurs regroupes sur le maitre
const Nom & get_nom() const
virtual void initialiser()
Initialise la sonde.
int nbre_points3
faire des sonde_segment,sonde_plan,etc...
ArrOfInt faces_bords_
array containing the indices of the boundary faces hit by the probe
int numero_elem_
vaut -1 si pas defini et vaut le numero de l'elem sur le maitre
Nom nom_
le nom de la sonde
virtual void fill_local_values()
SFichier & fichier()
Renvoie un flot de sortie Fichier, pointant sur le fichier de sortie utilise par la sonde.
virtual void fix_probe_position_grav()
virtual void postraiter()
Effectue un postraitement.
virtual const Domaine & get_domaine_geom() const
const Nom & get_type() const
virtual void init_bords()
DoubleTab les_positions_sondes_
les coordonnees des sondes sur tout le domaine apres deplacement (uniquement sur le maitre)
Sonde()
Constructeur d'une sonde sans parametre.
void ouvrir_fichier()
Ouvre le fichier associe a la sonde.
virtual void mettre_a_jour(double temps, double tinit)
Effectue une mise a jour en temps de la sonde effectue le postraitement.
OBS_PTR(Postraitement) mon_post
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out)
Sortie & flush() override
Force l'ecriture sur disque des donnees dans le tampon Utilise l'implementation de la classe ofstream...
Classe de base des flux de sortie.
_SIZE_ size_array() const
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const