TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
Sonde_Int.cpp
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#include <communications.h>
17#include <Postraitement.h>
18#include <Sonde_Int.h>
19
20Implemente_instanciable_sans_constructeur_ni_destructeur(Sonde_Int,"Sonde_Int",Objet_U);
21Sonde_Int::Sonde_Int():le_fichier(0) { }
22
24{
25 return s << que_suis_je();
26}
27
28/*! @brief Reads the specifications of a probe from an input stream.
29 *
30 * Format:
31 * Sonde_Ints
32 * {
33 * [nom_sonde nom_champ Periode dts Points n x1 y1 [z1] ... xn yn [zn]
34 * [nom_sonde nom_champ Periode dts Segment ns x1 y1 [z1] x2 y2 [z2]
35 * ...
36 * }
37 *
38 * @param is an input stream
39 * @return the modified input stream
40 * @throws probe data not defined
41 * @throws format error, unknown keyword
42 * @throws probe data not correctly defined
43 */
45{
46 assert(mon_post);
47
48 Probleme_base& pb = mon_post->probleme();
49 Motcle motlu;
50 Motcle accolade_fermee("}");
51 int nbre_points;
52
53 // Search for the probed array
54 // Fill the reference to the array
55
56 is >> motlu;
57 Noms liste_noms;
58 pb.get_noms_champs_postraitables(liste_noms);
59 for (int i=0; i<liste_noms.size(); i++)
60 {
61 if (liste_noms[i]==motlu)
62 {
63 OBS_PTR(IntVect) ref_tab;
64 if (pb.a_pour_IntVect(motlu,ref_tab))
65 mon_tableau = ref_tab;
66 else
67 {
68 Cerr << "The problem does not have the array " << motlu << finl;
69 exit();
70 }
71 }
72 }
73
74 // Read the probe characteristics
75
76 IntVect fait(2);
77
78 Motcles les_motcles(6);
79 {
80 les_motcles[0] = "periode";
81 les_motcles[1] = "point";
82 les_motcles[2] = "points";
83 les_motcles[3] = "segment";
84 les_motcles[4] = "plan";
85 les_motcles[5] = "volume";
86 }
87
88 while ((fait(0) != 1) || (fait(1) != 1))
89 {
90 is >> motlu;
91 if (motlu == accolade_fermee)
92 {
93 Cerr << "Error while reading the probe " << nom_ <<finl;
94 Cerr << "The data of the probe were not defined" << finl;
95 exit();
96 }
97 int rang=les_motcles.search(motlu);
98 if (rang == -1)
99 {
100 Cerr << "Error while reading the probe " << nom_ <<finl;
101 Cerr << motlu << " is not understood; the keywords understood are : " << finl;
102 Cerr << les_motcles;
103 exit();
104 }
105
106 switch(rang)
107 {
108 case 0:
109 {
110 is >> periode;
111 break;
112 }
113 case 1:
114 case 2:
115 {
116 rang = 1;
117 dim = 0;
118 is >> nbre_points;
119 les_positions_.resize(nbre_points,dimension);
120
121 for (int i=0; i<nbre_points; i++)
122 for (int j=0; j<dimension; j++)
123 is >> les_positions_(i,j);
124
125 break;
126 }
127 case 3:
128 {
129 rang = 1;
130 dim = 1;
131 DoubleVect origine(dimension);
132 DoubleVect extremite(dimension);
133 DoubleVect dx(dimension);
134 int i=0,j=0;
135 is >> nbre_points;
136 les_positions_.resize(nbre_points,dimension);
137
138 for (; i<dimension; i++)
139 is >> origine(i);
140 for (i=0; i<dimension; i++)
141 is >> extremite(i);
142 for (i=0; i<dimension; i++)
143 dx(i)=(extremite(i)-origine(i))/(nbre_points-1);
144 for (i=0; i<nbre_points; i++)
145 for (j=0; j<dimension; j++)
146 les_positions_(i,j)=origine(j)+i*dx(j);
147 break;
148 }
149 case 4:
150 {
151 rang = 1;
152 dim = 2;
153 DoubleVect origine(dimension);
154 DoubleVect extremite1(dimension);
155 DoubleVect extremite2(dimension);
156 DoubleVect dx1(dimension);
157 DoubleVect dx2(dimension);
158 int i=0,j=0,k=0;
159 is >> nbre_points1;
160 is >> nbre_points2;
161 nbre_points=nbre_points1*nbre_points2;
162 les_positions_.resize(nbre_points,dimension);
163
164 for (; i<dimension; i++)
165 is >> origine(i);
166 for (i=0; i<dimension; i++)
167 is >> extremite1(i);
168 for (i=0; i<dimension; i++)
169 is >> extremite2(i);
170 for (i=0; i<dimension; i++)
171 dx1(i)=(extremite1(i)-origine(i))/(nbre_points1-1);
172 for (i=0; i<dimension; i++)
173 dx2(i)=(extremite2(i)-origine(i))/(nbre_points2-1);
174 for (i=0; i<nbre_points1; i++)
175 for (j=0; j<nbre_points2; j++)
176 for (k=0; k<dimension; k++)
177 les_positions_(i*nbre_points2+j,k)=origine(k)+i*dx1(k)+j*dx2(k);
178 break;
179 }
180 case 5:
181 {
182 rang = 1;
183 dim = 3;
184 DoubleVect origine(dimension);
185 DoubleVect extremite1(dimension);
186 DoubleVect extremite2(dimension);
187 DoubleVect extremite3(dimension);
188 DoubleVect dx1(dimension);
189 DoubleVect dx2(dimension);
190 DoubleVect dx3(dimension);
191 int i=0,j=0,k=0;
192 is >> nbre_points1;
193 is >> nbre_points2;
194 is >> nbre_points3;
195 nbre_points=nbre_points1*nbre_points2*nbre_points3;
196 les_positions_.resize(nbre_points,dimension);
197
198 for (; i<dimension; i++)
199 is >> origine(i);
200 for (i=0; i<dimension; i++)
201 is >> extremite1(i);
202 for (i=0; i<dimension; i++)
203 is >> extremite2(i);
204 for (i=0; i<dimension; i++)
205 is >> extremite3(i);
206 for (i=0; i<dimension; i++)
207 dx1(i)=(extremite1(i)-origine(i))/(nbre_points1-1);
208 for (i=0; i<dimension; i++)
209 dx2(i)=(extremite2(i)-origine(i))/(nbre_points2-1);
210 for (i=0; i<dimension; i++)
211 dx3(i)=(extremite3(i)-origine(i))/(nbre_points3-1);
212 for (i=0; i<nbre_points1; i++)
213 for (j=0; j<nbre_points2; j++)
214 for (int m=0; m<nbre_points3; m++)
215 for (k=0; k<dimension; k++)
216 les_positions_(i*nbre_points2*nbre_points1+j*nbre_points1+m,k)=origine(k)+i*dx1(k)+j*dx2(k)+m*dx3(k);
217 break;
218 }
219 default:
220 {
221 Cerr << motlu <<"is not yet understood!" << finl;
222 exit();
223 }
224 }
225 fait(rang) = 1;
226 }
227
228 if ( (fait[0] == 0) || (fait[1] == 0) )
229 {
230 Cerr << "Error while reading the probe " << nom_ << finl;
231 Cerr << "The data of the probe have not been properly defined" << finl;
232 exit();
233 }
234
235 const Domaine& le_dom =pb.domaine();
236 initialiser(le_dom);
237 return is;
238}
239
240
241/*! @brief Associates a post-processing object with the probe.
242 *
243 * @param le_post the post-processing object to associate
244 */
246{
247 mon_post=le_post;
248 if (mon_post->noms_fichiers_sondes().contient(nom_)==0)
249 mon_post->noms_fichiers_sondes().add(nom_);
250 else
251 {
252 Cerr << "The filename " << nom_ << " is used several times for probes." << finl;
253 Cerr << "A probe must have a unique filename to avoid writing conflicts." << finl;
254 exit();
255 }
256
257}
258
259
260/*! @brief Initialises the probe.
261 *
262 * Sizes the value arrays and checks that the specified points lie within the computation domain.
263 *
264 * @param domaine_geom the computation domain to be probed
265 * @throws probe point outside the computation domain
266 */
267void Sonde_Int::initialiser(const Domaine& domaine_geom)
268{
269 int nbre_points = les_positions_.dimension(0);
270 elem_.resize(nbre_points);
271 domaine_geom.chercher_elements(les_positions_,elem_);
272 for (int i=0; i<nbre_points; i++)
273 if (mp_max(elem_[i])==-1 && je_suis_maitre())
274 {
275 Cerr << "The point number " << i+1 << " of probe " << nom_ << finl;
276 Cerr << "is outside of the computational domain" << finl;
277 }
278 if (sub_type(IntTab,mon_tableau.valeur()))
279 {
280 const IntTab& tab_val = static_cast<const IntTab&>(mon_tableau.valeur());
281 valeurs.resize(nbre_points,tab_val.dimension(1));
282 }
283 else
284 valeurs.resize(nbre_points);
285
286}
287
288
289/*! @brief Opens the file associated with the probe.
290 *
291 * (*.son)
292 *
293 */
295{
296 if(je_suis_maitre())
297 {
298 if( le_fichier)
299 delete le_fichier;
300 Nom nom_fich(nom_du_cas());
301 nom_fich += "_";
302 nom_fich += nom_;
303 nom_fich += ".son";
304 le_fichier=new SFichier(nom_fich);
305 SFichier& s = *le_fichier;
306 s.setf(ios::scientific);
307 s.precision(8);
308
309 // Write the header of the probe files:
310 if (dim==0 || dim==1)
311 {
312 const DoubleTab& p=les_positions();
313 int nbre_points = les_positions_.dimension(0);
314 s << "# " << nom_fich << finl;
315 s << "# Temps";
316 for(int i=0; i<nbre_points; i++)
317 {
318 s << " x=" << p(i,0) << " y=" << p(i,1) ;
319 if (dimension==3) fichier() << " z=" << p(i,2) ;
320 }
321 s << finl;
322 }
323 if (dim==2)
324 {
325 s << "TRUST Version1 01/09/96" << finl;
326 s << nom_du_cas() << finl;
327 s << "TRUST" << finl;
328 s << "GRILLE" << finl;
329 Nom nom_grille("Grille");
330 Nom nom_topologie("Topologie");
331 nom_grille += "_";
332 nom_grille += nom_;
333 nom_topologie += "_";
334 nom_topologie += nom_;
335 int k,kn;
336 int nbre_points = les_positions_.dimension(0);
337 const DoubleTab& p=les_positions();
338 double xn,yn,zn,norme;
339 if (dimension==3)
340 {
341 xn=(p(1,2)-p(0,2))*(p(nbre_points1,1)
342 -p(0,1))-(p(1,1)-p(0,1))*(p(nbre_points1,2)-p(0,2));
343 yn=(p(1,0)-p(0,0))*(p(nbre_points1,2)-p(0,2))
344 -(p(1,2)-p(0,2))*(p(nbre_points1,0)-p(0,0));
345 }
346 else// if (dimension==2)
347 {
348 assert(dimension==2);
349 xn=0.;
350 yn=0.;
351 }
352 zn=(p(1,1)-p(0,1))*(p(nbre_points1,0)-p(0,0))
353 -(p(1,0)-p(0,0))*(p(nbre_points1,1)-p(0,1));
354 norme=std::fabs(xn)+std::fabs(yn)+std::fabs(zn);
355 xn/=norme;
356 yn/=norme;
357 zn/=norme;
358 s << nom_grille << " 3 " << 2*nbre_points << finl;
359 int i;
360 for(i=0; i<nbre_points; i++)
361 {
362 s << p(i,0) << " " << p(i,1) ;
363 if (dimension==3) fichier() << " " << p(i,2) << finl;
364 else if (dimension==2) s << " 0." << finl;
365 }
366 for(i=0; i<nbre_points; i++)
367 {
368 s << p(i,0)+xn << " " << p(i,1)+yn ;
369 if (dimension==3) s << " " << p(i,2)+zn << finl;
370 else if (dimension==2) s << " " << zn << finl;
371 }
372 s << "TOPOLOGIE" << finl;
373 s << nom_topologie << " " << nom_grille << finl;
374 s << "MAILLE" << finl;
375 s << (nbre_points1-1)*(nbre_points2-1) << finl;
376 for(int j=0; j<nbre_points2-1; j++)
377 for(i=0; i<nbre_points1-1; i++)
378 {
379 k=j*nbre_points1+i+1;
380 kn=k+nbre_points;
381 s << "VOXEL8 " << k << " " << k+1 << " ";
382 s << k+nbre_points1 << " " << k+nbre_points1+1;
383 s << " " << kn << " " << kn+1 << " " << kn+nbre_points1;
384 s << " " << kn+nbre_points1+1 << finl;
385 }
386 s << "FACE" << finl;
387 s << "0" << finl;
388 }
389 if (dim==3)
390 {
391 s << "TRUST Version1 01/09/96" << finl;
392 s << nom_du_cas() << finl;
393 s << "TRUST" << finl;
394 s << "GRILLE" << finl;
395 Nom nom_grille("Grille");
396 Nom nom_topologie("Topologie");
397 nom_grille += "_";
398 nom_grille += nom_;
399 nom_topologie += "_";
400 nom_topologie += nom_;
401 int k,kn;
402 int nbre_points = les_positions_.dimension(0);
403 const DoubleTab& p=les_positions();
404 s << nom_grille << " 3 " << nbre_points << finl;
405 int i;
406 for(i=0; i<nbre_points; i++)
407 {
408 s << p(i,0) << " " << p(i,1) ;
409 s << " " << p(i,2) << finl;
410 }
411 s << "TOPOLOGIE" << finl;
412 s << nom_topologie << " " << nom_grille << finl;
413 s << "MAILLE" << finl;
414 s << (nbre_points1-1)*(nbre_points2-1)*(nbre_points3-1) << finl;
415 for(int m=0; m<nbre_points3-1; m++)
416 for(int j=0; j<nbre_points2-1; j++)
417 for(i=0; i<nbre_points1-1; i++)
418 {
419 k=m*nbre_points2*nbre_points1+j*nbre_points1+i+1;
420 kn=k+nbre_points2*nbre_points1;
421 s << "VOXEL8 " << k << " " << k+1 << " ";
422 s << k+nbre_points1 << " " << k+nbre_points1+1;
423 s << " " << kn << " " << kn+1 << " " << kn+nbre_points1;
424 s << " " << kn+nbre_points1+1 << finl;
425 }
426 s << "FACE" << finl;
427 s << "0" << finl;
428 }
429 }
430}
431
432
433/*! @brief Updates the probe in time and performs post-processing.
434 *
435 * @param un_temps the update time
436 * @param tinit the initial time of the probe
437 */
438void Sonde_Int::mettre_a_jour(double un_temps, double tinit)
439{
440 double nb;
441 modf((un_temps-tinit)/periode, &nb);
442 if (nb>nb_bip)
443 {
444 nb_bip=nb;
445 postraiter(un_temps);
446 }
447}
448
449
450/*! @brief Performs post-processing.
451 *
452 * Writes the array values at the requested positions to the associated file.
453 *
454 * @param un_temps the current time
455 */
456void Sonde_Int::postraiter(double un_temps)
457{
458 if (sub_type(IntTab,mon_tableau.valeur()))
459 {
460 const IntTab& val_tab= static_cast<const IntTab&>(mon_tableau.valeur());
461 int nval = val_tab.dimension(1);
462 //int i,j;
463 // int nb_compo=valeurs.nb_dim();
464 int nbre_points = les_positions_.dimension(0);
465
466 for (int i=0; i<nbre_points; i++)
467 for (int j=0; j<nval; j++)
468 valeurs(i,j) = val_tab(elem_(i),j);
469
470 if(je_suis_maitre())
471 {
472 int p;
473 int nbproc = Process::nproc();
474 IntTab valeurs_pe;
475 int val_max;
476 for(p=1; p<nbproc; p++)
477 {
478 recevoir(valeurs_pe,p,0,p);
479 int n1=valeurs.dimension(0);
480 int n2=valeurs.dimension(1);
481 int k;
482 for(int i=0; i<n1; i++)
483 for(k=0; k<n2; k++)
484 {
485 val_max = std::max(std::abs(valeurs(i,k)),std::abs(valeurs_pe(i,k)));
486 if(val_max==(std::abs(valeurs_pe(i,k))))
487 valeurs(i,k)=valeurs_pe(i,k);
488 }
489 }
490
491 if (dim==0 || dim==1)
492 {
493 fichier() << un_temps;
494 for(int i=0; i<valeurs.dimension(0); i++)
495 for(int k=0; k<valeurs.dimension(1); k++)
496 fichier() << " " << valeurs(i,k);
497 fichier() << finl;
498 }
499
500 // For plan-type probes, output in lml format:
501 // num_sommet comp1 [comp2] [comp3]
502 // and in the third direction:
503 else if (dim==2 || dim==3)
504 {
505 Nom unite;
506 Nom nom_topologie("Topologie");
507 nom_topologie += "_";
508 nom_topologie += nom_;
509 fichier() << "TEMPS " << un_temps << "\n";
510 fichier() << "CHAMPOINT " << nom_ << " " << nom_topologie
511 << " " << un_temps << "\n";
512 fichier() << nom_ << " " << nval << " " << unite << "\n";
513 int nbp=nbre_points;
514 if (dim==2) nbp*=2;
515 fichier() << "type1 " << nbp << "\n";
516 int i;
517 for(i=0; i<nbre_points; i++)
518 {
519 fichier() << i+1;
520 for(int j=0; j<valeurs.dimension(1); j++)
521 fichier() << " " << valeurs(i,j);
522 // Avoid flushing:
523 fichier() << "\n";
524 }
525 // For 2D, add an extra direction
526 if (dim==2)
527 {
528 for(i=0; i<nbre_points; i++)
529 {
530 fichier() << nbre_points+i+1;
531 for(int j=0; j<valeurs.dimension(1); j++)
532 fichier() << " " << valeurs(i,j);
533 // Avoid flushing:
534 fichier() << "\n";
535 }
536 }
537 }
538 fichier().flush();
539 }
540 else
541 envoyer(valeurs,Process::me(),0,Process::me());
542 }
543 else
544 {
545 const IntVect& val_tab= static_cast<const IntVect&>(mon_tableau.valeur());
546 int nval =1;
547
548
549 //int nb_compo=valeurs.nb_dim();
550 int nbre_points = les_positions_.dimension(0);
551
552 for (int i=0; i<nbre_points; i++)
553 valeurs(i) = val_tab(elem_(i));
554
555 if(je_suis_maitre())
556 {
557 int p;
558 int nbproc = Process::nproc();
559 IntTab valeurs_pe;
560 int val_max;
561 for(p=1; p<nbproc; p++)
562 {
563 recevoir(valeurs_pe,p,0,p);
564
565 for(int i=0; i<valeurs.dimension(0); i++)
566 {
567 val_max = std::max(std::abs(valeurs(i)), std::abs(valeurs_pe(i)));
568 if(val_max == std::abs(valeurs_pe(i)))
569 valeurs(i)=valeurs_pe(i);
570 }
571 }
572 if (dim==0 || dim==1)
573 {
574 fichier() << un_temps;
575 for(int i=0; i<valeurs.dimension(0); i++)
576 fichier() << " " << valeurs(i);
577 fichier() << finl;
578 }
579
580 // For plan-type probes, output in lml format:
581 // num_sommet comp1 [comp2] [comp3]
582 // and in the third direction:
583 else if (dim==2 || dim==3)
584 {
585 Nom unite;
586 Nom nom_topologie("Topologie");
587 nom_topologie += "_";
588 nom_topologie += nom_;
589 fichier() << "TEMPS " << un_temps << "\n";
590 fichier() << "CHAMPOINT " << nom_ << " " << nom_topologie
591 << " " << un_temps << "\n";
592 fichier() << nom_ << " " << nval << " " << unite << "\n";
593 int nbp=nbre_points;
594 if (dim==2) nbp*=2;
595 fichier() << "type0 " << nbp << "\n";
596 //int i;
597 for(int i=0; i<nbre_points; i++)
598 {
599 fichier() << i+1;
600 fichier() << " " << valeurs(i);
601 // Avoid flushing:
602 fichier() << "\n";
603 }
604 // For 2D, add an extra direction
605 if (dim==2)
606 {
607 for(int i=0; i<nbre_points; i++)
608 {
609 fichier() << nbre_points+i+1;
610 fichier() << " " << valeurs(i);
611 // Avoid flushing:
612 fichier() << "\n";
613 }
614 }
615 }
616 fichier().flush();
617 }
618 else
619 envoyer(valeurs,Process::me(),0,Process::me());
620 }
621
622}
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.
Definition Domaine.cpp:404
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
Base class for TRUST objects (Objet_U).
Definition Objet_U.h:68
static int dimension
Definition Objet_U.h:94
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
static const Nom & nom_du_cas()
Returns a constant reference to the case name. This method is static.
Definition Objet_U.cpp:145
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
class Postraitement. The class holds -a list of generic fields champs_post_complet_ containing
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Domaine & domaine() const
Returns the domain associated with the problem.
virtual int a_pour_IntVect(const Motcle &, OBS_PTR(IntVect)&) const
static double mp_max(double)
Definition Process.cpp:379
static int nproc()
Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current...
Definition Process.cpp:102
static int me()
Returns the rank of the local processor in the current communication group. See Comm_Group::rank() an...
Definition Process.cpp:122
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
Definition Process.cpp:82
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
Definition SFichier.h:29
class Sonde_Int
Definition Sonde_Int.h:37
SFichier & fichier()
Returns the output file stream used by the probe.
Definition Sonde_Int.h:153
void ouvrir_fichier()
Opens the file associated with the probe.
const DoubleTab & les_positions() const
Returns the array of probed positions.
Definition Sonde_Int.h:133
void associer_post(const Postraitement &)
Associates a post-processing object with the probe.
void initialiser(const Domaine &)
Initialises the probe.
Sonde_Int(const Nom &)
Constructor for a probe given its name.
Definition Sonde_Int.cpp:21
void mettre_a_jour(double temps, double tinit)
Updates the probe in time and performs post-processing.
void postraiter(double)
Performs post-processing.
Sortie & flush() override
Forces the data in the buffer to be written to disk. Uses the ofstream class implementation.
void precision(int pre) override
void setf(IOS_FORMAT code) override
Base class for output streams.
Definition Sortie.h:52
void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTArray.h:156
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133