![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /**
00002 * MOAB, a Mesh-Oriented datABase, is a software component for creating,
00003 * storing and accessing finite element mesh data.
00004 *
00005 * Copyright 2004 Sandia Corporation. Under the terms of Contract
00006 * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00007 * retains certain rights in this software.
00008 *
00009 * This library is free software; you can redistribute it and/or
00010 * modify it under the terms of the GNU Lesser General Public
00011 * License as published by the Free Software Foundation; either
00012 * version 2.1 of the License, or (at your option) any later version.
00013 *
00014 */
00015
00016 #ifndef WRITE_CGNS_HPP
00017 #define WRITE_CGNS_HPP
00018
00019 #include "moab/Forward.hpp"
00020 #include "moab/WriterIface.hpp"
00021 #include
00022
00023 // Junior
00024 #include "cgnslib.h"
00025 #include "moab/Range.hpp"
00026
00027 // Junior
00028 #if CGNS_VERSION < 3100
00029 #define cgsize_t int
00030 #else
00031 #if CG_BUILD_SCOPE
00032 #error enumeration scoping needs to be off
00033 #endif
00034 #endif
00035
00036 namespace moab
00037 {
00038
00039 class WriteUtilIface;
00040
00041 /**
00042 * \brief Export CGNS files.
00043 * \author Carlos Junqueira Junior
00044 */
00045
00046 class WriteCGNS : public WriterIface
00047 {
00048
00049 public:
00050 //! factory method
00051 static WriterIface* factory( Interface* );
00052
00053 //! Constructor
00054 WriteCGNS( Interface* impl );
00055
00056 //! Destructor
00057 virtual ~WriteCGNS();
00058
00059 // A structure to store Set information.
00060 class SetStruct
00061 {
00062 public:
00063 std::string TagName; // Tag name
00064 cgsize_t IdSet; // Id of the Set
00065 cgsize_t NbEdges; // Number of Edges in the Set
00066 cgsize_t NbFaces; // Number of Faces in the Set
00067 cgsize_t NbCells; // Number of Cells in the Set
00068 // vector with the number of entities in the Sets
00069 // 0-MBEDGE | 1-MBTRI | 2-MBQUAD | 3-MBTET | 4-MBPYRAMID | 5-MBPRISM | 6-MBHEX
00070 std::vector< cgsize_t > NbEntities;
00071 ElementType_t CGNSType;
00072
00073 SetStruct() : IdSet( -1 ), NbEdges( 0 ), NbFaces( 0 ), NbCells( 0 ){};
00074 ~SetStruct(){};
00075 };
00076
00077 //! writes out a file
00078 ErrorCode write_file( const char* file_name,
00079 const bool overwrite,
00080 const FileOptions& opts,
00081 const EntityHandle* output_list,
00082 const int num_sets,
00083 const std::vector< std::string >& qa_list,
00084 const Tag* tag_list = NULL,
00085 int num_tags = 0,
00086 int export_dimension = 3 );
00087
00088 // Get and count vertex entities
00089 ErrorCode get_vertex_entities( cgsize_t& VrtSize, std::vector< moab::EntityHandle >& Nodes );
00090
00091 // Get and count edge entities
00092 ErrorCode get_edge_entities( cgsize_t& EdgeSize, std::vector< moab::EntityHandle >& Edges );
00093
00094 // Get and count face entities
00095 ErrorCode get_face_entities( cgsize_t& FaceSize, std::vector< moab::EntityHandle >& Faces );
00096
00097 // Get and count cell entities
00098 ErrorCode get_cell_entities( cgsize_t& CellSize, std::vector< moab::EntityHandle >& Cells );
00099
00100 // Write coordinates in the cgns file
00101 ErrorCode write_coord_cgns( std::vector< moab::EntityHandle >& nodes );
00102
00103 // Set Tag values on entities
00104 ErrorCode set_tag_values( std::vector< moab::Tag >& TagHandles,
00105 std::vector< moab::EntityHandle >& Edges,
00106 std::vector< moab::EntityHandle >& Faces,
00107 std::vector< moab::EntityHandle >& Cells,
00108 std::vector< WriteCGNS::SetStruct >& Sets );
00109
00110 // Get Entities in the set
00111 ErrorCode get_set_entities( int i,
00112 std::vector< moab::Tag >& TagHandles,
00113 std::vector< WriteCGNS::SetStruct >& Sets );
00114
00115 // Get the CGNSType
00116 ErrorCode get_cgns_type( int i, std::vector< WriteCGNS::SetStruct >& Sets );
00117
00118 // Get the connectivity table
00119 ErrorCode get_conn_table( std::vector< moab::EntityHandle >& Elements,
00120 std::vector< int >& Begin,
00121 std::vector< int >& End,
00122 std::vector< moab::Tag >& TagHandles,
00123 std::vector< WriteCGNS::SetStruct >& Sets,
00124 std::vector< std::vector< cgsize_t > >& ConnTable );
00125
00126 // Read the Moab type and return CGNS type
00127 int moab_cgns_conv( const EntityHandle handle );
00128
00129 private:
00130 // interface instance
00131 Interface* mbImpl;
00132 WriteUtilIface* mWriteIface;
00133
00134 // File var
00135 const char* fileName;
00136 int IndexFile;
00137
00138 // Base var
00139 const char* BaseName;
00140 int IndexBase;
00141
00142 // Zone var
00143 const char* ZoneName;
00144 int IndexZone;
00145
00146 // Section var
00147 int IndexSection;
00148
00149 // Coordinates var
00150 int IndexCoord[3];
00151
00152 // Mesh dimension
00153 int celldim;
00154 int physdim;
00155 cgsize_t isize[3];
00156
00157 // Entities of mesh
00158 std::vector< moab::EntityHandle > Nodes;
00159 std::vector< moab::EntityHandle > Edges;
00160 std::vector< moab::EntityHandle > Faces;
00161 std::vector< moab::EntityHandle > Cells;
00162
00163 // Number of entities in the mesh
00164 cgsize_t VrtSize;
00165 cgsize_t EdgeSize;
00166 cgsize_t FaceSize;
00167 cgsize_t CellSize;
00168 };
00169
00170 } // namespace moab
00171
00172 #endif