GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
gmNfFileWriter.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2014 by Carlos Augusto Teixera Mendes
4** All rights reserved.
5**
6** This file is part of the "GeMA" software. It's use should respect
7** the terms in the license agreement that can be found together
8** with this source code.
9** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11** A PARTICULAR PURPOSE.
12**
13************************************************************************/
14
24#ifndef _GEMA_NF_FILE_WRITER_H_
25#define _GEMA_NF_FILE_WRITER_H_
26
27#include "gmFileWriter.h"
28#include "gmNfFileFormat.h"
29#include "gmFileIOUtils.h"
30#include "gmCell.h"
31
32#include <stdio.h>
33
34class QTemporaryFile;
35class GmFileFiler;
37class GmTaskManager;
38
41{
42 const int maxNodeIdChars = 10; //Greather than 2^32, so we can save up to 10 digit node ids
43 struct CellOrder { int id; int cellId; };
44
45 //Per property write functions
46 using wNFunc = std::function<int(char*, int)>; //Node write function
47 using wCFunc = std::function<int(char*, CellOrder, const GmCell*)>; //Cell write function
48 using wGFunc = std::function<int(char*, CellOrder, int, const GmCell*, const GmIntegrationRule*)>; //Gauss write function
49 using GetCoord = std::function<const GmVector* (const GmCell*, GmVector*)>; //Eval coordinates for cell data
50public:
51 GmNfFileWriter(const GmLogCategory& logger);
52
53 virtual ~GmNfFileWriter();
54
55 virtual bool createFiles(QString fileName, const GmSimulationData* simData, const GmFileFilter* filter,
56 const QVariantMap& options, bool multipleResults, bool gaussValues, bool discValues,
57 GmFileIO::DumpMode dumpMode, QString timeUnit);
58
59 virtual bool setCurrentTime(int iter, double time);
60
61 virtual bool saveGeometry(GmValueAccessor* nodeAc, const double* scaleFactor, const double* offset);
62
63
65 const UnitConverter* conv, const double* scaleFactor, const double* offset)
66 {
67 Q_UNUSED(sets); Q_UNUSED(mode); Q_UNUSED(conv); Q_UNUSED(scaleFactor); Q_UNUSED(offset);
68 //TODO
69 return true;
70 }
71
72 virtual bool saveData(const QVector<GmNodeAcResultsDataSrc*>& nodeData,
74 const QVector<GmGaussAcResultsDataSrc*>& gaussData,
75 int extraColumns, const QVector<int>& propertySets);
76
77 virtual bool endWrite();
78 virtual bool closeFiles(bool deleteFiles = false);
79
80 virtual QString tempFile();
81
82 virtual void flushFiles();
83
84 virtual GmFileFormat* fileFormat() { return this; }
85
86 virtual bool dumpSupport() const;
87 virtual bool addSavedItemsToMap (QVariantMap& map);
88 virtual bool loadSavedItemsFromMap(QVariantMap& map);
89
90private:
91 bool copyResultData(FILE* srcFile, FILE* dstFile, qint64 size = 0);
92
93 void writeHeader();
94 void saveNodeCoordinates(GmValueAccessor* nodeAcc, const QVector<int>& indexer, const double* scaleFactor, const double* offset);
95 void saveMeshTopology(const GmCellMesh* mesh);
96 int fillExtraNodesIndex(const GmMesh* mesh, const GmValueAccessor* nodeAc);
97 void writeResultsHeader();
98 void findMaterialGroup (const GmMesh* mesh, const QVariantMap& options);
99 void saveMaterialGroup (const GmCellMesh* mesh);
100 void saveIntegrationRules(const GmElementMesh* mesh);
101 bool saveNodeData(const QVector<GmNodeAcResultsDataSrc*>& nodeData, int extraCol);
102 void saveDisplacement(GmValueAccessor* ac, const QVector<int>& indexer);
103 bool saveCellGaussData(const QVector<GmCellAcResultsDataSrc*>& cellData, const QVector<GmGaussAcResultsDataSrc*>& gaussData, int extraCol);
104
105 void fillNodeCoordBuffer(const GmValueAccessor* cac, int start, int count, const double* scale, const double* offset, const QVector<int>& indexer, GmFileIOUtils::GmWBuffer& buf);
106 void fillCellTopoBuffer(const GmCellMesh* mesh, int start, int count, int nnodes, const char* afterMaterial,
107 const char* afterNode, const QVector<int>& nodeNumbering, const QVector<CellOrder>& indexer, GmFileIOUtils::GmWBuffer& buf);
108
109 int fillCellIndexerPerType(QVector<CellOrder> order[GM_NUM_CELL_TYPES], bool checkIr = false);
110
111 //Split properties into scalar (directly write functions) and vector
112 int buildNodeFunctions (const QVector<GmNodeAcResultsDataSrc*>& prop, const QVector<int>& indexer, int extraCol, QVector<wNFunc>& func, GmValueAccessor** dispAc, QString& header);
113
114 int buildCellFunctions (const QVector<GmCellAcResultsDataSrc*>& prop, int extraCol, const GetCoord& getCoord, QVector<wCFunc>& func, QString& header);
115 int buildGaussFunctions(const QVector<GmGaussAcResultsDataSrc*>& prop,int extraCol, QVector<wGFunc>& func, QString& header);
116
117
118
120 FILE* _nfFile;
121 FILE* _tempFile;
126 int _elementNip[GM_NUM_CELL_TYPES];
130
131 QVector<double> _extraNodes; // Set of extra nodes created to transform a INT2DL6 into a QUAD8 and INT3DL12 into a HEX20
132
135 GmTaskManager* _tm;
138 int _dumpMode;
139};
140
141#endif
142
Base interface for mesh cells.
Definition gmCell.h:88
Base interface class for CellMesh type plugins.
Definition gmCellMesh.h:40
Base interface for FEM (finite element) meshes.
Definition gmElementMesh.h:42
A generic auxiliary class for managing the various options that can be used to define the set of node...
Definition gmFileFilter.h:47
Basic interface for describing high level file format capabilities.
Definition gmFileFormat.h:35
DumpMode
The dump mode when creating the file.
Definition gmFileIO.h:72
DiscontinuityDataMode
The selected mode when saving discontinuity data.
Definition gmFileIO.h:80
Definition gmFileIOUtils.h:48
Basic interface for file serializers.
Definition gmFileWriter.h:37
Integration rule base classe.
Definition gmIntegrationRule.h:89
Class representing a category with multiple logging levels.
Definition gmLog.h:58
Base interface class for Mesh type plugins.
Definition gmMesh.h:48
File format specifications for the "Neutral File" file format.
Definition gmNfFileFormat.h:34
A file serializer for saving data in the "Neutral File" file format.
Definition gmNfFileWriter.h:41
int _intRuleSet
The mesh integration rule set that will be used to export values.
Definition gmNfFileWriter.h:124
int _nresults
The number of added result cases.
Definition gmNfFileWriter.h:127
int _elementRule[GM_NUM_CELL_TYPES]
The integration rule bound to each element type.
Definition gmNfFileWriter.h:125
virtual bool addSavedItemsToMap(QVariantMap &map)
This function should add to map any internal serializer state that must be saved on a dump operation,...
Definition gmNfFileWriter.cpp:1200
bool _useModelOrder
Should we keep the internal node/cell order while saving or should we translate them to the original ...
Definition gmNfFileWriter.h:129
virtual GmFileFormat * fileFormat()
Returns the file format of the serializer.
Definition gmNfFileWriter.h:84
const GmSimulationData * _simData
The simulation data that was used to create the file.
Definition gmNfFileWriter.h:134
bool _multipleResults
Are we saving multiple result sets?
Definition gmNfFileWriter.h:137
void saveIntegrationRules(const GmElementMesh *mesh)
Save integration rule information and fills _elementRule with the mapping between types and integrati...
Definition gmNfFileWriter.cpp:1126
virtual ~GmNfFileWriter()
Destructor.
Definition gmNfFileWriter.cpp:73
FILE * _tempFile
The temporary file file handler (used for multiple result sets)
Definition gmNfFileWriter.h:121
virtual bool loadSavedItemsFromMap(QVariantMap &map)
This function should retrieve from the given map any internal writer state that was saved on a dump o...
Definition gmNfFileWriter.cpp:1218
bool _saveDisplacements
Save displacement data?
Definition gmNfFileWriter.h:128
QString _nfFileName
The neutral file file name.
Definition gmNfFileWriter.h:119
virtual bool saveDiscontinuities(const QVector< GmDiscontinuitySet * > &sets, GmFileIO::DiscontinuityDataMode mode, const UnitConverter *conv, const double *scaleFactor, const double *offset)
Save discontinuity geometry data to the file. THe mode parameter defines which data should be saved....
Definition gmNfFileWriter.h:64
virtual void flushFiles()
Flush opened files.
Definition gmNfFileWriter.cpp:1042
int _materialGroup
The material group used to identify cell materials.
Definition gmNfFileWriter.h:123
bool copyResultData(FILE *srcFile, FILE *dstFile, qint64 size=0)
Appends size bytes from srcFile to dstFile.
Definition gmNfFileWriter.cpp:1070
virtual bool saveGeometry(GmValueAccessor *nodeAc, const double *scaleFactor, const double *offset)
Save mesh node coordinates, cell geometry and gauss rule set coordinates (if needed) to the file,...
Definition gmNfFileWriter.cpp:179
FILE * _nfFile
The neutral file file handle.
Definition gmNfFileWriter.h:120
bool _saveGaussData
Should we save gauss point data?
Definition gmNfFileWriter.h:136
virtual bool saveData(const QVector< GmNodeAcResultsDataSrc * > &nodeData, const QVector< GmCellAcResultsDataSrc * > &cellData, const QVector< GmGaussAcResultsDataSrc * > &gaussData, int extraColumns, const QVector< int > &propertySets)
Saves the current result set to the file for the node, cells and Gauss points as defined by the filte...
Definition gmNfFileWriter.cpp:530
const GmFileFilter * _filter
The file filter that was used to create the file.
Definition gmNfFileWriter.h:133
virtual bool dumpSupport() const
This function should return true if this serializer supports saving dump files.
Definition gmNfFileWriter.cpp:1186
void saveMaterialGroup(const GmCellMesh *mesh)
Save material information.
Definition gmNfFileWriter.cpp:1105
virtual bool closeFiles(bool deleteFiles=false)
Closes the set of files opened by a call to createFiles(). Will be called automatically by the destru...
Definition gmNfFileWriter.cpp:993
void findMaterialGroup(const GmMesh *mesh, const QVariantMap &options)
Set _materialGroup with the property set index that will be used to exposrt material inidces.
Definition gmNfFileWriter.cpp:1082
virtual QString tempFile()
Returns, if any, the name of the temp file used for the operation started with createFiles()
Definition gmNfFileWriter.cpp:1033
virtual bool setCurrentTime(int iter, double time)
Sets the current time step, valid for the next calls to saveGeometry() and/or saveData()....
Definition gmNfFileWriter.cpp:1050
QTemporaryFile * _tempFileObj
The Qt object used to safelly create the temp object in a "sane" place.
Definition gmNfFileWriter.h:122
GmNfFileWriter(const GmLogCategory &logger)
Default constructor.
Definition gmNfFileWriter.cpp:51
Auxiliar class used to store the complete set of simulation data.
Definition gmSimulationData.h:55
Task manager used for handling parallel executions.
Definition gmTaskManager.h:84
Interface class for accessing and setting values from an "indexable" collection of values.
Definition gmValueAccessor.h:60
Declaration of the GmCell class.
@ GM_NUM_CELL_TYPES
NOT a cell type. Stores the number of available types.
Definition gmCellType.h:77
Declaration of the GmFileIOUtils class.
Declaration of the GmFileWriter class (old GmFileResultsSerializer)
Declaration of the GmNfFileFormat class (old GmNeutralFileData class)
arma::vec GmVector
The basic type for a GeMA vector object. Currently based on an Armadillo vector.
Definition gmVector.h:34
Definition gmNfFileWriter.h:43