ESYS13
Revision_
|
00001 00002 /******************************************************* 00003 * 00004 * Copyright (c) 2003-2012 by University of Queensland 00005 * Earth Systems Science Computational Center (ESSCC) 00006 * http://www.uq.edu.au/esscc 00007 * 00008 * Primary Business: Queensland, Australia 00009 * Licensed under the Open Software License version 3.0 00010 * http://www.opensource.org/licenses/osl-3.0.php 00011 * 00012 *******************************************************/ 00013 00014 #ifndef __WEIPA_FINLEYNODES_H__ 00015 #define __WEIPA_FINLEYNODES_H__ 00016 00017 #include <weipa/NodeData.h> 00018 00019 class DBfile; 00020 class NcFile; 00021 struct Dudley_NodeFile; 00022 struct Finley_NodeFile; 00023 00024 namespace weipa { 00025 00026 class FinleyNodes; 00027 typedef boost::shared_ptr<FinleyNodes> FinleyNodes_ptr; 00028 00034 class FinleyNodes : public NodeData 00035 { 00036 public: 00038 FinleyNodes(const std::string& meshName); 00039 00040 FinleyNodes(FinleyNodes_ptr fullNodes, IntVec& requiredNodes, 00041 const std::string& meshName); 00042 00044 FinleyNodes(const FinleyNodes& m); 00045 00047 virtual ~FinleyNodes(); 00048 00050 bool initFromDudley(const Dudley_NodeFile* dudleyFile); 00051 00053 bool initFromFinley(const Finley_NodeFile* finleyFile); 00054 00056 bool readFromNc(NcFile* ncFile); 00057 00059 bool writeToSilo(DBfile* dbfile); 00060 00062 virtual void writeCoordinatesVTK(std::ostream& os, int ownIndex); 00063 00065 void setSiloPath(const std::string& path) { siloPath = path; } 00066 00070 const IntVec& getVarDataByName(const std::string& name) const; 00071 00073 virtual StringVec getVarNames() const; 00074 00076 virtual std::string getName() const { return name; } 00077 00079 std::string getFullSiloName() const; 00080 00082 virtual const IntVec& getNodeIDs() const { return nodeID; } 00083 00085 virtual const IntVec& getNodeDistribution() const { return nodeDist; } 00086 00088 virtual const IntVec& getGlobalNodeIndices() const { return nodeGNI; } 00089 00091 virtual const CoordArray& getCoords() const { return coords; } 00092 00094 virtual int getNumDims() const { return numDims; } 00095 00097 virtual int getNumNodes() const { return numNodes; } 00098 00100 virtual int getGlobalNumNodes() const; 00101 00102 protected: 00103 CoordArray coords; 00104 int numDims; 00105 int numNodes; 00106 IntVec nodeID; 00107 IntVec nodeTag, nodeGDOF, nodeGNI, nodeGRDFI, nodeGRNI; 00108 IntVec nodeDist; 00109 std::string name; 00110 std::string siloPath; 00111 }; 00112 00113 00114 inline std::string FinleyNodes::getFullSiloName() const 00115 { 00116 std::string result(siloPath); 00117 if (result.length() == 0 || *result.rbegin() != '/') 00118 result += '/'; 00119 result += name; 00120 return result; 00121 } 00122 00123 } // namespace weipa 00124 00125 #endif // __WEIPA_FINLEYNODES_H__ 00126