TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Lata_2_Other.cpp
1/****************************************************************************
2* Copyright (c) 2025, 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 <Format_Post_base.h>
17#include <Lata_2_Other.h>
18#include <EFichierBin.h>
19#include <LataFilter.h>
20#include <LmlReader.h>
21#include <PE_Groups.h>
22#include <Polyedre.h>
23#include <SFichier.h>
24#include <Domaine.h>
25#include <EChaine.h>
26#include <list>
27
28Implemente_instanciable(Lata_2_Other, "lata_to_other|lata_2_other", Interprete);
29// XD format_lata_to_med objet_lecture nul NO_BRACE not_set
30// XD attr mot chaine(into=["format_post_sup"]) mot REQ not_set
31// XD attr format chaine(into=["lml","lata","lata_v2","med"]) format OPT generated file post_med.data use format (MED or
32// XD_CONT LATA or LML keyword).
33
34// XD lata_to_other interprete lata_to_other INHERITS_BRACE To convert results file written with LATA format to CGNS,
35// XD_CONT MED or LML format. Warning: Fields located at faces are not supported yet.
36// XD attr format chaine(into=["lml","lata","lata_v2","med","cgns"]) format OPT Results format (CGNS, MED or LATA or LML
37// XD_CONT keyword).
38// XD attr file chaine file REQ LATA file to convert to the new format.
39// XD attr file_post chaine file_post REQ Name of file post.
40
42{
43 Cerr << __FILE__ << (int) __LINE__ << " not coded" << finl;
45 return is;
46}
48{
49 Cerr << __FILE__ << (int) __LINE__ << " not coded" << finl;
51 return is;
52}
53
54/*! @brief Convert a Lata domain object ('Domain') into a TRUST domain object ('Domaine')
55 */
56void convert_domain_to_Domaine(const Domain& dom, Domaine& dom_trio)
57{
58 Nom type_elem = dom.lata_element_name(dom.elt_type_);
59 if (type_elem == "PRISM6")
60 type_elem = "PRISME";
61
62 Cerr << "Reading from Lata_DB an ELEM of type " << type_elem << " ... Typing the TRUST Domaine !" << finl;
63 dom_trio.typer(type_elem);
64 dom_trio.type_elem()->associer_domaine(dom_trio);
65
66 bool poly_generique = false;
67 if (dom.get_domain_type() == Domain::UNSTRUCTURED)
68 {
69 const DomainUnstructured& geom = dom.cast_DomainUnstructured();
70 if (geom.elem_faces_.dimension(0) > 0 && geom.faces_.dimension(0) > 0)
71 poly_generique = true; /* pas le cas de post triomc */
72 }
73
74 /*
75 * XXX Elie Saikali => pour polyedre/polygon faut remplir plus de choses ;)
76 */
77 if (type_elem == "POLYEDRE" && poly_generique)
78 {
79 // dom_trio tjrs en 32 ... faut bricoler ...
80 Domaine_32_64<trustIdType> dom_trio_poubelle;
81 dom_trio_poubelle.typer(type_elem);
82
83 if (dom.get_domain_type() == Domain::UNSTRUCTURED)
84 {
85 const DomainUnstructured& geom = dom.cast_DomainUnstructured();
86 const auto& elems = geom.elements_; // elem -> nodes
87 const auto& faces = geom.faces_; // faces -> nodes
88 const auto& ef = geom.elem_faces_; // elem -> faces
89 const auto& nod = geom.nodes_;
90
91 trustIdType dim1_tmp = nod.dimension(0);
92 // Check that the Lata domain fits in 32b
93 if (dim1_tmp >= std::numeric_limits<int>::max())
94 Process::exit("LATA file is too big and does not fit into 32bits!!");
95
96 const trustIdType nb_elems = elems.dimension(0);
97
98 std::vector<trustIdType> conn, connIndex;
99 trustIdType idx = 0;
100 connIndex.push_back(idx);
101 for (trustIdType i = 0; i < nb_elems; i++)
102 {
103 conn.push_back(31); /* MC.normPolyhedre dans MC */
104 idx++;
105
106 for (int j = 0; j < ef.dimension(1); j++)
107 {
108 trustIdType fac = ef(i, j);
109
110 if (fac < 0)
111 continue;
112
113 bool is_not_last = true;
114
115 if (j+1 < ef.dimension(1) && ef(i, j+1) < 0)
116 is_not_last = false;
117
118 for (int jj = 0; jj < faces.dimension(1); jj++)
119 {
120 const trustIdType ff = faces(fac, jj);
121
122 if (ff < 0)
123 continue;
124
125 conn.push_back(faces(fac, jj));
126 idx++;
127 }
128
129 if (j < ef.dimension(1) - 1 && is_not_last)
130 {
131 conn.push_back(-1);
132 idx++;
133 }
134 }
135 connIndex.push_back(idx);
136 }
137
138 trustIdType marker = 0;
139 trustIdType conn_size = static_cast<trustIdType>(conn.size());
140
141 for (trustIdType i = 0; i < conn_size; i++)
142 if (conn[i] < 0)
143 marker++;
144
145 trustIdType num_nodes = conn_size - nb_elems - marker;
146 trustIdType nfaces = nb_elems + marker;
147
148 ArrOfInt_T<trustIdType> nodes(num_nodes), facesIndex(nfaces + 1), polyhedronIndex(nb_elems + 1);
149
150 IntTab_T<trustIdType> les_elems;
151 trustIdType face = 0, node = 0;
152
153 for (trustIdType i = 0; i < nb_elems; i++)
154 {
155 polyhedronIndex[i] = face; // Index des polyedres
156
157 trustIdType index = connIndex[i] + 1;
158 int nb_som = static_cast<int>(connIndex[i + 1] - index);
159 for (int j = 0; j < nb_som; j++)
160 {
161 if (j == 0 || conn[index + j] < 0)
162 facesIndex[face++] = node; // Index des faces:
163 if (conn[index + j] >= 0)
164 nodes[node++] = conn[index + j]; // Index local des sommets de la face
165 }
166 }
167 facesIndex[nfaces] = node;
168 polyhedronIndex[nb_elems] = face;
169
170 // welcome to Bricorama ....
171 auto& poly_poubelle = ref_cast(Polyedre_32_64<trustIdType>, dom_trio_poubelle.type_elem().valeur());
172 auto& poly = ref_cast(Polyedre, dom_trio.type_elem().valeur());
173
174 poly_poubelle.affecte_connectivite_numero_global(nodes, facesIndex, polyhedronIndex, les_elems);
175
176 // back to life ... faut tout caster car dom_trio est 32 bit
177 poly.set_nb_som_face_max(poly_poubelle.get_nb_som_elem_max());
178
179 // step 1 : polyhedronIndex
180 ArrOfInt tmp;
181 polyhedronIndex.from_tid_to_int(tmp);
182 poly.getsetPolyhedronIndex() = tmp;
183
184 // step 2 : les_elems
185 IntTab tmp1;
186 les_elems.from_tid_to_int(tmp1);
187 dom_trio.les_elems() = tmp1;
188
189 // step 3 : facesIndex
190 ArrOfInt tmp2;
191 facesIndex.from_tid_to_int(tmp2);
192 poly.getsetFacesIndex() = tmp2;
193
194 // step 4 : Nodes
195 ArrOfInt tmp3;
196 const auto& nd = poly_poubelle.getNodes(); // attention l'attribue pas nodes local
197 tmp3.resize((int) nd.size_array());
198 for (auto i = 0; i < nd.size_array(); i++)
199 tmp3[i] = static_cast<int>(nd[i]);
200 poly.getsetNodes() = tmp3;
201
202 // step 5 : enfin tab sommets
203 DoubleTab& som = dom_trio.les_sommets();
204 int dim1 = (int) dim1_tmp;
205 int dim2 = geom.nodes_.dimension_int(1);
206 som.resize(dim1, dim2);
207 for (int i1 = 0; i1 < dim1; i1++)
208 for (int i2 = 0; i2 < dim2; i2++)
209 som(i1, i2) = geom.nodes_(i1, i2);
210 }
211 else throw;
212 }
213 else
214 {
215 // dom_trio.les_sommets()=geom.nodes_;
216 // mais geom.nodes est un FloatTab
217 DoubleTab& som = dom_trio.les_sommets();
218 int nx = 1, ny = 1, nz = 1;
219 if (dom.get_domain_type() == Domain::UNSTRUCTURED)
220 {
221 const DomainUnstructured& geom = dom.cast_DomainUnstructured();
222 trustIdType dim1_tmp = geom.nodes_.dimension(0);
223 // Check that the Lata domain fits in 32b
224 if (dim1_tmp >= std::numeric_limits<int>::max())
225 Process::exit("LATA file is too big and does not fit into 32bits!!");
226 int dim1 = (int) dim1_tmp;
227 int dim2 = geom.nodes_.dimension_int(1);
228 som.resize(dim1, dim2);
229 for (int i1 = 0; i1 < dim1; i1++)
230 for (int i2 = 0; i2 < dim2; i2++)
231 som(i1, i2) = geom.nodes_(i1, i2);
232 }
233 else
234 {
235 assert(dom.get_domain_type() == Domain::IJK);
236 const DomainIJK& geom = dom.cast_DomainIJK();
237 const int dim = geom.coord_.size();
238
239 nx = geom.coord_[0].size_array();
240 ny = geom.coord_[1].size_array();
241 nz = 1;
242 if (dim > 2)
243 nz = geom.coord_[2].size_array();
244
245 som.resize(nx * ny * nz, dim);
246
247 for (int i = 0; i < nx; i++)
248 for (int j = 0; j < ny; j++)
249 for (int k = 0; k < nz; k++)
250 {
251 int nn = i * ny * nz + j * nz + k;
252 som(nn, 0) = geom.coord_[0][i];
253 som(nn, 1) = geom.coord_[1][j];
254 if (dim > 2)
255 som(nn, 2) = geom.coord_[2][k];
256 }
257 }
258
259 if (dom.get_domain_type() == Domain::UNSTRUCTURED)
260 {
261 const DomainUnstructured& geom = dom.cast_DomainUnstructured();
262#if INT_is_64_ == 2
263 IntTab tmp;
264 geom.elements_.from_tid_to_int(tmp);
265 dom_trio.les_elems() = tmp;
266#else
267 dom_trio.les_elems() = geom.elements_;
268#endif
269 }
270 else
271 {
272 dom_trio.les_elems().resize((nx - 1) * (ny - 1) * (nz - 1), dom_trio.nb_som_elem());
273 IntTab& elems = dom_trio.les_elems();
274 for (int i = 0; i < nx - 1; i++)
275 for (int j = 0; j < ny - 1; j++)
276 for (int k = 0; k < nz - 1; k++)
277 {
278 int nn = i * (ny - 1) * (nz - 1) + j * (nz - 1) + k;
279 nn = i + j * (nx - 1) + k * ((nx - 1) * (ny - 1));
280 elems(nn, 0) = i * ny * nz + j * nz + k;
281 elems(nn, 1) = (i + 1) * ny * nz + j * nz + k;
282 elems(nn, 2) = (i) * ny * nz + (j + 1) * nz + k;
283 elems(nn, 3) = (i + 1) * ny * nz + (j + 1) * nz + k;
284 if (elems.dimension(1) > 4)
285 for (int ii = 0; ii < 4; ii++)
286 elems(nn, 4 + ii) = elems(nn, ii) + 1;
287 }
288 }
289 }
290
291 dom_trio.faces_bord().associer_domaine(dom_trio);
292 dom_trio.faces_raccord().associer_domaine(dom_trio);
293 dom_trio.faces_joint().associer_domaine(dom_trio);
295
296 if (dom.id_.timestep_ != 0)
297 dom_trio.deformable() = true;
298}
299
300void Lata_2_Other::get_fill_infos_loc(const LataDB& lata_db, LataFilter& filter, Format_Post_base& post)
301{
302 Noms geoms = filter.get_exportable_geometry_names();
303 for (int i = 0; i < geoms.size(); i++)
304 {
305 Field_UNames fields = filter.get_exportable_field_unames(geoms[i]);
306 for (int j = 0; j < fields.size(); j++)
307 {
308 Field_Id fieldid(fields[j], 1, -1);
309 try
310 {
311 const FieldFloat& field = filter.get_float_field(fieldid);
312 Nom nom_type;
313 if (field.localisation_ == LataField_base::ELEM)
314 nom_type = "ELEM"; //"CHAMPMAILLE";
315 else if (field.localisation_ == LataField_base::SOM)
316 nom_type = "SOM"; // CHAMPPOINT";
317
318 if (std::find(locs_required_.begin(), locs_required_.end(), nom_type.getString()) == locs_required_.end())
319 locs_required_.push_back(nom_type.getString()); // add only if not inside
320
321 filter.release_field(field);
322 }
323 catch (...)
324 {
325 Cerr << fieldid.uname_.get_field_name() << " is not a FloatField !!!" << finl;
326 }
327 }
328 }
329
330 post.set_loc_vector(locs_required_); // utile pour CGNS pour le moment ...
331}
332
334{
335 Cerr << "syntax Lata_to_Other::interpreter format_post_supp [nom_lata||NOM_DU_CAS] [nom_fichier_sortie||NOM_DU_CAS] " << finl;
336 Nom nom_lata, nom_fic;
337 Nom format_post_supp;
338 is >> format_post_supp >> nom_lata >> nom_fic;
339
340 std::set<std::string> formats( { "LML", "LATA", "LATA_V2", "MED", "CGNS" });
341 Nom tmp = format_post_supp;
342 if (formats.count(tmp.majuscule().getString()) == 0)
343 {
344 Cerr << "Error, format " << format_post_supp << " is not supported!" << finl;
346 }
347
348 // Creation d'un sous-groupe contenant uniquement le processeur maitre
349 ArrOfInt liste_pe(1);
350 OWN_PTR(Comm_Group) group;
351 // on se met en non axi le temps de la conversion
352 int axi_sa = axi;
353 axi = 0;
354 PE_Groups::create_group(liste_pe, group);
355
356 if (PE_Groups::enter_group(group.valeur()))
357 {
358 if (nom_lata == "NOM_DU_CAS")
359 nom_lata = nom_du_cas() + ".lata";
360 if (nom_fic == "NOM_DU_CAS")
361 nom_fic = nom_du_cas();
362 Nom filename(nom_lata);
363 LataOptions opt;
364 LataDB lata_db;
365 LataFilter filter;
366 set_Journal_level(0);
367
368 LataOptions::extract_path_basename(filename, opt.path_prefix, opt.basename);
369 opt.dual_mesh = true;
370 opt.faces_mesh = false;
371 // on ne veut jamais creer le domaine IJK
372 opt.regularize = 0;
373 opt.regularize_tolerance = 1e-7f;
374 read_any_format_options(filename, opt);
375 // Read the source file to the lata database
376 read_any_format(filename, opt.path_prefix, lata_db);
377
378 filter.initialize(opt, lata_db);
379
380 // On met dual_mesh a "false" si on lit un domaine de polyedres PolyMAC_HFV (pas encore supporte)
381 // et on-reouvre la database:
382 Noms geom_names = filter.get_exportable_geometry_names();
383 int elt_type = filter.get_geometry(Domain_Id(geom_names[0], 1, -1)).elt_type_;
384 Cerr << elt_type << finl;
385 if (elt_type == Domain::polyedre || elt_type == Domain::polygone)
386 {
387 opt.dual_mesh = false;
388 filter.initialize(opt, lata_db);
389 }
390
391 Nom nom_pdb(nom_fic);
392 Nom format_post_(format_post_supp);
393 if (format_post_ == "lata_v2")
394 format_post_ = "lata";
395
396 // copie de Postraiter_domaine
397
398 Nom type("Format_Post_");
399 type += format_post_;
400 OWN_PTR(Format_Post_base) post_typer;
401 post_typer.typer(type.getChar());
402 Format_Post_base& post = ref_cast(Format_Post_base, post_typer.valeur());
403 Nom nom_2(nom_pdb);
404 Nom format_post_bis(format_post_);
405 if (format_post_bis.debute_par("lata"))
406 format_post_bis = "lata";
407 Nom suffix(".");
408 suffix += format_post_bis;
409 nom_2.prefix(suffix);
410
411 if (Motcle(format_post_supp) == "CGNS")
412 {
413 get_fill_infos_loc(lata_db, filter, post); // XXX
414
415 if (nom_2.finit_par(".cgns"))
416 nom_2.prefix(".cgns");
417 }
418
419 int format_binaire_ = 0;
420 if (format_post_bis != "lata")
421 post.initialize_by_default(nom_2);
422 else
423 post.initialize(nom_2, format_binaire_, "SIMPLE");
424
425 // ecriture des domaines
426 {
427
428 Noms geoms = filter.get_exportable_geometry_names();
429
430 for (int i = 0; i < geoms.size(); i++)
431 {
432 Domain_Id id(geoms[i], 1, -1);
433 const Domain& dom = filter.get_geometry(id);
434
435 Domaine dom_trio;
436 dom_trio.nommer(geoms[i]);
437 convert_domain_to_Domaine(dom, dom_trio);
438 int est_le_premier_post = (i == 0);
439
440 if (Motcle(format_post_supp) != "CGNS" || (Motcle(format_post_supp) == "CGNS" && i == 0))
441 post.ecrire_entete(0., 0, est_le_premier_post);
442
443 int reprise = 0;
444 double t_init = 0.;
445 post.preparer_post(dom_trio.le_nom(), est_le_premier_post, reprise, t_init);
446 post.ecrire_domaine(dom_trio, est_le_premier_post);
447
448 filter.release_geometry(dom);
449 }
450 }
451 // les champs
452 const char *suffix_vector_names[] = { "X", "Y", "Z" };
453
454 for (int t = 1; t < lata_db.nb_timesteps(); t++)
455 {
456 int timestate = t;
457 // if (filter.get_nb_timesteps() > 1) timestate++;
458 Noms geoms = filter.get_exportable_geometry_names();
459 double time = filter.get_timestep(t);
460 post.ecrire_temps(time);
461 for (int i = 0; i < geoms.size(); i++)
462 {
463 Domain_Id id(geoms[i], timestate, -1);
464 const Domain& dom = filter.get_geometry(id);
465
466 Domaine dom_trio;
467 dom_trio.nommer(geoms[i]);
468 convert_domain_to_Domaine(dom, dom_trio);
469 Field_UNames fields = filter.get_exportable_field_unames(geoms[i]);
470 for (int j = 0; j < fields.size(); j++)
471 {
472 //const Nom& nom= fields[j].get_field_name();
473 // if ((nom!=Motcle("ELEM_FACES"))&& (nom!=Motcle("FACES"))&& (nom!=Motcle("ELEMENTS")))
474 {
475
476 int est_le_premie_post = (i == 0);
477 post.init_ecriture(time, -1., est_le_premie_post, dom_trio);
478 Field_Id fieldid(fields[j], timestate, -1);
479
480 DoubleTab values;
481 try
482 {
483 const FieldFloat& field = filter.get_float_field(fieldid);
484 {
485 const BigFloatTab& values_lata = field.data_;
486 assert(values_lata.size_array() < std::numeric_limits<int>::max());
487 int dim1 = (int)values_lata.dimension(0);
488 int dim2 = values_lata.dimension_int(1);
489 values.resize(dim1, dim2);
490 for (int i1 = 0; i1 < dim1; i1++)
491 for (int i2 = 0; i2 < dim2; i2++)
492 values(i1, i2) = values_lata(i1, i2);
493 }
494
495 Nom nom_type;
496 if (field.localisation_ == LataField_base::ELEM)
497 nom_type = "ELEM"; //"CHAMPMAILLE";
498 else if (field.localisation_ == LataField_base::SOM)
499 nom_type = "SOM"; // CHAMPPOINT";
500 else
501 {
502 Cerr << nom_type << " not coded ...... " << finl;
503 Cerr << __FILE__ << ":" << (int) __LINE__ << finl;
504 exit();
505
506 }
507 //Nom type_elem=dom.lata_element_name(dom.elt_type_);
508 Noms unites(values.dimension(1));
509 Noms noms_post(values.dimension(1));
510 Cerr << "Extraction " << time << " " << geoms[i] << " " << fields[j].get_field_name() << finl;
511 Nom nom_post, ajout;
512
513 nom_post = fields[j].get_field_name();
514 // pour eviter qu'en med on est le champ aux faces et sur le dual avec le meme nom
515 if (dom_trio.le_nom().finit_par("_faces"))
516 nom_post += "_Centre";
517 ajout = "_";
518 ajout += nom_type;
519 ajout += "_";
520 ajout += geoms[i];
521 for (int ii = 0; ii < values.dimension(1); ii++)
522 {
523 noms_post[ii] = nom_post;
524 if (values.dimension(1) == dom_trio.les_sommets().dimension(1))
525 noms_post[ii] += suffix_vector_names[ii];
526 else
527 noms_post[ii] += Nom(ii);
528 noms_post[ii] += ajout;
529 }
530 nom_post += ajout;
531 //exit();
532 //meddrive.ecrire_champ(type,nom_fic,geoms[i],fields[j].get_field_name(),values,unites,type_elem ,time,0);
533
534 post.ecrire_champ(dom_trio, unites, noms_post, -1, time, nom_post, geoms[i], nom_type, "iii", values);
535 filter.release_field(field);
536 }
537 catch (...)
538 {
539 Cerr << fieldid.uname_.get_field_name() << " is not a FloatField !!!" << finl;
540 }
541 }
542 }
543 filter.release_geometry(dom);
544 }
545
546 }
547 int fin = 1;
548 post.finir(fin);
549
550 // delete [] les_domaines;
551 //delete [] list_champ;
553 }
554 barrier();
555 // on remet eventuellement axi
556 axi = axi_sa;
557 return is;
558}
void associer_domaine(const Domaine_t &)
Associe un domaine a tous les bords de la liste.
Definition Bords.cpp:32
: Cette classe decrit un groupe de processeurs sur lesquels
Definition Comm_Group.h:40
classe Domaine_32_64 un Domaine est un maillage compose d'un ensemble d'elements geometriques de meme...
Definition Domaine.h:62
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
DoubleTab_t & les_sommets()
Definition Domaine.h:113
Bords_t & faces_bord()
Definition Domaine.h:198
Raccords_t & faces_raccord()
Definition Domaine.h:253
IntTab_t & les_elems()
Definition Domaine.h:129
void fixer_premieres_faces_frontiere()
Definition Domaine.cpp:1102
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
Definition Domaine.h:457
Joints_t & faces_joint()
Definition Domaine.h:265
bool deformable() const
void nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Classe de base des formats de postraitements pour les champs (lata, med, cgns, lml,...
virtual int initialize(const Nom &file_basename, const int format, const Nom &option_para)
virtual int finir(const int est_le_dernier_post)
virtual void set_loc_vector(const std::vector< std::string > &)
virtual int init_ecriture(double temps_courant, double temps_post, int est_le_premier_postraitement_pour_nom_fich_, const Domaine &domaine)
virtual int ecrire_champ(const Domaine &domaine, const Noms &unite_, const Noms &noms_compo, int ncomp, double temps_, const Nom &id_du_champ, const Nom &id_du_domaine, const Nom &localisation, const Nom &nature, const DoubleTab &data)
Ecriture d'un champ dans le fichier de postraitement.
virtual int initialize_by_default(const Nom &file_basename)
Initialise le fichier avec des parametres appropries pour son format (exemple: format ascii,...
virtual int ecrire_temps(const double temps)
Commence l'ecriture d'un pas de temps.
virtual int ecrire_entete(const double temps_courant, const int reprise, const int est_le_premier_post)
virtual int ecrire_domaine(const Domaine &domaine, const int est_le_premier_post)
Ecriture d'un maillage.
virtual int preparer_post(const Nom &id_du_domaine, const int est_le_premier_post, const int reprise, const double t_init)
Classe de base des objets "interprete".
Definition Interprete.h:38
void associer_domaine(const Domaine_t &)
Associe un domaine a tous les joints de la liste.
Definition Joints.cpp:33
Classe Lata_2_Other Converts lata file to med or lml Can only be used with small lata files (fitting ...
Entree & interpreter(Entree &is) override
void get_fill_infos_loc(const LataDB &lata_db, LataFilter &filter, Format_Post_base &post)
std::vector< std::string > locs_required_
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
const char * getChar() const
Definition Nom.h:91
virtual int finit_par(const char *const n) const
Definition Nom.cpp:324
virtual int debute_par(const char *const n) const
Definition Nom.cpp:319
Nom & prefix(const char *const)
Definition Nom.cpp:329
Nom basename() const
Retourne fichier si le nom est sous la forme /toto/titi/fichier.
Definition Nom.cpp:486
const std::string & getString() const
Definition Nom.h:92
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:76
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
static const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
Definition Objet_U.cpp:146
static int axi
Definition Objet_U.h:101
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
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).
Definition PE_Groups.cpp:53
static void exit_group()
Retourne dans le groupe ou l'on etait avant le dernier enter_group() reussi (dont le resultat a ete 1...
Classe Polyedre Cette represente l'element geometrique Polyedre.
Definition Polyedre.h:29
static void barrier()
Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a ...
Definition Process.cpp:136
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
void associer_domaine(const Domaine_t &)
Associe un domaine a tous les raccords de la liste.
Definition Raccords.cpp:31
Classe de base des flux de sortie.
Definition Sortie.h:52
void from_tid_to_int(TRUSTArray< int, int > &out) const
_SIZE_ size_array() const
void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTArray.h:156
int dimension_int(int d) const
Definition TRUSTTab.tpp:152
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
void from_tid_to_int(TRUSTTab< int, int > &out) const
Definition TRUSTTab.tpp:170
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133