FiberBundleHDF5  FiberHDF5 Documentation, Revision 2026
High-Performance Fiber Bundle Data Model for Scientific Visualization
Loading...
Searching...
No Matches
F5private.c File Reference
#include "F5private.h"
#include "F5X.h"
#include "F5B.h"
#include "F5A.h"
#include <assert.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Functions

hid_t F5Acreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t create_plist)
hid_t F5I_create_contents (hid_t File_id)
herr_t F5Glink_soft_to_id (hid_t loc_id, hid_t existing_id, const char *linkname)
herr_t F5Glink (hid_t loc_id, H5G_link_t link_type, const char *current_name, const char *new_name)
void F5I_add_field (F5Path *fpath, const char *fieldname)
void F5I_add_grid (F5Path *fpath, const char *gridname, const double *time)
herr_t F_H5Aread (hid_t attr_id, hid_t mem_type_id, void *buf, const char *name)
herr_t _F5Gclose (hid_t id, const char *filename, int lineno)
void F5printf (int verbosity, const char *fmt,...)
void F5printx (int verbosity, const char *sourcefilename, int lineNo, const char *FunctionName, const char *fmt,...)
void F5print_dimensions (int verbosity, const char *prefix, int rank, const hsize_t dims[])
void F5print_OpenHandles (hid_t file_id)

Variables

int F5printf_indent = 0

Function Documentation

◆ F5Acreate()

hid_t F5Acreate ( hid_t loc_id,
const char * name,
hid_t type_id,
hid_t space_id,
hid_t create_plist )

Definition at line 11 of file F5private.c.

12{
13 return H5Acreate2( loc_id, name, type_id, space_id, create_plist, H5P_DEFAULT );
14}
name
Definition F5P.c:82

References name.

Referenced by F5Fset_attribute_byname(), and F5T_save_perm_vector().

◆ F5Glink()

herr_t F5Glink ( hid_t loc_id,
H5G_link_t link_type,
const char * current_name,
const char * new_name )

Definition at line 162 of file F5private.c.

163{
164herr_t retval;
165 H5E_BEGIN_TRY
166 retval = H5Glink(loc_id, link_type, current_name, new_name);
167 H5E_END_TRY
168
169 if (retval<0)
170 F5printf(30, "F5Glink(,,%s -> %s) FAILED\n", current_name, new_name);
171 else
172 F5printf(30, "F5Glink(,,%s -> %s) DONE\n", current_name, new_name);
173
174 return retval;
175}
#define F5printf(verbosity,...)
Definition F5private.h:60

References F5printf.

Referenced by F5LTcreateV(), F5Rcreate_relative_vertex_Irefinement3D(), F5Rcreate_relative_vertex_Qrefinement3D(), and F5Rlink_default_vertex_topology().

◆ F5Glink_soft_to_id()

herr_t F5Glink_soft_to_id ( hid_t loc_id,
hid_t existing_id,
const char * linkname )

Definition at line 148 of file F5private.c.

149{
150char objname[2048];
151herr_t retval = H5Iget_name(existing_id, objname, sizeof(objname) );
152
153 if (retval<1)
154 return retval;
155
156 F5printf(30, "F5Glink(%s)", linkname);
157 retval = H5Glink(loc_id, H5G_LINK_SOFT, objname, linkname);
158 F5printf(30, "~F5Glink()");
159 return retval;
160}

References F5printf.

◆ F5I_add_field()

void F5I_add_field ( F5Path * fpath,
const char * fieldname )

Definition at line 178 of file F5private.c.

179{
180 if (!fpath) return;
181
182 if (!fpath->Field_hid)
183 {
184 F5printf(3, "F5I_add_field(%s): INVALID Field ID %ld",fieldname, (long)fpath->Field_hid);
185 assert(fpath->Field_hid);
186 return;
187 }
188 F5printf(30, "F5I_add_field(%s)",fieldname);
189
190 /* Creating Field Information per Bundle */
191 {
192hid_t FieldTable = F5Gappend(fpath->ContentsGroup_hid, FIBER_CONTENT_FIELDS);
193hid_t FieldInfo = F5Gappend(FieldTable, fieldname);
194
195char gridref[2048] = "/" FIBER_CONTENTS "/" FIBER_CONTENT_GRIDS "/";
196char gridname[2048];
197char *g;
198
199 if (fpath->Grid_hid<0)
200 {
201 F5printf(-1, "F5I_add_field(): FATAL INTERNAL ERROR: No Grid id!");
202 return;
203 }
204 if (H5Iget_name(fpath->Grid_hid, gridname, sizeof(gridname) )<1)
205 {
206 F5printf(-1, "F5I_add_field(): Could not get name for Grid id!");
207 assert(0);
208 }
209
210 /* /T=1234.5676/myFunnyGrid */
211 g = strrchr(gridname, '/');
212 if (!g) g = gridname; else g++;
213/* puts(g); */
214 strcat(gridref, g);
215
216 /*
217 NOTE: This link might already exist!
218 If so, it's not an error.
219 */
220 H5E_BEGIN_TRY
221 /* /TableOfContents/Fields/myFunnyField/myFunnyGrid -> /TableOfContents/Grids/myFunnyGrid */
222 H5Glink(FieldInfo, H5G_LINK_SOFT, gridref , g);
223 H5E_END_TRY
224
225 H5Gclose( FieldInfo );
226 H5Gclose( FieldTable );
227 }
228}
#define FIBER_CONTENT_FIELDS
Definition F5defs.h:25
#define FIBER_CONTENTS
Definition F5defs.h:23
#define FIBER_CONTENT_GRIDS
Definition F5defs.h:24
#define H5Gclose(x)
Definition F5X.h:144
hid_t F5Gappend(hid_t loc_id, const char *name)
Definition F5X.c:59
hid_t Grid_hid
Definition F5Path.h:53
hid_t ContentsGroup_hid
Definition F5Path.h:51
hid_t Field_hid
Definition F5Path.h:59

References F5Path::ContentsGroup_hid, F5Gappend(), F5printf, FIBER_CONTENT_FIELDS, FIBER_CONTENT_GRIDS, FIBER_CONTENTS, F5Path::Field_hid, F5Path::Grid_hid, and H5Gclose.

Referenced by F5Cwrite_regular_surface(), F5Fcreate(), F5FSwrite_fraction(), F5Fwrite_1D(), F5Fwrite_flexible(), F5Fwrite_fraction(), F5Fwrite_fraction_external(), F5Fwrite_fractionS(), F5Fwrite_linear(), F5Fwrite_linear_fraction(), F5FwriteIMAGE(), F5Fwrites(), F5FwriteX(), F5Rcreate_rectilinear(), F5write_particle_cartesian3Dv(), F5write_particle_cartesian3DvU(), and F5write_particle_double_cartesian3Dv().

◆ F5I_add_grid()

void F5I_add_grid ( F5Path * fpath,
const char * gridname,
const double * time )

Definition at line 230 of file F5private.c.

231{
232hid_t GridsTable ;
233hid_t GridInfo ;
234
235TimeTableEntry GridTimeInfo;
236
237 if (!fpath) return;
238
239 F5printf(30, "F5I_add_grid(%s,t=%g)@%d", gridname, *time, (int)(fpath->ContentsGroup_hid) );
240
241 GridsTable = F5Gappend(fpath->ContentsGroup_hid, FIBER_CONTENT_GRIDS);
242
243 F5printf(30, "F5I_add_grid(%s,t=%g): grid table %d", gridname, *time, (int)(GridsTable) );
244
245 GridInfo = F5Gappend(GridsTable, gridname);
246
247 if (time)
248 GridTimeInfo.TimeValue = *time;
249
250 GridTimeInfo.TimesliceName[0] = '/';
251 F5I_timegroup(time, GridTimeInfo.TimesliceName+1, F5_TIMESLICE_NAME_LENGTH-2 );
252
253#if 0
254 if (time)
255 {
256 double T = *time;
257 printf("F5I_add_grid(T=%g) TimeTableEntry={%g, %s})\n",
258 T,
259 GridTimeInfo.TimeValue,
260 GridTimeInfo.TimesliceName);
261
262 assert( GridTimeInfo.TimeValue == *time);
263 }
264 else
265 printf("F5I_add_grid() TimeTableEntry={(undefined),%s})\n",
266 GridTimeInfo.TimesliceName );
267#endif
268
269
270
271/*
272 Note: We could link here directly to the respective grid.
273 However, then we cannot get the concrete time for which the grid is valid,
274 because grid groups don't have a time attribute by themselves such that
275 the same grid object can be shared among multiple timesteps.
276 For the same reason, it does not have a backlink to the slice group where
277 it is contained.
278 Thus, when browsing via grid types, it is required to specify the grid name
279 twice:
280
281 /TableOfContents/Grids/MyFunnyGrid/T=1234.5676/MyFunnyGrid/
282
283*/
284 H5E_BEGIN_TRY
285 /* ln -s /TableOfContents/Grids/MyFunnyGrid/T=1234.5676 -> /T=1234.5676 */
286 H5Glink(GridInfo, H5G_LINK_SOFT, GridTimeInfo.TimesliceName, GridTimeInfo.TimesliceName+1);
287 H5E_END_TRY
288
289 if (time)
290 {
291/*
292 ln -s /T=1234.5676/MyFunnyGrid/F5::TimeTable -> /TableOfContents/Grids/MyFunnyGrid/
293 */
294 herr_t timetableError;
295
296 H5E_BEGIN_TRY
297 timetableError = H5Lcreate_hard( GridsTable, gridname, /* targetname */
298 fpath->Grid_hid, F5_TIMETABLE_NAME, /* linkname */
299 H5P_DEFAULT, H5P_DEFAULT);
300 H5E_END_TRY
301
302 if (timetableError>=0)
303 {
304 F5Bappend_timetable(GridInfo, fpath->ContentsGroup_hid, &GridTimeInfo, 1);
305 }
306 }
307
308 H5Gclose(GridsTable);
309 H5Gclose(GridInfo);
310}
#define F5_TIMESLICE_NAME_LENGTH
Definition F5B.h:67
#define F5_TIMETABLE_NAME
Definition F5defs.h:150
F5_API hsize_t F5Bappend_timetable(hid_t loc_id, hid_t timetable_type_location_id, const TimeTableEntry *TTE, hsize_t append_dims)
Definition F5Bslice.c:261
struct _TimeTableEntry TimeTableEntry
F5_API char * F5I_timegroup(const double *time, char *destbuf, size_t len)
Definition F5Bslice.c:90
char TimesliceName[F5_TIMESLICE_NAME_LENGTH]
Definition F5B.h:75
double TimeValue
Definition F5B.h:74

References F5Path::ContentsGroup_hid, F5_TIMESLICE_NAME_LENGTH, F5_TIMETABLE_NAME, F5Bappend_timetable(), F5Gappend(), F5I_timegroup(), F5printf, FIBER_CONTENT_GRIDS, F5Path::Grid_hid, H5Gclose, _TimeTableEntry::TimesliceName, and _TimeTableEntry::TimeValue.

Referenced by F5LTcreateV().

◆ F5I_create_contents()

hid_t F5I_create_contents ( hid_t File_id)

Definition at line 103 of file F5private.c.

104{
105hid_t TOC_id;
106hid_t G_id;
107
108 if (File_id<0)
109 {
110 F5printf(0, "F5I_create_contents(): Invalid File!\n");
111 return -1;
112 }
113
114 F5printf(30, "F5I_create_contents(%d): mkgroup %s", File_id, FIBER_CONTENTS) ;
115 TOC_id = F5Gappend(File_id, FIBER_CONTENTS);
116
117 if (TOC_id<0)
118 return -1;
119
120 H5E_BEGIN_TRY
121 H5Adelete(TOC_id, FIBER_VERSION_ATTRIBUTE_NAME);
122 H5E_END_TRY
123
125
126 G_id = F5Gappend(TOC_id, FIBER_CONTENT_GRIDS);
127 assert(G_id>0);
128 H5Gclose( G_id);
129 G_id = F5Gappend(TOC_id, FIBER_CONTENT_FIELDS);
130 H5Gclose( G_id);
131
132 H5Gset_comment(File_id, FIBER_CONTENTS,
133 "All file objects in reverse order for easier browsing. ");
134
135 H5Gset_comment(TOC_id, FIBER_CONTENT_GRIDS,
136 "All grids and their sequences.");
137
138 {
139 hid_t param_space_id = F5Gappend(TOC_id, FIBER_PARAMETER_SPACE);
140 hid_t time_param_id = F5Gappend(param_space_id, FIBER_HDF5_TIME_ATTRIB);
141 H5Gclose(time_param_id);
142 H5Gclose(param_space_id);
143 }
144 F5printf(30, "~F5I_create_contents()") ;
145 return TOC_id;
146}
herr_t F5Asave_version(hid_t loc_id, int major, int minor, int release)
Definition F5A.c:286
#define FIBER_VERSION_ATTRIBUTE_NAME
Definition F5defs.h:19
#define FIBER_RELEASE_VERSION
Definition F5defs.h:16
#define FIBER_MAJOR_VERSION
Definition F5defs.h:14
#define FIBER_MINOR_VERSION
Definition F5defs.h:15
#define FIBER_HDF5_TIME_ATTRIB
Definition F5defs.h:45
#define FIBER_PARAMETER_SPACE
Definition F5defs.h:31

References F5Asave_version(), F5Gappend(), F5printf, FIBER_CONTENT_FIELDS, FIBER_CONTENT_GRIDS, FIBER_CONTENTS, FIBER_HDF5_TIME_ATTRIB, FIBER_MAJOR_VERSION, FIBER_MINOR_VERSION, FIBER_PARAMETER_SPACE, FIBER_RELEASE_VERSION, FIBER_VERSION_ATTRIBUTE_NAME, and H5Gclose.

Referenced by F5LTcreateV().

◆ F5print_dimensions()

void F5print_dimensions ( int verbosity,
const char * prefix,
int rank,
const hsize_t dims[] )

Definition at line 394 of file F5private.c.

395{
396 if (rank==3)
397 F5printf(verbosity, "%s(%ux%ux%u)", prefix,
398 (int)dims[0], (int)dims[1], (int)dims[2]);
399 else if(rank==2)
400 F5printf(verbosity, "%s(%ux%u)", prefix,
401 (int)dims[0], (int)dims[1]);
402 else if (rank==1)
403 F5printf(verbosity, "%s(%u)", prefix,
404 (int)dims[0]);
405
406}

References F5printf.

Referenced by F5Fwrite_fraction(), and F5Fwrite_fractionS().

◆ F5print_OpenHandles()

void F5print_OpenHandles ( hid_t file_id)

Definition at line 410 of file F5private.c.

411{
412 puts("F5print_OpenHandles"); fflush(stdout);
413
414ssize_t obj_nr;
415 obj_nr = H5Fget_obj_count( file_id, H5F_OBJ_ALL );
416
417 if( obj_nr < 0 )
418 puts("F5print_OpenHandles() Error retrieving number of open objects" );
419
420 printf( "Open HDF5 object handles: %ld \n", obj_nr );
421
422hid_t* objs = (hid_t*)calloc( obj_nr, sizeof( hid_t ) );
423
424ssize_t check = H5Fget_obj_ids( file_id, H5F_OBJ_ALL, -1, objs );
425 assert( check == obj_nr );
426
427ssize_t i;
428 for( i = 0; i < obj_nr; ++i)
429 {
430 htri_t valid;
431 valid = H5Iis_valid( objs[i] ) ;
432
433 if( valid == 0 )
434 {
435 printf( " [%ld] is invalid!\n");
436 continue;
437 }
438 else if( valid < 0 )
439 {
440 printf( " [%ld] Error on validness check!\n");
441 continue;
442 }
443
444 H5I_type_t type;
445 type = H5Iget_type( objs[i] );
446 if( type < 0)
447 puts( "Error retrieving type of open object." );
448
449
450 int refs;
451 refs = H5Iget_ref( objs[i] );
452
453 char name_buf[512];
454 H5Iget_name( objs[i], name_buf, 512 );
455
456
457 switch( type )
458 {
459 CASEITEM( H5I_FILE, i, refs, name_buf )
460 CASEITEM( H5I_GROUP, i, refs , name_buf )
461 CASEITEM( H5I_DATATYPE, i, refs , name_buf )
462 CASEITEM( H5I_DATASPACE, i, refs , name_buf )
463 CASEITEM( H5I_DATASET, i, refs , name_buf )
464 CASEITEM( H5I_ATTR, i, refs , name_buf )
465 CASEITEM( H5I_BADID, i, refs , name_buf )
466
467 default:
468 printf (" [%ld]: unknown type\n", i);
469 }
470 }
471
472 free(objs);
473}
free(name)
#define CASEITEM(x, i, refs, name)
Definition F5private.h:88

References CASEITEM, and free().

◆ F5printf()

void F5printf ( int verbosity,
const char * fmt,
... )

Definition at line 352 of file F5private.c.

353{
354va_list argptr;
355int i;
356 if (verbosity > F5verbosity() )
357 return;
358
359 va_start(argptr, fmt);
360 for(i = 0; i<F5printf_indent; i++)
361 putc(' ',stderr);
362 vfprintf(stderr, fmt, argptr);
363 putc('\n',stderr);
364 fflush(stderr);
365 va_end(argptr);
366}
int F5printf_indent
Definition F5private.c:349

References F5printf_indent.

◆ F5printx()

void F5printx ( int verbosity,
const char * sourcefilename,
int lineNo,
const char * FunctionName,
const char * fmt,
... )

Definition at line 368 of file F5private.c.

370{
371va_list argptr;
372int i;
373int EffectiveVerbosity = F5verbosity();
374 if (EffectiveVerbosity<0) EffectiveVerbosity = -EffectiveVerbosity;
375 if (verbosity > EffectiveVerbosity)
376 return;
377
378 if (F5verbosity()<0)
379 {
380 fprintf(stderr, "%s:%d [%s]\t", sourcefilename, lineNo, FunctionName);
381 }
382
383 va_start(argptr, fmt);
384 for(i = 0; i<F5printf_indent; i++)
385 putc(' ',stderr);
386 vfprintf(stderr, fmt, argptr);
387 putc('\n',stderr);
388 fflush(stderr);
389 va_end(argptr);
390}

References F5printf_indent.

◆ F_H5Aread()

herr_t F_H5Aread ( hid_t attr_id,
hid_t mem_type_id,
void * buf,
const char * name )

Definition at line 332 of file F5private.c.

333{
334 F5printf(50, "Reading attribute `%s'", name);
335 return H5Aread(attr_id, mem_type_id, buf);
336}

References F5printf, and name.

Referenced by F5Aget_ints(), F5Aget_string(), F5Aget_version(), F5B_read_chart_domain(), F5Fget_attribute_byname(), F5Fread_attr_data(), F5LAget_dimensions(), F5Lget_space(), F5Lread_linear(), F5Rget_timestep(), F5Tget_field_Array_enum(), and F5Tget_field_ProcArray_enum().

Variable Documentation

◆ F5printf_indent