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