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
25class DBfile;
26
27namespace escript {
28 class AbstractDomain;
29 class Data;
30}
31
32
33namespace weipa {
34
35typedef std::vector<DataVar_ptr> DataChunks;
36typedef std::vector<DomainChunk_ptr> DomainChunks;
37
38struct VarInfo {
39 std::string varName;
40 std::string units;
43 bool valid;
44};
45
46typedef std::vector<VarInfo> VarVector;
47
48
51//
64{
65public:
68
69#if WEIPA_HAVE_MPI
72#endif
73
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
153#else
154 void*
155#endif
156 getMPIComm() { return mpiComm; }
157
158private:
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;
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
const VarVector & getVariables() const
Returns a vector with the dataset's variables.
Definition: EscriptDataset.h:146
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
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
void * getMPIComm()
Definition: EscriptDataset.h:156
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