14#include "arcane/utils/StringBuilder.h"
15#include "arcane/utils/Enumerator.h"
16#include "arcane/utils/Iterator.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/ScopedPtr.h"
19#include "arcane/utils/PlatformUtils.h"
20#include "arcane/utils/Iostream.h"
21#include "arcane/utils/Deleter.h"
22#include "arcane/utils/ITraceMng.h"
23#include "arcane/utils/OStringStream.h"
24#include "arcane/utils/NotImplementedException.h"
25#include "arcane/utils/CStringUtils.h"
27#include "arcane/IDataWriter.h"
28#include "arcane/Item.h"
29#include "arcane/ItemEnumerator.h"
30#include "arcane/IVariable.h"
31#include "arcane/ISubDomain.h"
32#include "arcane/IMesh.h"
33#include "arcane/IMeshSubMeshTransition.h"
34#include "arcane/StdNum.h"
35#include "arcane/ItemGroup.h"
36#include "arcane/IParallelMng.h"
37#include "arcane/Directory.h"
38#include "arcane/MeshVariable.h"
39#include "arcane/PostProcessorWriterBase.h"
40#include "arcane/Service.h"
41#include "arcane/SimpleProperty.h"
42#include "arcane/IItemFamily.h"
43#include "arcane/VariableCollection.h"
44#include "arcane/SharedVariable.h"
46#include "arcane/FactoryService.h"
47#include "arcane/ServiceFactory.h"
49#include "arcane/std/Ensight7PostProcessor_axl.h"
50#include "arcane/std/DumpW.h"
54#include <unordered_map>
102 static const int int_width = 10;
103 static const int g_line_length = 80;
128 , m_reindex(part.m_reindex)
135 inline int type()
const {
return m_type; }
136 inline Integer nbNode()
const {
return m_nb_node; }
140 inline bool hasReindex()
const {
return !m_reindex.
empty(); }
141 inline void setReindex(Integer* reindex)
145 m_reindex[i] = reindex[i];
166 Integer
nbType()
const {
return m_parts.size(); }
179 _init(use_degenerated_hexa);
184 for (Integer i = 0; i <
nbType(); ++i)
185 n += m_parts[i].items().size();
188 const EnsightPart& typeInfo(Integer i)
const {
return m_parts[i]; }
189 EnsightPart& typeInfo(Integer i) {
return m_parts[i]; }
190 ItemGroup group()
const {
return m_group; }
192 Int32 generalItemTypeId(
const Item& item)
const
197 EnsightPart* getTypeInfo(
int type) {
198 auto ensight_part_element = m_parts_map.find(type);
199 if (ensight_part_element != m_parts_map.end())
200 return ensight_part_element->second;
210 bool m_is_polygonal_type_registration_done =
false;
211 bool m_is_polyhedral_type_registration_done =
false;
215 std::unordered_map<TypeId, EnsightPart*> m_parts_map;
234 m_parts.add(
EnsightPart(IT_Triangle3, 3,
"tria3"));
236 m_parts.add(
EnsightPart(IT_Pentagon5, 5,
"nsided"));
237 m_parts.add(
EnsightPart(IT_Hexagon6, 6,
"nsided"));
238 m_parts.add(
EnsightPart(IT_Heptagon7, 7,
"nsided"));
239 m_parts.add(
EnsightPart(IT_Octogon8, 8,
"nsided"));
250 if (!m_is_polygonal_type_registration_done) {
252 ItemWithNodes item = iitem->toItemWithNodes();
253 if (item.nbNode() == item.itemBase().nbEdge()) {
255 m_parts.add(EnsightPart(type_id++, item.nbNode(),
"nsided"));
258 m_is_polygonal_type_registration_done =
true;
261 m_parts.add(EnsightPart(IT_Tetraedron4, 4,
"tetra4"));
262 m_parts.add(EnsightPart(IT_Pyramid5, 5,
"pyramid5"));
263 m_parts.add(EnsightPart(IT_Pentaedron6, 6,
"penta6"));
264 m_parts.add(EnsightPart(IT_Hexaedron8, 8,
"hexa8"));
265 if (use_degenerated_hexa) {
266 m_parts.add(EnsightPart(IT_HemiHexa7, 8,
"hexa8"));
268 Integer reindex[8] = { 1, 6, 5, 0, 2, 3, 4, 0 };
269 m_parts[m_parts.size() - 1].setReindex(reindex);
271 m_parts.add(EnsightPart(IT_HemiHexa6, 8,
"hexa8"));
273 Integer reindex[8] = { 0, 1, 3, 5, 0, 2, 3, 4 };
274 m_parts[m_parts.size() - 1].setReindex(reindex);
276 m_parts.add(EnsightPart(IT_HemiHexa5, 8,
"hexa8"));
278 Integer reindex[8] = { 0, 1, 3, 4, 0, 2, 3, 4 };
279 m_parts[m_parts.size() - 1].setReindex(reindex);
281 m_parts.add(EnsightPart(IT_AntiWedgeLeft6, 8,
"hexa8"));
283 Integer reindex[8] = { 2, 0, 1, 2, 5, 3, 4, 4 };
284 m_parts[m_parts.size() - 1].setReindex(reindex);
286 m_parts.add(EnsightPart(IT_AntiWedgeRight6, 8,
"hexa8"));
288 Integer reindex[8] = { 2, 0, 1, 1, 5, 3, 4, 5 };
289 m_parts[m_parts.size() - 1].setReindex(reindex);
291 m_parts.add(EnsightPart(IT_DiTetra5, 8,
"hexa8"));
293 Integer reindex[8] = { 4, 4, 2, 3, 0, 1, 1, 3 };
294 m_parts[m_parts.size() - 1].setReindex(reindex);
298 m_parts.add(EnsightPart(IT_HemiHexa7, 7,
"nfaced"));
299 m_parts.add(EnsightPart(IT_HemiHexa6, 6,
"nfaced"));
300 m_parts.add(EnsightPart(IT_HemiHexa5, 5,
"nfaced"));
301 m_parts.add(EnsightPart(IT_AntiWedgeLeft6, 6,
"nfaced"));
302 m_parts.add(EnsightPart(IT_AntiWedgeRight6, 6,
"nfaced"));
303 m_parts.add(EnsightPart(IT_DiTetra5, 5,
"nfaced"));
305 m_parts.add(EnsightPart(IT_Heptaedron10, 10,
"nfaced"));
306 m_parts.add(EnsightPart(IT_Octaedron12, 12,
"nfaced"));
307 m_parts.add(EnsightPart(IT_Enneedron14, 14,
"nfaced"));
308 m_parts.add(EnsightPart(IT_Decaedron16, 16,
"nfaced"));
311 ItemTypeInfo* type_info = item_type_mng->
typeFromId(i_type);
312 if (type_info->nbLocalNode() != type_info->nbLocalEdge()) {
313 m_parts.add(EnsightPart(i_type, type_info->nbLocalNode(),
"nfaced"));
318 if (!m_is_polyhedral_type_registration_done) {
320 ItemWithNodes item = iitem->toItemWithNodes();
321 if (item.nbNode() == 1)
323 else if (item.nbNode() == 2)
325 else if (item.nbNode() != item.itemBase().nbEdge()) {
327 m_parts.add(EnsightPart(type_id++, item.nbNode(),
"nfaced"));
330 m_is_polyhedral_type_registration_done =
true;
343 void writeFileString(std::ostream& o,
const String& str);
344 void writeFileInt(std::ostream& o,
int value);
345 void writeFileDouble(std::ostream& o,
double value);
346 Integer writeDoubleSize()
const;
385 virtual void begin() { init(); }
386 virtual void end() {}
391 m_ofile.precision(5);
392 m_ofile.flags(std::ios::scientific);
394 virtual void putValue(std::ostream&
ofile)
396 ofile << m_ofile.str();
398 std::ostream& stream() {
return m_ofile; }
403 std::ostringstream m_ofile;
410 template <
typename FromType>
433 inline void write(Integer index)
436 int reindex = (*m_idx)[index];
447 for (
Item e : items) {
456 template <
typename FromType>
471 , m_idim2(
wd.m_idim2)
479 const Integer m_idim2;
483 void write(Integer index)
486 int reindex = (*m_idx)[index];
497 for (
Item e : items) {
532 void begin()
override
536 xostr.flags(std::ios::scientific);
538 yostr.flags(std::ios::scientific);
540 zostr.flags(std::ios::scientific);
543 void write(Integer index)
546 int reindex = (*m_idx)[index];
562 for (
Item i : items) {
569 m_ofile << xostr.str();
570 m_ofile << yostr.str();
571 m_ofile << zostr.str();
576 std::ostringstream xostr;
577 std::ostringstream yostr;
578 std::ostringstream zostr;
605 , m_idim2(
wd.m_idim2)
613 const Integer m_idim2;
617 void begin()
override
621 xostr.flags(std::ios::scientific);
623 yostr.flags(std::ios::scientific);
625 zostr.flags(std::ios::scientific);
628 inline void write(Integer index)
631 int reindex = (*m_idx)[index];
645 for (
Item i : items) {
652 m_ofile << xostr.str();
653 m_ofile << yostr.str();
654 m_ofile << zostr.str();
659 std::ostringstream xostr;
660 std::ostringstream yostr;
661 std::ostringstream zostr;
683 void writeVal(IVariable&, ConstArrayView<Real2>)
override {}
684 void writeVal(IVariable&, ConstArrayView<Real3>)
override;
685 void writeVal(IVariable& v, ConstArrayView<Int16> a)
override { _writeRealValT<Int16>(v, a); }
686 void writeVal(IVariable& v, ConstArrayView<Int32> a)
override { _writeRealValT<Int32>(v, a); }
687 void writeVal(IVariable& v, ConstArrayView<Int64> a)
override { _writeRealValT<Int64>(v, a); }
688 void writeVal(IVariable&, ConstArrayView<Real2x2>)
override {}
689 void writeVal(IVariable&, ConstArrayView<Real3x3>)
override {}
690 void writeVal(IVariable&, ConstArrayView<String>)
override {}
692 void writeVal(IVariable&, ConstArray2View<Byte>)
override {}
693 void writeVal(IVariable& v, ConstArray2View<Real> a)
override { _writeRealValT<Real>(v, a); }
694 void writeVal(IVariable&, ConstArray2View<Real2>)
override {}
695 void writeVal(IVariable&, ConstArray2View<Real3>)
override;
696 void writeVal(IVariable& v, ConstArray2View<Int16> a)
override { _writeRealValT<Int16>(v, a); }
697 void writeVal(IVariable& v, ConstArray2View<Int32> a)
override { _writeRealValT<Int32>(v, a); }
698 void writeVal(IVariable& v, ConstArray2View<Int64> a)
override { _writeRealValT<Int64>(v, a); }
699 void writeVal(IVariable&, ConstArray2View<Real2x2>)
override {}
700 void writeVal(IVariable&, ConstArray2View<Real3x3>)
override {}
702 void writeVal(IVariable&, ConstMultiArray2View<Byte>)
override {}
703 void writeVal(IVariable& v, ConstMultiArray2View<Real> a)
override { _writeRealValT<Real>(v, a); }
704 void writeVal(IVariable&, ConstMultiArray2View<Real2>)
override {}
705 void writeVal(IVariable&, ConstMultiArray2View<Real3> a)
override;
706 void writeVal(IVariable& v, ConstMultiArray2View<Int16> a)
override { _writeRealValT<Int16>(v, a); }
707 void writeVal(IVariable& v, ConstMultiArray2View<Int32> a)
override { _writeRealValT<Int32>(v, a); }
708 void writeVal(IVariable& v, ConstMultiArray2View<Int64> a)
override { _writeRealValT<Int64>(v, a); }
709 void writeVal(IVariable&, ConstMultiArray2View<Real2x2>)
override {}
710 void writeVal(IVariable&, ConstMultiArray2View<Real3x3>)
override {}
717 bool isMasterProcessor()
const {
return m_is_master; }
718 bool isOneFilePerTime()
const {
return m_fileset_size == 0; }
725 typedef UniqueArray<GroupPartInfo*> GroupPartInfoList;
734 std::ostringstream m_case_file_variables;
744 bool m_use_degenerated_hexa;
745 bool m_force_first_geometry;
754 Integer m_fileset_size;
766 void _createCaseFile();
769 void _writeWildcardFilename(std::ostream&
ofile,
const String& filename,
char joker =
'*');
770 int _fileOuttype()
const;
772 bool _isNewBlocFile()
const;
782 template <
typename T>
785 template <
typename T>
788 template <
typename T>
809createEnsight7(IMesh* m,
const String& f,
810 ConstArrayView<Real> times,
811 VariableCollection variables,
813 bool is_binary,
bool is_parallel_output, Integer fileset_size,
814 bool use_degenerated_hexa,
bool force_first_geometry,
bool save_uids)
816 return new DumpWEnsight7(m, f, times, variables, groups, is_binary,
817 is_parallel_output, fileset_size, use_degenerated_hexa,
818 force_first_geometry, save_uids);
825DumpWEnsight7(IMesh* mesh,
const String& filename, ConstArrayView<Real> times,
827 bool is_binary,
bool is_parallel_output, Integer fileset_size,
828 bool use_degenerated_hexa,
bool force_first_geometry,
bool save_uids)
829: TraceAccessor(mesh->traceMng())
831, m_parallel_mng(mesh->parallelMng())
832, m_base_directory(filename)
834, m_save_variables(variables.clone())
835, m_save_groups(groups.enumerator())
836, m_is_binary(is_binary)
839, m_is_parallel_output(is_parallel_output)
840, m_use_degenerated_hexa(use_degenerated_hexa)
841, m_force_first_geometry(force_first_geometry)
842, m_save_uids(save_uids)
843, m_total_nb_element(0)
845, m_fileset_size(fileset_size)
864 std::for_each(std::begin(m_parts), std::end(m_parts), Deleter());
916 for (Integer z = 0; z <
current_grp.nbType(); ++z) {
966 auto item_kind =
grp.itemKind();
969 auto item_type = item->type();
1010 writeFileString(
ofile,
"part");
1012 if (isParallelOutput()) {
1015 std::ostringstream
ostr;
1016 ostr <<
igrp.name().localstr() <<
"_CPU" << rank();
1017 writeFileString(
ofile,
ostr.str().c_str());
1026 for (Integer i = 0; i <
ensight_grp.nbType(); ++i) {
1042 writeFileInt(
ofile,
mi.uniqueId()+1);
1063 writeFileInt(
ofile,
mi.toCell().nbFace());
1073 for (Integer z = 0; z <
nb_face; ++z)
1081 writeFileInt(
ofile, face.nbNode());
1088 for (
Item item : items) {
1089 Cell cell(item.toCell());
1093 for (Integer z = 0; z <
nb_face; ++z) {
1097 for (Integer y = 0; y <
nb_node; ++y) {
1110 for (
Item item : items) {
1113 for (Integer z = 0; z <
nb_face; ++z) {
1117 for (Integer y = 0; y <
nb_node; ++y) {
1140 for (Integer z = 0; z <
nb_node; ++z) {
1211 writeFileString(
ofile,
"part");
1219 for (Integer i = 0; i <
ensight_grp.nbType(); ++i) {
1253writeFileInt(std::ostream& o,
int value)
1256 o.write((
const char*)&value,
sizeof(
int));
1259 o.width(DumpWEnsight7::int_width);
1273 return DumpWEnsight7::int_width + 1;
1280writeFileDouble(std::ostream& o,
double value)
1283 float fvalue = (float)(value);
1284 o.write((
const char*)&fvalue,
sizeof(float));
1289 o.flags(std::ios::scientific);
1299writeDoubleSize()
const
1312 o.write((
const char*)value.data(),
sizeof(Integer) * value.size());
1315 for (Integer i = 0, s = value.size(); i < s; ++i) {
1316 o.width(DumpWEnsight7::int_width);
1327writeFileString(std::ostream& o,
const String& str)
1330 char buf[g_line_length];
1331 for (
int i = 0; i < g_line_length; ++i)
1334 buf[g_line_length - 1] =
'\0';
1335 o.write(buf, g_line_length);
1346_writeFileHeader(std::ostream& o,
bool write_c_binary)
1349 if (_isNewBlocFile() &&
m_is_binary && write_c_binary)
1350 writeFileString(o,
"C Binary");
1351 if (m_fileset_size != 0) {
1352 std::ostringstream ostr;
1353 ostr <<
"BEGIN TIME STEP "
1355 writeFileString(o, ostr.str().c_str());
1375 , m_filename(filename)
1376 , m_is_master(
dw.isMasterProcessor())
1377 , m_is_parallel_output(
dw.isParallelOutput())
1382 m_filestream =
new std::ofstream(filename.
localstr(), (std::ios_base::openmode)
outtype);
1383 m_stream = &m_strstream;
1384 if (!(*m_filestream))
1385 m_dw.
warning() <<
"Unable to open file " << filename;
1389 m_stream = &m_strstream;
1391 ARCANE_CHECK_PTR(m_stream);
1395 delete m_filestream;
1404 ARCANE_CHECK_PTR(m_filestream);
1405 ARCANE_CHECK_PTR(m_strstream);
1407 (*m_filestream) << m_strstream.str();
1409 if (m_is_parallel_output) {
1411 ARCANE_CHECK_PTR(m_filestream);
1419 for (Integer i = 1; i <
nb_proc; ++i) {
1434 ARCANE_CHECK_PTR(m_strstream);
1441 std::string str = m_strstream.str();
1450 m_dw.
debug(
Trace::High) <<
"Not a master. " << m_filename <<
" size = " << len;
1467 if (!m_dw.isOneFilePerTime())
1468 m_dw.writeFileString(*m_filestream,
"END TIME STEP");
1473 std::ostream& operator()() {
return *m_stream; }
1480 bool m_is_parallel_output;
1481 std::ostream* m_stream;
1482 std::ostringstream m_strstream;
1483 std::ofstream* m_filestream;
1526 if (!
var->isPartial())
1541 for (
auto i : m_parts) {
1552 if (!(
m_times.
size() > 1 && m_force_first_geometry)) {
1558 _writeFileHeader(
dw_ofile(),
true);
1561 writeFileString(
dw_ofile(),
"Output ensight test");
1562 writeFileString(
dw_ofile(),
"File description");
1563 writeFileString(
dw_ofile(),
"node id assign");
1564 writeFileString(
dw_ofile(),
"element id assign");
1594 writeFileString(
wf.stream(),
"coordinates");
1673 warning() <<
"Unable to write to file: <" << buf <<
"> error: " <<
m_case_file.rdstate();
1680 if (m_fileset_size != 0)
1682 if (m_force_first_geometry)
1683 _writeWildcardFilename(
m_case_file,
"ensight.geo",
'0');
1685 _writeWildcardFilename(
m_case_file,
"ensight.geo",
'*');
1704 for (Integer i = 0, is =
m_times.
size(); i < is; ++i)
1709 if (m_fileset_size != 0) {
1712 if (m_fileset_size != 0) {
1716 m_case_file <<
"number of steps: " << m_fileset_size <<
'\n';
1784 if (m_fileset_size == 0) {
1791 dir.createDirectory();
1845 if (m_fileset_size != 0) {
1875_writeWildcardFilename(std::ostream&
ofile,
const String& filename,
char joker)
1877 if (m_fileset_size == 0) {
1878 ofile <<
' ' << filename <<
'/' << filename;
1889 if (nb_time <= m_fileset_size)
1893 ofile <<
"/" << filename;
1901_isNewBlocFile()
const
1907 if (m_fileset_size == 0)
1910 Integer modulo = (nb_time - 1) % m_fileset_size;
1923 return ((isBinary()) ? std::ios::binary : 0) | ((_isNewBlocFile()) ? std::ios::trunc : std::ios::app);
1931template <
typename T>
1935 debug() <<
"Saving variable1 " << v.
name() <<
" ptr=" <<
ptr.data() <<
" ps=" <<
ptr.size();
1943 debug() <<
"Saving variable " << v.
name() <<
" in " << filename;
1947 _writeFileHeader(
dw_ofile(),
false);
1967 m_case_file_variables <<
" 1 ";
1968 if (m_fileset_size != 0)
1969 m_case_file_variables <<
" 1 ";
1970 m_case_file_variables << v.
name();
1971 _writeWildcardFilename(m_case_file_variables, v.
name());
1972 m_case_file_variables <<
'\n';
1982 idx = v.
itemGroup().localIdToIndex().get();
2001 for (Integer i = 0; i <
ptr.size(); ++i)
2005 writeFileString(
dw_ofile(),
"part");
2006 writeFileInt(
dw_ofile(), part->partId());
2007 writeFileString(
dw_ofile(),
"coordinates");
2026template <
typename T>
2038 debug() <<
"Saving variable " << v.
name() <<
" component " <<
idim2 <<
" in " << filename;
2042 _writeFileHeader(
dw_ofile(),
false);
2062 m_case_file_variables <<
" 1 ";
2063 if (m_fileset_size != 0)
2064 m_case_file_variables <<
" 1 ";
2065 m_case_file_variables <<
vname;
2066 _writeWildcardFilename(m_case_file_variables,
vname);
2067 m_case_file_variables <<
'\n';
2077 idx = v.
itemGroup().localIdToIndex().get();
2096 for (Integer i = 0; i <
ptr.dim1Size(); ++i)
2100 writeFileString(
dw_ofile(),
"part");
2101 writeFileInt(
dw_ofile(), part->partId());
2102 writeFileString(
dw_ofile(),
"coordinates");
2122template <
typename T>
2131 warning() <<
"Impossible to write array variable "
2132 << v.
name() <<
" of non-constant size; variable saving skipped";
2149 debug() <<
"Saving variable " << v.
name() <<
" in " << filename;
2153 _writeFileHeader(
dw_ofile(),
false);
2161 m_case_file_variables <<
"vector per element: ";
2164 m_case_file_variables <<
"vector per node: ";
2170 m_case_file_variables <<
" 1 ";
2171 if (m_fileset_size != 0)
2172 m_case_file_variables <<
" 1 ";
2173 m_case_file_variables << v.
name();
2175 _writeWildcardFilename(m_case_file_variables, v.
name());
2176 m_case_file_variables <<
'\n';
2186 idx = v.
itemGroup().localIdToIndex().get();
2205 for (Integer i = 0; i <
ptr.size(); ++i)
2209 writeFileString(
dw_ofile(),
"part");
2210 writeFileInt(
dw_ofile(), part->partId());
2211 writeFileString(
dw_ofile(),
"coordinates");
2238 debug() <<
"Saving variable " << v.
name() <<
" component " <<
idim2 <<
" in " << filename;
2242 _writeFileHeader(
dw_ofile(),
false);
2250 m_case_file_variables <<
"vector per element: ";
2253 m_case_file_variables <<
"vector per node: ";
2259 m_case_file_variables <<
" 1 ";
2260 if (m_fileset_size != 0)
2261 m_case_file_variables <<
" 1 ";
2262 m_case_file_variables <<
vname;
2264 _writeWildcardFilename(m_case_file_variables,
vname);
2265 m_case_file_variables <<
'\n';
2275 idx = v.
itemGroup().localIdToIndex().get();
2294 for (Integer i = 0; i <
ptr.dim1Size(); ++i)
2298 writeFileString(
dw_ofile(),
"part");
2299 writeFileInt(
dw_ofile(), part->partId());
2300 writeFileString(
dw_ofile(),
"coordinates");
2328 warning() <<
"Impossible to write array variable " << v.
name()
2329 <<
" of non-constant size; variable saving skipped";
2344 , m_mesh(
sbi.mesh())
2368 bool is_parallel = subDomain()->parallelMng()->isParallel();
2404 , m_mesh(
sbi.mesh())
2459 bool is_parallel = m_mesh->
parallelMng()->isParallel();
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ARCANE_REGISTER_SUB_DOMAIN_FACTORY(aclass, ainterface, aname)
Enregistre un service de fabrique pour la classe aclass.
Generation de la classe de base du Service.
CaseOptionsEnsight7PostProcessor * options() const
Options du jeu de données du service.
FaceConnectedListViewType faces() const
Liste des faces de la maille.
Face face(Int32 i) const
i-ème face de la maille
Int32 nbFace() const
Nombre de faces de la maille.
Integer count() const
Nombre d'éléments de la collection.
Classe gérant un répertoire.
virtual String file(const String &file_name) const
Retourne le chemin complet du fichier file_name dans le répertoire.
virtual bool createDirectory() const
Créé le répertoire.
virtual String path() const
Retourne le chemin du répertoire.
Abstraction d'un fichier de sortie pour ensight.
Functor pour écrire une variable de type Real
Functor pour écrire une variable de type Real3
Fonctor pour écrire une variable.
Functor pour écrire une variable de type Real
Functor pour écrire une variable de type Real2
Ecriture au format Ensight7.
void _writeRealValT(IVariable &v, ConstArrayView< T > a)
Template for writing variable as a real variable.
std::ofstream m_case_file
Fichier décrivant le cas.
bool m_is_binary
Liste des parties.
void writeVal(IVariable &, ConstArrayView< Byte >) override
Ecriture pour la variable v du tableau a.
void beginWrite() override
Notifie le début d'écriture.
Directory m_part_directory
Répertoire de stockage de l'itération courante.
void _buildFileName(const String &varname, String &filename)
Construit le nom de fichier pour un nom de variable ou de maillage.
bool m_is_parallel_output
bool _isValidVariable(IVariable &) const
Vérifie la validité de la variable à sauvegarder.
ItemGroupList m_save_groups
Liste des groupes a exporter.
void _buildPartDirectory()
Construit le répertoire où seront sauvées les variables.
IParallelMng * m_parallel_mng
Gestionnaire du parallélisme.
void endWrite() override
Notifie la fin d'écriture.
RealUniqueArray m_times
description des variables sauvées
void setMetaData(const String &) override
Positionne les infos des méta-données.
VariableList m_save_variables
Liste des variables a exporter.
static const Integer m_max_prots_digit
Nombre maximum de chiffres pour indiquer le numéro de protection.
Directory m_base_directory
Nom du répertoire de stockage.
bool m_is_master
true si le processeur dirige la sortie
Integer m_total_nb_element
Nombre total d'éléments de maillage de tous les groupes à sauver.
Integer m_total_nb_group
Nombre de groupes à sauver (== nombre de part)
wrapper transformant des appels à l'interface IDataWriter en ex IDumpW
void write(IVariable *var, IData *data)
Ecrit les données data de la variable var.
Post-traitement au format Ensight7.
void build() override
Construction de niveau build du service.
void notifyBeginWrite() override
Notifie qu'une sortie va être effectuée avec les paramètres courants.
void setBaseDirectoryName(const String &dirname) override
Positionne le nom du répertoire de sortie des fichiers. Ce répertoire doit exister.
void close() override
Ferme l'écrivain. Après fermeture, il ne peut plus être utilisé
void setGroups(ItemGroupCollection groups) override
Positionne la liste des groupes à sortir.
void notifyEndWrite() override
Notifie qu'une sortie vient d'être effectuée.
void setVariables(VariableCollection variables) override
Positionne la liste des variables à sortir.
void setTimes(RealConstArrayView times) override
Positionne la liste des temps.
IDataWriter * dataWriter() override
Retourne l'écrivain associé à ce post-processeur.
const String & baseDirectoryName() override
Nom du répertoire de sortie des fichiers.
void setMesh(IMesh *mesh) override
Positionne le maillage.
Post-traitement au format Ensight7.
IDataWriter * dataWriter() override
Retourne l'écrivain associé à ce post-processeur.
void close() override
Ferme l'écrivain. Après fermeture, il ne peut plus être utilisé
void notifyEndWrite() override
Notifie qu'une sortie vient d'être effectuée.
void notifyBeginWrite() override
Notifie qu'une sortie va être effectuée avec les paramètres courants.
Informations sur le type flottant.
Classe de base d'une table de hachage entre les items d'un groupe et leurs positions dans la table.
Interface d'écriture des données d'une variable.
virtual String name() const =0
Nom de la famille.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual IItemFamily * itemFamily(eItemKind ik)=0
Retourne la famille d'entité de type ik.
virtual Integer nbNode()=0
Nombre de noeuds du maillage.
virtual NodeGroup allNodes()=0
Groupe de tous les noeuds.
virtual CellGroup allCells()=0
Groupe de toutes les mailles.
virtual IParallelMng * parallelMng()=0
Gestionnaire de parallèlisme.
virtual IMesh * parentMesh() const =0
Accès au maillage parent.
virtual SharedVariableNodeReal3 sharedNodesCoordinates()=0
Coordonnées des noeuds.
virtual ItemGroupCollection groups()=0
Liste des groupes.
virtual ItemTypeMng * itemTypeMng() const =0
Gestionnaire de types d'entités associé
virtual IPrimaryMesh * toPrimaryMesh()=0
Retourne l'instance sous la forme d'un IPrimaryMesh.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
Interface d'un écrivain pour les informations de post-traitement.
Interface du gestionnaire d'un sous-domaine.
virtual IMesh * defaultMesh()=0
Maillage par défaut.
Interface d'une variable.
virtual eItemKind itemKind() const =0
Type des entités du maillage sur lequel repose la variable.
virtual bool isPartial() const =0
Indique si la variable est partielle.
virtual bool isUsed() const =0
Etat d'utilisation de la variable.
virtual ItemGroup itemGroup() const =0
Groupe du maillage associé.
virtual String name() const =0
Nom de la variable.
@ PTemporary
Indique que la variable est temporaire.
@ PPrivate
Indique que la variable est privée.
Groupe d'entités de maillage.
const String & name() const
Nom du groupe.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
eItemKind itemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
IMesh * mesh() const
Maillage auquel appartient ce groupe (0 pour le group nul)
Informations locales sur une face d'une maille.
Infos sur un type d'entité du maillage.
Gestionnaire des types d'entités de maillage.
bool hasGeneralCells(IMesh *mesh) const
Indique si le maillage mesh contient des mailles génériques (en dehors des types intégrés ou addition...
static Integer nbBasicItemType()
nombre de types disponibles
ItemTypeInfo * typeFromId(Integer id) const
Type correspondant au numéro id.
static Integer nbBuiltInItemType()
nombre de types intégrés (hors types additionnels)
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Node node(Int32 i) const
i-ème noeud de l'entité
Int32 nbNode() const
Nombre de noeuds de l'entité
Classe de base d'un élément de maillage.
const ItemTypeInfo * typeInfo() const
Infos sur le type de l'entité.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Cell toCell() const
Converti l'entité en le genre Cell.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Int16 type() const
Type de l'entité
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Flot de sortie lié à une String.
Classe de base d'un écrivain pour les informations de post-traitement.
virtual void build()
Construction de niveau build du service.
virtual RealConstArrayView times()
Liste des temps sauvés.
virtual void setGroups(ItemGroupCollection groups)
Positionne la liste des groupes à sortir.
virtual const String & baseDirectoryName()
Nom du répertoire de sortie des fichiers.
virtual void setVariables(VariableCollection variables)
Positionne la liste des variables à sortir.
virtual ItemGroupCollection groups()
Liste des groupes à sauver.
virtual void setTimes(RealConstArrayView times)
Positionne la liste des temps.
virtual void setBaseDirectoryName(const String &dirname)
Positionne le nom du répertoire de sortie des fichiers. Ce répertoire doit exister.
virtual VariableCollection variables()
Liste des variables à sauver.
Structure contenant les informations pour créer un service.
Paramètres nécessaires à la construction d'une variable.
bool empty() const
Capacité (nombre d'éléments alloués) du vecteur.
Integer size() const
Nombre d'éléments du vecteur.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
Vue constante d'un tableau de type T.
interval d'itérateurs constant
Exception lorsqu'une fonction n'est pas implémentée.
Constructeur de chaîne de caractère unicode.
Chaîne de caractères unicode.
const char * localstr() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
Classe d'accès aux traces.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage warning() const
Flot pour un message d'avertissement.
Vecteur 1D de données avec sémantique par valeur (style STL).
char * copyn(char *to, const char *from, Integer n)
Copie les n premiers caractères de from dans to.
Real toReal(Real r)
Converti r en un Real.
double toDouble(Real r)
Converti un Real en double.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Integer arcaneCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
Collection< ItemGroup > ItemGroupCollection
Collection de groupes d'éléments du maillage.
eItemKind
Genre d'entité de maillage.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
@ IK_Face
Entité de maillage de genre face.
@ IK_Edge
Entité de maillage de genre arête.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Int32 Integer
Type représentant un entier.
Correspondance entre le type des éléments ensight et Arcane.
int m_type
Type Arcane de l'élément.
UniqueArray< Item > m_items
Entités des éléments de ce type.
Integer m_nb_node
Nombre de noeud.
String m_name
Nom Ensight de cet élément.
Information pour partagé un groupe en éléments de même sous-type.
ItemGroup m_group
Groupe associé
Integer m_part_id
Numéro de la partie.
std::unique_ptr< VariableItemInt32 > m_general_item_types
Variable pour stocker les types des items généraux (non typés)
Integer nbType() const
Nombre de sous-types.