IFEM 90A354
SIMoutput.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _SIM_OUTPUT_H
15#define _SIM_OUTPUT_H
16
17#include "SIMinput.h"
18#include "Vec3.h"
19
20class ElementBlock;
21class VTF;
22
23
32class SIMoutput : public SIMinput
33{
34protected:
36 explicit SIMoutput(IntegrandBase* itg);
37
38public:
40 virtual ~SIMoutput();
41
43 virtual void clearProperties();
44
45 using SIMinput::parse;
49 virtual bool parse(char* keyWord, std::istream& is);
50
55 virtual bool merge(SIMbase* that, const std::map<int,int>* old2new, int poff);
56
62 bool getElementSet(int iset, std::string& name, RealArray& elSet) const;
63
64protected:
66 virtual bool parseOutputTag(const tinyxml2::XMLElement* elem);
67
69 virtual ElementBlock* tesselatePatch(size_t pidx) const;
70
71public:
76 bool writeGlvG(int& nBlock, const char* inpFile, bool append = false);
77
82 virtual bool writeGlvG(int& nBlock, double time, bool append = false);
83
85 virtual bool writeGlvA(int&, int, double, int = 1) const { return true; }
86
90 bool writeGlvBC(int& nBlock, int iStep = 1) const;
91
101 bool writeGlvNo(int& nBlock, int& idBlock,
102 int maxBlock = 20, int iStep = 1) const;
103
108 bool writeGlvT(int iStep, int& geoBlk, int& nBlock) const;
109
117 bool writeGlvV(const RealArray& vec, const char* fieldName,
118 int iStep, int& nBlock, int idBlock = 2, int ncmp = 0) const;
119
126 bool writeGlvS(const Vector& scl, const char* fieldName,
127 int iStep, int& nBlock, int idBlock = 2) const;
128
137 bool writeGlvS(const Vector& psol, int iStep, int& nBlock, double time = 0.0,
138 const char* pvecName = nullptr, int idBlock = 10,
139 int psolComps = 0);
140
150 virtual int writeGlvS1(const Vector& psol, int iStep, int& nBlock,
151 double time = 0.0, const char* pvecName = nullptr,
152 int idBlock = 10, int psolComps = 0,
153 bool scalarOnly = false);
154
162 virtual int writeGlvS2(const Vector& psol, int iStep, int& nBlock,
163 double time = 0.0, int idBlock = 20,
164 int psolComps = 0);
165
176 bool eval2ndSolution(const Vector& psol, double time, int psolComps = 0);
177
185 bool writeGlvP(const RealArray& ssol, int iStep, int& nBlock,
186 int idBlock = 100, const char* prefix = "Global projected",
187 std::vector<PointValues>* maxVal = nullptr);
188
195 bool writeGlvM(const Mode& mode, bool freq, int& nBlock);
196
205 bool writeGlvE(const Vector& field, int iStep, int& nBlock,
206 const char* name, int idBlock = 300,
207 bool internalOrder = false) const;
208
216 bool writeGlvN(const Matrix& norms, int iStep, int& nBlock,
217 int idBlock = 200, double time = 0.0,
218 const char* dualPrefix = nullptr);
219
229 bool writeGlvF(const RealFunc& f, const char* fname, int iStep, int& nBlock,
230 const Vector* state = nullptr,
231 int idBlock = 50, double time = 0.0,
232 const ASMbase* patch = nullptr);
233
238 bool writeGlvStep(int iStep, double value = 0.0, int itype = 0);
239
242 bool openGlv(const char* inpFile);
244 void closeGlv();
245
247 VTF* getVTF() const { return myVtf; }
249 void setVTF(VTF* vtf) { myVtf = vtf; }
250
252 int getStartGeo() const { return myGeomID; }
254 void setStartGeo(int gID) { myGeomID = gID; }
255
261 bool dumpMatlabGrid(std::ostream& os, const std::string& name = "IFEM_Mesh",
262 const std::vector<std::string>& sets = {},
263 double scale = 1.0) const;
264
267 bool dumpGeometry(std::ostream& os) const;
268
273 void dumpPrimSol(const Vector& psol, utl::LogStream& os,
274 bool withID = true) const;
278 bool dumpSolution(const Vector& psol, utl::LogStream& os) const;
286 bool dumpResults(const Vector& psol, double time, utl::LogStream& os,
287 bool formatted = false, std::streamsize precision = 3) const;
293 bool dumpVector(const Vector& vsol, const char* fname,
294 utl::LogStream& os, std::streamsize precision = 3) const;
296 virtual void dumpMoreResults(double, utl::LogStream&,
297 std::streamsize = 3) const {}
298
303 bool savePoints(const Vector& psol, double time, int step) const;
304
309 bool saveResults(const Vectors& psol, double time, int step) const;
310
312 bool hasResultPoints() const { return !myPoints.empty(); }
314 bool hasPointResultFile() const;
318 void setPointResultFile(const std::string& filename, bool dumpCoord = false);
319
321 virtual bool serialize(std::map<std::string,std::string>&) const;
322
324 virtual double getReferenceNorm(const Vectors&, size_t) const = 0;
326 virtual double getEffectivityIndex(const Vectors&, size_t, size_t) const = 0;
328 virtual void printNorms(const Vectors&, size_t = 36) const = 0;
330 virtual void printIFforces(const Vector&, RealArray&) {}
332 virtual int printNRforces(const IntVec& glbNodes = {}) const;
333
334protected:
338 void addAddFunc(const std::string& fn, RealFunc* f) { myAddScalars[fn] = f; }
339
346 virtual bool writeAddFuncs(int& nBlock, int& idBlock, const Vector& psol,
347 int iStep, double time);
348
349private:
351 bool initPatchForEvaluation(int patchNo) const;
352
354 bool extractNodeVec(const RealArray& glbVec, Vector& locVec,
355 const ASMbase* patch, int nodalCmps,
356 bool& emptyPatches) const;
357
359 bool writeScalarFields(const Matrix& field, int geomID, int& nBlock,
360 std::vector<IntVec>& sID, size_t* nScl = nullptr,
361 ASM::ResultClass resClass = ASM::PRIMARY);
362
363protected:
364 std::map<int,int> addDisBlk;
365
368 {
369 short int npar;
370 unsigned int patch;
371 double u[3];
373
374 int inod;
375 int iel;
376
378 ResultPoint(short int n = 0) : npar(n), patch(1), inod(0), iel(0)
379 { u[0] = u[1] = u[2] = 0.0; }
380 };
381
383 using ResPointVec = std::vector<ResultPoint>;
385 using ResPtPair = std::pair<std::string,ResPointVec>;
386
387 std::vector<ResPtPair> myPoints;
388
390 virtual void preprocessResultPoints();
391
392private:
396 void preprocessResPtGroup(std::string& ptFile, ResPointVec& points);
397
406 bool dumpResults(const Vector& psol, double time,
407 utl::LogStream& os, const ResPointVec& gPoints,
408 bool formatted, std::streamsize precision) const;
409
420 bool evalResults(const Vectors& psol, const ResPointVec& gPoints,
421 const ASMbase* patch, IntVec& points, IntVec& elms,
422 Vec3Vec& Xp, Matrix& sol1, Matrix& sol2,
423 std::vector<std::string>* compNames = nullptr) const;
424
425 std::map<std::string,RealFunc*> myAddScalars;
426
427 std::set<std::string> wantComps;
428
429 int myPrec;
430 double myPtSize;
435 bool mergeVtf;
436 bool logRpMap;
438};
439
440#endif
std::vector< int > IntVec
General integer vector.
Definition ASMbase.h:25
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition MatVec.h:37
Sub-class with functionality for model input and setup.
Representation of a point in 3D space with some basic operations.
std::vector< Vec3 > Vec3Vec
An array of point vectors.
Definition Vec3.h:318
Base class for spline-based finite element (FE) assembly drivers.
Definition ASMbase.h:72
Class for storage of a standard FE grid block.
Definition ElementBlock.h:27
Base class representing a system level integrated quantity.
Definition IntegrandBase.h:42
Scalar-valued unary function of a spatial point.
Definition Function.h:193
std::vector< int > IntVec
Convenience alias.
Definition SIMadmin.h:34
Base class for NURBS-based FEM simulators.
Definition SIMbase.h:72
Sub-class with functionality for model input and setup.
Definition SIMinput.h:38
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition SIMinput.C:1103
Sub-class with additional functionality for result output.
Definition SIMoutput.h:33
void setPointResultFile(const std::string &filename, bool dumpCoord=false)
Sets the file name for result point output.
Definition SIMoutput.C:74
std::vector< ResultPoint > ResPointVec
Result point container.
Definition SIMoutput.h:383
virtual bool writeGlvA(int &, int, double, int=1) const
Writes additional, problem-specific, results to the VTF-file.
Definition SIMoutput.h:85
bool openGlv(const char *inpFile)
Opens a new VTF-file.
Definition SIMoutput.C:1968
bool hasPointResultFile() const
Checks whether point result files have been defined or not.
Definition SIMoutput.C:64
virtual bool merge(SIMbase *that, const std::map< int, int > *old2new, int poff)
Merges the global equation system of that simulator with this.
Definition SIMoutput.C:593
bool writeGlvV(const RealArray &vec, const char *fieldName, int iStep, int &nBlock, int idBlock=2, int ncmp=0) const
Writes a vector field for a given load/time step to the VTF-file.
Definition SIMoutput.C:940
bool mergeVtf
If true, merge multi-patches into one on the VTF-file.
Definition SIMoutput.h:435
std::map< int, int > addDisBlk
Additional displacement block mapping.
Definition SIMoutput.h:364
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition SIMoutput.C:390
virtual ~SIMoutput()
The destructor frees the dynamically allocated VTF object.
Definition SIMoutput.C:45
bool writeGlvG(int &nBlock, const char *inpFile, bool append=false)
Writes current model geometry to the VTF-file.
Definition SIMoutput.C:661
bool writeGlvT(int iStep, int &geoBlk, int &nBlock) const
Writes boundary tractions for a given time step to the VTF-file.
Definition SIMoutput.C:927
bool writeGlvStep(int iStep, double value=0.0, int itype=0)
Writes load/time step info to the VTF-file.
Definition SIMoutput.C:1687
std::vector< ResPtPair > myPoints
User-defined result sampling points.
Definition SIMoutput.h:387
bool dumpResults(const Vector &psol, double time, utl::LogStream &os, bool formatted=false, std::streamsize precision=3) const
Dumps solution results at specified points in ASCII format.
Definition SIMoutput.C:2591
void addAddFunc(const std::string &fn, RealFunc *f)
Adds a function for additional VTF-file output.
Definition SIMoutput.h:338
virtual void printIFforces(const Vector &, RealArray &)
Prints out interface force resultants to the log stream.
Definition SIMoutput.h:330
void closeGlv()
Closes the current VTF-file.
Definition SIMoutput.C:2003
bool writeGlvM(const Mode &mode, bool freq, int &nBlock)
Writes a mode shape to the VTF-file.
Definition SIMoutput.C:1703
bool logRpMap
If true, print out the result point mapping.
Definition SIMoutput.h:436
int myGeofs1
ID offset for immersed geometry block in the VTF-file.
Definition SIMoutput.h:432
double myPtSize
Size of result point visualization in VTF-file.
Definition SIMoutput.h:430
virtual ElementBlock * tesselatePatch(size_t pidx) const
Tesselates the specified patch.
Definition SIMoutput.C:617
bool getElementSet(int iset, std::string &name, RealArray &elSet) const
Retrieves the specified element set as a scalar field.
Definition SIMoutput.C:640
std::set< std::string > wantComps
Component names for grid output.
Definition SIMoutput.h:427
void dumpPrimSol(const Vector &psol, utl::LogStream &os, bool withID=true) const
Dumps the primary solution in ASCII format for inspection.
Definition SIMoutput.C:2095
VTF * myVtf
VTF-file for result visualization.
Definition SIMoutput.h:434
bool dumpSolution(const Vector &psol, utl::LogStream &os) const
Dumps the entire solution in ASCII format.
Definition SIMoutput.C:2136
virtual double getReferenceNorm(const Vectors &, size_t) const =0
Returns the reference norm to base mesh adaptation upon.
virtual double getEffectivityIndex(const Vectors &, size_t, size_t) const =0
Returns the global effectivity index.
int myPrec
Output precision for result sampling.
Definition SIMoutput.h:429
bool writeScalarFields(const Matrix &field, int geomID, int &nBlock, std::vector< IntVec > &sID, size_t *nScl=nullptr, ASM::ResultClass resClass=ASM::PRIMARY)
Private helper to write out scalar fields to VTF-file.
Definition SIMoutput.C:1619
void setStartGeo(int gID)
Initializes the geometry block counter.
Definition SIMoutput.h:254
bool writeGlvNo(int &nBlock, int &idBlock, int maxBlock=20, int iStep=1) const
Writes global node numbers as scalar fields to the VTF-file.
Definition SIMoutput.C:878
virtual bool serialize(std::map< std::string, std::string > &) const
Serialization support.
Definition SIMoutput.C:2772
bool extractNodeVec(const RealArray &glbVec, Vector &locVec, const ASMbase *patch, int nodalCmps, bool &emptyPatches) const
Private helper to extract patch-level solution vectors.
Definition SIMoutput.C:2741
bool writeGlvE(const Vector &field, int iStep, int &nBlock, const char *name, int idBlock=300, bool internalOrder=false) const
Writes element field for a given load/time step to the VTF-file.
Definition SIMoutput.C:1922
bool eval2ndSolution(const Vector &psol, double time, int psolComps=0)
Evaluates the secondary solution for a given load/time step.
Definition SIMoutput.C:1479
virtual int writeGlvS1(const Vector &psol, int iStep, int &nBlock, double time=0.0, const char *pvecName=nullptr, int idBlock=10, int psolComps=0, bool scalarOnly=false)
Writes primary solution for a given load/time step to the VTF-file.
Definition SIMoutput.C:1064
int myGeomID
Geometry block ID for the first patch in the VTF-file.
Definition SIMoutput.h:431
bool writeGlvBC(int &nBlock, int iStep=1) const
Writes boundary conditions as scalar fields to the VTF-file.
Definition SIMoutput.C:801
bool writeGlvF(const RealFunc &f, const char *fname, int iStep, int &nBlock, const Vector *state=nullptr, int idBlock=50, double time=0.0, const ASMbase *patch=nullptr)
Writes a scalar function to the VTF-file.
Definition SIMoutput.C:1639
virtual int printNRforces(const IntVec &glbNodes={}) const
Prints out the nodal reaction forces to the log stream.
Definition SIMoutput.C:2710
virtual void printNorms(const Vectors &, size_t=36) const =0
Prints integrated solution norms to the log stream.
int getStartGeo() const
Returns the initial geometry block index.
Definition SIMoutput.h:252
virtual bool parseOutputTag(const tinyxml2::XMLElement *elem)
Parses a subelement of the resultoutput XML-tag.
Definition SIMoutput.C:105
int idxGrid
Index into myPoints for grid result output.
Definition SIMoutput.h:437
bool writeGlvN(const Matrix &norms, int iStep, int &nBlock, int idBlock=200, double time=0.0, const char *dualPrefix=nullptr)
Writes element norms for a given load/time step to the VTF-file.
Definition SIMoutput.C:1779
virtual void dumpMoreResults(double, utl::LogStream &, std::streamsize=3) const
Dumps additional problem-specific results in ASCII format.
Definition SIMoutput.h:296
void preprocessResPtGroup(std::string &ptFile, ResPointVec &points)
Preprocesses a result sampling point group.
Definition SIMoutput.C:439
bool saveResults(const Vectors &psol, double time, int step) const
Saves result components to output files for a given time step.
Definition SIMoutput.C:2642
bool dumpMatlabGrid(std::ostream &os, const std::string &name="IFEM_Mesh", const std::vector< std::string > &sets={}, double scale=1.0) const
Dumps the FE model to Matlab format.
Definition SIMoutput.C:2010
VTF * getVTF() const
Returns the current VTF-file object.
Definition SIMoutput.h:247
bool dumpGeometry(std::ostream &os) const
Dumps the (possibly refined) spline geometry in g2-format.
Definition SIMoutput.C:2085
bool evalResults(const Vectors &psol, const ResPointVec &gPoints, const ASMbase *patch, IntVec &points, IntVec &elms, Vec3Vec &Xp, Matrix &sol1, Matrix &sol2, std::vector< std::string > *compNames=nullptr) const
Evaluates solution results at specified points for a given patch.
Definition SIMoutput.C:2313
int myGeofs2
ID offset for extra geometry block in the VTF-file.
Definition SIMoutput.h:433
virtual bool writeAddFuncs(int &nBlock, int &idBlock, const Vector &psol, int iStep, double time)
Writes out the additional functions to VTF-file.
Definition SIMoutput.C:2780
bool savePoints(const Vector &psol, double time, int step) const
Saves point results to output file for a given time step.
Definition SIMoutput.C:2615
std::map< std::string, RealFunc * > myAddScalars
Scalar functions to output.
Definition SIMoutput.h:425
std::pair< std::string, ResPointVec > ResPtPair
File name to result point group mapping.
Definition SIMoutput.h:385
void setVTF(VTF *vtf)
Defines the VTF-file for subsequent results output.
Definition SIMoutput.h:249
bool writeGlvS(const Vector &scl, const char *fieldName, int iStep, int &nBlock, int idBlock=2) const
Writes a scalar field for a given load/time step to the VTF-file.
Definition SIMoutput.C:982
virtual int writeGlvS2(const Vector &psol, int iStep, int &nBlock, double time=0.0, int idBlock=20, int psolComps=0)
Writes secondary solution for a load/time step to the VTF-file.
Definition SIMoutput.C:1289
bool writeGlvP(const RealArray &ssol, int iStep, int &nBlock, int idBlock=100, const char *prefix="Global projected", std::vector< PointValues > *maxVal=nullptr)
Writes projected solutions for a given time step to the VTF-file.
Definition SIMoutput.C:1516
virtual void clearProperties()
Initializes the property containers of the model.
Definition SIMoutput.C:54
bool dumpVector(const Vector &vsol, const char *fname, utl::LogStream &os, std::streamsize precision=3) const
Dumps vector solution at specified points in ASCII format.
Definition SIMoutput.C:2469
bool hasResultPoints() const
Checks whether result points have been defined or not.
Definition SIMoutput.h:312
virtual void preprocessResultPoints()
Preprocesses the result sampling points.
Definition SIMoutput.C:422
bool initPatchForEvaluation(int patchNo) const
Private helper to initialize patch for solution evaluation.
Definition SIMoutput.C:2458
Class for output of FE model and results to VTF file.
Definition VTF.h:58
Simple class for representing a point in 3D space.
Definition Vec3.h:27
Logging stream class.
Definition LogStream.h:26
A vector class with some added algebraic operations.
Definition matrix.h:64
ResultClass
Enum for cathegorization of result quantities.
Definition ASMenums.h:62
Struct for storage of data associated with one mode shape.
Definition SIMbase.h:47
Struct defining a result sampling point.
Definition SIMoutput.h:368
double u[3]
Parameters of the point (u,v,w)
Definition SIMoutput.h:371
int iel
If non-zero, this point is the center of element iel.
Definition SIMoutput.h:375
unsigned int patch
Patch index [1,nPatch].
Definition SIMoutput.h:370
int inod
Local (1-based) index of the closest node.
Definition SIMoutput.h:374
Vec3 X
Spatial coordinates of the point.
Definition SIMoutput.h:372
short int npar
Number of parameters.
Definition SIMoutput.h:369
ResultPoint(short int n=0)
Default constructor.
Definition SIMoutput.h:378