2
* ADIOS is freely available under the terms of the BSD license described
3
* in the COPYING file in the top level directory of this source distribution.
5
* Copyright (c) 2008 - 2009. UT-BATTELLE, LLC. All rights reserved.
12
#include "public/adios_error.h"
13
#include "core/adios_logger.h"
14
#include "core/common_read.h"
15
#include "core/adios_read_hooks.h"
16
#include "core/futils.h"
17
#include "core/bp_utils.h" // struct namelists_struct
25
/* Note: MATLAB reloads the mex64 files each time, so all static variables get the original value.
26
Therefore static variables cannot be used to pass info between two Matlab/ADIOS calls */
27
static struct adios_read_hooks_struct * adios_read_hooks = 0;
29
struct common_read_internals_struct {
30
enum ADIOS_READ_METHOD method;
31
struct adios_read_hooks_struct * read_hooks; /* Save adios_read_hooks for each fopen for Matlab */
33
/* Group view information *//* Actual method provides the group names */
35
char ** group_namelist;
36
int * nvars_per_group; /* # of variables per each group */
37
int * nattrs_per_group; /* # of attributes per each group */
38
int group_in_view; /* 0..ngroups-1: selected group in view,
40
int group_varid_offset; /* offset of var IDs from specific group to full list
41
if a selected group is in view */
42
int group_attrid_offset;
43
int full_nvars; /* fp->nvars to save here for a group view */
44
char ** full_varnamelist; /* fp->var_namelist to save here if one group is viewed */
45
int full_nattrs; /* fp->nvars to save here for a group view */
46
char ** full_attrnamelist; /* fp->attr_namelist to save here if one group is viewed */
50
int common_read_init_method (enum ADIOS_READ_METHOD method,
52
const char * parameters)
54
PairStruct *params, *p, *prev_p;
55
int verbose_level, removeit, save;
59
adios_errno = err_no_error;
60
if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
61
adios_error (err_invalid_read_method,
62
"Invalid read method (=%d) passed to adios_read_init_method().\n", (int)method);
63
return err_invalid_read_method;
65
// init the adios_read_hooks_struct if not yet initialized
66
adios_read_hooks_init (&adios_read_hooks);
68
// process common parameters here
69
params = text_to_name_value_pairs (parameters);
74
if (!strcasecmp (p->name, "verbose"))
78
verbose_level = strtol(p->value, &end, 10);
79
if (errno || (end != 0 && *end != '\0')) {
80
log_error ("Invalid 'verbose' parameter passed to read init function: '%s'\n", p->value);
81
verbose_level = 1; // print errors only
84
verbose_level = 3; // info level
86
adios_verbose_level = verbose_level;
89
else if (!strcasecmp (p->name, "quiet"))
91
adios_verbose_level = 0; //don't print errors
94
else if (!strcasecmp (p->name, "logfile"))
97
adios_logger_open (p->value, -1);
101
else if (!strcasecmp (p->name, "abort_on_error"))
103
adios_abort_on_error = 1;
104
save = adios_verbose_level;
105
adios_verbose_level = 2;
106
log_warn ("ADIOS is set to abort on error\n");
107
adios_verbose_level = save;
115
free_name_value_pairs (params);
118
// remove from middle of the list
119
prev_p->next = p->next;
121
free_name_value_pairs (p);
130
// call method specific init
131
retval = adios_read_hooks[method].adios_init_method_fn (comm, params);
132
free_name_value_pairs (params);
137
int common_read_finalize_method(enum ADIOS_READ_METHOD method)
139
adios_errno = err_no_error;
140
if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
141
adios_error (err_invalid_read_method,
142
"Invalid read method (=%d) passed to adios_read_finalize_method().\n", (int)method);
143
return err_invalid_read_method;
146
return adios_read_hooks[method].adios_finalize_method_fn ();
150
ADIOS_FILE * common_read_open (const char * fname,
151
enum ADIOS_READ_METHOD method,
153
enum ADIOS_LOCKMODE lock_mode,
157
struct common_read_internals_struct * internals;
159
if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
160
adios_error (err_invalid_read_method,
161
"Invalid read method (=%d) passed to adios_read_open().\n", (int)method);
165
adios_errno = err_no_error;
166
internals = (struct common_read_internals_struct *)
167
calloc(1,sizeof(struct common_read_internals_struct));
168
// init the adios_read_hooks_struct if not yet initialized
169
adios_read_hooks_init (&adios_read_hooks);
171
internals->method = method;
172
internals->read_hooks = adios_read_hooks;
174
fp = adios_read_hooks[internals->method].adios_open_fn (fname, comm, lock_mode, timeout_sec);
176
// save the method and group information in fp->internal_data
178
adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups,
179
&internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
180
internals->group_in_view = -1;
181
internals->group_varid_offset = 0;
182
internals->group_attrid_offset = 0;
183
fp->internal_data = (void *)internals;
191
ADIOS_FILE * common_read_open_file (const char * fname,
192
enum ADIOS_READ_METHOD method,
196
struct common_read_internals_struct * internals;
198
if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
199
adios_error (err_invalid_read_method,
200
"Invalid read method (=%d) passed to adios_read_open_file().\n", (int)method);
204
adios_errno = err_no_error;
205
internals = (struct common_read_internals_struct *)
206
calloc(1,sizeof(struct common_read_internals_struct));
207
// init the adios_read_hooks_struct if not yet initialized
208
adios_read_hooks_init (&adios_read_hooks);
210
internals->method = method;
211
internals->read_hooks = adios_read_hooks;
213
fp = adios_read_hooks[internals->method].adios_open_file_fn (fname, comm);
215
// save the method and group information in fp->internal_data
217
adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups,
218
&internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
219
internals->group_in_view = -1;
220
internals->group_varid_offset = 0;
221
internals->group_attrid_offset = 0;
222
fp->internal_data = (void *)internals;
229
int common_read_close (ADIOS_FILE *fp)
231
struct common_read_internals_struct * internals;
234
adios_errno = err_no_error;
236
internals = (struct common_read_internals_struct *) fp->internal_data;
237
if (internals->group_in_view != -1) {
238
// reset from group view before calling the real close
239
common_read_group_view (fp, -1);
241
retval = internals->read_hooks[internals->method].adios_close_fn (fp);
242
free_namelist (internals->group_namelist, internals->ngroups);
243
free (internals->nvars_per_group);
244
free (internals->nattrs_per_group);
247
adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_read_close()\n");
248
retval = err_invalid_file_pointer;
253
void common_read_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
255
struct common_read_internals_struct * internals;
257
adios_errno = err_no_error;
259
internals = (struct common_read_internals_struct *) fp->internal_data;
260
internals->read_hooks[internals->method].adios_reset_dimension_order_fn (fp, is_fortran);
262
adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_reset_dimension_order()\n");
267
int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
269
struct common_read_internals_struct * internals;
272
adios_errno = err_no_error;
274
internals = (struct common_read_internals_struct *) fp->internal_data;
275
retval = internals->read_hooks[internals->method].adios_advance_step_fn (fp, last, timeout_sec);
277
/* Update group information too */
278
adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups,
279
&internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
280
if (internals->group_in_view > -1) {
281
/* if we have a group view, we need to update the presented list again */
282
/* advance_step updated fp->nvars, nattrs, var_namelist, attr_namelist */
283
int groupid = internals->group_in_view;
284
internals->group_in_view = -1; // we have the full view at this moment
285
common_read_group_view (fp, groupid);
289
adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_advance_step()\n");
290
retval = err_invalid_file_pointer;
296
void common_read_release_step (ADIOS_FILE *fp)
298
struct common_read_internals_struct * internals;
300
adios_errno = err_no_error;
302
internals = (struct common_read_internals_struct *) fp->internal_data;
303
internals->read_hooks[internals->method].adios_release_step_fn (fp);
305
adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_reset_dimension_order()\n");
310
static int common_read_find_name (int n, char ** namelist, const char *name, int role)
312
/** Find a string name in a list of names and return the index.
313
Search should work with starting / characters and without.
314
Create adios error and return -1 if name is null or
315
if name is not found in the list.
316
role = 0 for variable search, 1 for attribute search
318
int id, nstartpos=0, sstartpos;
319
char ** s = namelist;
320
char *rolename[2] = { "variable", "attribute" };
321
enum ADIOS_ERRCODES roleerror[2] = { err_invalid_varname, err_invalid_attrname };
324
adios_error (roleerror[role!=0], "Null pointer passed as %s name!\n", rolename[role!=0]);
328
// find names with or without beginning /
329
if (*name == '/') nstartpos = 1;
331
for (id=0; id < n; id++) {
332
if (*s[0] == '/') sstartpos = 1;
334
//DBG_PRINTF(" check %s, startpos=%d\n", *s, sstartpos);
335
if (!strcmp (*s+sstartpos, name+nstartpos))
336
break; // found this name
341
adios_error (roleerror[role!=0], "%s '%s' is not found! One "
342
"possible error is to set the view to a specific group and "
343
"then try to read a %s of another group. In this case, "
344
"reset the group view with adios_group_view(fp,-1).\n",
345
rolename[role!=0], name, rolename[role!=0]);
352
ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE *fp, const char * varname)
354
struct common_read_internals_struct * internals;
355
ADIOS_VARINFO * retval;
357
adios_errno = err_no_error;
359
internals = (struct common_read_internals_struct *) fp->internal_data;
360
int varid = common_read_find_name (fp->nvars, fp->var_namelist, varname, 0);
362
retval = common_read_inq_var_byid (fp, varid);
367
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_inq_var()\n");
374
ADIOS_VARINFO * common_read_inq_var_byid (const ADIOS_FILE *fp, int varid)
376
struct common_read_internals_struct * internals;
377
ADIOS_VARINFO * retval;
379
adios_errno = err_no_error;
381
if (varid >= 0 && varid < fp->nvars) {
382
internals = (struct common_read_internals_struct *) fp->internal_data;
383
/* Translate varid to varid in global varlist if a selected group is in view */
384
retval = internals->read_hooks[internals->method].adios_inq_var_byid_fn
385
(fp, varid+internals->group_varid_offset);
387
/* Translate real varid to the group varid presented to the user */
388
retval->varid = varid;
391
adios_error (err_invalid_varid,
392
"Variable ID %d is not valid adios_inq_var_byid(). "
393
"Available 0..%d\n", varid, fp->nvars-1);
397
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_inq_var_byid()\n");
404
int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
405
int per_step_stat, int per_block_stat)
407
struct common_read_internals_struct * internals;
411
adios_errno = err_no_error;
413
internals = (struct common_read_internals_struct *) fp->internal_data;
415
/* Translate group varid presented to the user to the real varid */
416
group_varid = varinfo->varid;
417
varinfo->varid = varinfo->varid + internals->group_varid_offset;
419
retval = internals->read_hooks[internals->method].adios_inq_var_stat_fn (fp, varinfo, per_step_stat, per_block_stat);
420
/* Translate back real varid to the group varid presented to the user */
421
varinfo->varid = group_varid;
423
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_inq_var_stat()\n");
424
retval = err_invalid_file_pointer;
429
int common_read_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
431
struct common_read_internals_struct * internals;
435
adios_errno = err_no_error;
437
internals = (struct common_read_internals_struct *) fp->internal_data;
439
/* Translate group varid presented to the user to the real varid */
440
group_varid = varinfo->varid;
441
varinfo->varid = varinfo->varid + internals->group_varid_offset;
443
retval = internals->read_hooks[internals->method].adios_inq_var_blockinfo_fn (fp, varinfo);
444
/* Translate back real varid to the group varid presented to the user */
445
varinfo->varid = group_varid;
447
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_inq_var_blockinfo()\n");
448
retval = err_invalid_file_pointer;
453
#define MYFREE(p) {free(p); p=NULL;}
454
void common_read_free_varinfo (ADIOS_VARINFO *vp)
459
ADIOS_VARBLOCK *bp = vp->blockinfo;
460
for (i=0; i<vp->sum_nblocks; i++) {
461
if (bp->start) MYFREE (bp->start);
462
if (bp->count) MYFREE (bp->count);
465
MYFREE(vp->blockinfo);
468
if (vp->statistics) {
469
ADIOS_VARSTAT *sp = vp->statistics;
470
if (sp->min && sp->min != vp->value) MYFREE(sp->min);
471
if (sp->max && sp->max != vp->value) MYFREE(sp->max);
472
if (sp->avg && sp->avg != vp->value) MYFREE(sp->avg);
473
if (sp->std_dev) MYFREE(sp->std_dev);
476
if (sp->steps->mins) MYFREE(sp->steps->mins);
477
if (sp->steps->maxs) MYFREE(sp->steps->maxs);
478
if (sp->steps->avgs) MYFREE(sp->steps->avgs);
479
if (sp->steps->std_devs) MYFREE(sp->steps->std_devs);
484
if (sp->blocks->mins) MYFREE(sp->blocks->mins);
485
if (sp->blocks->maxs) MYFREE(sp->blocks->maxs);
486
if (sp->blocks->avgs) MYFREE(sp->blocks->avgs);
487
if (sp->blocks->std_devs) MYFREE(sp->blocks->std_devs);
492
if (sp->histogram->breaks) MYFREE(sp->histogram->breaks);
493
if (sp->histogram->frequencies) MYFREE(sp->histogram->frequencies);
494
if (sp->histogram->gfrequencies) MYFREE(sp->histogram->gfrequencies);
495
MYFREE(sp->histogram);
498
MYFREE(vp->statistics);
501
if (vp->dims) MYFREE(vp->dims);
502
if (vp->value) MYFREE(vp->value);
503
if (vp->nblocks) MYFREE(vp->nblocks);
510
int common_read_schedule_read (const ADIOS_FILE * fp,
511
const ADIOS_SELECTION * sel,
512
const char * varname,
518
struct common_read_internals_struct * internals;
521
adios_errno = err_no_error;
523
internals = (struct common_read_internals_struct *) fp->internal_data;
524
int varid = common_read_find_name (fp->nvars, fp->var_namelist, varname, 0);
526
retval = common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, data);
528
retval = adios_errno; // adios_errno was set in common_read_find_name
531
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_schedule_read()\n");
532
retval = err_invalid_file_pointer;
538
int common_read_schedule_read_byid (const ADIOS_FILE * fp,
539
const ADIOS_SELECTION * sel,
546
struct common_read_internals_struct * internals;
549
adios_errno = err_no_error;
551
if (varid >=0 && varid < fp->nvars) {
552
internals = (struct common_read_internals_struct *) fp->internal_data;
553
retval = internals->read_hooks[internals->method].adios_schedule_read_byid_fn (fp, sel, varid+internals->group_varid_offset, from_steps, nsteps, data);
555
adios_error (err_invalid_varid,
556
"Variable ID %d is not valid in adios_schedule_read_byid(). "
557
"Available 0..%d\n", varid, fp->nvars-1);
558
retval = err_invalid_varid;
561
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_schedule_read_byid()\n");
562
retval = err_invalid_file_pointer;
568
int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
570
struct common_read_internals_struct * internals;
573
adios_errno = err_no_error;
575
internals = (struct common_read_internals_struct *) fp->internal_data;
576
retval = internals->read_hooks[internals->method].adios_perform_reads_fn (fp, blocking);
578
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_perform_reads()\n");
579
retval = err_invalid_file_pointer;
585
int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
587
struct common_read_internals_struct * internals;
590
adios_errno = err_no_error;
592
internals = (struct common_read_internals_struct *) fp->internal_data;
593
retval = internals->read_hooks[internals->method].adios_check_reads_fn (fp, chunk);
595
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_check_reads()\n");
596
retval = err_invalid_file_pointer;
602
void common_read_free_chunk (ADIOS_VARCHUNK *chunk)
604
/** Free the memory of a chunk allocated inside adios_check_reads().
605
* It only frees the ADIOS_VARCHUNK struct and the ADIOS_SELECTION struct
606
* pointed by the chunk. The data pointer should never be freed since
607
* that memory belongs to the reading method.
619
int common_read_get_attr (const ADIOS_FILE * fp,
620
const char * attrname,
621
enum ADIOS_DATATYPES * type,
625
struct common_read_internals_struct * internals;
628
adios_errno = err_no_error;
630
internals = (struct common_read_internals_struct *) fp->internal_data;
631
int attrid = common_read_find_name (fp->nattrs, fp->attr_namelist, attrname, 1);
633
retval = common_read_get_attr_byid (fp, attrid, type, size, data);
635
retval = adios_errno; // adios_errno was set in common_read_find_name
638
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_read_get_attr()\n");
639
retval = err_invalid_file_pointer;
645
int common_read_get_attr_byid (const ADIOS_FILE * fp,
647
enum ADIOS_DATATYPES * type,
651
struct common_read_internals_struct * internals;
654
adios_errno = err_no_error;
656
if (attrid >= 0 && attrid < fp->nattrs) {
657
internals = (struct common_read_internals_struct *) fp->internal_data;
658
retval = internals->read_hooks[internals->method].adios_get_attr_byid_fn (fp, attrid+internals->group_attrid_offset, type, size, data);
660
adios_error (err_invalid_attrid,
661
"Attribute ID %d is not valid in adios_get_attr_byid(). "
662
"Available 0..%d\n", attrid, fp->nattrs-1);
663
retval = err_invalid_attrid;
666
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_read_get_attr_byid()\n");
667
retval = err_invalid_file_pointer;
673
const char * common_read_type_to_string (enum ADIOS_DATATYPES type)
677
case adios_unsigned_byte: return "unsigned byte";
678
case adios_unsigned_short: return "unsigned short";
679
case adios_unsigned_integer: return "unsigned integer";
680
case adios_unsigned_long: return "unsigned long long";
682
case adios_byte: return "byte";
683
case adios_short: return "short";
684
case adios_integer: return "integer";
685
case adios_long: return "long long";
687
case adios_real: return "real";
688
case adios_double: return "double";
689
case adios_long_double: return "long double";
691
case adios_string: return "string";
692
case adios_complex: return "complex";
693
case adios_double_complex: return "double complex";
697
static char buf [50];
698
sprintf (buf, "(unknown: %d)", type);
705
int common_read_type_size(enum ADIOS_DATATYPES type, void *data)
707
return bp_get_type_size(type, data);
711
int common_read_get_grouplist (const ADIOS_FILE *fp, char ***group_namelist)
713
struct common_read_internals_struct * internals;
716
adios_errno = err_no_error;
718
internals = (struct common_read_internals_struct *) fp->internal_data;
719
retval = internals->ngroups;
720
*group_namelist = internals->group_namelist;
722
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_get_grouplist()\n");
723
retval = err_invalid_file_pointer;
728
/** Select a subset of variables and attributes to present in ADIOS_FILE struct.
729
ADIOS_FILE-> nvars, nattrs, var_namelist, attr_namelist will contain
730
only a subset of all variables and attributes.
731
internals-> full_* stores the complete lists for reset or change of group
733
int common_read_group_view (ADIOS_FILE *fp, int groupid)
735
struct common_read_internals_struct * internals;
738
adios_errno = err_no_error;
740
internals = (struct common_read_internals_struct *) fp->internal_data;
741
if (groupid >= 0 && groupid < internals->ngroups) {
742
/* 1. save complete list if first done */
743
if (internals->group_in_view == -1) {
744
internals->full_nvars = fp->nvars;
745
internals->full_varnamelist = fp->var_namelist;
746
internals->full_nattrs = fp->nattrs;
747
internals->full_attrnamelist = fp->attr_namelist;
749
/* Set ID offsets for easier indexing of vars/attrs in other functions */
750
internals->group_varid_offset = 0;
751
internals->group_attrid_offset = 0;
752
for (i=0; i<groupid; i++) {
753
internals->group_varid_offset += internals->nvars_per_group[i];
754
internals->group_attrid_offset += internals->nattrs_per_group[i];
756
/* Set view to this group */
757
fp->nvars = internals->nvars_per_group[groupid];
758
fp->var_namelist = &(internals->full_varnamelist [internals->group_varid_offset]);
759
fp->nattrs = internals->nattrs_per_group[groupid];
760
fp->attr_namelist = &(internals->full_attrnamelist [internals->group_attrid_offset]);
761
internals->group_in_view = groupid;
764
} else if (groupid == -1) {
765
/* Reset to full view */
766
fp->nvars = internals->full_nvars;
767
fp->var_namelist = internals->full_varnamelist;
768
fp->nattrs = internals->full_nattrs;
769
fp->attr_namelist = internals->full_attrnamelist;
770
internals->group_varid_offset = 0;
771
internals->group_attrid_offset = 0;
772
internals->group_in_view = -1;
775
adios_error (err_invalid_group, "Invalid group ID in adios_group_view()\n");
776
retval = err_invalid_group;
779
adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_group_view()\n");
780
retval = err_invalid_file_pointer;
785
/* internal function to support version 1 time-dimension reads
786
called from adios_read_v1.c and adiosf_read_v1.c
788
int common_read_is_var_timed (const ADIOS_FILE *fp, int varid)
790
struct common_read_internals_struct * internals;
793
adios_errno = err_no_error;
795
internals = (struct common_read_internals_struct *) fp->internal_data;
796
retval = internals->read_hooks[internals->method].adios_is_var_timed_fn (fp, varid+internals->group_varid_offset);
798
adios_error (err_invalid_file_pointer, "Null pointer passed as file to common_read_is_var_timed()\n");
799
retval = err_invalid_file_pointer;
804
void common_read_print_fileinfo (const ADIOS_FILE *fp)
808
char **group_namelist;
809
ngroups = common_read_get_grouplist (fp, &group_namelist);
811
printf ("---------------------------\n");
812
printf (" file information\n");
813
printf ("---------------------------\n");
814
printf (" # of groups: %d\n"
815
" # of variables: %d\n"
816
" # of attributes: %d\n"
817
" current step: %d\n"
824
printf ("---------------------------\n");
825
printf (" var information\n");
826
printf ("---------------------------\n");
827
printf (" var id\tname\n");
828
if (fp->var_namelist) {
829
for (i=0; i<fp->nvars; i++)
830
printf("\t%d)\t%s\n", i, fp->var_namelist[i]);
832
printf ("---------------------------\n");
833
printf (" attribute information\n");
834
printf ("---------------------------\n");
835
printf (" attr id\tname\n");
836
if (fp->attr_namelist) {
837
for (i=0; i<fp->nattrs; i++)
838
printf("\t%d)\t%s\n", i, fp->attr_namelist[i]);
840
printf ("---------------------------\n");
841
printf (" group information\n");
842
printf ("---------------------------\n");
843
if (group_namelist) {
844
for (i=0; i<ngroups; i++)
845
printf("\t%d)\t%s\n", i, group_namelist[i]);
854
ADIOS_SELECTION * common_read_selection_boundingbox (int ndim, const uint64_t *start, const uint64_t *count)
856
adios_errno = err_no_error;
857
ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
859
sel->type = ADIOS_SELECTION_BOUNDINGBOX;
860
sel->u.bb.ndim = ndim;
861
sel->u.bb.start = (uint64_t *)start;
862
sel->u.bb.count = (uint64_t *)count;
864
adios_error(err_no_memory, "Cannot allocate memory for bounding box selection\n");
870
ADIOS_SELECTION * common_read_selection_points (int ndim, uint64_t npoints, const uint64_t *points)
872
adios_errno = err_no_error;
873
ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
875
sel->type = ADIOS_SELECTION_POINTS;
876
sel->u.points.ndim = ndim;
877
sel->u.points.npoints = npoints;
878
sel->u.points.points = (uint64_t *) points;
880
adios_error(err_no_memory, "Cannot allocate memory for points selection\n");
885
ADIOS_SELECTION * common_read_selection_writeblock (int index)
887
adios_errno = err_no_error;
888
ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
890
sel->type = ADIOS_SELECTION_WRITEBLOCK;
891
sel->u.block.index = index;
893
adios_error(err_no_memory, "Cannot allocate memory for writeblock selection\n");
898
ADIOS_SELECTION * common_read_selection_auto (char *hints)
900
adios_errno = err_no_error;
901
ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
903
sel->type = ADIOS_SELECTION_AUTO;
904
sel->u.autosel.hints = hints;
906
adios_error(err_no_memory, "Cannot allocate memory for auto selection\n");
911
void common_read_selection_delete (ADIOS_SELECTION *sel)