escript  Revision_
EscriptDataset.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 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 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef __WEIPA_ESCRIPTDATASET_H__
18 #define __WEIPA_ESCRIPTDATASET_H__
19 
20 #include <weipa/weipa.h>
21 
22 #include <ostream>
23 
24 class DBfile;
25 
26 namespace escript {
27  class AbstractDomain;
28  class Data;
29 }
30 
31 
32 namespace weipa {
33 
34 typedef std::vector<DataVar_ptr> DataChunks;
35 typedef std::vector<DomainChunk_ptr> DomainChunks;
36 
37 struct VarInfo {
38  std::string varName;
39  std::string units;
40  DataChunks dataChunks;
42  bool valid;
43 };
44 
45 typedef std::vector<VarInfo> VarVector;
46 
47 
50 //
63 {
64 public:
67 
68 #if WEIPA_HAVE_MPI
71 #endif
72 
74  ~EscriptDataset();
75 
82  bool setDomain(const escript::AbstractDomain* domain);
83 
86  // setDomain(), otherwise you will get undefined behaviour later!
87  bool addData(escript::Data& data, const std::string name,
88  const std::string units = "");
89 
100  bool loadNetCDF(const std::string domainFilePattern,
101  const StringVec& varFiles, const StringVec& varNames,
102  int nChunks);
103 
106  bool loadNetCDF(const DomainChunks& domain, const StringVec& varFiles,
107  const StringVec& varNames);
108 
110  void setCycleAndTime(int c, double t) { cycle=c; time=t; }
111 
113  int getCycle() const { return cycle; }
114 
116  double getTime() const { return time; }
117 
120  void setMeshLabels(const std::string x, const std::string y, const std::string z="");
121 
124  void setMeshUnits(const std::string x, const std::string y, const std::string z="");
125 
128  void setMetadataSchemaString(const std::string schema,
129  const std::string metadata)
130  { mdSchema=schema; mdString=metadata; }
131 
133  void setSaveMeshData(bool flag) { wantsMeshVars=flag; }
134 
136  bool saveSilo(const std::string fileName, bool useMultiMesh=true);
137 
139  bool saveVTK(const std::string fileName);
140 
142  DomainChunks getConvertedDomain() { return domainChunks; }
143 
145  const VarVector& getVariables() const { return variables; }
146 
148  const VarVector& getMeshVariables() const { return meshVariables; }
149 
150 #if WEIPA_HAVE_MPI
151  MPI_Comm
152 #else
153  void*
154 #endif
155  getMPIComm() { return mpiComm; }
156 
157 private:
158  bool loadDomain(const std::string filePattern, int nChunks);
159  bool setExternalDomain(const DomainChunks& domain);
160  bool loadData(const std::string filePattern, const std::string name,
161  const std::string units);
162 
163  void convertMeshVariables();
164  void updateSampleDistribution(VarInfo& vi);
165  void putSiloMultiMesh(DBfile* dbfile, const std::string& meshName);
166  void putSiloMultiTensor(DBfile* dbfile, const VarInfo& vi);
167  void putSiloMultiVar(DBfile* dbfile, const VarInfo& vi,
168  bool useMeshFile = false);
169  bool saveVTKsingle(const std::string& fileName,
170  const std::string& meshName, const VarVector& vars);
171  void writeVarToVTK(const VarInfo& varInfo, std::ostream& os);
172 
173  int cycle;
174  double time;
175  std::string mdSchema, mdString;
176  StringVec meshLabels, meshUnits;
177  bool externalDomain, wantsMeshVars;
178  DomainChunks domainChunks;
179  VarVector variables, meshVariables;
180  int mpiRank, mpiSize;
181 #if WEIPA_HAVE_MPI
182  MPI_Comm mpiComm;
183 #else
184  void* mpiComm;
185 #endif
186 };
187 
188 } // namespace weipa
189 
190 #endif // __WEIPA_ESCRIPTDATASET_H__
191 
void * getMPIComm()
Definition: EscriptDataset.h:155
int getCycle() const
Returns the cycle number.
Definition: EscriptDataset.h:113
StringVec meshUnits
Definition: EscriptDataset.h:176
IntVec sampleDistribution
Definition: EscriptDataset.h:41
Definition: AbstractContinuousDomain.cpp:22
DomainChunks getConvertedDomain()
Returns the dataset&#39;s converted domain so it can be reused.
Definition: EscriptDataset.h:142
bool valid
Definition: EscriptDataset.h:42
VarVector variables
Definition: EscriptDataset.h:179
std::vector< std::string > StringVec
Definition: weipa.h:60
void * mpiComm
Definition: EscriptDataset.h:184
std::vector< DomainChunk_ptr > DomainChunks
Definition: EscriptDataset.h:35
std::string units
Definition: EscriptDataset.h:39
const VarVector & getMeshVariables() const
Returns a vector with the mesh variables.
Definition: EscriptDataset.h:148
Definition: DataVar.cpp:39
int cycle
Definition: EscriptDataset.h:173
std::vector< int > IntVec
Definition: weipa.h:59
DomainChunks domainChunks
Definition: EscriptDataset.h:178
Data represents a collection of datapoints.
Definition: Data.h:63
DataChunks dataChunks
Definition: EscriptDataset.h:40
int mpiSize
Definition: EscriptDataset.h:180
void setSaveMeshData(bool flag)
Enables/Disables saving of mesh-related data.
Definition: EscriptDataset.h:133
int MPI_Comm
Definition: EsysMPI.h:41
std::string varName
Definition: EscriptDataset.h:38
Represents an escript dataset including a domain and data variables for one timestep.
Definition: EscriptDataset.h:62
std::vector< DataVar_ptr > DataChunks
Definition: EscriptDataset.h:34
const VarVector & getVariables() const
Returns a vector with the dataset&#39;s variables.
Definition: EscriptDataset.h:145
bool wantsMeshVars
Definition: EscriptDataset.h:177
Base class for all escript domains.
Definition: AbstractDomain.h:45
void setCycleAndTime(int c, double t)
Sets the cycle number and time value for this dataset.
Definition: EscriptDataset.h:110
Definition: EscriptDataset.h:37
double time
Definition: EscriptDataset.h:174
#define WEIPA_DLL_API
Definition: weipa.h:37
std::vector< VarInfo > VarVector
Definition: EscriptDataset.h:45
double getTime() const
Returns the time value.
Definition: EscriptDataset.h:116
void setMetadataSchemaString(const std::string schema, const std::string metadata)
Sets a metadata schema and content.
Definition: EscriptDataset.h:128
std::string mdString
Definition: EscriptDataset.h:175