escript  Revision_
FinleyNodes.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2018 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_FINLEYNODES_H__
18 #define __WEIPA_FINLEYNODES_H__
19 
20 #include <weipa/NodeData.h>
21 
22 class DBfile;
23 
24 #ifdef NETCDF4
25 #include <ncFile.h>
26 #define NCFTYPE netCDF::NcFile&
27 
28 #else
29 class NcFile;
30 #define NCFTYPE NcFile*
31 #endif
32 
33 namespace finley {
34  class NodeFile;
35 }
36 namespace dudley {
37  class NodeFile;
38 }
39 
40 namespace weipa {
41 
42 class FinleyNodes;
43 typedef boost::shared_ptr<FinleyNodes> FinleyNodes_ptr;
44 
50 class FinleyNodes : public NodeData
51 {
52 public:
54  FinleyNodes(const std::string& meshName);
55 
56  FinleyNodes(FinleyNodes_ptr fullNodes, IntVec& requiredNodes,
57  const std::string& meshName);
58 
60  FinleyNodes(const FinleyNodes& m);
61 
63  virtual ~FinleyNodes();
64 
66  bool initFromDudley(const dudley::NodeFile* dudleyFile);
67 
69  bool initFromFinley(const finley::NodeFile* finleyFile);
70 
72  bool readFromNc(NCFTYPE ncFile);
73 
75  bool writeToSilo(DBfile* dbfile);
76 
78  virtual void writeCoordinatesVTK(std::ostream& os, int ownIndex);
79 
81  void setSiloPath(const std::string& path) { siloPath = path; }
82 
86  const IntVec& getVarDataByName(const std::string& name) const;
87 
89  virtual StringVec getVarNames() const;
90 
92  virtual std::string getName() const { return name; }
93 
95  std::string getFullSiloName() const;
96 
98  virtual const IntVec& getNodeIDs() const { return nodeID; }
99 
101  virtual const IntVec& getNodeDistribution() const { return nodeDist; }
102 
104  virtual const IntVec& getGlobalNodeIndices() const { return nodeGNI; }
105 
107  virtual const CoordArray& getCoords() const { return coords; }
108 
110  virtual int getNumDims() const { return numDims; }
111 
113  virtual int getNumNodes() const { return numNodes; }
114 
116  virtual int getGlobalNumNodes() const;
117 
118 protected:
120  int numDims;
121  int numNodes;
125  std::string name;
126  std::string siloPath;
127 };
128 
129 
130 inline std::string FinleyNodes::getFullSiloName() const
131 {
132  std::string result(siloPath);
133  if (result.length() == 0 || *result.rbegin() != '/')
134  result += '/';
135  result += name;
136  return result;
137 }
138 
139 } // namespace weipa
140 
141 #undef NCFTYPE
142 #endif // __WEIPA_FINLEYNODES_H__
143 
dudley::NodeFile::globalDegreesOfFreedom
index_t * globalDegreesOfFreedom
Definition: dudley/src/NodeFile.h:155
weipa::FinleyNodes::getNumNodes
virtual int getNumNodes() const
Returns the number of mesh nodes.
Definition: FinleyNodes.h:112
weipa::FinleyNodes::getVarDataByName
const IntVec & getVarDataByName(const std::string &name) const
Returns an array of nodal data by the given name.
Definition: FinleyNodes.cpp:395
finley::NodeFile::globalReducedNodesIndex
index_t * globalReducedNodesIndex
Definition: finley/src/NodeFile.h:179
weipa::FinleyNodes::initFromDudley
bool initFromDudley(const dudley::NodeFile *dudleyFile)
Initialises with dudley node file.
Definition: FinleyNodes.cpp:140
weipa::FinleyNodes::nodeDist
IntVec nodeDist
Definition: FinleyNodes.h:123
dudley::NodeFile::nodesDistribution
escript::Distribution_ptr nodesDistribution
MPI distribution of nodes.
Definition: dudley/src/NodeFile.h:162
dudley::NodeFile::numDim
int numDim
number of spatial dimensions
Definition: dudley/src/NodeFile.h:144
dudley::NodeFile
Definition: dudley/src/NodeFile.h:37
finley::NodeFile::globalDegreesOfFreedom
index_t * globalDegreesOfFreedom
Definition: finley/src/NodeFile.h:171
weipa::FinleyNodes::getName
virtual std::string getName() const
Returns the name of this node mesh.
Definition: FinleyNodes.h:91
finley::NodeFile::Tag
int * Tag
Tag[i] is the tag of node i.
Definition: finley/src/NodeFile.h:164
finley::NodeFile::nodesDistribution
escript::Distribution_ptr nodesDistribution
MPI distribution of nodes.
Definition: finley/src/NodeFile.h:184
dudley::NodeFile::getNumNodes
dim_t getNumNodes() const
returns the number of FEM nodes (on this rank)
Definition: dudley/src/NodeFile.h:202
finley::NodeFile::globalReducedDOFIndex
index_t * globalReducedDOFIndex
Definition: finley/src/NodeFile.h:176
weipa::FinleyNodes::writeCoordinatesVTK
virtual void writeCoordinatesVTK(std::ostream &os, int ownIndex)
Writes coordinates to a stream in VTK text format.
Definition: FinleyNodes.cpp:442
weipa::FinleyNodes::nodeGNI
IntVec nodeGNI
Definition: FinleyNodes.h:122
weipa::FinleyNodes::siloPath
std::string siloPath
the name of this node mesh
Definition: FinleyNodes.h:125
weipa::FinleyNodes::readFromNc
bool readFromNc(NcFile *ncFile)
Reads node data from a NetCDF file.
Definition: FinleyNodes.cpp:318
weipa::FinleyNodes::getGlobalNumNodes
virtual int getGlobalNumNodes() const
Returns the total number of mesh nodes for a distributed mesh.
Definition: FinleyNodes.cpp:431
weipa
Definition: DataVar.cpp:49
finley::NodeFile::getNumNodes
dim_t getNumNodes() const
returns the number of FEM nodes (on this rank)
Definition: finley/src/NodeFile.h:254
paso::util::copy
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:110
finley::NodeFile::Coordinates
double * Coordinates
Coordinates[INDEX2(k,i,numDim)] is the k-th coordinate of node i.
Definition: finley/src/NodeFile.h:173
weipa::NodeData
Definition: NodeData.h:37
dudley
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:31
weipa::FinleyNodes::nodeGDOF
IntVec nodeGDOF
Definition: FinleyNodes.h:122
weipa::FinleyNodes::nodeTag
IntVec nodeTag
node IDs
Definition: FinleyNodes.h:122
weipa::IndexMap
std::map< int, size_t > IndexMap
Definition: weipa.h:61
weipa::CoordArray
std::vector< float * > CoordArray
Definition: weipa.h:60
weipa::FinleyNodes::getGlobalNodeIndices
virtual const IntVec & getGlobalNodeIndices() const
Returns the global node index array.
Definition: FinleyNodes.h:103
weipa::FinleyNodes::initFromFinley
bool initFromFinley(const finley::NodeFile *finleyFile)
Initialises with finley node file.
Definition: FinleyNodes.cpp:187
finley::NodeFile::Id
index_t * Id
Id[i] is the unique ID number of FEM node i.
Definition: finley/src/NodeFile.h:162
weipa::FinleyNodes::~FinleyNodes
virtual ~FinleyNodes()
Virtual destructor.
Definition: FinleyNodes.cpp:130
weipa::FinleyNodes::nodeID
IntVec nodeID
number of nodes
Definition: FinleyNodes.h:121
weipa::FinleyNodes::getFullSiloName
std::string getFullSiloName() const
Returns full Silo mesh name, e.g. "/block0000/Nodes".
Definition: FinleyNodes.h:129
weipa::FinleyNodes::getNumDims
virtual int getNumDims() const
Returns the dimensionality of this mesh (2 or 3).
Definition: FinleyNodes.h:109
weipa::FinleyNodes::numNodes
int numNodes
dimensionality (2 or 3)
Definition: FinleyNodes.h:120
weipa::FinleyNodes::writeToSilo
bool writeToSilo(DBfile *dbfile)
Writes node data to a Silo file.
Definition: FinleyNodes.cpp:463
weipa::FinleyNodes::setSiloPath
void setSiloPath(const std::string &path)
Sets the silo path to be used when saving.
Definition: FinleyNodes.h:80
weipa::FinleyNodes::getCoords
virtual const CoordArray & getCoords() const
Returns the coordinates of the mesh nodes.
Definition: FinleyNodes.h:106
weipa::FinleyNodes::numDims
int numDims
x, y[, z] coordinates of nodes
Definition: FinleyNodes.h:119
NCFTYPE
#define NCFTYPE
Definition: FinleyNodes.h:29
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:82
weipa::FinleyNodes::getNodeIDs
virtual const IntVec & getNodeIDs() const
Returns the node ID array.
Definition: FinleyNodes.h:97
weipa::FinleyNodes::coords
CoordArray coords
Definition: FinleyNodes.h:118
finley::NodeFile
Definition: finley/src/NodeFile.h:39
weipa::FinleyNodes::nodeGRDFI
IntVec nodeGRDFI
Definition: FinleyNodes.h:122
weipa::FinleyNodes::name
std::string name
node distribution
Definition: FinleyNodes.h:124
weipa::FinleyNodes::FinleyNodes
FinleyNodes(const std::string &meshName)
Constructor with mesh name.
Definition: FinleyNodes.cpp:53
weipa::StringVec
std::vector< std::string > StringVec
Definition: weipa.h:59
finley::NodeFile::globalNodesIndex
index_t * globalNodesIndex
assigns each local node a global unique ID in a dense labeling
Definition: finley/src/NodeFile.h:181
dudley::NodeFile::Id
index_t * Id
Id[i] is the unique ID number of FEM node i.
Definition: dudley/src/NodeFile.h:146
dudley::NodeFile::Tag
int * Tag
Tag[i] is the tag of node i.
Definition: dudley/src/NodeFile.h:148
weipa::FinleyNodes
Stores and manipulates finley mesh nodes.
Definition: FinleyNodes.h:49
weipa::FinleyNodes_ptr
boost::shared_ptr< FinleyNodes > FinleyNodes_ptr
Definition: FinleyNodes.h:41
weipa::FinleyNodes::getNodeDistribution
virtual const IntVec & getNodeDistribution() const
Returns the node distribution array.
Definition: FinleyNodes.h:100
weipa::FinleyNodes::getVarNames
virtual StringVec getVarNames() const
Returns a vector with the mesh variable names.
Definition: FinleyNodes.cpp:416
weipa::IntVec
std::vector< int > IntVec
Definition: weipa.h:58
finley
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:31
finley::NodeFile::numDim
int numDim
number of spatial dimensions
Definition: finley/src/NodeFile.h:160
dudley::NodeFile::Coordinates
double * Coordinates
Coordinates[INDEX2(k,i,numDim)] is the k-th coordinate of node i.
Definition: dudley/src/NodeFile.h:157
weipa::FinleyNodes::nodeGRNI
IntVec nodeGRNI
Definition: FinleyNodes.h:122
dudley::NodeFile::globalNodesIndex
index_t * globalNodesIndex
assigns each local node a global unique ID in a dense labeling
Definition: dudley/src/NodeFile.h:159