TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Sonde.h
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Sonde_included
17#define Sonde_included
18
19#include <TRUSTArrays.h>
20#include <TRUST_Ref.h>
21#include <TRUSTTab.h>
22#include <SFichier.h>
23#include <Motcle.h>
24
27class Postraitement;
28class Champ_base;
29#include <Domaine_forward.h>
30
31/*! @brief classe Sonde Cette classe permet d'effectuer l'evolution d'un champ au cours du temps.
32 *
33 * On choisit l'ensemble des points sur lesquels on veut sonder un champ et
34 * la periodicite des observations. Les objets Postraitement porte des
35 * des sondes sur les champs a observer, une sonde porte d'ailleurs une
36 * reference sur un postraitement.
37 *
38 * @sa Postraitement Sondes
39 */
40class Sonde : public Objet_U
41{
42 Declare_instanciable_sans_constructeur_ni_destructeur(Sonde);
43
44public :
45
46 Sonde();
47 Sonde(const Nom& );
48 void associer_post(const Postraitement& );
49 virtual void initialiser();
50 virtual void mettre_a_jour(double temps, double tinit);
51 virtual void postraiter();
52 void ouvrir_fichier();
53 virtual void completer();
54 inline void fermer_fichier();
55 inline const Champ_Generique_base& le_champ() const;
56 inline const DoubleTab& les_positions_sondes_initiales() const; // Positions initiales
57 inline const DoubleTab& les_positions_sondes() const; // Positions apres deplacement
58 inline const DoubleTab& les_positions() const; // Positions locales au proc
59 inline const IntVect& les_poly() const;
60 inline void fixer_periode(double);
61 inline double temps() const;
62 inline SFichier& fichier();
63 inline ~Sonde() override;
64 inline const Nom& get_nom() const { return nom_; }
65 inline const Nom& get_type() const { return type_; }
66 inline const int& get_dim() const { return dim ; }
67 inline void nommer(const Nom& n) override { nom_ = n; }
68
69 // Traitement des bords (option "gravcl")
70 virtual void ajouter_bords(const DoubleTab& coords_bords);
71 virtual void init_bords();
72 virtual void mettre_a_jour_bords();
73 void resetTime(double time) { nb_bip = time/periode; };
74
75protected :
76 /** Retrieve the domain to be used for the probe */
77 virtual const Domaine& get_domaine_geom() const;
78 /** Retrieve the field names - overriden in IJK */
79 virtual const Noms get_noms_champ() const;
80 /** Retrieve the number of component for the field - overriden in IJK */
81 virtual int get_nb_compo_champ() const;
82 /** Retrieve the current time for the field - overriden in IJK */
83 virtual double get_temps_champ() const;
84 /** Should exit if invalid type for a probe - overriden for IJK */
85 virtual void validate_type(const Motcle& loc) const { }
86 /** Should exit if invalid position has been set for a probe - overriden for IJK */
87 virtual void validate_position() const { }
88 virtual void create_champ_generique(Entree& is, const Motcle& motlu);
89 /** Fix probe position - used by IJK */
90 virtual void fix_probe_position() { }
91 /** Fix probe position when keyword grav or gravcl is used */
92 virtual void fix_probe_position_grav();
93 /** Fill the array 'valeurs_locales' used by each proc to store prob local values */
94 virtual void fill_local_values();
95 /** Update the underlying field source if needed */
96 virtual void update_source(double un_temps);
97
99 Nom nom_; ///< le nom de la sonde
100 Nom nom_fichier_; ///< le nom du fichier contenant la sonde
101 int dim; ///< la dimension de la sone (point:0,segment:1,plan:2,volume:3)
103 OBS_PTR(Operateur_Statistique_tps_base) operateur_statistique_; // Reference vers un operateur statistique eventuel
104 /** Numero de la composante a sonder. Si ncomp = -1 la sonde s'applique a toutes les
105 * composantes du champ */
106 int ncomp;
107 DoubleTab les_positions_sondes_initiales_; ///< les coordonnees des sondes ponctuelles initiales
108 DoubleTab les_positions_sondes_; ///< les coordonnees des sondes sur tout le domaine apres deplacement (uniquement sur le maitre)
109 DoubleTab les_positions_; ///< les coordonnees des sondes locales sur chaque proc
110 int numero_elem_; ///< vaut -1 si pas defini et vaut le numero de l'elem sur le maitre
111 IntVect elem_; ///< les elements contenant les sondes ponctuelles locales
112 double periode; ///< periode d'echantillonnage
113 /** cles pour typage des sondes (sondes redefinies aux noeuds ou d'apres les valeurs aux sommets ou au centre de gravite ou aux sommets)
114 */
115 bool nodes = false;
116 bool chsom = false;
117 bool grav = false;
118 bool gravcl = false; // Valeurs aux centres de gravite (comme grav) mais avec ajout eventuel des valeurs aux bords via domaine Cl du champ post-traite
119 bool som = false;
120 DoubleTab valeurs_locales,valeurs_sur_maitre; ///< valeurs_locales les valeurs sur chaque proc, valeurs_sur_maitre les valeurs regroupes sur le maitre
121 double nb_bip;
124 ArrsOfInt participant ; // sur le maitre: participant[pe][i] -> le ieme point sur pe correspond la participant [pe][i] eme position
127
128 // Traitement des bords (option "gravcl")
129 ArrOfInt faces_bords_; ///< array containing the indices of the boundary faces hit by the probe
130 IntTab rang_cl_; ///< for a given face, index of the CL that this face bears
131 int nbre_points1 = -1,nbre_points2 = -1,nbre_points3 = -1; ///< faire des sonde_segment,sonde_plan,etc...
132};
133
134
135/*! @brief Le temps ecoule.
136 *
137 * @return (double) le temps ecoule
138 */
139inline double Sonde::temps() const
140{
141 return nb_bip*periode;
142}
143
144
145
146/*! @brief Ferme le fichier sur laquelle la sonde ecrit.
147 *
148 */
150{
151 if (fichier().is_open()) le_fichier_.close();
152}
153
154
155/*! @brief Fixe la periode avec laquelle on sonde le champ.
156 *
157 * @param (double pe) la periode de sondage du champ
158 */
159inline void Sonde::fixer_periode(double pe)
160{
161 periode=pe;
162}
163
164
165/*! @brief Renvoie le champ associe.
166 *
167 * @return (Champ_base&) le champ associe
168 */
170{
171 return mon_champ.valeur();
172}
173
174
175/*! @brief Renvoie le tableau des positions du champ qui sont sondees.
176 *
177 * @return (DoubleTab&) les positions sondees
178 */
179
180inline const DoubleTab& Sonde::les_positions_sondes_initiales() const
181{
183}
184
185inline const DoubleTab& Sonde::les_positions_sondes() const
186{
188}
189
190inline const DoubleTab& Sonde::les_positions() const
191{
192 return les_positions_;
193}
194
195/*! @brief Renvoie le tableau des elements qui sont sondes.
196 *
197 * @return (IntVect&) les ments qui sont sondes
198 */
199inline const IntVect& Sonde::les_poly() const
200{
201 return elem_;
202}
203
204
205/*! @brief Renvoie un flot de sortie Fichier, pointant sur le fichier de sortie utilise par la sonde.
206 *
207 * @return (SFichier&) le fichier de sortie utilise par la sonde
208 */
210{
211 return le_fichier_;
212}
213
214/*! @brief Destructeur.
215 *
216 * Ferme le fichier avant de detruire l'objet.
217 *
218 */
220{
222}
223
224
225#endif
class Champ_Generique_base
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
classe Operateur_Statistique_tps_base Represente des operations statistiques sur les champs.
classe Postraitement La classe est dotee -d une liste de champs generiques champs_post_complet_ qui c...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27
void fixer_periode(double)
Fixe la periode avec laquelle on sonde le champ.
Definition Sonde.h:159
void associer_post(const Postraitement &)
Associer le postraitement a la sonde.
Definition Sonde.cpp:723
OBS_PTR(Operateur_Statistique_tps_base) operateur_statistique_
virtual void create_champ_generique(Entree &is, const Motcle &motlu)
Definition Sonde.cpp:685
DoubleTab valeurs_locales
Definition Sonde.h:120
int orientation_faces_
Definition Sonde.h:126
double periode
periode d'echantillonnage
Definition Sonde.h:112
virtual void mettre_a_jour_bords()
Definition Sonde.cpp:1559
virtual int get_nb_compo_champ() const
Definition Sonde.cpp:746
IntTab rang_cl_
for a given face, index of the CL that this face bears
Definition Sonde.h:130
const DoubleTab & les_positions() const
Definition Sonde.h:190
virtual void validate_type(const Motcle &loc) const
Definition Sonde.h:85
DoubleTab les_positions_sondes_initiales_
les coordonnees des sondes ponctuelles initiales
Definition Sonde.h:107
const int & get_dim() const
Definition Sonde.h:66
void resetTime(double time)
Definition Sonde.h:73
void nommer(const Nom &n) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
Definition Sonde.h:67
void fermer_fichier()
Ferme le fichier sur laquelle la sonde ecrit.
Definition Sonde.h:149
Nom nom_fichier_
le nom du fichier contenant la sonde
Definition Sonde.h:100
Motcle nom_champ_lu_
Definition Sonde.h:123
const DoubleTab & les_positions_sondes_initiales() const
Renvoie le tableau des positions du champ qui sont sondees.
Definition Sonde.h:180
virtual void ajouter_bords(const DoubleTab &coords_bords)
Definition Sonde.cpp:1515
OBS_PTR(Champ_Generique_base) mon_champ
DoubleTab les_positions_
les coordonnees des sondes locales sur chaque proc
Definition Sonde.h:109
virtual void update_source(double un_temps)
Definition Sonde.cpp:1293
virtual double get_temps_champ() const
Definition Sonde.cpp:754
const Champ_Generique_base & le_champ() const
Renvoie le champ associe.
Definition Sonde.h:169
ArrsOfInt participant
Definition Sonde.h:124
bool som
Definition Sonde.h:119
virtual const Noms get_noms_champ() const
Definition Sonde.cpp:741
SFichier le_fichier_
Definition Sonde.h:122
int dim
la dimension de la sone (point:0,segment:1,plan:2,volume:3)
Definition Sonde.h:101
int ncomp
Definition Sonde.h:106
bool chsom
Definition Sonde.h:116
virtual void fix_probe_position()
Definition Sonde.h:90
const DoubleTab & les_positions_sondes() const
Definition Sonde.h:185
IntVect elem_
les elements contenant les sondes ponctuelles locales
Definition Sonde.h:111
virtual void completer()
Definition Sonde.cpp:159
const IntVect & les_poly() const
Renvoie le tableau des elements qui sont sondes.
Definition Sonde.h:199
int nbre_points1
Definition Sonde.h:131
virtual void validate_position() const
Definition Sonde.h:87
DoubleTab valeurs_sur_maitre
valeurs_locales les valeurs sur chaque proc, valeurs_sur_maitre les valeurs regroupes sur le maitre
Definition Sonde.h:120
bool grav
Definition Sonde.h:117
const Nom & get_nom() const
Definition Sonde.h:64
virtual void initialiser()
Initialise la sonde.
Definition Sonde.cpp:798
double temps() const
Le temps ecoule.
Definition Sonde.h:139
int nbre_points3
faire des sonde_segment,sonde_plan,etc...
Definition Sonde.h:131
ArrOfInt faces_bords_
array containing the indices of the boundary faces hit by the probe
Definition Sonde.h:129
Nom type_
Definition Sonde.h:125
int nbre_points2
Definition Sonde.h:131
int numero_elem_
vaut -1 si pas defini et vaut le numero de l'elem sur le maitre
Definition Sonde.h:110
Nom nom_
le nom de la sonde
Definition Sonde.h:99
virtual void fill_local_values()
Definition Sonde.cpp:1337
~Sonde() override
Destructeur.
Definition Sonde.h:219
SFichier & fichier()
Renvoie un flot de sortie Fichier, pointant sur le fichier de sortie utilise par la sonde.
Definition Sonde.h:209
virtual void fix_probe_position_grav()
Definition Sonde.cpp:760
virtual void postraiter()
Effectue un postraitement.
Definition Sonde.cpp:1365
virtual const Domaine & get_domaine_geom() const
Definition Sonde.cpp:736
const Nom & get_type() const
Definition Sonde.h:65
bool gravcl
Definition Sonde.h:118
virtual void init_bords()
Definition Sonde.cpp:1481
DoubleTab les_positions_sondes_
les coordonnees des sondes sur tout le domaine apres deplacement (uniquement sur le maitre)
Definition Sonde.h:108
Sonde()
Constructeur d'une sonde sans parametre.
Definition Sonde.cpp:145
bool nodes
Definition Sonde.h:115
void ouvrir_fichier()
Ouvre le fichier associe a la sonde.
Definition Sonde.cpp:1124
virtual void mettre_a_jour(double temps, double tinit)
Effectue une mise a jour en temps de la sonde effectue le postraitement.
Definition Sonde.cpp:1306
double nb_bip
Definition Sonde.h:121
OBS_PTR(Postraitement) mon_post