/usr/include/trilinos/pamgen_mesh_specification.h is in libtrilinos-pamgen-dev 12.10.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | // $Id$
#ifndef pamgen_mesh_specification_LT_H
#define pamgen_mesh_specification_LT_H
#include "pamgen_element_dictionary.h"
#include <string>
#include <sstream>
#include <ios>
using namespace PAMGEN_NEVADA;
namespace ms_lt{
/*****************************************************************************/
class Mesh_Specification
/*****************************************************************************/
// This abstract class represents a mesh specification.
//
// A note on numbering. Most file formats for specifying meshes were
// developed in the FORTRAN world, where the default convention is for array
// indices to begin at 1 rather than 0. In addition, when a mesh is
// decomposed for parallel computations, its topological entities are
// assigned a global number. As a result, there is considerable potential
// for confusion about numbering. Unless otherwise specified, local indexing
// starts at 0. When indices returned by a function are based on the
// FORTRAN convention (indices starting at 1), this will be noted. Global
// numbering will always be explicitly noted when not obvious.
{
public:
enum MSPPA {
ELMT_NODE_LINKAGE,
NODE_SET_NODES,
SIDE_SET_ELEMENTS,
SIDE_SET_FACES,
SIDE_SET_NODES,
SIDE_SET_NODE_COUNTER,
COMM_NODE_IDS,
COMM_NODE_PROC_IDS,
COMM_ELEM_IDS,
COMM_ELEM_PROC_IDS,
COMM_SIDE_IDS,
NUM_MSPPA
};
enum MSPPDA{
ATTRIBUTES,
NODE_SET_DF,
SIDE_SET_DF,
NUM_MSPPDA
};
enum MSPSA{
INFO_STRINGS,
COORDINATE_NAMES,
ELEMENT_TYPES,
NUM_MSPSA
};
enum MSPA {
ELEM_ORDER_MAP=0,
BLOCK_ID,
ELEMENTS_IN_BLOCK,
NODES_PER_ELEMENT,
ELEMENT_ATTRIBUTES,
NODE_SET_ID,
NUM_NODES_IN_NODE_SET,
NUM_DF_IN_NODE_SET,
SIDE_SET_ID,
NUM_ELEMENTS_IN_SIDE_SET,
NUM_NODES_IN_SIDE_SET,
NUM_DF_IN_SIDE_SET,
GLOBAL_ELEMENT_NUMBERS,
GLOBAL_NODE_NUMBERS,
NBR_PROC_LIST,
ELEM_BLK_IDS_GLOBAL,
ELEM_BLK_CNTS_GLOBAL,
NS_IDS_GLOBAL,
NS_CNTS_GLOBAL,
NS_DF_CNTS_GLOBAL,
SS_IDS_GLOBAL,
SS_CNTS_GLOBAL,
SS_DF_CNTS_GLOBAL,
INTERNAL_ELEMENTS,
BORDER_ELEMENTS,
INTERNAL_NODES,
BORDER_NODES,
EXTERNAL_NODES,
NODE_CMAP_NODE_CNTS,
NODE_CMAP_IDS,
ELEM_CMAP_ELEM_CNTS,
ELEM_CMAP_IDS,
BLOCK_PARENT_MESHES,
SIDESET_PARENT_MESHES,
NODESET_PARENT_MESHES,
NUM_MSPA};
enum MSIA {
DIM=0,
PROC_ID,
NUM_QA_RECORDS,
NUM_INFO_RECORDS,
NUM_TOTAL_PROC,
NUM_PROC_IN_FILE,
NUM_NODES,
NUM_ELEMENTS,
NUM_EDGES,
NUM_FACES,
NUM_BLOCKS,
NUM_NODE_SETS,
NUM_SIDE_SET_NODES,
NUM_SIDE_SETS,
NUM_NODES_GLOBAL,
NUM_ELEMS_GLOBAL,
NUM_ELM_BLKS_GLOBAL,
NUM_NODE_SETS_GLOBAL,
NUM_SIDE_SETS_GLOBAL,
NUM_INTERNAL_NODES,
NUM_BORDER_NODES,
NUM_EXTERNAL_NODES,
NUM_INTERNAL_ELEMS,
NUM_BORDER_ELEMS,
NUM_NODE_COMM_MAPS,
NUM_ELEM_COMM_MAPS,
NUM_NBR_PROCS,
NUM_PARENT_MESHES,
NUM_MSIA};
long long getMSI(MSIA ind){return msia[ind];}
void setMSI(MSIA ind,long long the_int){msia[ind] = the_int;}
long long * getMSP(MSPA ind) {return mspa[ind];}
const long long * getMSP(MSPA ind) const {return mspa[ind];}
std::string * getMSPSA(MSPSA ind) {return mspsa[ind];}
const std::string * getMSPSA(MSPSA ind) const {return mspsa[ind];}
long long * const * getMSPP(MSPPA ind) {return msppa[ind];}
const long long * const * getMSPP(MSPPA ind) const {return msppa[ind];}
double * const * getMSPPD(MSPPDA ind) {return msppda[ind];}
const double * const * getMSPPD(MSPPDA ind) const {return msppda[ind];}
static Mesh_Specification * first_ms_static_storage;
static void Add_MS(Mesh_Specification * ms){
/*set the first pointer if unset*/
/*add the new entry to next if there is an im_static_storage*/
/*set im_static_storage*/
if(!first_ms_static_storage){
first_ms_static_storage = ms;
}
else{
Mesh_Specification * ams = first_ms_static_storage;
while(ams->next){
ams=ams->next;
}
ams->next = ms;
}
}
static void Replace_MS(Mesh_Specification * ms){
/*set the first pointer if unset*/
/*add the new entry to next if there is an im_static_storage*/
/*set im_static_storage*/
if(ms == first_ms_static_storage)return;
else if(first_ms_static_storage){
delete first_ms_static_storage;
}
first_ms_static_storage = ms;
}
Mesh_Specification * consolidateMS();
Mesh_Specification * Next(){return next;}
Mesh_Specification();
virtual ~Mesh_Specification();
std::string getErrorString() {return error_stream.str();}
std::string getWarningString(){return warning_stream.str();}
// Access functions for local data
const std::string& Title() const {return title;}
// Nodal coordinates
const double* Coord() const {return coord;}
double* Coord() {return coord;}
// Stored by node, then by coordinate component. Thus, Coord()[n] returns
// the X coordinate of the nth node, while Coord()[n+Number_Of_Nodes()]
// returns the Y coordinate of the nth node if Dimensionality()>1.
virtual const std::string& File_Type() {return file_type;}
// Information records
typedef std::string QA_Record[4];
const QA_Record *QA_Records() const {return qa_strings;}
QA_Record *QA_Records() {return qa_strings;}
// The QA records give information on every code that has "touched"
// the data in the mesh specification. Each QA record consists
// of four parts enumerated below:
enum {
QA_CODE_NAME = 0,
QA_CODE_DESCRIPTOR = 1,
QA_ANALYSIS_DATE = 2,
QA_ANALYSIS_TIME = 3
};
bool Are_Warnings_Suppressed() const;
void Parallel_Data_Size(long long,long long,long long,long long,long long,long long,long long);
void Allocate_Locational_Data();
void Allocate_LoadBal_Data();
void Allocate_Global_Data();
void Global_Data_Size( long long, long long, long long, long long, long long, long long, long long);
void Allocate_Parallel_Data();
void Free_Parallel_Data();
void Free_Locational_Data();
void Free_Global_Data();
// Definition functions
void Specify_Global_Information(const std::string &title,
long long dimensionality,
long long number_of_nodes,
long long number_of_elements,
long long number_of_element_blocks,
long long number_of_node_sets,
long long number_of_side_sets,
long long number_of_qa_records,
long long number_of_info_records);
// Specifies the overall dimensions of the mesh, and allocates
// storage for next level of information.
void Specify_Block_Information(long long index,
long long block_id,
long long number_of_block_elements,
long long number_of_nodes_per_element,
long long number_of_element_attributes,
Element_Type block_element_type);
// Specifies the dimensions of a particular element block, and
// allocates storage for the next level of information for the block.
void Specify_Node_Set_Information(long long index,
long long node_set_id,
long long number_of_nodes_in_node_set,
long long number_of_df_in_node_set);
// Specifies the dimensions of a particular node set, and allocates
// storage for the next level of information for the node set.
void Specify_Side_Set_Information(long long index,
long long side_set_id,
long long number_of_faces_in_side_set,
long long number_of_nodes_in_side_set,
long long number_of_df_in_side_set);
// Specifies the dimensions of a particular side set, and allocates
// storage for the next level of information for the side set.
void Resize_Info_Store(long long number_of_info_records);
// Increase the number of information records.
void Suppress_Warnings(long long);
void Free_NonTransient_Storage();
// Free all storage except that which contains data required for
// time step dumps. After a call to Free_NonTransient_Storage(),
// Block_ID() and Number_Of_Block_Elements() will return pointers
// to meaningful data, but all other functions returning a pointer
// will return a null pointer.
protected:
std::string title;
std::stringstream error_stream;
std::stringstream warning_stream;
double* coord;
Element_Type* block_element_type;
QA_Record* qa_strings;
bool suppress_warnings;
Mesh_Specification * next;
//nem data
std::string file_type;
//Arrays for storing ints pointers,
// automatically sized by the enums
long long msia[NUM_MSIA];
long long * mspa[NUM_MSPA];
long long * * msppa[NUM_MSPPA];
double * * msppda[NUM_MSPPDA];
std::string * mspsa[NUM_MSPSA];
private:
Mesh_Specification(const Mesh_Specification &);
Mesh_Specification &operator=(const Mesh_Specification &);
void Zero_Set();
void Free();
};
}
#endif
|