![]() |
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 //-------------------------------------------------------------------------
00017 // Filename : WriteTEMPLATE.hpp
00018 //
00019 // Purpose : ExodusII writer
00020 //
00021 // Special Notes : Lots of code taken from verde implementation
00022 //
00023 // Creator : Corey Ernst
00024 //
00025 // Date : 8/02
00026 //
00027 // Owner : Corey Ernst
00028 //-------------------------------------------------------------------------
00029
00030 #ifndef WRITEANS_HPP
00031 #define WRITEANS_HPP
00032
00033 #ifndef IS_BUILDING_MB
00034 #error "WriteAns.hpp isn't supposed to be included into an application"
00035 #endif
00036
00037 #include
00038
00039 #include "moab/Forward.hpp"
00040 #include "moab/Range.hpp"
00041 #include "moab/ExoIIInterface.hpp"
00042 #include "moab/WriterIface.hpp"
00043
00044 namespace moab
00045 {
00046
00047 class WriteUtilIface;
00048
00049 class WriteAns : public WriterIface
00050 {
00051
00052 public:
00053 //! Constructor
00054 WriteAns( Interface* impl );
00055
00056 //! Destructor
00057 virtual ~WriteAns();
00058
00059 static WriterIface* factory( Interface* );
00060
00061 //! writes out a file
00062 ErrorCode write_file( const char* file_name,
00063 const bool overwrite,
00064 const FileOptions& opts,
00065 const EntityHandle* output_list,
00066 const int num_sets,
00067 const std::vector< std::string >& qa_list,
00068 const Tag* tag_list = NULL,
00069 int num_tags = 0,
00070 int export_dimension = 3 );
00071
00072 //! struct used to hold data for each block to be output; used by
00073 //! initialize_file to initialize the file header for increased speed
00074 struct MaterialSetData
00075 {
00076 int id;
00077 int number_elements;
00078 int number_nodes_per_element;
00079 int number_attributes;
00080 ExoIIElementType element_type;
00081 EntityType moab_type;
00082 Range* elements;
00083 };
00084
00085 //! struct used to hold data for each nodeset to be output; used by
00086 //! initialize_file to initialize the file header for increased speed
00087 struct DirichletSetData
00088 {
00089 int id;
00090 int number_nodes;
00091 std::vector< EntityHandle > nodes;
00092 std::vector< double > node_dist_factors;
00093 };
00094
00095 //! struct used to hold data for each sideset to be output; used by
00096 //! initialize_file to initialize the file header for increased speed
00097 struct NeumannSetData
00098 {
00099 int id;
00100 int number_elements;
00101 std::vector< EntityHandle > elements;
00102 std::vector< int > side_numbers;
00103 EntityHandle mesh_set_handle;
00104 };
00105
00106 protected:
00107 //! number of dimensions in this file
00108 // int number_dimensions();
00109
00110 //! open a file for writing
00111 // ErrorCode open_file(const char *filename);
00112
00113 //! contains the general information about a mesh
00114 class MeshInfo
00115 {
00116 public:
00117 unsigned int num_dim;
00118 unsigned int num_nodes;
00119 unsigned int num_elements;
00120 unsigned int num_matsets;
00121 unsigned int num_dirsets;
00122 unsigned int num_neusets;
00123 Range nodes;
00124
00125 MeshInfo()
00126 : num_dim( 0 ), num_nodes( 0 ), num_elements( 0 ), num_matsets( 0 ), num_dirsets( 0 ), num_neusets( 0 )
00127 {
00128 }
00129 };
00130
00131 private:
00132 //! interface instance
00133 Interface* mbImpl;
00134 // WriteUtilIface* mWriteIface;
00135
00136 //! file name
00137 std::string fileName;
00138
00139 //! Meshset Handle for the mesh that is currently being read
00140 EntityHandle mCurrentMeshHandle;
00141
00142 //! Cached tags for reading. Note that all these tags are defined when the
00143 //! core is initialized.
00144 Tag mMaterialSetTag;
00145 Tag mDirichletSetTag;
00146 Tag mNeumannSetTag;
00147 Tag mGlobalIdTag;
00148 Tag mMatSetIdTag;
00149
00150 ErrorCode write_nodes( const int num_nodes, const Range& nodes, const int dimension, const char* file_name );
00151 };
00152
00153 } // namespace moab
00154
00155 #endif