Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MesqPane_95.C
Go to the documentation of this file.
1 /* *******************************************************************
2  * Rocstar Simulation Suite *
3  * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4  * *
5  * Illinois Rocstar LLC *
6  * Champaign, IL *
7  * www.illinoisrocstar.com *
8  * sales@illinoisrocstar.com *
9  * *
10  * License: See LICENSE file in top level of distribution package or *
11  * http://opensource.org/licenses/NCSA *
12  *********************************************************************/
13 /* *******************************************************************
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21  * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22  *********************************************************************/
23 /* ****
24  MesqPane.C
25  *** */
26 
27 #ifndef MESQPANE_C
28 #define MESQPANE_C
29 
30 #include "MesqPane_95.h"
31 #include "Element_accessors.h"
32 #include "MsqVertex.hpp"
33 
34 using namespace MOP;
35 using namespace std;
36 
37 namespace Mesquite{
38 
40  _pane = NULL;
41  if(_dc)
42  delete _dc;
43  _dc = NULL;
44  std::map<string,tagStruct>::iterator pos;
45  for(pos = s_to_t.begin(); pos!= s_to_t.end(); ++pos){
46  switch ((pos->second).type){
47  case BYTE : {
48  if(pos->second.edata)
49  delete ((std::vector<char>*)pos->second.edata);
50  if(pos->second.ndata)
51  delete ((std::vector<char>*)pos->second.ndata);
52  break;
53  }
54  case BOOL :{
55  if(pos->second.edata)
56  delete ((std::vector<char>*)pos->second.edata);
57  if(pos->second.ndata)
58  delete ((std::vector<char>*)pos->second.ndata);
59  break;
60  }
61  case INT :{
62  if(pos->second.edata)
63  delete ((std::vector<char>*)pos->second.edata);
64  if(pos->second.ndata)
65  delete ((std::vector<char>*)pos->second.ndata);
66  break;
67  }
68  case DOUBLE :{
69  if(pos->second.edata)
70  delete ((std::vector<char>*)pos->second.edata);
71  if(pos->second.ndata)
72  delete ((std::vector<char>*)pos->second.ndata);
73  break;
74  }
75  case HANDLE : {
76  if(pos->second.edata)
77  delete ((std::vector<char>*)pos->second.edata);
78  if(pos->second.ndata)
79  delete ((std::vector<char>*)pos->second.ndata);
80  break;
81  }
82  }
83  }
84  }
85 
86  void MesqPane::invert(){
87  std::vector<COM::Connectivity*> conn;
88  _pane->connectivities(conn);
89 
90  int temp = 0;
91  int *cptr = NULL;
92  uint offset = 0;
93  for(uint i=0; i<conn.size(); ++i){
94  if(_verb>1){
95  cout << "MOP> Connectivity " << i <<" has name " << conn[i]->name() << endl;
96  cout << "MOP> offset = " << offset << endl;
97  }
98  cptr = conn[i]->pointer();
99  uint nj = _with_ghost ? (uint)conn[i]->size_of_elements() :
100  (uint)conn[i]->size_of_real_elements();
101  for(uint j = 0; j< nj; ++j){
102  temp = cptr[offset+4*j];
103  cptr[offset+4*j] = cptr[offset+4*j+2];
104  cptr[offset+4*j+2] = temp;
105  }
106  }
107  }
108 
109  void MesqPane::init(){
110  if(_verb)
111  cout << "MOP> MesqPane::init" << endl;
112  _dc = new MAP::Pane_dual_connectivity(_pane, _with_ghost);
113  if(_verb>1)
114  cout << "MOP> Building pb" << endl;
115  MAP::Pane_boundary pb(_pane);
116  if(_verb>1)
117  cout << "MOP> Finished building pb" << endl;
118  std::vector<bool> _is_isolated;
119  _is_isolated.clear();
120  if(_verb>1)
121  cout << "MOP> Determining border nodes" << endl;
122  if(_with_ghost)
123  pb.determine_border_nodes(_is_border, _is_isolated, NULL, 1);
124  else
125  pb.determine_border_nodes(_is_border, _is_isolated, NULL, 0);
126  if(_verb>1)
127  cout << "MOP> Finished determining border nodes" << endl;
128  int siz = _is_border.size();
129  for(int i =0; i < siz; ++i){
130  if(_is_border[i] && _verb >1)
131  cout << "MOP> node " << i+1 << " is on the border" << endl;
132  if(_is_isolated[i] && _verb >1)
133  cout << "MOP> node " << i+1 << " is isolated" << endl;
134  if(!(_is_border[i] || _is_isolated[i]) && _verb >1)
135  cout << "MOP> node " << i+1 << " is free" << endl;
136  _is_border[i] = (_is_border[i] || _is_isolated[i]);
137 
138  }
139  _vertexBytes.resize(_with_ghost ? _pane->size_of_nodes() :
140  _pane->size_of_real_nodes());
141  if(_verb>1){
142  cout << "MOP> size_of_elements = " << _pane->size_of_elements() << endl;
143  cout << "MOP> size_of_ghost_elements = " << _pane->size_of_ghost_elements() << endl;
144  cout << "MOP> size_of_real_elements = " << _pane->size_of_real_elements() << endl;
145  cout << "MOP> size_of_nodes = " << _pane->size_of_nodes() << endl;
146  cout << "MOP> size_of_ghost_nodes = " << _pane->size_of_ghost_nodes() << endl;
147  cout << "MOP> size_of_real_nodes = " << _pane->size_of_real_nodes() << endl;
148  }
149  if(_verb>0)
150  cout << "MOP> MesqPane::init done" << endl;
151  }
152 
153  void MesqPane::get_all_mesh( VertexHandle* vert_array, size_t vert_len,
154  ElementHandle* elem_array, size_t elem_len,
155  size_t* elem_conn_offsets, size_t offset_len,
156  size_t* elem_conn_indices, size_t index_len,
157  MsqError& err ){
158  if(_verb)
159  cout << "MOP> MesqPane::get_all_mesh" << endl;
160  int pane_size = _with_ghost ? _pane->size_of_nodes() :
161  _pane->size_of_real_nodes();
162 
163  COM_assertion_msg( (vert_len >= (size_t)pane_size),
164  "Vert_Len Must Be At Least Number of Nodes");
165 
166  for(int i = 1; i <= pane_size; ++i)
167  vert_array[i-1] = ((char*)NULL)+i;
168 
169  pane_size = _with_ghost ? _pane->size_of_elements() :
170  _pane->size_of_real_elements();
171 
172  COM_assertion_msg( (elem_len >= (size_t)pane_size),
173  "Array_Size Must Be At Least Number of Nodes");
174 
175  elem_conn_offsets[0] = 0;
176  Element_node_enumerator ene(_pane,1);
177  std::vector<int> nodes;
178 
179  for(int i = 1; i <= pane_size; ++i, ene.next()){
180 
181  elem_array[i-1] = ((char*)NULL)+i;
182 
183  elem_conn_offsets[i] = elem_conn_offsets[i-1]+ ene.size_of_nodes();
184 
185  ene.get_nodes(nodes);
186  for(int j=0, nj=ene.size_of_nodes(); j<nj; ++j)
187  elem_conn_indices[elem_conn_offsets[i-1]+j] = nodes[j]-1;
188  }
189  }
190 
192  if(_verb>1)
193  cout << "MOP> MesqPane::vertex_iterator" << endl;
194  return new MyEntityIterator(_with_ghost ? _pane->size_of_nodes() :
195  _pane->size_of_real_nodes());
196  }
197 
199  if(_verb>1)
200  cout << "MOP> MesqPane::element_iterator" << endl;
201  return new MyEntityIterator(_with_ghost ? _pane->size_of_elements() :
202  _pane->size_of_real_elements());
203  }
204 
205  bool MesqPane::vertex_is_fixed(VertexHandle vertex, MsqError & err){
206  if(_verb>1)
207  cout << "MOP> MesqPane::vertex_is_fixed" << endl;
208  uint node_id = (char*)vertex - (char*)NULL;
209  COM_assertion_msg(node_id <= _is_border.size(),
210  "Invalid vertex for MesqPane::vertex_is_fixed()");
211  return _is_border[node_id-1];
212  if(_verb>1)
213  cout << "MOP> MesqPane::vertex_is_fixed finished" << endl;
214  }
215 
216  void MesqPane::vertices_are_on_boundary(VertexHandle vert_array[], bool on_bnd[],
217  size_t num_vtx, MsqError &err){
218  if(_verb)
219  cout << "MOP> MesqPane::vertices_are_on_boundary" << endl;
220  for (size_t i = 0; i < num_vtx; ++i){
221  uint node_id = (((char*)vert_array[i]) - (char*)NULL);
222  if (_is_border[node_id-1]){
223  on_bnd[i] = true;
224  if(_verb>1)
225  std::cout << "MOP> Node " << node_id << " is on the boundary." << endl;
226  }
227  else{
228  on_bnd[i] = false;
229  }
230  }
231  if(_verb)
232  cout << "MOP> MesqPane::vertices_are_on_boundary finished" << endl;
233  }
234 
235  void MesqPane::vertices_get_coordinates(const VertexHandle vert_array[],
236  MsqVertex* coordinates,
237  size_t num_vtx,
238  MsqError &err){
239  if(_verb)
240  cout << "MOP> MesqPane::vertices_get_coordinates" << endl;
241  const double *xptr = _pane->coordinates(), *yptr=NULL, *zptr=NULL;
242  const COM::Attribute *nc = _pane->attribute(COM::COM_NC);
243  int stride = nc->stride();
244  if(!stride){
245  const COM::Attribute *xc = _pane->attribute(COM::COM_NC1);
246  const COM::Attribute *yc = _pane->attribute(COM::COM_NC2);
247  const COM::Attribute *zc = _pane->attribute(COM::COM_NC3);
248  int stride1 = xc->stride();
249  int stride2 = yc->stride();
250  int stride3 = zc->stride();
251  xptr = _pane->x_coordinates();
252  yptr = _pane->y_coordinates();
253  zptr = _pane->z_coordinates();
254  for (size_t i = 0; i < num_vtx; ++i){
255  int offset = (char*)vert_array[i]-(char*)NULL -1;
256  coordinates[i].set(*(xptr+offset*stride1),
257  *(yptr+offset*stride2),
258  *(zptr+offset*stride3));
259  }
260  }
261  else if (stride==1){
262  int nn = _with_ghost ? _pane->size_of_nodes() :
263  _pane->size_of_real_nodes();
264  xptr = _pane->x_coordinates();
265  for (size_t i = 0; i < num_vtx; ++i){
266  int offset = (char*)vert_array[i]-(char*)NULL -1;
267  coordinates[i].set(*(xptr+offset),
268  *(xptr+offset+nn),
269  *(xptr+offset+2*nn));
270  }
271  }
272  else if (stride>=3){
273  xptr = _pane->x_coordinates();
274  for (size_t i = 0; i < num_vtx; ++i){
275  int offset = (char*)vert_array[i]-(char*)NULL -1;
276  coordinates[i].set(xptr + offset * stride);
277  if(_verb>1){
278  cout << "MOP> Coords of node " << offset+1 << " = ["
279  << coordinates[i][0] << ","
280  << coordinates[i][1] << ","
281  << coordinates[i][2] << "]" << endl;
282  }
283  }
284  }
285  else{
287  "Invalid stride length for nodal coordinates.");
288  }
289  if(_verb)
290  cout << "MOP> MesqPane::vertices_get_coordinates finished" << endl;
291  }
292 
293  void MesqPane::vertex_set_coordinates(VertexHandle vertex,
294  const Vector3D &coordinates,
295  MsqError &err){
296  int node_id = ((char*)vertex-(char*)NULL);
297  if(_verb)
298  cout << "MOP> MesqPane::vertex_set_coordinates, node = " << node_id << endl;
299  int offset = node_id - 1;
300  double * xptr = _pane->coordinates();
301  if(xptr){
302  xptr += offset *3;
303  if(_verb>2){
304  cout << "MOP> Coordinate: [" << *xptr << " , "
305  << *(xptr+1) << " , " << *(xptr+2) << "], ";
306  }
307  coordinates.get_coordinates(xptr);
308  if(_verb>2){
309  cout << "-> [" << *xptr << " , "
310  << *(xptr+1) << " , " << *(xptr+2) << "]" << endl;
311  }
312  }
313  else{
314  coordinates.get_coordinates(*(_pane->x_coordinates()+offset),
315  *(_pane->y_coordinates()+offset),
316  *(_pane->z_coordinates()+offset));
317  }
318  if(_verb)
319  cout << "MOP> MesqPane::vertex_set_coordinates finished" << endl;
320  }
321 
322  void MesqPane::vertex_set_byte (VertexHandle vertex,
323  unsigned char byte, MsqError &err){
324  if(_verb)
325  cout << "MOP> MesqPane::vertex_set_byte" << endl;
326  int offset = ((char*)vertex - (char*)NULL) - 1;
327  _vertexBytes[offset] = byte;
328  if(_verb)
329  cout << "MOP> MesqPane::vertex_set_byte finished" << endl;
330  }
331 
332  void MesqPane::vertices_set_byte (VertexHandle *vert_array,
333  unsigned char *byte_array,
334  size_t array_size, MsqError &err){
335  if(_verb)
336  cout << "MOP> MesqPane::vertices_set_byte" << endl;
337  int offset =0;
338  for(size_t i = 0; i < array_size; ++i){
339  offset = ((char*)vert_array[i] - (char*)NULL) - 1;
340  _vertexBytes[offset] = byte_array[i];
341  }
342  if(_verb)
343  cout << "MOP> MesqPane::vertices_set_byte" << endl;
344  }
345 
346  void MesqPane::vertex_get_byte(VertexHandle vertex,
347  unsigned char *byte, MsqError &err){
348  if(_verb)
349  cout << "MOP> MesqPane::vertex_get_byte" << endl;
350  int offset = ((char*)vertex - (char*)NULL) - 1;
351  *byte = _vertexBytes[offset];
352  }
353 
354  void MesqPane::vertices_get_byte(VertexHandle *vertex,
355  unsigned char *byte_array,
356  size_t array_size, MsqError &err){
357  if(_verb)
358  cout << "MOP> MesqPane::vertices_get_byte" << endl;
359  int offset =0;
360  for(size_t i = 0; i < array_size; ++i){
361  offset = ((char*)vertex[i] - (char*)NULL) - 1;
362  byte_array[i] = _vertexBytes[offset];
363  }
364  if(_verb)
365  cout << "MOP> MesqPane::vertices_get_byte finished" << endl;
366  }
367 
368  size_t MesqPane::vertex_get_attached_element_count(VertexHandle vertex,
369  MsqError &err){
370  if(_verb)
371  cout << "MOP> MesqPane::vertex_get_attached_element_count" << endl;
372  int node_id = ((char*)vertex - (char*)NULL);
373  std::vector<int> elist;
374  _dc->incident_elements(node_id,elist);
375  return elist.size();
376  if(_verb)
377  cout << "MOP> MesqPane::vertex_get_attached_element_count finished" << endl;
378  }
379 
380  void MesqPane::vertex_get_attached_elements(VertexHandle vertex,
381  ElementHandle* elem_array,
382  size_t sizeof_elem_array,
383  MsqError &err){
384  if(_verb)
385  cout << "MOP> MesqPane::vertex_get_attached_elements" << endl;
386  int node_id = ((char*)vertex - (char*)NULL);
387  std::vector<int> elist;
388  _dc->incident_elements(node_id,elist);
389  if(sizeof_elem_array > elist.size())
390  sizeof_elem_array = elist.size();
391  for(uint i = 0; i < sizeof_elem_array; i++){
392  elem_array[i] = ((char*)NULL+elist[i]);
393  }
394  if(_verb)
395  cout << "MOP> MesqPane::vertex_get_attached_elements finished" << endl;
396  }
397 
398  size_t MesqPane::element_get_attached_vertex_count(ElementHandle elem,
399  MsqError &err){
400  if(_verb)
401  cout << "MOP> MesqPane::element_get_attached_vertex_count" << endl;
402  int element_id = ((char*)elem - (char*)NULL);
403  const COM::Connectivity *con = _pane->connectivity(element_id);
404  return con->size_of_nodes_pe();
405  }
406 
407 
408  size_t MesqPane::get_vertex_use_count( ElementHandle* handle_array,
409  size_t num_handles,
410  MsqError& err ){
411  if(_verb)
412  cout << "MOP> MesqPane::get_vertex_use_count" << endl;
413  size_t count = 0;
414  for(uint i=0; i< num_handles; ++i){
415  int e_id = ((char*)handle_array[i] - (char*)NULL);
416  Element_node_enumerator ene(_pane,e_id);
417  count += (size_t)ene.size_of_nodes();
418  }
419  return count;
420  }
421 
422  void MesqPane::elements_get_attached_vertices(ElementHandle *elem_handles,
423  size_t num_elems,
424  VertexHandle *vert_handles,
425  size_t &sizeof_vert_handles,
426  size_t *csr_data,
427  size_t &sizeof_csr_data,
428  size_t *csr_offsets,
429  MsqError &err){
430  if(_verb)
431  cout << "MOP> MesqPane::elements_get_attached_vertices" << endl;
432  int vert_count = 0;
433  // maps vertex id's to position in vert_handles
434  std::map<int,int> itop_map;
435  std::map<int,int>::iterator pos;
436  if (num_elems == 0)
437  return;
438  csr_offsets[0] = 0;
439  // loop through elements
440  for (size_t i = 0; i < num_elems; ++i){
441  int elem_id = ((char*)elem_handles[i] - (char*)NULL);
442  std::vector<int> elist;
443  _dc->incident_elements(elem_id,elist);
444  size_t nodes_in_elem = elist.size();
445  csr_offsets[i+1] = csr_offsets[i] + nodes_in_elem;
446  // Check for space in csr_data
447  COM_assertion_msg( (sizeof_csr_data >= csr_offsets[i+1]),
448  "Not enough space in arg. csr_data");
449 
450  // Loop through vertices of current element
451  for( uint j = 0 ; j < nodes_in_elem; ++j){
452  int node_id = ((char*)elist[j] - (char*)NULL);
453  pos = itop_map.find(node_id);
454  // current vertex isn't in vert_handles, add it
455  if(pos == itop_map.end()){
456  itop_map.insert(std::map<int,int>::value_type(node_id,num_elems));
457  vert_handles[vert_count] = ((char*)(NULL)+node_id);
458  csr_data[csr_offsets[i]+j] = vert_count;
459  ++vert_count;
460  }
461  // add current vertex to csr_data
462  csr_data[csr_offsets[i] + j] = pos->second;
463  }
464  elist.clear();
465  }
466  sizeof_csr_data = csr_offsets[num_elems];
467  sizeof_vert_handles = vert_count;
468  if(_verb)
469  cout << "MOP> MesqPane::elements_get_attached_vertices" << endl;
470  }
471 
472  EntityTopology MesqPane::element_get_topology(ElementHandle entity_handle,
473  MsqError &err){
474  if(_verb)
475  cout << "MOP> MesqPane::element_get_topology" << endl;
476  int elem_id = ((char*)entity_handle-(char*)NULL);
477 
478  const COM::Connectivity *con = _pane->connectivity(elem_id);
479  COM_assertion_msg(con!=NULL, "con is NULL");
480  switch(con->element_type()){
481  case COM::Connectivity::TRI3 :
482  return TRIANGLE;
483  break;
484  case COM::Connectivity::QUAD4 :
485  return QUADRILATERAL;
486  break;
487  case COM::Connectivity::TET4 :
488  return TETRAHEDRON;
489  break;
490  case COM::Connectivity::HEX8 :
491  return HEXAHEDRON;
492  break;
493  default:
495  "Element type not supported by Mesquite.");
496  break;
497  }
498  // Control should never reach here...
499  // this 'return' gets rid of compiler warnings
500  return TRIANGLE;
501  }
502 
503  void MesqPane::elements_get_topologies(ElementHandle *element_handle_array,
504  EntityTopology *element_topologies,
505  size_t num_elements, MsqError &err){
506  if(_verb >0)
507  cout << "MOP> MesqPane::element_get_topologies" << endl;
508  for (size_t i = 0; i < num_elements; i++){
509  element_topologies[i] = element_get_topology(element_handle_array[i],err);
510  }
511  if(_verb >0)
512  cout << "MOP> MesqPane::element_get_topologies done" << endl;
513  }
514 
527  void* MesqPane::tag_create( const msq_std::string& tag_n,
528  TagType type, unsigned length,
529  const void* default_value,
530  MsqError &err){
531 
532  std::string tag_name(*(const_cast<std::string *>(&tag_n)));
533  if(_verb)
534  cout << "MOP> MesqPane::tag_create" << endl;
535 
536  tagStruct new_tag = {length, type, NULL,
537  NULL, tag_name};
538  int esize = 1+(_with_ghost ? _pane->size_of_elements() :
539  _pane->size_of_real_elements());
540  int nsize = 1+(_with_ghost ? _pane->size_of_nodes() :
541  _pane->size_of_real_nodes());
542  switch (type){
543  case BYTE :{
544 
545  std::vector<char>* temp = new std::vector<char>;
546  temp->reserve(length*esize);
547  temp->resize(length*esize);
548  new_tag.edata = (void *)temp;
549 
550  temp = new std::vector<char>;
551  temp->reserve(nsize*length);
552  temp->resize(nsize*length);
553  new_tag.ndata = (void *)temp;
554 
555  for(uint i=0; i<length*esize; ++i)
556  (*static_cast<std::vector<char>*>(new_tag.edata))[i]
557  = ((char *)default_value)[i];
558  for(uint i=0; i<length*nsize; ++i)
559  (*((std::vector<char>*)new_tag.ndata))[i]
560  = ((char *)default_value)[i];
561  break;
562  }
563  case BOOL :{
564 
565  std::vector<bool>* temp = new std::vector<bool>;
566  temp->reserve(esize*length);
567  temp->resize(esize*length);
568  new_tag.edata = (void *) temp;
569 
570  temp = new std::vector<bool>;
571  temp->reserve(nsize*length);
572  temp->resize(nsize*length);
573  new_tag.ndata = (void *) temp;
574 
575  for(uint i=0; i<esize*length; ++i)
576  (*((std::vector<bool>*)new_tag.edata))[i]
577  = ((bool *)default_value)[i];
578  for(uint i=0; i<nsize*length; ++i)
579  (*((std::vector<bool>*)new_tag.ndata))[i]
580  = ((bool *)default_value)[i];
581  break;
582  }
583  case INT :{
584 
585  std::vector<int>* temp = new std::vector<int>;
586  temp->reserve(esize*length);
587  temp->resize(esize*length);
588  new_tag.edata = (void *) temp;
589 
590  temp = new std::vector<int>;
591  temp->reserve(nsize*length);
592  temp->resize(nsize*length);
593  new_tag.ndata = (void *) temp;
594 
595  for(uint i=0; i<esize*length; ++i)
596  (*((std::vector<int>*)new_tag.edata))[i]
597  = ((int *)default_value)[i];
598  for(uint i=0; i<nsize*length; ++i)
599  (*((std::vector<int>*)new_tag.ndata))[i]
600  = ((int *)default_value)[i];
601  break;
602  }
603  case DOUBLE :{
604 
605  std::vector<double>* temp = new std::vector<double>;
606  temp->reserve(esize*length);
607  temp->resize(esize*length);
608  new_tag.edata = (void *) temp;
609 
610  temp = new std::vector<double>;
611  temp->reserve(nsize*length);
612  temp->resize(nsize*length);
613  new_tag.ndata = (void *) temp;
614 
615  for(uint i=0; i<esize*length; ++i)
616  (*((std::vector<double>*)new_tag.edata))[i]
617  = ((double *)default_value)[i];
618  for(uint i=0; i<nsize*length; ++i)
619  (*((std::vector<double>*)new_tag.ndata))[i]
620  = ((double *)default_value)[i];
621  break;
622  }
623  case HANDLE : {
624 
625  std::vector<void*>* temp = new std::vector<void*>;
626  temp->reserve(esize*length);
627  temp->resize(esize*length);
628  new_tag.edata = (void *) temp;
629 
630  temp = new std::vector<void*>;
631  temp->reserve(nsize*length);
632  temp->resize(nsize*length);
633  new_tag.ndata = (void *) temp;
634 
635  for(uint i=0; i<esize*length; ++i)
636  (*((std::vector<void*>*)new_tag.edata))[i]
637  = ((void* *)default_value)[i];
638  for(uint i=0; i<nsize*length; ++i)
639  (*((std::vector<void*>*)new_tag.ndata))[i]
640  = ((void* *)default_value)[i];
641  break;
642  }
643  default :
645  "Unrecognized TagType.");
646  break;
647  }
648  s_to_t.insert(std::make_pair<msq_std::string,tagStruct>(tag_name,new_tag));
649  std::map<msq_std::string,tagStruct>::iterator pos;
650  pos = s_to_t.find(tag_name);
651  COM_assertion_msg(pos != s_to_t.end(),
652  "Unable to create tag for Mesquite.");
653  return &(pos->second);
654  }
655 
660  void MesqPane::tag_delete( TagHandle handle, MsqError& err ){
661  if(_verb)
662  cout << "MOP> MesqPane::tag_delete" << endl;
663  tagStruct* tag = (tagStruct*)handle;
664  switch ( (*tag).type){
665  case BYTE : {
666  std::vector<char>* v = (std::vector<char>*)(*tag).edata;
667  if (v!= NULL)
668  delete v;
669  v = (std::vector<char>*)(*tag).ndata;
670  if (v!= NULL)
671  delete v;
672  break;
673  }
674  case BOOL :{
675  std::vector<bool>* v = (std::vector<bool>*) (*tag).edata;
676  if (v!= NULL)
677  delete v;
678  v = (std::vector<bool>*) (*tag).ndata;
679  if (v!= NULL)
680  delete v;
681  break;
682  }
683  case INT :{
684  std::vector<int>* v = (std::vector<int>*) (*tag).edata;
685  if (v!= NULL)
686  delete v;
687  v = (std::vector<int>*) (*tag).ndata;
688  if (v!= NULL)
689  delete v;
690  break;
691  }
692  case DOUBLE :{
693  std::vector<double>* v = (std::vector<double>*) (*tag).edata;
694  if (v!= NULL)
695  delete v;
696  v = (std::vector<double>*) (*tag).ndata;
697  if (v!= NULL)
698  delete v;
699  break;
700  }
701  case HANDLE :{
702  std::vector<void*>* v = (std::vector<void*>*) (*tag).edata;
703  if (v!= NULL)
704  delete v;
705  v = (std::vector<void*>*) (*tag).ndata;
706  if (v!= NULL)
707  delete v;
708  break;
709  }
710  default:
712  "Unrecognized TagType.");
713  break;
714  }
715  const msq_std::string n= (*tag).name;
716  std::map<msq_std::string,tagStruct>::iterator pos;
717  pos = s_to_t.find(n);
718  assert(pos != s_to_t.end());
719  s_to_t.erase(n);
720  }
721 
722 
723 
731  TagHandle MesqPane::tag_get( const msq_std::string& name,
732  MsqError& err ){
733  if(_verb)
734  cout << "MOP> MesqPane::tag_get" << endl;
735  std::map<msq_std::string,tagStruct>::iterator pos;
736  pos = s_to_t.find(name);
737  if(pos == s_to_t.end())
738  return NULL;
739  else
740  return (TagHandle)(&(*pos));
741  }
742 
751  void MesqPane::tag_properties( TagHandle handle,
752  msq_std::string& name_out,
753  TagType& type_out,
754  unsigned& length_out,
755  MsqError& err ){
756  if(_verb)
757  cout << "MOP> MesqPane::tag_properties" << endl;
758  tagStruct* tag = (tagStruct*)handle;
759  name_out = (*tag).name;
760  type_out = (*tag).type;
761  length_out = (*tag).size;
762  }
763 
775  size_t num_elems,
776  const ElementHandle* elem_array,
777  const void* tag_data,
778  MsqError& err ){
779  if(_verb)
780  cout << "MOP> MesqPane::tag_set_element_data" << endl;
781  tagStruct* tag = (tagStruct*)handle;
782  int ne = 1 + (_with_ghost ? _pane->size_of_elements() :
783  _pane->size_of_real_elements());
784  switch ((*tag).type){
785  case BYTE : {
786  std::vector<char>* v = (std::vector<char>*)(*tag).edata;
787  uint tsize = ne*(*tag).size;
788  if (v->size() != tsize){
789  // This tag isn't used yet... should only have default value
790  COM_assertion_msg(v->size() == (*tag).size,
791  "Invalid TagHandle received from Mesquite");
792  v->reserve(tsize);
793  v->resize(tsize);
794  for(int i=0; i < ne; ++i){
795  for(uint j=0; j< (*tag).size; ++j)
796  (*v)[i*(*tag).size+j]=(*v)[j];
797  }
798  }
799  for(uint i=0; i<num_elems; ++i){
800  int eid = ((char*)elem_array[i]-(char*)NULL);
801  for(uint j=0; j< (*tag).size; ++j)
802  (*v)[eid * (*tag).size +j]=((char*)tag_data)[i*(*tag).size+j];
803  }
804  break;
805  }
806  case BOOL :{
807  std::vector<bool>* v = (std::vector<bool>*)(*tag).edata;
808  uint tsize = ne*(*tag).size;
809  if (v->size() != tsize){
810  // This tag isn't used yet... should only have default value
811  COM_assertion_msg(v->size() == (*tag).size,
812  "Invalid TagHandle received from Mesquite");
813  v->reserve(tsize);
814  v->resize(tsize);
815  for(int i=0; i < ne; ++i){
816  for(uint j=0; j< (*tag).size; ++j)
817  (*v)[i*(*tag).size+j]=(*v)[j];
818  }
819  }
820  for(uint i=0; i<num_elems; ++i){
821  int eid = ((bool*)elem_array[i]-(bool*)NULL);
822  for(uint j=0; j< (*tag).size; ++j)
823  (*v)[eid * (*tag).size +j]=((bool*)tag_data)[i*(*tag).size+j];
824  }
825  break;
826  }
827  case INT :{
828  std::vector<int>* v = (std::vector<int>*)(*tag).edata;
829  uint tsize = ne*(*tag).size;
830  if (v->size() != tsize){
831  // This tag isn't used yet... should only have default value
832  COM_assertion_msg(v->size() == (*tag).size,
833  "Invalid TagHandle received from Mesquite");
834  v->reserve(tsize);
835  v->resize(tsize);
836  for(int i=0; i < ne; ++i){
837  for(uint j=0; j< (*tag).size; ++j)
838  (*v)[i*(*tag).size+j]=(*v)[j];
839  }
840  }
841  for(uint i=0; i<num_elems; ++i){
842  int eid = ((int*)elem_array[i]-(int*)NULL);
843  for(uint j=0; j< (*tag).size; ++j)
844  (*v)[eid * (*tag).size +j]=((int*)tag_data)[i*(*tag).size+j];
845  }
846  break;
847  }
848  case DOUBLE :{
849  std::vector<double>* v = (std::vector<double>*)(*tag).edata;
850  uint tsize = ne*(*tag).size;
851  if (v->size() != tsize){
852  // This tag isn't used yet... should only have default value
853  COM_assertion_msg(v->size() == (*tag).size,
854  "Invalid TagHandle received from Mesquite");
855  v->reserve(tsize);
856  v->resize(tsize);
857  for(int i=0; i < ne; ++i){
858  for(uint j=0; j< (*tag).size; ++j)
859  (*v)[i*(*tag).size+j]=(*v)[j];
860  }
861  }
862  for(uint i=0; i<num_elems; ++i){
863  int eid = ((double*)elem_array[i]-(double*)NULL);
864  for(uint j=0; j< (*tag).size; ++j)
865  (*v)[eid * (*tag).size +j]=((double*)tag_data)[i*(*tag).size+j];
866  }
867  break;
868  }
869  case HANDLE : {
870  std::vector<void*>* v = (std::vector<void*>*)(*tag).edata;
871  uint tsize = ne*(*tag).size;
872  if (v->size() != tsize){
873  // This tag isn't used yet... should only have default value
874  COM_assertion_msg(v->size() == (*tag).size,
875  "Invalid TagHandle received from Mesquite");
876  v->reserve(tsize);
877  v->resize(tsize);
878  for(int i=0; i < ne; ++i){
879  for(uint j=0; j< (*tag).size; ++j)
880  (*v)[i*(*tag).size+j]=(*v)[j];
881  }
882  }
883  for(uint i=0; i<num_elems; ++i){
884  int eid = ((void**)elem_array[i]-(void**)NULL);
885  for(uint j=0; j< (*tag).size; ++j)
886  (*v)[eid * (*tag).size +j]=((void**)tag_data)[i*(*tag).size+j];
887  }
888  break;
889  }
890  default :
892  "TagHandle with unrecgonized TagType received.");
893  }
894  }
895 
896 
908  size_t num_elems,
909  const VertexHandle* node_array,
910  const void* tag_data,
911  MsqError& err ){
912  if(_verb)
913  cout << "MOP> MesqPane::tag_set_vertex_data" << endl;
914  tagStruct* tag = (tagStruct*)handle;
915  uint nn = 1 + (_with_ghost ? _pane->size_of_nodes() :
916  _pane->size_of_real_nodes());
917  switch ((*tag).type){
918  case BYTE : {
919  std::vector<char>* v = (std::vector<char>*)(*tag).ndata;
920  uint tsize = (nn)* (*tag).size;
921  if (v->size() != tsize){
922  // This tag isn't used yet... should only have default value
923  COM_assertion_msg(v->size() == (*tag).size,
924  "Invalid TagHandle received from Mesquite");
925  v->reserve(tsize);
926  v->resize(tsize);
927  for(uint i=0; i < nn; ++i){
928  for(uint j=0; j< (*tag).size; ++j)
929  (*v)[i * (*tag).size +j]=(*v)[j];
930  }
931  }
932  for(uint i=0; i<num_elems; ++i){
933  int eid = ((char*)node_array[i]-(char*)NULL);
934  for(uint j=0; j<(*tag).size; ++j)
935  (*v)[eid * (*tag).size +j]=((char*)tag_data)[i*(*tag).size+j];
936  }
937  break;
938  }
939  case BOOL :{
940  std::vector<bool>* v = (std::vector<bool>*)(*tag).ndata;
941  uint tsize = (nn)* (*tag).size;
942  if (v->size() != tsize){
943  // This tag isn't used yet... should only have default value
944  COM_assertion_msg(v->size() == (*tag).size,
945  "Invalid TagHandle received from Mesquite");
946  v->reserve(tsize);
947  v->resize(tsize);
948  for(uint i=0; i < nn; ++i){
949  for(uint j=0; j< (*tag).size; ++j)
950  (*v)[i * (*tag).size +j]=(*v)[j];
951  }
952  }
953  for(uint i=0; i<num_elems; ++i){
954  int eid = ((bool*)node_array[i]-(bool*)NULL);
955  for(uint j=0; j<(*tag).size; ++j)
956  (*v)[eid * (*tag).size +j]=((bool*)tag_data)[i*(*tag).size+j];
957  }
958  break;
959  }
960  case INT :{
961  std::vector<int>* v = (std::vector<int>*)(*tag).ndata;
962  uint tsize = (nn)* (*tag).size;
963  if (v->size() != tsize){
964  // This tag isn't used yet... should only have default value
965  COM_assertion_msg(v->size() == (*tag).size,
966  "Invalid TagHandle received from Mesquite");
967  v->reserve(tsize);
968  v->resize(tsize);
969  for(uint i=0; i < nn; ++i){
970  for(uint j=0; j< (*tag).size; ++j)
971  (*v)[i * (*tag).size +j]=(*v)[j];
972  }
973  }
974  for(uint i=0; i<num_elems; ++i){
975  int eid = ((int*)node_array[i]-(int*)NULL);
976  for(uint j=0; j<(*tag).size; ++j)
977  (*v)[eid * (*tag).size +j]=((int*)tag_data)[i*(*tag).size+j];
978  }
979  break;
980  }
981  case DOUBLE :{
982  std::vector<double>* v = (std::vector<double>*)(*tag).ndata;
983  uint tsize = (nn)* (*tag).size;
984  if (v->size() != tsize){
985  // This tag isn't used yet... should only have default value
986  COM_assertion_msg(v->size() == (*tag).size,
987  "Invalid TagHandle received from Mesquite");
988  v->reserve(tsize);
989  v->resize(tsize);
990  for(uint i=0; i < nn; ++i){
991  for(uint j=0; j< (*tag).size; ++j)
992  (*v)[i * (*tag).size +j]=(*v)[j];
993  }
994  }
995  for(uint i=0; i<num_elems; ++i){
996  int eid = ((double*)node_array[i]-(double*)NULL);
997  for(uint j=0; j<(*tag).size; ++j)
998  (*v)[eid * (*tag).size +j]=((double*)tag_data)[i*(*tag).size+j];
999  }
1000  break;
1001  }
1002  case HANDLE : {
1003  std::vector<void*>* v = (std::vector<void*>*)(*tag).ndata;
1004  uint tsize = (nn)* (*tag).size;
1005  if (v->size() != tsize){
1006  // This tag isn't used yet... should only have default value
1007  COM_assertion_msg(v->size() == (*tag).size,
1008  "Invalid TagHandle received from Mesquite");
1009  v->reserve(tsize);
1010  v->resize(tsize);
1011  for(uint i=0; i < nn; ++i){
1012  for(uint j=0; j< (*tag).size; ++j)
1013  (*v)[i * (*tag).size +j]=(*v)[j];
1014  }
1015  }
1016  for(uint i=0; i<num_elems; ++i){
1017  int eid = ((void**)node_array[i]-(void**)NULL);
1018  for(uint j=0; j<(*tag).size; ++j)
1019  (*v)[eid * (*tag).size +j]=((void**)tag_data)[i*(*tag).size+j];
1020  }
1021  break;
1022  }
1023  }
1024  }
1025 
1026 
1038  size_t num_elems,
1039  const ElementHandle* elem_array,
1040  void* tag_data,
1041  MsqError& err ){
1042  if(_verb)
1043  cout << "MOP> MesqPane::tag_get_element_data" << endl;
1044  tagStruct* tag = (tagStruct*)handle;
1045  switch ((*tag).type){
1046  case BYTE : {
1047  for(uint i=0; i<num_elems; ++i){
1048  int eid = ((char*)elem_array[i]-(char*)NULL);
1049  for(uint j=0; j<(*tag).size; ++j)
1050  ((char*)tag_data)[i * (*tag).size +j]
1051  = ((char*)((*tag).edata))[eid*(*tag).size+j];
1052  }
1053  break;
1054  }
1055  case BOOL :{
1056  for(uint i=0; i<num_elems; ++i){
1057  int eid = ((bool*)elem_array[i]-(bool*)NULL);
1058  for(uint j=0; j<(*tag).size; ++j)
1059  ((bool*)tag_data)[i * (*tag).size +j]
1060  = ((bool*)((*tag).edata))[eid*(*tag).size+j];
1061  }
1062  break;
1063  }
1064  case INT :{
1065  for(uint i=0; i<num_elems; ++i){
1066  int eid = ((int*)elem_array[i]-(int*)NULL);
1067  for(uint j=0; j<(*tag).size; ++j)
1068  ((int*)tag_data)[i * (*tag).size +j]
1069  = ((int*)((*tag).edata))[eid*(*tag).size+j];
1070  }
1071  break;
1072  }
1073  case DOUBLE :{
1074  for(uint i=0; i<num_elems; ++i){
1075  int eid = ((double*)elem_array[i]-(double*)NULL);
1076  for(uint j=0; j<(*tag).size; ++j)
1077  ((double*)tag_data)[i * (*tag).size +j]
1078  = ((double*)((*tag).edata))[eid*(*tag).size+j];
1079  }
1080  break;
1081  }
1082  case HANDLE : {
1083  for(uint i=0; i<num_elems; ++i){
1084  int eid = ((void**)elem_array[i]-(void**)NULL);
1085  for(uint j=0; j<(*tag).size; ++j)
1086  ((void**)tag_data)[i * (*tag).size +j]
1087  = ((void**)((*tag).edata))[eid*(*tag).size+j];
1088  }
1089  break;
1090  }
1091  }
1092  }
1093 
1105  size_t num_elems,
1106  const VertexHandle* node_array,
1107  void* tag_data,
1108  MsqError& err ){
1109  if(_verb)
1110  cout << "MOP> MesqPane::tag_get_vertex_data" << endl;
1111  tagStruct* tag = (tagStruct*)handle;
1112  switch ((*tag).type){
1113  case BYTE : {
1114  for(uint i=0; i<num_elems; ++i){
1115  int vid = ((char*)node_array[i]-(char*)NULL);
1116  for(uint j=0; j<(*tag).size; ++j)
1117  ((char*)tag_data)[i * (*tag).size +j]
1118  = ((char*)((*tag).ndata))[vid*(*tag).size+j];
1119  }
1120  break;
1121  }
1122  case BOOL :{
1123  for(uint i=0; i<num_elems; ++i){
1124  int vid = ((bool*)node_array[i]-(bool*)NULL);
1125  for(uint j=0; j<(*tag).size; ++j)
1126  ((bool*)tag_data)[i * (*tag).size +j]
1127  = ((bool*)((*tag).ndata))[vid*(*tag).size+j];
1128  }
1129  break;
1130  }
1131  case INT :{
1132  for(uint i=0; i<num_elems; ++i){
1133  int vid = ((int*)node_array[i]-(int*)NULL);
1134  for(uint j=0; j<(*tag).size; ++j)
1135  ((int*)tag_data)[i * (*tag).size +j]
1136  = ((int*)((*tag).ndata))[vid*(*tag).size+j];
1137  }
1138  break;
1139  }
1140  case DOUBLE :{
1141  for(uint i=0; i<num_elems; ++i){
1142  int vid = ((double*)node_array[i]-(double*)NULL);
1143  for(uint j=0; j<(*tag).size; ++j)
1144  ((double*)tag_data)[i * (*tag).size +j]
1145  = ((double*)((*tag).ndata))[vid*(*tag).size+j];
1146  }
1147  break;
1148  }
1149  case HANDLE : {
1150  for(uint i=0; i<num_elems; ++i){
1151  int vid = ((void**)node_array[i]-(void**)NULL);
1152  for(uint j=0; j<(*tag).size; ++j)
1153  ((void**)tag_data)[i * (*tag).size +j]
1154  = ((void**)((*tag).ndata))[vid*(*tag).size+j];
1155  }
1156  break;
1157  }
1158  }
1159  }
1160 
1161 
1162  void MesqPane::release_entity_handles(EntityHandle *handle_array,
1163  size_t num_handles, MsqError &err){
1164 
1165  if(_verb)
1166  cout << "MOP> MesqPane::release_entity_handles" << endl;
1167  }
1168 
1169  void MesqPane::release()
1170  {
1171  if(_verb)
1172  cout << "MOP> MesqPane::release()" << endl;
1173  }
1174 
1175 
1176 } // end namespace Mesquite
1177 #endif
1178 
1179 
1180 
1181 
1182 
1183 
if(dy > dx)
virtual void vertices_get_byte(VertexHandle *vertex, unsigned char *byte_array, size_t array_size, MsqError &err)
Retrieve the byte value for the specified vertices.
Definition: MesqPane.C:305
void invert()
Invert Tetrahedrons.
Definition: MesqPane.C:45
virtual ElementIterator * element_iterator(MsqError &err)
Returns a pointer to an element iterator over this Pane.
Definition: MesqPane.C:149
EntityTopology
Definition: Mesquite.hpp:92
#define COM_assertion_msg(EX, msg)
virtual void tag_set_element_data(TagHandle handle, size_t num_elems, const ElementHandle *elem_array, const void *tag_data, MsqError &err)
Set tag values on elements.
Definition: MesqPane_1_1.C:926
virtual void vertices_get_coordinates(VertexHandle vert_array[], Mesquite::MsqVertex *const &coordinates, const size_t &num_vtx, MsqError &err)
Get the location of a vertex.
Definition: MesqPane.C:186
virtual ~MesqPane()
Destructor.
Definition: MesqPane.C:38
virtual void tag_set_vertex_data(TagHandle handle, size_t num_elems, const VertexHandle *node_array, const void *tag_data, MsqError &err)
Set tag values on vertices.
A class for iterating through a Panes vertices or elements.
Definition: MesqPane.h:495
virtual void vertices_are_on_boundary(VertexHandle vert_array[], bool on_bnd[], size_t num_vtx, MsqError &err)
Tells whether the vertex is on the boundary.
Definition: MesqPane.C:167
real *8 function offset(vNorm, x2, y2, z2)
Definition: PlaneNorm.f90:211
virtual void elements_get_attached_vertices(ElementHandle *elem_handles, size_t num_elems, VertexHandle *vert_handles, size_t &sizeof_vert_handles, size_t *csr_data, size_t &sizeof_csr_data, size_t *csr_offsets, MsqError &err)
Returns vertices which are part of each element in the &quot;elem_handles&quot; array.
Definition: MesqPane.C:358
virtual size_t get_vertex_use_count(ElementHandle *handle_array, size_t num_handles, MsqError &err)
Definition: MesqPane_1_1.C:497
EntityIterator ElementIterator
Definition: MesqPane.h:86
EntityIterator VertexIterator
Definition: MesqPane.h:84
virtual size_t element_get_attached_vertex_count(ElementHandle elem, MsqError &err) const
Gets the number of vertices in this element.
Definition: MesqPane.C:349
double length(Vector3D *const v, int n)
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
virtual bool vertex_is_fixed(VertexHandle vertex, MsqError &err)
Tells wheter the vertex is allowed to be repositioned.
Definition: MesqPane.C:156
virtual void tag_delete(TagHandle handle, MsqError &err)
Remove a tag and all corresponding data.
Definition: MesqPane_1_1.C:812
NVec< 3, double > Vector3D
virtual void release()
Release a MesqPane from use.
Definition: MesqPane.C:593
virtual void elements_get_topologies(ElementHandle *element_handle_array, EntityTopology *element_topologies, size_t num_elements, MsqError &err)
Returns the topologies of the given entities.
Definition: MesqPane.C:485
virtual void vertices_set_byte(VertexHandle *vert_array, unsigned char *byte_array, size_t array_size, MsqError &err)
Set mutliple vertex flags.
Definition: MesqPane.C:283
virtual TagHandle tag_create(const msq_std::string &tag_name, TagType type, unsigned length, const void *default_value, MsqError &err)
Create a tag.
Definition: MesqPane_1_1.C:679
blockLoc i
Definition: read.cpp:79
virtual size_t vertex_get_attached_element_count(VertexHandle vertex, MsqError &err) const
Gets the number of elements attached to this vertex.
Definition: MesqPane.C:319
virtual void tag_get_element_data(TagHandle handle, size_t num_elems, const ElementHandle *elem_array, void *tag_data, MsqError &err)
Get tag values on elements.
const NT & n
virtual void tag_properties(TagHandle handle, msq_std::string &name_out, TagType &type_out, unsigned &length_out, MsqError &err)
Get properites of tag.
Definition: MesqPane_1_1.C:903
virtual void tag_get_vertex_data(TagHandle handle, size_t num_elems, const VertexHandle *node_array, void *tag_data, MsqError &err)
Get tag values on vertices.
j indices j
Definition: Indexing.h:6
virtual TagHandle tag_get(const msq_std::string &name, MsqError &err)
Get handle for existing tag, by name.
Definition: MesqPane_1_1.C:883
virtual void release_entity_handles(EntityHandle *handle_array, size_t num_handles, MsqError &err)
Tells the mesh that the client is finished with a given entity handle.
Definition: MesqPane.C:586
virtual VertexIterator * vertex_iterator(MsqError &err)
Returns a pointer to a vertex iterator over this Pane.
Definition: MesqPane.C:142
void * TagHandle
Type used to refer to a tag defintion.
virtual void vertex_get_attached_elements(VertexHandle vertex, ElementHandle *elem_array, size_t sizeof_elem_array, MsqError &err)
Gets the elements attached to this vertex.
Definition: MesqPane.C:331
void int * nj
Definition: read.cpp:74
virtual void vertex_get_byte(VertexHandle vertex, unsigned char *byte, MsqError &err)
Retrieve the byte value for the specified vertex.
Definition: MesqPane.C:297
virtual void vertex_set_byte(VertexHandle vertex, unsigned char byte, MsqError &err)
Set a vertex flag.
Definition: MesqPane.C:273
virtual void get_all_mesh(VertexHandle *vert_array, size_t vert_len, ElementHandle *elem_array, size_t elem_len, size_t *elem_conn_offsets, size_t offset_len, size_t *elem_conn_indices, size_t index_len, MsqError &err)
Get entities and connectivity.
Definition: MesqPane_1_1.C:190
virtual EntityTopology element_get_topology(ElementHandle entity_handle, MsqError &err) const
Returns the topology of the given entity.
Definition: MesqPane.C:454
virtual void vertex_set_coordinates(VertexHandle vertex, const Vector3D &coordinates, MsqError &err)
Set the Location of a vertex.
Definition: MesqPane.C:244
void init()
Initialize the MesqPane.
Definition: MesqPane.C:68