Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Zoltan2_PamgenMeshStructure.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Zoltan2: A package of combinatorial algorithms for scientific computing
4 //
5 // Copyright 2012 NTESS and the Zoltan2 contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 /* \file Zoltan2_PamgenMeshStructure.hpp
11 * \brief A class for copying the state of a Pamgen mesh for easy access
12 */
13 
14 #ifndef PAMGEN_MESH_STRUCTURE
15 #define PAMGEN_MESH_STRUCTURE
16 
17 #ifdef HAVE_ZOLTAN2_PAMGEN
18 
19 #include <Pamgen_config.h>
20 #include <create_inline_mesh.h>
21 #include <limits.h>
22 #include <pamgen_im_exodusII.h>
23 #include <pamgen_im_ne_nemesisI.h>
24 
25 
26 class PamgenMesh{
27 public:
28 
29  /* \brief Destructor */
30  ~PamgenMesh(); // free memory
31 
32  /* \bried Method for calling the Pamgen Mesh constructor
33  * \param[in] file_data is the input file describing the pamgen mesh read into a char array
34  * \param[in] dimension is the dimension of the problem, i.e. 1,2, or 3
35  * \param[in] comm is the process communicator
36  */
37  void createMesh(char * file_data, int dimension, const RCP<const Comm<int>> &comm);
38 
39  /* \bried Method for copying the state of a Pamgen mesh once it has been created
40  */
41  void storeMesh(); // read mesh to memory
42 
43  /* Metod for computing the coordinates of the element centers */
44  void computeElementCoordinates();
45 
46  int num_dim;
47  int num_nodes;
48  int num_elem;
49  int num_elem_blk;
50  int num_node_sets;
51  int num_side_sets;
52  int num_node_set_nodes;
53  int num_node_set_dfs;
54  int num_side_set_elements;
55  int num_side_set_nodes;
56  int num_side_set_dfs;
57  int num_block_properties;
58  int num_node_set_properties;
59  int num_side_set_properties;
60 
61  char title[MAX_STR_LENGTH];
62 
63  int version;
64  double version_number;
65  double * coord;
66  double * element_coord;
67 
68  char buffer[3][MAX_STR_LENGTH + 1];
69  char *bptr[3];
70 
71  int * element_order_map ;
72 
73  int * global_element_numbers ;
74  int * global_node_numbers ;
75 
76  /*block info*/
77  int * block_id ;
78  char ** element_types ;
79  int * elements ;
80  int * nodes_per_element ;
81  int * element_attributes ;
82  int ** elmt_node_linkage ;
83 
84  /*side sets*/
85  int * side_set_id ;
86  int * num_elements_in_side_set ;
87  int * num_df_in_side_set ;
88  int **side_set_elements ;
89  int **side_set_faces ;
90 
91  /*node sets*/
92  int * node_set_id ;
93  int * num_nodes_in_node_set ;
94  int * num_df_in_node_set ;
95  int **node_set_nodes ;
96 
97  /*qa*/
98  int num_qa_records;
99  int num_info_records;
100  char* qaRecord[100][4];
101  char** info_records ;
102 
103  /*nemesis data*/
104  int num_nodes_global;
105  int num_elems_global;
106  int num_elm_blks_global;
107  int num_node_sets_global;
108  int num_side_sets_global;
109  int num_total_proc;
110  int num_proc_in_file;
111  char type[2];
112 
113  /*nemesis data
114  global info*/
115 
116  int * elem_blk_ids_global ;
117  int * elem_blk_cnts_global ;
118 
119  int * ns_ids_global ;
120  int * ns_cnts_global ;
121  int * ns_df_cnts_global ;
122  int * ss_ids_global ;
123  int * ss_cnts_global ;
124  int * ss_df_cnts_global ;
125 
126  /*parallel info*/
127  int num_internal_nodes;
128  int num_border_nodes;
129  int num_external_nodes;
130  int num_internal_elems;
131  int num_border_elems;
132  int num_node_comm_maps;
133  int num_elem_comm_maps;
134 
135  int * internal_elements ;
136  int * border_elements ;
137  int * internal_nodes ;
138  int * border_nodes ;
139  int * external_nodes ;
140 
141  int * node_cmap_node_cnts ;
142  int * node_cmap_ids ;
143  int * elem_cmap_elem_cnts ;
144  int * elem_cmap_ids ;
145 
146  int ** comm_node_ids ;
147  int ** comm_node_proc_ids ;
148  int ** comm_elem_ids ;
149  int ** comm_side_ids ;
150  int ** comm_elem_proc_ids ;
151 
152 };
153 
154 
155 PamgenMesh::~PamgenMesh()
156 {
157  // free mesh
158  Delete_Pamgen_Mesh();
159 
160  // free storage
161  int i;
162  int j;
163  int b;
164  for( i = 0; i < 100; i++){
165  for( j=0; j<4; j++){
166  free(this->qaRecord[i][j]);
167  }
168  }
169 
170  free(this->coord); // free vertex coords
171  free(this->element_coord);
172 
173 
174  if (this->num_elem){
175  free(this->element_order_map);
176 
177  if (this->num_elem){
178  free(this->global_element_numbers);
179  }
180 
181  if (this->num_nodes){
182  free(this->global_node_numbers);
183  }
184 
185 
186  /*block info*/
187  free(this->block_id);
188  free(this->nodes_per_element);
189  free(this->element_attributes);
190  free(this->elements);
191 
192 
193  for(i = 0; i < this->num_elem_blk; i ++){
194  free(this->element_types[i]);
195  }
196 
197  /*connectivity*/
198  for(b = 0; b < this->num_elem_blk; b++){
199  free(this->elmt_node_linkage[b]);
200  }
201  free(this->element_types);
202  free(this->elmt_node_linkage);
203 
204 
205  if(this->num_node_sets){
206 
207  for(i = 0; i < this->num_node_sets; i ++){
208  if(this->num_nodes_in_node_set[i]) {
209  free(this->node_set_nodes[i]);
210  }
211  }
212  free(this->node_set_id);
213  free(this->num_nodes_in_node_set);
214  free(this->node_set_nodes);
215  free(this->num_df_in_node_set);
216 
217  }
218 
219  /*side sets*/
220  if(this->num_side_sets){
221 
222  for(i = 0; i < this->num_side_sets; i ++){
223 
224  free(this->side_set_elements[i]);
225  free(this->side_set_faces[i]);
226 
227  }
228  free(this->side_set_id);
229  free(this->num_elements_in_side_set);
230  free(this->num_df_in_side_set);
231  free(this->side_set_elements);
232  free(this->side_set_faces);
233  }
234 
235 
236  if(this->num_info_records) {
237  for(i = 0; i < this->num_info_records; i ++){
238  free(this->info_records[i]);
239  }
240  free(this->info_records);
241  }
242 
243 
244  /*nemesis data
245  global info */
246  free(this->elem_blk_ids_global);
247  free(this->elem_blk_cnts_global);
248 
249  free(this->ns_ids_global);
250  free(this->ns_cnts_global);
251  free(this->ns_df_cnts_global);
252  free(this->ss_ids_global);
253  free(this->ss_cnts_global);
254  free(this->ss_df_cnts_global);
255 
256  free(this->internal_elements);
257  free(this->border_elements);
258  free(this->internal_nodes);
259  free(this->border_nodes);
260  free(this->external_nodes);
261 
262  if(this->num_node_comm_maps > 0){
263 
264  for(j = 0; j < this->num_node_comm_maps; j++) {
265  free(this->comm_node_ids[j]);
266  free(this->comm_node_proc_ids[j]);
267 
268  }
269 
270 
271  for(j = 0; j < this->num_elem_comm_maps; j++) {
272  free(this->comm_elem_ids[j]);
273  free(this->comm_side_ids[j]);
274  free(this->comm_elem_proc_ids[j]);
275 
276  }/*loop over num_elem_co*/
277  }
278 
279  if(this->num_node_comm_maps > 0)
280  {
281  free(this->node_cmap_node_cnts);
282  free(this->node_cmap_ids);
283  free(this->comm_node_ids);
284  free(this->comm_node_proc_ids);
285 
286  free(this->elem_cmap_elem_cnts);
287  free(this->elem_cmap_ids);
288  free(this->comm_elem_ids);
289  free(this->comm_side_ids);
290  free(this->comm_elem_proc_ids);
291  }
292 
293  }
294 
295 }
296 
297 void PamgenMesh::storeMesh()
298 {
299 
300  int idum = 0;
301  float fdum;
302  int i;
303  int j;
304  int b;
305  char * cdum = NULL;
306  int error = 0;
307  int id = 0;
308 
309  this->bptr[0] = this->buffer[0];
310  this->bptr[1] = this->buffer[1];
311  this->bptr[2] = this->buffer[2];
312 
313  for(i = 0; i < 100; i++)
314  for(j=0; j<4; j++) this->qaRecord[i][j] = (char*)malloc(MAX_STR_LENGTH+1) ;
315 
316 
317  error += im_ex_get_init ( id,
318  this->title,
319  &this->num_dim,
320  &(this->num_nodes),
321  &this->num_elem,
322  &this->num_elem_blk,
323  &this->num_node_sets,
324  &this->num_side_sets);
325 
326 
327  error += im_ex_inquire(id, IM_EX_INQ_NS_NODE_LEN, (int*)&this->num_node_set_nodes,
328  &fdum, cdum);
329  error += im_ex_inquire
330  (id, IM_EX_INQ_NS_DF_LEN, (int*)&this->num_node_set_dfs,
331  &fdum, cdum);
332  error += im_ex_inquire(id, IM_EX_INQ_SS_ELEM_LEN, (int*)&this->num_side_set_elements,
333  &fdum, cdum);
334  error += im_ex_inquire(id, IM_EX_INQ_SS_NODE_LEN, (int*)&this->num_side_set_nodes,
335  &fdum, cdum);
336  error += im_ex_inquire(id, IM_EX_INQ_SS_DF_LEN, (int*)&this->num_side_set_dfs,
337  &fdum, cdum);
338 
339  /* get version number */
340 
341  error += im_ex_inquire(id, IM_EX_INQ_API_VERS, &idum, &fdum, cdum);
342 
343  this->version_number = (double) fdum;
344 
345  this->version = (int) this->version_number;
346 
347  /* get genesis-II parameters */
348 
349  error += im_ex_inquire(id, IM_EX_INQ_EB_PROP, (int*)&this->num_block_properties, &fdum, cdum);
350 
351  error += im_ex_inquire(id, IM_EX_INQ_NS_PROP, (int*)&this->num_node_set_properties,
352  &fdum, cdum);
353 
354  error += im_ex_inquire(id, IM_EX_INQ_SS_PROP, (int*)&this->num_side_set_properties,
355  &fdum, cdum);
356 
357  this->coord = (double *)malloc(this->num_nodes*this->num_dim*sizeof(double));
358 
359  error += im_ex_get_coord(id,this->coord,this->coord+this->num_nodes,this->coord+2*this->num_nodes);
360 
361 
362  error += im_ex_get_coord_names (id, this->bptr);
363 
364  if (this->num_elem){
365  this->element_order_map = (int *)malloc(this->num_elem * sizeof(int));
366  error += im_ex_get_map(id, this->element_order_map);
367 
368  if (this->num_elem){
369  this->global_element_numbers = (int *)malloc(this->num_elem*sizeof(int));
370  error += im_ex_get_elem_num_map(id, this->global_element_numbers);
371  }
372 
373  if (this->num_nodes){
374  this->global_node_numbers = (int *)malloc(this->num_nodes * sizeof(int));
375  error += im_ex_get_node_num_map(id, this->global_node_numbers);
376  }
377 
378 
379  /*block info*/
380 
381  this->block_id = (int *)malloc(this->num_elem_blk*sizeof(int));
382  this->nodes_per_element = (int *)malloc(this->num_elem_blk*sizeof(int));
383  this->element_attributes = (int *)malloc(this->num_elem_blk*sizeof(int));
384  this->elements = (int *)malloc(this->num_elem_blk*sizeof(int));
385  this->element_types = (char **)malloc(this->num_elem_blk*sizeof(char *));
386  this->elmt_node_linkage = (int **)malloc(this->num_elem_blk*sizeof(int*));
387 
388  error += im_ex_get_elem_blk_ids(id, this->block_id);
389 
390  for(i = 0; i < this->num_elem_blk; i ++){
391  this->element_types[i] = (char *)malloc((MAX_STR_LENGTH + 1)*sizeof(char));
392  error += im_ex_get_elem_block(id,
393  this->block_id[i],
394  this->element_types[i],
395  (int*)&(this->elements[i]),
396  (int*)&(this->nodes_per_element[i]),
397  (int*)&(this->element_attributes[i]));
398  }
399 
400  /*connectivity*/
401  for(b = 0; b < this->num_elem_blk; b++){
402  this->elmt_node_linkage[b] = (int*)malloc(this->nodes_per_element[b]*this->elements[b]*sizeof(int));
403  error += im_ex_get_elem_conn(id,this->block_id[b],this->elmt_node_linkage[b]);
404  }
405 
406 
407  if(this->num_node_sets){
408  this->node_set_id = (int *) malloc(this->num_node_sets*sizeof(int));
409  this->num_nodes_in_node_set = (int *) malloc(this->num_node_sets*sizeof(int));
410  this->node_set_nodes = (int **)malloc(this->num_node_sets*sizeof(int*));
411  this->num_df_in_node_set = (int *) malloc(this->num_node_sets*sizeof(int*));
412 
413  error += im_ex_get_node_set_ids(id, this->node_set_id);
414 
415 
416  for(i = 0; i < this->num_node_sets; i ++){
417  error += im_ex_get_node_set_param(id, this->node_set_id[i],
418  (int*)&this->num_nodes_in_node_set[i],
419  (int*)&this->num_df_in_node_set[i]);
420 
421  this->node_set_nodes[i] = NULL;
422 
423  if(this->num_nodes_in_node_set[i]) {
424  this->node_set_nodes[i] = (int *)malloc(this->num_nodes_in_node_set[i]*sizeof(int));
425  error += im_ex_get_node_set(id, this->node_set_id[i], this->node_set_nodes[i]);
426  }
427  }
428  }
429 
430  /*side sets*/
431  if(this->num_side_sets){
432  this->side_set_id = (int*)malloc(this->num_side_sets*sizeof(int));
433  this->num_elements_in_side_set = (int*)malloc(this->num_side_sets*sizeof(int));
434  this->num_df_in_side_set = (int*)malloc(this->num_side_sets*sizeof(int));
435  this->side_set_elements = (int**)malloc(this->num_side_sets*sizeof(int *));
436  this->side_set_faces = (int **)malloc(this->num_side_sets*sizeof(int*));
437 
438  error += im_ex_get_side_set_ids(id, this->side_set_id);
439  for(i = 0; i < this->num_side_sets; i ++){
440  int ne = 0;
441  error += im_ex_get_side_set_param(id, this->side_set_id[i],
442  (int*)&this->num_elements_in_side_set[i],
443  (int*)&this->num_df_in_side_set[i]);
444 
445  ne = this->num_elements_in_side_set[i];
446  this->side_set_elements[i] = (int*)malloc(ne*sizeof(int));
447  this->side_set_faces[i] = (int*)malloc(ne*sizeof(int));
448  if(ne){
449  error += im_ex_get_side_set(id, this->side_set_id[i],
450  this->side_set_elements[i],
451  this->side_set_faces[i]);
452 
453  }
454  }
455  }
456 
457  error += im_ex_inquire(id, IM_EX_INQ_QA, (int*)&this->num_qa_records, &fdum, cdum);
458 
459  if(this->num_qa_records)error += im_ex_get_qa(id,this->qaRecord);
460 
461 
462  error += im_ex_inquire(id, IM_EX_INQ_INFO, (int*)&this->num_info_records, &fdum, cdum);
463  if(this->num_info_records) {
464  this->info_records = (char **)malloc(this->num_info_records*sizeof(char *));/*new std::string[num_info_records];*/
465  for(i = 0; i < this->num_info_records; i ++){
466  this->info_records[i] = (char *)malloc(MAX_STR_LENGTH+1);
467  }
468  error += im_ex_get_info(id, this->info_records);
469  }
470 
471 
472  /*nemesis data
473  global info*/
474  if ( im_ne_get_init_global(id, &this->num_nodes_global, &this->num_elems_global,
475  &this->num_elm_blks_global, &this->num_node_sets_global,
476  &this->num_side_sets_global) < 0 )
477  ++error;
478 
479 
480 
481  if ( im_ne_get_init_info(id, &this->num_total_proc, &this->num_proc_in_file, this->type) < 0 )
482  ++error;
483 
484  this->elem_blk_ids_global = (int*)malloc(this->num_elm_blks_global*sizeof(int));
485  this->elem_blk_cnts_global = (int*)malloc(this->num_elm_blks_global*sizeof(int));
486 
487  if ( im_ne_get_eb_info_global(id,this->elem_blk_ids_global,this->elem_blk_cnts_global) < 0 )
488  ++error;
489 
490  this->ns_ids_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
491  this->ns_cnts_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
492  this->ns_df_cnts_global = (int *)malloc(this->num_node_sets_global*sizeof(int));
493  this->ss_ids_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
494  this->ss_cnts_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
495  this->ss_df_cnts_global = (int *)malloc(this->num_side_sets_global*sizeof(int));
496 
497 
498  if ( this->num_node_sets_global > 0 ) {
499  if ( im_ne_get_ns_param_global(id,this->ns_ids_global,this->ns_cnts_global,
500  this->ns_df_cnts_global) < 0 )++error;
501  }
502 
503  if ( this->num_side_sets_global > 0 ) {
504  if ( im_ne_get_ss_param_global(id,this->ss_ids_global,this->ss_cnts_global,
505  this->ss_df_cnts_global) < 0 ) ++error;
506  }
507 
508  /*parallel info*/
509  if ( im_ne_get_loadbal_param( id,
510  &this->num_internal_nodes,
511  &this->num_border_nodes,
512  &this->num_external_nodes,
513  &this->num_internal_elems,
514  &this->num_border_elems,
515  &this->num_node_comm_maps,
516  &this->num_elem_comm_maps,
517  0/*unused*/ ) < 0 )++error;
518 
519  this->internal_elements = (int *)malloc(this->num_internal_elems*sizeof(int));
520  this->border_elements = (int *)malloc(this->num_border_elems*sizeof(int));
521  this->internal_nodes = (int *)malloc(this->num_internal_nodes*sizeof(int));
522  this->border_nodes = (int *)malloc(this->num_border_nodes*sizeof(int));
523  this->external_nodes = (int *)malloc(this->num_external_nodes*sizeof(int));
524 
525  if ( im_ne_get_elem_map( id,
526  this->internal_elements,
527  this->border_elements,
528  0/* not used proc_id*/ ) < 0 )++error;
529 
530  if ( im_ne_get_node_map( id,
531  this->internal_nodes,
532  this->border_nodes,
533  this->external_nodes,
534  0/* not used proc_id*/ ) < 0 )++error;
535 
536 
537  if(this->num_node_comm_maps > 0){
538 
539  this->node_cmap_node_cnts = (int*) malloc(this->num_node_comm_maps*sizeof(int));
540  this->node_cmap_ids = (int*) malloc(this->num_node_comm_maps*sizeof(int));
541  this->comm_node_ids = (int**)malloc(this->num_node_comm_maps*sizeof(int*));
542  this->comm_node_proc_ids = (int**)malloc(this->num_node_comm_maps*sizeof(int*));
543 
544  this->elem_cmap_elem_cnts = (int*) malloc(this->num_elem_comm_maps*sizeof(int));
545  this->elem_cmap_ids = (int*) malloc(this->num_elem_comm_maps*sizeof(int));
546  this->comm_elem_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
547  this->comm_side_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
548  this->comm_elem_proc_ids = (int**)malloc(this->num_elem_comm_maps*sizeof(int*));
549 
550  if ( im_ne_get_cmap_params( id,
551  this->node_cmap_ids,
552  (int*)this->node_cmap_node_cnts,
553  this->elem_cmap_ids,
554  (int*)this->elem_cmap_elem_cnts,
555  0/*not used proc_id*/ ) < 0 )++error;
556 
557  for(j = 0; j < this->num_node_comm_maps; j++) {
558  this->comm_node_ids[j] = (int *)malloc(this->node_cmap_node_cnts[j]*sizeof(int));
559  this->comm_node_proc_ids[j] = (int *)malloc(this->node_cmap_node_cnts[j]*sizeof(int));
560  if ( im_ne_get_node_cmap( id,
561  this->node_cmap_ids[j],
562  this->comm_node_ids[j],
563  this->comm_node_proc_ids[j],
564  0/*not used proc_id*/ ) < 0 )++error;
565 
566  }
567 
568 
569 
570  for(j = 0; j < this->num_elem_comm_maps; j++) {
571  this->comm_elem_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
572  this->comm_side_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
573  this->comm_elem_proc_ids[j] = (int *)malloc(this->elem_cmap_elem_cnts[j]*sizeof(int));
574  if ( im_ne_get_elem_cmap( id,
575  this->elem_cmap_ids[j],
576  this->comm_elem_ids[j],
577  this->comm_side_ids[j],
578  this->comm_elem_proc_ids[j],
579  0 /*not used proc_id*/ ) < 0 )++error;
580 
581 
582  }/*loop over num_elem_co*/
583  }
584  }
585 
586  // compute element center coordinates
587  this->computeElementCoordinates();
588 }
589 
590 void PamgenMesh::computeElementCoordinates()
591 {
592  this->element_coord = (double * )malloc(this->num_dim * this->num_elem * sizeof(double));
593  memset(this->element_coord, 0, this->num_dim * this->num_elem * sizeof(double));
594 
595  // loop over elements
596  int n_id = 0;
597 
598  int el_count = 0;
599  for(int i = 0; i < this->num_elem_blk; i++)
600  {
601  int els = this->elements[i];
602  int nperel = this->nodes_per_element[i];
603  // nodes for el
604  int * connect = this->elmt_node_linkage[i]; // get node con
605 
606  for(int j = 0; j < els; j++)
607  {
608 
609  // sum
610  for(int k = 0; k < nperel; k++)
611  {
612  n_id = connect[j*nperel + k]-1;
613  for(int l = 0; l < this->num_dim; l++)
614  element_coord[el_count + l * this->num_elem] += this->coord[n_id + l *this->num_nodes];
615  }
616 
617  // complete average
618  for(int k = 0; k < this->num_dim; k++)
619  element_coord[el_count + k*this->num_elem] /= nperel;
620 
621  el_count ++;
622  }
623  }
624 
625 }
626 
627 void PamgenMesh::createMesh(char * file_data, int dimension, const RCP<const Comm<int>> &comm)
628 {
629  int rank = comm->getRank();
630  int nproc = comm->getSize();
631  long long cr_result = Create_Pamgen_Mesh(file_data, dimension, rank, nproc, INT_MAX);
632 
633  if (cr_result == ERROR_PARSING_DEFINITION){
634  long long essz = getPamgenEchoStreamSize();
635  char * echo_char_array = (char *)malloc(essz+1);
636  printf("PARSE ERROR\n");
637  echo_char_array[essz] = '\0';
638  echo_char_array = getPamgenEchoStream(echo_char_array);
639  if(echo_char_array)printf("%s",echo_char_array);
640  if(cr_result == ERROR_CREATING_IMD)printf("ERROR Failure to create Inline_Mesh_Desc creation\n");
641  if(echo_char_array)free(echo_char_array);
642  }
643 
644  if(cr_result == ERROR_CREATING_MS){
645  long long essz = getPamgenErrorStreamSize();
646  char * error_char_array = (char *)malloc(essz+1);
647  error_char_array[essz] = '\0';
648  error_char_array = getPamgenErrorStream(error_char_array);
649  if(error_char_array)printf("%s",error_char_array);
650  printf("\nERROR Failure to create Mesh_Specification\n");
651  if(error_char_array)free(error_char_array);
652  }
653 
654 
655  long long wssz = getPamgenWarningStreamSize();
656  if(wssz){
657  char * warning_char_array = (char *)malloc(wssz+1);
658  warning_char_array[wssz] = '\0';
659  warning_char_array = getPamgenWarningStream(warning_char_array);
660  printf("WARNING Records\n");
661  printf("%s",warning_char_array);
662  free(warning_char_array);
663  }
664 
665 
666 // int issz = getPamgenInfoStreamSize();
667 // if(issz){
668 // char * info_char_array = (char *)malloc(issz+1);
669 // info_char_array[issz] = '\0';
670 // info_char_array = getPamgenInfoStream(info_char_array);
671 // printf("INFO Records\n");
672 // printf("%s",info_char_array);
673 // free(info_char_array);
674 // }
675 
676 }
677 
678 #endif
679 
680 #endif