Branch data Line data Source code
1 : : #ifndef READIDEAS_HPP
2 : : #define READIDEAS_HPP
3 : :
4 : : #ifndef IS_BUILDING_MB
5 : : #error "ReadIDEAS.hpp isn't supposed to be included into an application"
6 : : #endif
7 : :
8 : : #include <iostream>
9 : : #include <fstream>
10 : : #include <vector>
11 : :
12 : : #include "moab/ReaderIface.hpp"
13 : : #include "moab/Interface.hpp"
14 : : #include "moab/RangeMap.hpp"
15 : :
16 : : #define MAT_PROP_TABLE_TAG "mat_prop_table"
17 : : #define PHYS_PROP_TABLE_TAG "phys_prop_table"
18 : :
19 : : namespace moab
20 : : {
21 : :
22 : : class ReadUtilIface;
23 : :
24 : : class ReadIDEAS : public ReaderIface
25 : : {
26 : :
27 : : public:
28 : : static ReaderIface* factory( Interface* );
29 : :
30 : : ErrorCode load_file( const char* file_name, const EntityHandle* file_set, const FileOptions& opts,
31 : : const SubsetList* subset_list = 0, const Tag* file_id_tag = 0 );
32 : :
33 : : ErrorCode read_tag_values( const char* file_name, const char* tag_name, const FileOptions& opts,
34 : : std::vector< int >& tag_values_out, const SubsetList* subset_list = 0 );
35 : :
36 : : //! Constructor
37 : : ReadIDEAS( Interface* impl = NULL );
38 : :
39 : : //! Destructor
40 [ - + ]: 4 : virtual ~ReadIDEAS() {}
41 : :
42 : : protected:
43 : : ErrorCode skip_header();
44 : : ErrorCode create_vertices( EntityHandle& first_vertex, const Tag* file_id_tag );
45 : : ErrorCode create_elements( EntityHandle first_vertex, const Tag* file_id_tag );
46 : :
47 : : private:
48 : : std::ifstream file;
49 : : RangeMap< int, EntityHandle > nodeIdMap;
50 : :
51 : : // Read mesh interface
52 : : ReadUtilIface* readMeshIface;
53 : :
54 : : // MOAB Interface
55 : : Interface* MBI;
56 : :
57 : : /* Universal dataset numbers
58 : : An integer describes a chunk of information. These chunks include headers,
59 : : units, nodes, elements, patches, etc... described in the OpenFOAM IDEAS
60 : : reader.
61 : :
62 : : 1) http://amira.zib.de/usersguide31/hxideas/HxFileFormat_IDEAS.html
63 : : 55,2414 data at nodes
64 : :
65 : : 2) http://www.sdrl.uc.edu/universal-file-formats-for-modal-analysis-testing-1
66 : : /file-format-storehouse/unv_0015.htm/
67 : : 15 nodes with single precision coordinates
68 : : line1 (4I10,1P3E13.5): node_label coord_sys_num displacement_sys_num
69 : : color x y z */
70 : : static const unsigned SINGLE_PRECISION_NODES = 15;
71 : :
72 : : /* 3) http://www.sdrl.uc.edu/pdf/test_universal_file_formats.pdf
73 : : 781,2411 nodes with double precision coordinates
74 : : line1 (4I10): node_label coord_sys_num displacement_sys_num color
75 : : line2 (1P3D25.16): x y z */
76 : : static const unsigned DOUBLE_PRECISION_NODES0 = 781;
77 : : static const unsigned DOUBLE_PRECISION_NODES1 = 2411;
78 : :
79 : : /* 4) http://www.sdrl.uc.edu/universal-file-formats-for-modal-analysis-testing-1
80 : : /file-format-storehouse/unv_0780.htm/
81 : : 71, 780, 2412 element definitions
82 : : line1 (8I10): element_label fe_id phys_prop_bin_num phys_prop_num
83 : : mat_prop_bin_num mat_prop_num color num_of_nodes
84 : : line2 (8I10): connectivity_node_labels */
85 : : static const unsigned ELEMENTS0 = 71;
86 : : static const unsigned ELEMENTS1 = 780;
87 : : static const unsigned ELEMENTS2 = 2412;
88 : :
89 : : /* Mesh elements exist inside chunks 71, 780, and 2412. Each element definition
90 : : includes the finite element id that describes the element type. These are
91 : : used in the OpenFOAM IDEAS reader. The canonical node ordering matches that
92 : : of MBCN, as suggested by the Gmsh 2.2.3 source code.*/
93 : : static const int ROD0 = 11;
94 : : static const int ROD1 = 171;
95 : : static const int TRI0 = 41;
96 : : static const int TRI1 = 91;
97 : : static const int QUAD0 = 44;
98 : : static const int QUAD1 = 94;
99 : : static const int TET = 111;
100 : : static const int WEDGE = 112;
101 : : static const int HEX = 115;
102 : : };
103 : :
104 : : } // namespace moab
105 : : #endif
|