ESYS13  Revision_
FinleyNodes.h
Go to the documentation of this file.
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