00001 00026 #ifndef _FEMAP_H 00027 #define _FEMAP_H 00028 00029 #include <iostream> 00030 #include <fstream> 00031 #include <string> 00032 #include <vector> 00033 #include <map> 00034 00035 #include <cstring> 00036 #include <cstdlib> 00037 #include <cstdio> 00038 #include <cmath> 00039 00040 #include "FemapData.h" 00041 00042 class Femap { 00043 public: 00044 size_t getNumMaterials() const { return _materials.size(); }; 00045 size_t getNumProperties() const { return _properties.size(); }; 00046 size_t getNumNodes() const { return _nodes.size(); }; 00047 size_t getNumElements() const { return _elements.size(); }; 00050 size_t getNumElements(size_t t) const ; 00051 size_t getNumConstraintSets() const { return _constraintSets.size(); }; 00052 size_t getNumLoadSets() const { return _loadSets.size(); }; 00053 size_t getNumGroups() const { return _groups.size(); }; 00054 00055 const std::vector<femapMaterial>& getMaterials() const { return _materials; }; 00056 const std::vector<femapProperty>& getProperties() const { return _properties; }; 00057 const std::vector<femapNode>& getNodes() const { return _nodes; }; 00058 const std::vector<femapElement>& getElements() const { return _elements; }; 00059 const std::vector<femapConstraintSet>& getConstraintSets() const { return _constraintSets; }; 00060 const std::vector<femapLoadSet>& getLoadSets() const { return _loadSets; }; 00061 const std::vector<femapGroup>& getGroups() const { return _groups; }; 00062 00066 void getElements(size_t t, std::vector<femapElement>& vout) const ; // gets elements with topology t 00067 00068 const femapMaterial& getMaterial(size_t i) const { return _materials[i]; }; 00069 const femapProperty& getProperty(size_t i) const { return _properties[i]; }; 00070 const femapNode& getNode(size_t i) const { return _nodes[i]; }; 00071 const femapElement& getElement(size_t i) const { return _elements[i]; }; 00072 const femapConstraintSet& getConstraintSet(size_t i) const { return _constraintSets[i]; }; 00073 const femapLoadSet& getLoadSet(size_t i) const { return _loadSets[i]; }; 00074 const femapGroup& getGroup(size_t i) const { return _groups[i]; }; 00075 00076 int getMaterialId(size_t i) const { return _materialIdMap.at (i); }; 00077 int getPropertyId(size_t i) const { return _propertyIdMap.at (i); }; 00078 int getNodeId(size_t i) const { return _nodeIdMap.at (i); }; 00079 int getElementId(size_t i) const { return _elementIdMap.at (i); }; 00080 int getConstraintSetId(size_t i) const { return _constraintSetIdMap.at (i); }; 00081 int getLoadSetId(size_t i) const { return _loadSetIdMap.at (i); }; 00082 int getGroupId(size_t i) const { return _groupIdMap.at (i); }; 00083 00084 00085 protected: 00086 std::vector<femapMaterial> _materials; 00087 std::vector<femapProperty> _properties; 00088 std::vector<femapNode> _nodes; 00089 std::vector<femapElement> _elements; 00090 std::vector<femapGroup> _groups; 00091 std::vector<femapConstraintSet> _constraintSets; 00092 std::vector<femapLoadSet> _loadSets; 00093 00094 std::map<size_t,size_t> _materialIdMap; 00095 std::map<size_t,size_t> _propertyIdMap; 00096 std::map<size_t,size_t> _nodeIdMap; 00097 std::map<size_t,size_t> _elementIdMap; 00098 std::map<size_t,size_t> _groupIdMap; 00099 std::map<size_t,size_t> _constraintSetIdMap; 00100 std::map<size_t,size_t> _loadSetIdMap; 00101 00102 private: 00103 00104 }; 00105 00106 class FemapInput : public Femap { 00107 public: 00108 FemapInput(const char* fileName); 00109 00110 00111 00112 private: 00113 std::ifstream _ifs; 00114 00115 void _readHeader(); 00116 void _readProperty(); 00117 void _readNodes(); 00118 void _readElements(); 00119 void _readGroups(); 00120 void _readConstraints(); 00121 void _readLoads(); 00122 void _readMaterial(); 00123 // MO 1/9/01 begin 00124 //void nextLine(int=1); 00125 void nextLine(int); 00126 void nextLine(); 00127 // MO 1/9/01 end 00128 }; 00129 00130 class FemapOutput : public Femap { 00131 public: 00132 FemapOutput(const char* fileName) : _ofs(fileName) {} 00133 00134 private: 00135 std::ofstream _ofs; 00136 }; 00137 #endif //_FEMAP_H