escript  Revision_
DataVar.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef __WEIPA_DATAVAR_H__
19 #define __WEIPA_DATAVAR_H__
20 
21 #include <weipa/DomainChunk.h>
22 #include <ostream>
23 
24 class DBfile;
25 //class NcFile;
26 
27 namespace escript {
28  class Data;
29 }
30 
31 namespace weipa {
32 
36 class DataVar
37 {
38 public:
40  DataVar(const std::string& name);
41 
43  DataVar(const DataVar& d);
44 
46  ~DataVar();
47 
52  bool initFromEscript(escript::Data& escriptData, const_DomainChunk_ptr dom);
53 
55  bool initFromMeshData(const_DomainChunk_ptr dom, const IntVec& data,
56  int fsCode, Centering c, NodeData_ptr nodes, const IntVec& id);
57 
64  bool initFromFile(const std::string& filename, const_DomainChunk_ptr dom);
65 
69  bool writeToSilo(DBfile* dbfile, const std::string& siloPath,
70  const std::string& units);
71 
73  void writeToVTK(std::ostream& os, int ownIndex);
74 
76  int getRank() const { return rank; }
77 
80  bool isNodeCentered() const;
81 
87  std::string getMeshName() const { return meshName; }
88 
92  const IntVec& getShape() const { return shape; }
93 
95  std::string getName() const { return varName; }
96 
103  std::string getTensorDef() const;
104 
106  int getNumberOfSamples() const { return numSamples; }
107 
110  const CoordArray& getData() const { return dataArray; }
111 
115  float* getDataFlat() const;
116 
118  int getNumberOfComponents() const;
119 
120 private:
121  void cleanup();
122 
128  float* averageData(const float* src, size_t stride);
129 
133 
139  bool reorderSamples();
140 
142  void sampleToStream(std::ostream& os, int index);
143 
146  std::string varName;
152  std::string meshName, siloMeshName;
153 };
154 
156 {
157  IndexMap sampleID2idx;
158  int idx = sampleID.size()-1;
159  // see this thread for why this is done the way it's done:
160  // http://www.tech-archive.net/Archive/VC/microsoft.public.vc.stl/2005-01/0075.html
161  IntVec::const_reverse_iterator idIt = sampleID.rbegin();
162  IntVec::const_reverse_iterator endIt = sampleID.rend();
163  for (; idIt != endIt; idIt++, idx--)
164  sampleID2idx[*idIt] = idx;
165 
166  return sampleID2idx;
167 }
168 
169 } // namespace weipa
170 
171 #endif // __WEIPA_DATAVAR_H__
172 
escript::Data::getNumDataPointsPerSample
int getNumDataPointsPerSample() const
Return the number of data points per sample.
Definition: Data.h:544
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:52
weipa::DataVar::sampleID
IntVec sampleID
Definition: DataVar.h:150
weipa::DataVar::getMeshName
std::string getMeshName() const
Returns the name of the associated mesh.
Definition: DataVar.h:87
weipa::DataVar::varName
std::string varName
Definition: DataVar.h:146
weipa::DataVar::buildIndexMap
IndexMap buildIndexMap()
Prepares a sample ID -> index mapping which is used to reorder data.
Definition: DataVar.h:155
weipa::DataVar::cleanup
void cleanup()
Definition: DataVar.cpp:92
weipa::DataVar::siloMeshName
std::string siloMeshName
Definition: DataVar.h:152
weipa::DataVar::domain
const_DomainChunk_ptr domain
Definition: DataVar.h:145
escript::Data::getSampleDataRO
const DataTypes::real_t * getSampleDataRO(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0) const
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1991
weipa::QuadMaskInfo::mask
std::vector< IntVec > mask
Definition: ElementData.h:41
weipa::VisItControl::initialized
bool initialized
Definition: VisItControl.cpp:38
escript::Data::getDataPointShape
const DataTypes::ShapeType & getDataPointShape() const
Return a reference to the data point shape.
Definition: Data.h:705
weipa::DataVar::centering
Centering centering
Definition: DataVar.h:148
weipa::DataVar::DataVar
DataVar(const std::string &name)
Constructor with variable name.
Definition: DataVar.cpp:56
weipa::QuadMaskInfo
This struct holds a mask (0's and 1's) that indicates which quad nodes contribute to a sub-element wh...
Definition: ElementData.h:40
escript::Data::isConstant
bool isConstant() const
Return true if this Data is constant.
Definition: Data.cpp:1139
weipa::DataVar::reorderSamples
bool reorderSamples()
Reorders the samples according to the corresponding node or element IDs.
Definition: DataVar.cpp:504
weipa::DataVar::getDataFlat
float * getDataFlat() const
Returns a flattened array of data values, i.e. the ordering is s0c0 s0c1 s0c2 s1c0 s1c1 s1c2 s2c0 ....
Definition: DataVar.cpp:578
weipa::DataVar::getRank
int getRank() const
Returns the rank of the data.
Definition: DataVar.h:76
escript::Data::getFunctionSpace
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition: Data.h:463
weipa
Definition: DataVar.cpp:51
weipa::QuadMaskInfo::factor
IntVec factor
Definition: ElementData.h:42
weipa::DataVar::initFromFile
bool initFromFile(const std::string &filename, const_DomainChunk_ptr dom)
Reads values and IDs for this variable from an escript dump file.
Definition: DataVar.cpp:336
escript::Data::getNumSamples
int getNumSamples() const
Return the number of samples.
Definition: Data.h:533
paso::util::copy
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:88
weipa::DataVar::averageData
float * averageData(const float *src, size_t stride)
Averages and filters data.
Definition: DataVar.cpp:455
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:64
weipa::DataVar::sampleToStream
void sampleToStream(std::ostream &os, int index)
Outputs sample at index to output stream in VTK XML format.
Definition: DataVar.cpp:608
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:66
weipa::DataVar::initFromEscript
bool initFromEscript(escript::Data &escriptData, const_DomainChunk_ptr dom)
Initialises values and IDs from an escript::Data instance.
Definition: DataVar.cpp:107
weipa::DataVar::getName
std::string getName() const
Returns the variable name.
Definition: DataVar.h:95
weipa::IndexMap
std::map< int, size_t > IndexMap
Definition: weipa.h:63
weipa::CoordArray
std::vector< float * > CoordArray
Definition: weipa.h:62
weipa::DataVar::shape
IntVec shape
Definition: DataVar.h:149
weipa::ElementData_ptr
boost::shared_ptr< ElementData > ElementData_ptr
Definition: weipa.h:67
weipa::NODE_CENTERED
@ NODE_CENTERED
Definition: DomainChunk.h:32
weipa::DataVar::writeToVTK
void writeToVTK(std::ostream &os, int ownIndex)
Writes the data values to ostream in VTK text format.
Definition: DataVar.cpp:654
escript::Data::getDataRO
const DataTypes::real_t * getDataRO(DataTypes::real_t dummy=0) const
Return a pointer to the beginning of the underlying data.
Definition: Data.h:2018
weipa::DataVar::isNodeCentered
bool isNodeCentered() const
Returns true if the variable data is node centered, false if zone centered.
Definition: DataVar.cpp:444
weipa::DataVar::writeToSilo
bool writeToSilo(DBfile *dbfile, const std::string &siloPath, const std::string &units)
Writes the data into given directory within a Silo file.
Definition: DataVar.cpp:739
weipa::DataVar::dataArray
CoordArray dataArray
Definition: DataVar.h:151
weipa::DataVar::getData
const CoordArray & getData() const
Returns the array of data values where array[i] is the i-th component of the data.
Definition: DataVar.h:110
weipa::DataVar::~DataVar
~DataVar()
Destructor.
Definition: DataVar.cpp:84
weipa::DataVar::getNumberOfSamples
int getNumberOfSamples() const
Returns the number of data values.
Definition: DataVar.h:106
weipa::DataVar::ptsPerSample
int ptsPerSample
Definition: DataVar.h:147
weipa::DataVar::funcSpace
int funcSpace
Definition: DataVar.h:147
escript
Definition: AbstractContinuousDomain.cpp:23
weipa::DataVar::meshName
std::string meshName
Definition: DataVar.h:152
weipa::DataVar::initFromMeshData
bool initFromMeshData(const_DomainChunk_ptr dom, const IntVec &data, int fsCode, Centering c, NodeData_ptr nodes, const IntVec &id)
Initialises with integral mesh data like IDs or tags.
Definition: DataVar.cpp:203
weipa::DataVar::initialized
bool initialized
Definition: DataVar.h:144
weipa::DataVar::getTensorDef
std::string getTensorDef() const
Returns the Silo tensor definition for this tensor.
Definition: DataVar.cpp:697
weipa::NodeData_ptr
boost::shared_ptr< NodeData > NodeData_ptr
Definition: weipa.h:69
weipa::DataVar::getNumberOfComponents
int getNumberOfComponents() const
Returns the total number of components (sum of shape elements).
Definition: DataVar.cpp:570
escript::FunctionSpace::getTypeCode
int getTypeCode() const
Returns the function space type code.
Definition: FunctionSpace.cpp:95
escript::FunctionSpace::borrowSampleReferenceIDs
const DataTypes::dim_t * borrowSampleReferenceIDs() const
Returns a borrowed reference to the list of sample reference IDs.
Definition: FunctionSpace.cpp:199
escript::Data::actsExpanded
bool actsExpanded() const
Return true if this Data is expanded or resolves to expanded. That is, if it has a separate value for...
Definition: Data.cpp:1118
weipa::DataVar::getShape
const IntVec & getShape() const
Returns the shape vector of the data.
Definition: DataVar.h:92
weipa::Centering
Centering
Definition: DomainChunk.h:31
weipa::IntVec
std::vector< int > IntVec
Definition: weipa.h:60
weipa::DataVar
A class that provides functionality to read an escript data object from a dump file or an escript::Da...
Definition: DataVar.h:37
weipa::DataVar::rank
int rank
Definition: DataVar.h:147
weipa::DataVar::numSamples
int numSamples
Definition: DataVar.h:147
weipa::const_DomainChunk_ptr
boost::shared_ptr< const DomainChunk > const_DomainChunk_ptr
Definition: weipa.h:71
escript::Data::getDataPointRank
unsigned int getDataPointRank() const
Return the rank of the point data.
Definition: Data.h:512