|
FEBio
1.5.0
|
00001 #pragma once 00002 #include "FEElasticShellDomain.h" 00003 #include "FEElasticSolidDomain.h" 00004 #include "FEElasticTrussDomain.h" 00005 #include "FEDiscreteDomain.h" 00006 #include "PlotFile.h" 00007 #include "Archive.h" 00008 #include <list> 00009 using namespace std; 00010 00011 //----------------------------------------------------------------------------- 00015 class FEBioPlotFile : public PlotFile 00016 { 00017 protected: 00018 // file version 00019 enum { PLT_VERSION = 0x0001 }; 00020 00021 // file tags 00022 enum { 00023 PLT_ROOT = 0x01000000, 00024 PLT_HEADER = 0x01010000, 00025 PLT_HDR_VERSION = 0x01010001, 00026 PLT_HDR_NODES = 0x01010002, 00027 PLT_DICTIONARY = 0x01020000, 00028 PLT_DIC_ITEM = 0x01020001, 00029 PLT_DIC_ITEM_TYPE = 0x01020002, 00030 PLT_DIC_ITEM_FMT = 0x01020003, 00031 PLT_DIC_ITEM_NAME = 0x01020004, 00032 PLT_DIC_GLOBAL = 0x01021000, 00033 PLT_DIC_MATERIAL = 0x01022000, 00034 PLT_DIC_NODAL = 0x01023000, 00035 PLT_DIC_DOMAIN = 0x01024000, 00036 PLT_DIC_SURFACE = 0x01025000, 00037 PLT_MATERIALS = 0x01030000, 00038 PLT_MATERIAL = 0x01030001, 00039 PLT_MAT_ID = 0x01030002, 00040 PLT_MAT_NAME = 0x01030003, 00041 PLT_GEOMETRY = 0x01040000, 00042 PLT_NODE_SECTION = 0x01041000, 00043 PLT_NODE_COORDS = 0x01041001, 00044 PLT_DOMAIN_SECTION = 0x01042000, 00045 PLT_DOMAIN = 0x01042100, 00046 PLT_DOMAIN_HDR = 0x01042101, 00047 PLT_DOM_ELEM_TYPE = 0x01042102, 00048 PLT_DOM_MAT_ID = 0x01042103, 00049 PLT_DOM_ELEMS = 0x01032104, 00050 PLT_DOM_ELEM_LIST = 0x01042200, 00051 PLT_ELEMENT = 0x01042201, 00052 PLT_SURFACE_SECTION = 0x01043000, 00053 PLT_SURFACE = 0x01043100, 00054 PLT_SURFACE_HDR = 0x01043101, 00055 PLT_SURFACE_ID = 0x01043102, 00056 PLT_SURFACE_FACES = 0x01043103, 00057 PLT_FACE_LIST = 0x01043200, 00058 PLT_FACE = 0x01043201, 00059 PLT_STATE = 0x02000000, 00060 PLT_STATE_HEADER = 0x02010000, 00061 PLT_STATE_HDR_ID = 0x02010001, 00062 PLT_STATE_HDR_TIME = 0x02010002, 00063 PLT_STATE_DATA = 0x02020000, 00064 PLT_STATE_VARIABLE = 0x02020001, 00065 PLT_STATE_VAR_ID = 0x02020002, 00066 PLT_STATE_VAR_DATA = 0x02020003, 00067 PLT_GLOBAL_DATA = 0x02020100, 00068 PLT_MATERIAL_DATA = 0x02020200, 00069 PLT_NODE_DATA = 0x02020300, 00070 PLT_ELEMENT_DATA = 0x02020400, 00071 PLT_FACE_DATA = 0x02020500 00072 }; 00073 00074 // --- element types --- 00075 enum Elem_Type { PLT_ELEM_HEX, PLT_ELEM_PENTA, PLT_ELEM_TET, PLT_ELEM_QUAD, PLT_ELEM_TRI, PLT_ELEM_TRUSS }; 00076 00077 // size of name variables 00078 enum { STR_SIZE = 64 }; 00079 00080 public: 00081 // Dictionary entry 00082 struct DICTIONARY_ITEM 00083 { 00084 FEPlotData* m_psave; 00085 unsigned int m_ntype; // data type 00086 unsigned int m_nfmt; // storage format 00087 char m_szname[STR_SIZE]; 00088 }; 00089 00090 class Dictionary 00091 { 00092 public: 00093 bool AddVariable(const char* szname); 00094 00095 int NodalVariables () { return m_Node.size(); } 00096 int DomainVarialbes () { return m_Elem.size(); } 00097 int SurfaceVariables() { return m_Face.size(); } 00098 00099 void Defaults(FEM& fem); 00100 00101 void Clear(); 00102 00103 public: 00104 const list<DICTIONARY_ITEM>& GlobalVariableList () const { return m_Glob; } 00105 const list<DICTIONARY_ITEM>& MaterialVariableList() const { return m_Mat; } 00106 const list<DICTIONARY_ITEM>& NodalVariableList () const { return m_Node; } 00107 const list<DICTIONARY_ITEM>& DomainVariableList () const { return m_Elem; } 00108 const list<DICTIONARY_ITEM>& SurfaceVariableList () const { return m_Face; } 00109 00110 protected: 00111 bool AddGlobalVariable (FEPlotData* ps, const char* szname); 00112 bool AddMaterialVariable(FEPlotData* ps, const char* szname); 00113 bool AddNodalVariable (FEPlotData* ps, const char* szname); 00114 bool AddDomainVariable (FEPlotData* ps, const char* szname); 00115 bool AddSurfaceVariable (FEPlotData* ps, const char* szname); 00116 00117 protected: 00118 list<DICTIONARY_ITEM> m_Glob; // Global variables 00119 list<DICTIONARY_ITEM> m_Mat; // Material variables 00120 list<DICTIONARY_ITEM> m_Node; // Node variables 00121 list<DICTIONARY_ITEM> m_Elem; // Domain variables 00122 list<DICTIONARY_ITEM> m_Face; // Surface variables 00123 00124 friend class FEBioPlotFile; 00125 }; 00126 00127 public: 00128 FEBioPlotFile(void); 00129 ~FEBioPlotFile(void); 00130 00132 bool Open(FEM& fem, const char* szfile); 00133 00135 bool Append(FEM& fem, const char* szfile); 00136 00138 bool Write(FEM& fem); 00139 00141 bool AddVariable(const char* sz) { return m_dic.AddVariable(sz); } 00142 00143 public: 00144 const Dictionary& GetDictionary() const { return m_dic; } 00145 00146 protected: 00147 bool WriteHeader (FEM& fem); 00148 bool WriteDictionary(FEM& fem); 00149 bool WriteMaterials (FEM& fem); 00150 bool WriteGeometry (FEM& fem); 00151 00152 void WriteDicList(list<DICTIONARY_ITEM>& dic); 00153 00154 void WriteNodeSection (FEMesh& m); 00155 void WriteDomainSection (FEMesh& m); 00156 void WriteSurfaceSection(FEMesh& m); 00157 00158 void WriteSolidDomain (FESolidDomain& dom); 00159 void WriteShellDomain (FEShellDomain& dom); 00160 void WriteTrussDomain (FETrussDomain& dom); 00161 void WriteDiscreteDomain(FEDiscreteDomain& dom); 00162 00163 void WriteGlobalData (FEM& fem); 00164 void WriteMaterialData(FEM& fem); 00165 void WriteNodeData (FEM& fem); 00166 void WriteDomainData (FEM& fem); 00167 void WriteSurfaceData (FEM& fem); 00168 00169 protected: 00170 bool ReadDictionary(); 00171 bool ReadDicList(); 00172 00173 protected: 00174 Dictionary m_dic; // dictionary 00175 Archive m_ar; // the data archive 00176 };
1.7.5.1