Zoltan2
Zoltan2_PamgenMeshStructure.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Zoltan2: A package of combinatorial algorithms for scientific computing
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Karen Devine (kddevin@sandia.gov)
39 // Erik Boman (egboman@sandia.gov)
40 // Siva Rajamanickam (srajama@sandia.gov)
41 //
42 // ***********************************************************************
43 //
44 // @HEADER
45 
46 /* \file Zoltan2_PamgenMeshStructure.hpp
47 * \brief A class for copying the state of a Pamgen mesh for easy access
48 */
49 
50 #ifndef PAMGEN_MESH_STRUCTURE
51 #define PAMGEN_MESH_STRUCTURE
52 
53 #include <Pamgen_config.h>
54 #include <create_inline_mesh.h>
55 #include <limits.h>
56 #include <pamgen_im_exodusII.h>
57 #include <pamgen_im_ne_nemesisI.h>
58 
59 
60 class PamgenMesh{
61 public:
62 
63  /* \brief Destructor */
64  ~PamgenMesh(); // free memory
65 
66  /* \bried Method for calling the Pamgen Mesh constructor
67  * \param[in] file_data is the input file describing the pamgen mesh read into a char array
68  * \param[in] dimension is the dimension of the problem, i.e. 1,2, or 3
69  * \param[in] comm is the process communicator
70  */
71  void createMesh(char * file_data, int dimension, const RCP<const Comm<int>> &comm);
72 
73  /* \bried Method for copying the state of a Pamgen mesh once it has been created
74  */
75  void storeMesh(); // read mesh to memory
76 
77  /* Metod for computing the coordinates of the element centers */
79 
80  int num_dim;
81  int num_nodes;
82  int num_elem;
94 
95  char title[MAX_STR_LENGTH];
96 
97  int version;
99  double * coord;
100  double * element_coord;
101 
102  char buffer[3][MAX_STR_LENGTH + 1];
103  char *bptr[3];
104 
106 
109 
110  /*block info*/
111  int * block_id ;
112  char ** element_types ;
113  int * elements ;
117 
118  /*side sets*/
119  int * side_set_id ;
124 
125  /*node sets*/
126  int * node_set_id ;
130 
131  /*qa*/
134  char* qaRecord[100][4];
135  char** info_records ;
136 
137  /*nemesis data*/
145  char type[2];
146 
147  /*nemesis data
148  global info*/
149 
152 
159 
160  /*parallel info*/
168 
172  int * border_nodes ;
174 
179 
180  int ** comm_node_ids ;
182  int ** comm_elem_ids ;
183  int ** comm_side_ids ;
185 
186 };
187 
188 
190 {
191  // free mesh
192  Delete_Pamgen_Mesh();
193 
194  // free storage
195  int i;
196  int j;
197  int b;
198  for( i = 0; i < 100; i++){
199  for( j=0; j<4; j++){
200  free(this->qaRecord[i][j]);
201  }
202  }
203 
204  free(this->coord); // free vertex coords
205  free(this->element_coord);
206 
207 
208  if (this->num_elem){
209  free(this->element_order_map);
210 
211  if (this->num_elem){
212  free(this->global_element_numbers);
213  }
214 
215  if (this->num_nodes){
216  free(this->global_node_numbers);
217  }
218 
219 
220  /*block info*/
221  free(this->block_id);
222  free(this->nodes_per_element);
223  free(this->element_attributes);
224  free(this->elements);
225 
226 
227  for(i = 0; i < this->num_elem_blk; i ++){
228  free(this->element_types[i]);
229  }
230 
231  /*connectivity*/
232  for(b = 0; b < this->num_elem_blk; b++){
233  free(this->elmt_node_linkage[b]);
234  }
235  free(this->element_types);
236  free(this->elmt_node_linkage);
237 
238 
239  if(this->num_node_sets){
240 
241  for(i = 0; i < this->num_node_sets; i ++){
242  if(this->num_nodes_in_node_set[i]) {
243  free(this->node_set_nodes[i]);
244  }
245  }
246  free(this->node_set_id);
247  free(this->num_nodes_in_node_set);
248  free(this->node_set_nodes);
249  free(this->num_df_in_node_set);
250 
251  }
252 
253  /*side sets*/
254  if(this->num_side_sets){
255 
256  for(i = 0; i < this->num_side_sets; i ++){
257 
258  free(this->side_set_elements[i]);
259  free(this->side_set_faces[i]);
260 
261  }
262  free(this->side_set_id);
263  free(this->num_elements_in_side_set);
264  free(this->num_df_in_side_set);
265  free(this->side_set_elements);
266  free(this->side_set_faces);
267  }
268 
269 
270  if(this->num_info_records) {
271  for(i = 0; i < this->num_info_records; i ++){
272  free(this->info_records[i]);
273  }
274  free(this->info_records);
275  }
276 
277 
278  /*nemesis data
279  global info */
280  free(this->elem_blk_ids_global);
281  free(this->elem_blk_cnts_global);
282 
283  free(this->ns_ids_global);
284  free(this->ns_cnts_global);
285  free(this->ns_df_cnts_global);
286  free(this->ss_ids_global);
287  free(this->ss_cnts_global);
288  free(this->ss_df_cnts_global);
289 
290  free(this->internal_elements);
291  free(this->border_elements);
292  free(this->internal_nodes);
293  free(this->border_nodes);
294  free(this->external_nodes);
295 
296  if(this->num_node_comm_maps > 0){
297 
298  for(j = 0; j < this->num_node_comm_maps; j++) {
299  free(this->comm_node_ids[j]);
300  free(this->comm_node_proc_ids[j]);
301 
302  }
303 
304 
305  for(j = 0; j < this->num_elem_comm_maps; j++) {
306  free(this->comm_elem_ids[j]);
307  free(this->comm_side_ids[j]);
308  free(this->comm_elem_proc_ids[j]);
309 
310  }/*loop over num_elem_co*/
311  }
312 
313  if(this->num_node_comm_maps > 0)
314  {
315  free(this->node_cmap_node_cnts);
316  free(this->node_cmap_ids);
317  free(this->comm_node_ids);
318  free(this->comm_node_proc_ids);
319 
320  free(this->elem_cmap_elem_cnts);
321  free(this->elem_cmap_ids);
322  free(this->comm_elem_ids);
323  free(this->comm_side_ids);
324  free(this->comm_elem_proc_ids);
325  }
326 
327  }
328 
329 }
330 
332 {
333 
334  int idum = 0;
335  float fdum;
336  int i;
337  int j;
338  int b;
339  char * cdum = NULL;
340  int error = 0;
341  int id = 0;
342 
343  this->bptr[0] = this->buffer[0];
344  this->bptr[1] = this->buffer[1];
345  this->bptr[2] = this->buffer[2];
346 
347  for(i = 0; i < 100; i++)
348  for(j=0; j<4; j++) this->qaRecord[i][j] = (char*)malloc(MAX_STR_LENGTH+1) ;
349 
350 
351  error += im_ex_get_init ( id,
352  this->title,
353  &this->num_dim,
354  &(this->num_nodes),
355  &this->num_elem,
356  &this->num_elem_blk,
357  &this->num_node_sets,
358  &this->num_side_sets);
359 
360 
361  error += im_ex_inquire(id, IM_EX_INQ_NS_NODE_LEN, (int*)&this->num_node_set_nodes,
362  &fdum, cdum);
363  error += im_ex_inquire
364  (id, IM_EX_INQ_NS_DF_LEN, (int*)&this->num_node_set_dfs,
365  &fdum, cdum);
366  error += im_ex_inquire(id, IM_EX_INQ_SS_ELEM_LEN, (int*)&this->num_side_set_elements,
367  &fdum, cdum);
368  error += im_ex_inquire(id, IM_EX_INQ_SS_NODE_LEN, (int*)&this->num_side_set_nodes,
369  &fdum, cdum);
370  error += im_ex_inquire(id, IM_EX_INQ_SS_DF_LEN, (int*)&this->num_side_set_dfs,
371  &fdum, cdum);
372 
373  /* get version number */
374 
375  error += im_ex_inquire(id, IM_EX_INQ_API_VERS, &idum, &fdum, cdum);
376 
377  this->version_number = (double) fdum;
378 
379  this->version = (int) this->version_number;
380 
381  /* get genesis-II parameters */
382 
383  error += im_ex_inquire(id, IM_EX_INQ_EB_PROP, (int*)&this->num_block_properties, &fdum, cdum);
384 
385  error += im_ex_inquire(id, IM_EX_INQ_NS_PROP, (int*)&this->num_node_set_properties,
386  &fdum, cdum);
387 
388  error += im_ex_inquire(id, IM_EX_INQ_SS_PROP, (int*)&this->num_side_set_properties,
389  &fdum, cdum);
390 
391  this->coord = (double *)malloc(this->num_nodes*this->num_dim*sizeof(double));
392 
393  error += im_ex_get_coord(id,this->coord,this->coord+this->num_nodes,this->coord+2*this->num_nodes);
394 
395 
396  error += im_ex_get_coord_names (id, this->bptr);
397 
398  if (this->num_elem){
399  this->element_order_map = (int *)malloc(this->num_elem * sizeof(int));
400  error += im_ex_get_map(id, this->element_order_map);
401 
402  if (this->num_elem){
403  this->global_element_numbers = (int *)malloc(this->num_elem*sizeof(int));
404  error += im_ex_get_elem_num_map(id, this->global_element_numbers);
405  }
406 
407  if (this->num_nodes){
408  this->global_node_numbers = (int *)malloc(this->num_nodes * sizeof(int));
409  error += im_ex_get_node_num_map(id, this->global_node_numbers);
410  }
411 
412 
413  /*block info*/
414 
415  this->block_id = (int *)malloc(this->num_elem_blk*sizeof(int));
416  this->nodes_per_element = (int *)malloc(this->num_elem_blk*sizeof(int));
417  this->element_attributes = (int *)malloc(this->num_elem_blk*sizeof(int));
418  this->elements = (int *)malloc(this->num_elem_blk*sizeof(int));
419  this->element_types = (char **)malloc(this->num_elem_blk*sizeof(char *));
420  this->elmt_node_linkage = (int **)malloc(this->num_elem_blk*sizeof(int*));
421 
422  error += im_ex_get_elem_blk_ids(id, this->block_id);
423 
424  for(i = 0; i < this->num_elem_blk; i ++){
425  this->element_types[i] = (char *)malloc((MAX_STR_LENGTH + 1)*sizeof(char));
426  error += im_ex_get_elem_block(id,
427  this->block_id[i],
428  this->element_types[i],
429  (int*)&(this->elements[i]),
430  (int*)&(this->nodes_per_element[i]),
431  (int*)&(this->element_attributes[i]));
432  }
433 
434  /*connectivity*/
435  for(b = 0; b < this->num_elem_blk; b++){
436  this->elmt_node_linkage[b] = (int*)malloc(this->nodes_per_element[b]*this->elements[b]*sizeof(int));
437  error += im_ex_get_elem_conn(id,this->block_id[b],this->elmt_node_linkage[b]);
438  }
439 
440 
441  if(this->num_node_sets){
442  this->node_set_id = (int *) malloc(this->num_node_sets*sizeof(int));
443  this->num_nodes_in_node_set = (int *) malloc(this->num_node_sets*sizeof(int));
444  this->node_set_nodes = (int **)malloc(this->num_node_sets*sizeof(int*));
445  this->num_df_in_node_set = (int *) malloc(this->num_node_sets*sizeof(int*));
446 
447  error += im_ex_get_node_set_ids(id, this->node_set_id);
448 
449 
450  for(i = 0; i < this->num_node_sets; i ++){
451  error += im_ex_get_node_set_param(id, this->node_set_id[i],
452  (int*)&this->num_nodes_in_node_set[i],
453  (int*)&this->num_df_in_node_set[i]);
454 
455  this->node_set_nodes[i] = NULL;
456 
457  if(this->num_nodes_in_node_set[i]) {
458  this->node_set_nodes[i] = (int *)malloc(this->num_nodes_in_node_set[i]*sizeof(int));
459  error += im_ex_get_node_set(id, this->node_set_id[i], this->node_set_nodes[i]);
460  }
461  }
462  }
463 
464  /*side sets*/
465  if(this->num_side_sets){
466  this->side_set_id = (int*)malloc(this->num_side_sets*sizeof(int));
467  this->num_elements_in_side_set = (int*)malloc(this->num_side_sets*sizeof(int));
468  this->num_df_in_side_set = (int*)malloc(this->num_side_sets*sizeof(int));
469  this->side_set_elements = (int**)malloc(this->num_side_sets*sizeof(int *));
470  this->side_set_faces = (int **)malloc(this->num_side_sets*sizeof(int*));
471 
472  error += im_ex_get_side_set_ids(id, this->side_set_id);
473  for(i = 0; i < this->num_side_sets; i ++){
474  int ne = 0;
475  error += im_ex_get_side_set_param(id, this->side_set_id[i],
476  (int*)&this->num_elements_in_side_set[i],
477  (int*)&this->num_df_in_side_set[i]);
478 
479  ne = this->num_elements_in_side_set[i];
480  this->side_set_elements[i] = (int*)malloc(ne*sizeof(int));
481  this->side_set_faces[i] = (int*)malloc(ne*sizeof(int));
482  if(ne){
483  error += im_ex_get_side_set(id, this->side_set_id[i],
484  this->side_set_elements[i],
485  this->side_set_faces[i]);
486 
487  }
488  }
489  }
490 
491  error += im_ex_inquire(id, IM_EX_INQ_QA, (int*)&this->num_qa_records, &fdum, cdum);
492 
493  if(this->num_qa_records)error += im_ex_get_qa(id,this->qaRecord);
494 
495 
496  error += im_ex_inquire(id, IM_EX_INQ_INFO, (int*)&this->num_info_records, &fdum, cdum);
497  if(this->num_info_records) {
498  this->info_records = (char **)malloc(this->num_info_records*sizeof(char *));/*new std::string[num_info_records];*/
499  for(i = 0; i < this->num_info_records; i ++){
500  this->info_records[i] = (char *)malloc(MAX_STR_LENGTH+1);
501  }
502  error += im_ex_get_info(id, this->info_records);
503  }
504 
505 
506  /*nemesis data
507  global info*/
508  if ( im_ne_get_init_global(id, &this->num_nodes_global, &this->num_elems_global,
510  &this->num_side_sets_global) < 0 )
511  ++error;
512 
513 
514 
515  if ( im_ne_get_init_info(id, &this->num_total_proc, &this->num_proc_in_file, this->type) < 0 )
516  ++error;
517 
518  this->elem_blk_ids_global = (int*)malloc(this->num_elm_blks_global*sizeof(int));
519  this->elem_blk_cnts_global = (int*)malloc(this->num_elm_blks_global*sizeof(int));
520 
521  if ( im_ne_get_eb_info_global(id,this->elem_blk_ids_global,this->elem_blk_cnts_global) < 0 )
522  ++error;
523 
524  this->ns_ids_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
525  this->ns_cnts_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
526  this->ns_df_cnts_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
527  this->ss_ids_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
528  this->ss_cnts_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
529  this->ss_df_cnts_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
530 
531 
532  if ( this->num_node_sets_global > 0 ) {
533  if ( im_ne_get_ns_param_global(id,this->ns_ids_global,this->ns_cnts_global,
534  this->ns_df_cnts_global) < 0 )++error;
535  }
536 
537  if ( this->num_side_sets_global > 0 ) {
538  if ( im_ne_get_ss_param_global(id,this->ss_ids_global,this->ss_cnts_global,
539  this->ss_df_cnts_global) < 0 ) ++error;
540  }
541 
542  /*parallel info*/
543  if ( im_ne_get_loadbal_param( id,
544  &this->num_internal_nodes,
545  &this->num_border_nodes,
546  &this->num_external_nodes,
547  &this->num_internal_elems,
548  &this->num_border_elems,
549  &this->num_node_comm_maps,
550  &this->num_elem_comm_maps,
551  0/*unused*/ ) < 0 )++error;
552 
553  this->internal_elements = (int *)malloc(this->num_internal_elems*sizeof(int));
554  this->border_elements = (int *)malloc(this->num_border_elems*sizeof(int));
555  this->internal_nodes = (int *)malloc(this->num_internal_nodes*sizeof(int));
556  this->border_nodes = (int *)malloc(this->num_border_nodes*sizeof(int));
557  this->external_nodes = (int *)malloc(this->num_external_nodes*sizeof(int));
558 
559  if ( im_ne_get_elem_map( id,
560  this->internal_elements,
561  this->border_elements,
562  0/* not used proc_id*/ ) < 0 )++error;
563 
564  if ( im_ne_get_node_map( id,
565  this->internal_nodes,
566  this->border_nodes,
567  this->external_nodes,
568  0/* not used proc_id*/ ) < 0 )++error;
569 
570 
571  if(this->num_node_comm_maps > 0){
572 
573  this->node_cmap_node_cnts = (int*) malloc(this->num_node_comm_maps*sizeof(int));
574  this->node_cmap_ids = (int*) malloc(this->num_node_comm_maps*sizeof(int));
575  this->comm_node_ids = (int**)malloc(this->num_node_comm_maps*sizeof(int*));
576  this->comm_node_proc_ids = (int**)malloc(this->num_node_comm_maps*sizeof(int*));
577 
578  this->elem_cmap_elem_cnts = (int*) malloc(this->num_elem_comm_maps*sizeof(int));
579  this->elem_cmap_ids = (int*) malloc(this->num_elem_comm_maps*sizeof(int));
580  this->comm_elem_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
581  this->comm_side_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
582  this->comm_elem_proc_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
583 
584  if ( im_ne_get_cmap_params( id,
585  this->node_cmap_ids,
586  (int*)this->node_cmap_node_cnts,
587  this->elem_cmap_ids,
588  (int*)this->elem_cmap_elem_cnts,
589  0/*not used proc_id*/ ) < 0 )++error;
590 
591  for(j = 0; j < this->num_node_comm_maps; j++) {
592  this->comm_node_ids[j] = (int *)malloc(this->node_cmap_node_cnts[j]*sizeof(int));
593  this->comm_node_proc_ids[j] = (int *)malloc(this->node_cmap_node_cnts[j]*sizeof(int));
594  if ( im_ne_get_node_cmap( id,
595  this->node_cmap_ids[j],
596  this->comm_node_ids[j],
597  this->comm_node_proc_ids[j],
598  0/*not used proc_id*/ ) < 0 )++error;
599 
600  }
601 
602 
603 
604  for(j = 0; j < this->num_elem_comm_maps; j++) {
605  this->comm_elem_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
606  this->comm_side_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
607  this->comm_elem_proc_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
608  if ( im_ne_get_elem_cmap( id,
609  this->elem_cmap_ids[j],
610  this->comm_elem_ids[j],
611  this->comm_side_ids[j],
612  this->comm_elem_proc_ids[j],
613  0 /*not used proc_id*/ ) < 0 )++error;
614 
615 
616  }/*loop over num_elem_co*/
617  }
618  }
619 
620  // compute element center coordinates
622 }
623 
625 {
626  this->element_coord = (double * )malloc(this->num_dim * this->num_elem * sizeof(double));
627  memset(this->element_coord, 0, this->num_dim * this->num_elem * sizeof(double));
628 
629  // loop over elements
630  int n_id = 0;
631 
632  int el_count = 0;
633  for(int i = 0; i < this->num_elem_blk; i++)
634  {
635  int els = this->elements[i];
636  int nperel = this->nodes_per_element[i];
637  // nodes for el
638  int * connect = this->elmt_node_linkage[i]; // get node con
639 
640  for(int j = 0; j < els; j++)
641  {
642 
643  // sum
644  for(int k = 0; k < nperel; k++)
645  {
646  n_id = connect[j*nperel + k]-1;
647  for(int l = 0; l < this->num_dim; l++)
648  element_coord[el_count + l * this->num_elem] += this->coord[n_id + l *this->num_nodes];
649  }
650 
651  // complete average
652  for(int k = 0; k < this->num_dim; k++)
653  element_coord[el_count + k*this->num_elem] /= nperel;
654 
655  el_count ++;
656  }
657  }
658 
659 }
660 
661 void PamgenMesh::createMesh(char * file_data, int dimension, const RCP<const Comm<int>> &comm)
662 {
663  int rank = comm->getRank();
664  int nproc = comm->getSize();
665  long long cr_result = Create_Pamgen_Mesh(file_data, dimension, rank, nproc, INT_MAX);
666 
667  if (cr_result == ERROR_PARSING_DEFINITION){
668  long long essz = getPamgenEchoStreamSize();
669  char * echo_char_array = (char *)malloc(essz+1);
670  printf("PARSE ERROR\n");
671  echo_char_array[essz] = '\0';
672  echo_char_array = getPamgenEchoStream(echo_char_array);
673  if(echo_char_array)printf("%s",echo_char_array);
674  if(cr_result == ERROR_CREATING_IMD)printf("ERROR Failure to create Inline_Mesh_Desc creation\n");
675  if(echo_char_array)free(echo_char_array);
676  }
677 
678  if(cr_result == ERROR_CREATING_MS){
679  long long essz = getPamgenErrorStreamSize();
680  char * error_char_array = (char *)malloc(essz+1);
681  error_char_array[essz] = '\0';
682  error_char_array = getPamgenErrorStream(error_char_array);
683  if(error_char_array)printf("%s",error_char_array);
684  printf("\nERROR Failure to create Mesh_Specification\n");
685  if(error_char_array)free(error_char_array);
686  }
687 
688 
689  long long wssz = getPamgenWarningStreamSize();
690  if(wssz){
691  char * warning_char_array = (char *)malloc(wssz+1);
692  warning_char_array[wssz] = '\0';
693  warning_char_array = getPamgenWarningStream(warning_char_array);
694  printf("WARNING Records\n");
695  printf("%s",warning_char_array);
696  free(warning_char_array);
697  }
698 
699 
700 // int issz = getPamgenInfoStreamSize();
701 // if(issz){
702 // char * info_char_array = (char *)malloc(issz+1);
703 // info_char_array[issz] = '\0';
704 // info_char_array = getPamgenInfoStream(info_char_array);
705 // printf("INFO Records\n");
706 // printf("%s",info_char_array);
707 // free(info_char_array);
708 // }
709 
710 }
711 
712 #endif
char buffer[3][MAX_STR_LENGTH+1]
void createMesh(char *file_data, int dimension, const RCP< const Comm< int >> &comm)
char title[MAX_STR_LENGTH]