![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef READIDEAS_HPP
00002 #define READIDEAS_HPP
00003
00004 #ifndef IS_BUILDING_MB
00005 #error "ReadIDEAS.hpp isn't supposed to be included into an application"
00006 #endif
00007
00008 #include
00009 #include
00010 #include
00011
00012 #include "moab/ReaderIface.hpp"
00013 #include "moab/Interface.hpp"
00014 #include "moab/RangeMap.hpp"
00015
00016 #define MAT_PROP_TABLE_TAG "mat_prop_table"
00017 #define PHYS_PROP_TABLE_TAG "phys_prop_table"
00018
00019 namespace moab
00020 {
00021
00022 class ReadUtilIface;
00023
00024 class ReadIDEAS : public ReaderIface
00025 {
00026
00027 public:
00028 static ReaderIface* factory( Interface* );
00029
00030 ErrorCode load_file( const char* file_name,
00031 const EntityHandle* file_set,
00032 const FileOptions& opts,
00033 const SubsetList* subset_list = 0,
00034 const Tag* file_id_tag = 0 );
00035
00036 ErrorCode read_tag_values( const char* file_name,
00037 const char* tag_name,
00038 const FileOptions& opts,
00039 std::vector< int >& tag_values_out,
00040 const SubsetList* subset_list = 0 );
00041
00042 //! Constructor
00043 ReadIDEAS( Interface* impl = NULL );
00044
00045 //! Destructor
00046 virtual ~ReadIDEAS() {}
00047
00048 protected:
00049 ErrorCode skip_header();
00050 ErrorCode create_vertices( EntityHandle& first_vertex, const Tag* file_id_tag );
00051 ErrorCode create_elements( EntityHandle first_vertex, const Tag* file_id_tag );
00052
00053 private:
00054 std::ifstream file;
00055 RangeMap< int, EntityHandle > nodeIdMap;
00056
00057 // Read mesh interface
00058 ReadUtilIface* readMeshIface;
00059
00060 // MOAB Interface
00061 Interface* MBI;
00062
00063 /* Universal dataset numbers
00064 An integer describes a chunk of information. These chunks include headers,
00065 units, nodes, elements, patches, etc... described in the OpenFOAM IDEAS
00066 reader.
00067
00068 1) http://amira.zib.de/usersguide31/hxideas/HxFileFormat_IDEAS.html
00069 55,2414 data at nodes
00070
00071 2) http://www.sdrl.uc.edu/universal-file-formats-for-modal-analysis-testing-1
00072 /file-format-storehouse/unv_0015.htm/
00073 15 nodes with single precision coordinates
00074 line1 (4I10,1P3E13.5): node_label coord_sys_num displacement_sys_num
00075 color x y z */
00076 static const unsigned SINGLE_PRECISION_NODES = 15;
00077
00078 /* 3) http://www.sdrl.uc.edu/pdf/test_universal_file_formats.pdf
00079 781,2411 nodes with double precision coordinates
00080 line1 (4I10): node_label coord_sys_num displacement_sys_num color
00081 line2 (1P3D25.16): x y z */
00082 static const unsigned DOUBLE_PRECISION_NODES0 = 781;
00083 static const unsigned DOUBLE_PRECISION_NODES1 = 2411;
00084
00085 /* 4) http://www.sdrl.uc.edu/universal-file-formats-for-modal-analysis-testing-1
00086 /file-format-storehouse/unv_0780.htm/
00087 71, 780, 2412 element definitions
00088 line1 (8I10): element_label fe_id phys_prop_bin_num phys_prop_num
00089 mat_prop_bin_num mat_prop_num color num_of_nodes
00090 line2 (8I10): connectivity_node_labels */
00091 static const unsigned ELEMENTS0 = 71;
00092 static const unsigned ELEMENTS1 = 780;
00093 static const unsigned ELEMENTS2 = 2412;
00094
00095 /* Mesh elements exist inside chunks 71, 780, and 2412. Each element definition
00096 includes the finite element id that describes the element type. These are
00097 used in the OpenFOAM IDEAS reader. The canonical node ordering matches that
00098 of MBCN, as suggested by the Gmsh 2.2.3 source code.*/
00099 static const int ROD0 = 11;
00100 static const int ROD1 = 171;
00101 static const int TRI0 = 41;
00102 static const int TRI1 = 91;
00103 static const int QUAD0 = 44;
00104 static const int QUAD1 = 94;
00105 static const int TET = 111;
00106 static const int WEDGE = 112;
00107 static const int HEX = 115;
00108 };
00109
00110 } // namespace moab
00111 #endif