|
FiberBundleHDF5
FiberHDF5 Documentation, Revision 2026
High-Performance Fiber Bundle Data Model for Scientific Visualization
|
#include "F5Bchart.h"#include "F5F.h"#include "F5X.h"#include "F5defs.h"#include "F5types.h"#include "F5A.h"#include "F5private.h"#include "F5coordinates.h"#include "F5T.h"#include <string.h>#include <stdlib.h>#include <assert.h>Go to the source code of this file.
Macros | |
| #define | new(type, size) |
| #define | delete(ptr) |
| #define | true 1 |
| #define | false 0 |
| #define | SAVE_MEMORDER_WITH_TYPE |
| #define | FIBER_HDF5_ANONYMOUS_TYPENAME "F5::TypeName%04u" |
Functions | |
| const int * | F5B_fortran_permute_vector () |
| hsize_t * | F5B_permute_dimensions (hsize_t *target_dims, int rank, const hsize_t *source_dims, int perm_vector[FIBER_MAX_RANK], int perm_vector_size) |
| ChartDomain_IDs * | F5B_new_global_domain (const char *coordnames[], int dimension, const char *name, const int perm_vector[], int cell_dimensionality, hid_t SinglePrecisionType, hid_t DoublePrecisionType) |
| void | F5B_init_tangential_types (F5_ChartPrecisionTypes *IDs, const char *coordnames[], int dimension, hid_t coord_type) |
| void | F5Bchart_add_tangential_types (F5_ChartPrecisionTypes *IDs, const char *coordnames[], int dimension, hid_t coord_type) |
| int | F5B_inject_precision_type (F5_ChartPrecisionTypes *IDs, hid_t type_id) |
| ChartDomain_IDs * | F5B_new_global_float_chart (const char *coordnames[], int dimension, const char *name, const int perm_vector[FIBER_MAX_RANK]) |
| ChartDomain_IDs * | F5B_new_global_int_chart (const char *coordnames[], int dimension, const char *name, const int perm_vector[FIBER_MAX_RANK]) |
| ChartDomain_IDs * | F5B_new_global_int_domain (const char *coordnames[], int dimension, const char *name, const int perm_vector[FIBER_MAX_RANK], int cell_dimensionality) |
| ChartDomain_IDs * | F5B_new_global_fragment_neighbour_domain (const char *coordnames[], int dimension, const char *name, const int perm_vector[], int cell_dimensionality) |
| ChartDomain_IDs * | F5B_new_global_fractional_domain (const char *coordnames[], int dimension, const char *name, const int perm_vector[], int cell_dimensionality) |
| void | F5Binsert_tensor_type (ChartDomain_IDs *This, F5Ttensor_t *T) |
| void | F5B_delete_tangential_types (F5_ChartPrecisionTypes *ID) |
| void | F5B_delete_global_chart (ChartDomain_IDs *ID) |
| void | F5Bchart_read_tangential_types (F5_ChartPrecisionTypes *H5Types, hid_t location) |
| ChartDomain_IDs * | F5B_read_global_chart (hid_t ChartsID, const char *name) |
| ChartDomain_IDs * | F5B_read_chart_domain (hid_t ChartDomainLocationID, const char *DefaultChartName) |
| ChartDomain_IDs * | F5B_save_global_chart (const ChartDomain_IDs *MemoryIDs, hid_t Domain_hid) |
| ChartDomain_IDs * | F5Bcopy_chart_domain (const ChartDomain_IDs *srcIDs) |
| void | F5T_save_perm_vector (hid_t location, int rank, int perm_vector[]) |
| int | F5Bget_chart_dims (const ChartDomain_IDs *IDs) |
| F5_ChartPrecisionTypes * | F5Bget_precision_by_size (ChartDomain_IDs *CD, int TypeSize) |
| F5_ChartPrecisionTypes * | F5Bget_precision_by_type (ChartDomain_IDs *CD, hid_t type_id) |
| hid_t | F5file_type (F5Path *fpath, hid_t fieldtype) |
| #define delete | ( | ptr | ) |
Definition at line 30 of file F5Bchart.c.
| #define false 0 |
Definition at line 33 of file F5Bchart.c.
| #define FIBER_HDF5_ANONYMOUS_TYPENAME "F5::TypeName%04u" |
Referenced by F5file_type().
| #define new | ( | type, | |
| size ) |
Definition at line 29 of file F5Bchart.c.
| #define SAVE_MEMORDER_WITH_TYPE |
Definition at line 671 of file F5Bchart.c.
| #define true 1 |
Definition at line 32 of file F5Bchart.c.
| void F5B_delete_global_chart | ( | ChartDomain_IDs * | ID | ) |
Free the memory resources that are associated with a certain coordinate system.
Definition at line 632 of file F5Bchart.c.
References ChartDomain_IDs::domain_name, ChartDomain_IDs::DoublePrecision, ChartDomain_IDs::ExtendedPrecision, F5B_delete_tangential_types(), free(), ChartDomain_IDs::HalfPrecision, ChartDomain_IDs::OneBytePrecision, ChartDomain_IDs::refs, and ChartDomain_IDs::SinglePrecision.
Referenced by F5Bcoordinate_cleanup(), and F5close().
| void F5B_delete_tangential_types | ( | F5_ChartPrecisionTypes * | IDs | ) |
Destructor for F5_ChartPrecisionTypes.
Definition at line 610 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::AdditionalFileTypes, _F5_ChartPrecisionTypes::Bicovector_hid_t, _F5_ChartPrecisionTypes::Bivector_hid_t, _F5_ChartPrecisionTypes::Cometric_hid_t, _F5_ChartPrecisionTypes::Covector_hid_t, F5ChartPrecisionMaxNumberOfFileTypes, F5Tclose(), _F5_ChartPrecisionTypes::Metric_hid_t, _F5_ChartPrecisionTypes::Point_hid_t, _F5_ChartPrecisionTypes::Pseudocoscalar_hid_t, _F5_ChartPrecisionTypes::Pseudoscalar_hid_t, and _F5_ChartPrecisionTypes::Vector_hid_t.
Referenced by F5B_delete_global_chart().
| const int * F5B_fortran_permute_vector | ( | ) |
Return a (static) permutation vector for fortran memory layout. It always has FIBER_MAX_RANK entries, i.e. is of the form { FIBER_MAX_RANK-1, FIBER_MAX_RANK-2, ..., 2,1,0 }
Definition at line 36 of file F5Bchart.c.
References FIBER_MAX_RANK.
| void F5B_init_tangential_types | ( | F5_ChartPrecisionTypes * | H5Types, |
| const char * | coordnames[], | ||
| int | dimension, | ||
| hid_t | coord_type ) |
Initializes the Poind_hit_t with some newly constructed transient HDF5 type while setting all other entries to 0.
Definition at line 290 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::AdditionalFileTypes, _F5_ChartPrecisionTypes::Bicovector_hid_t, _F5_ChartPrecisionTypes::Bivector_hid_t, _F5_ChartPrecisionTypes::Cometric_hid_t, _F5_ChartPrecisionTypes::Covector_hid_t, F5ChartPrecisionMaxNumberOfFileTypes, _F5_ChartPrecisionTypes::Metric_hid_t, _F5_ChartPrecisionTypes::Point_hid_t, _F5_ChartPrecisionTypes::Pseudocoscalar_hid_t, _F5_ChartPrecisionTypes::Pseudoscalar_hid_t, and _F5_ChartPrecisionTypes::Vector_hid_t.
Referenced by F5B_new_global_domain().
| int F5B_inject_precision_type | ( | F5_ChartPrecisionTypes * | IDs, |
| hid_t | type_id ) |
Add a type ID to the additional file types, ready to be deleted by F5B_delete_tangential_types(F5_ChartPrecisionTypes*IDs);
Definition at line 477 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::AdditionalFileTypes, and F5ChartPrecisionMaxNumberOfFileTypes.
Referenced by F5file_type().
| ChartDomain_IDs * F5B_new_global_domain | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[], | ||
| int | cell_dimensionality, | ||
| hid_t | SinglePrecisionType, | ||
| hid_t | DoublePrecisionType ) |
Creates a new chart domain object that holds just a "point" type, but no tangential types.
Definition at line 212 of file F5Bchart.c.
References ChartDomain_IDs::cell_dimensionality, ChartDomain_IDs::domain_name, ChartDomain_IDs::DoublePrecision, F5_C_ORDER, F5_FORTRAN_ORDER, F5B_init_tangential_types(), F5printf, FIBER_MAX_RANK, name, ChartDomain_IDs::perm_vector, ChartDomain_IDs::refs, ChartDomain_IDs::SinglePrecision, and ChartDomain_IDs::TensorTypes.
Referenced by F5B_new_global_float_chart(), F5B_new_global_fractional_domain(), F5B_new_global_fragment_neighbour_domain(), F5B_new_global_int_chart(), F5B_new_global_int_domain(), and F5Bcopy_chart_domain().
| ChartDomain_IDs * F5B_new_global_float_chart | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[FIBER_MAX_RANK] ) |
Construct a new coordinate type.
| coordnames | Array of names for each coordinate. |
| dimension | Dimensionality of this coordinate system. |
| name | Some naming for all instances of this coordinate systems. |
Creates a chart with floating point types.
Only the creation of homogeneous coordinates is supported through this interface.
Definition at line 496 of file F5Bchart.c.
References ChartDomain_IDs::DoublePrecision, F5B_new_global_domain(), F5Bchart_add_tangential_types(), FIBER_MAX_RANK, name, and ChartDomain_IDs::SinglePrecision.
Referenced by F5B_new_global_axial_chart2D(), F5B_new_global_cartesian_chart1D(), F5B_new_global_cartesian_chart2D(), F5B_new_global_cartesian_chart3D(), F5B_new_global_cartesian_chart4D(), F5B_new_global_color_chart_rgba_real(), F5B_new_global_cylindrical_chart3D(), F5B_new_global_polar_chart2D(), F5B_new_global_polar_chart3D(), F5B_new_global_polar_chart4D(), F5B_new_global_spherical_chart1D(), F5B_new_global_spherical_chart2D(), F5B_new_global_t_polar2_chart3D(), F5B_new_global_texture_chart2D(), F5B_new_global_texture_chart3D(), and F5B_new_global_time_chart1D().
| ChartDomain_IDs * F5B_new_global_fractional_domain | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[], | ||
| int | cell_dimensionality ) |
Definition at line 571 of file F5Bchart.c.
References F5B_new_global_domain(), F5T_INT_FRACTION32, F5T_INT_FRACTION64, and name.
Referenced by F5B_new_rational_regular_domain3D().
| ChartDomain_IDs * F5B_new_global_fragment_neighbour_domain | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[], | ||
| int | cell_dimensionality ) |
Definition at line 551 of file F5Bchart.c.
References F5B_new_global_domain(), and name.
Referenced by F5B_new_global_fragname().
| ChartDomain_IDs * F5B_new_global_int_chart | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[FIBER_MAX_RANK] ) |
Definition at line 514 of file F5Bchart.c.
References ChartDomain_IDs::DoublePrecision, F5B_new_global_domain(), F5Bchart_add_tangential_types(), FIBER_MAX_RANK, name, and ChartDomain_IDs::SinglePrecision.
Referenced by F5B_new_global_color_chart_rgba_int().
| ChartDomain_IDs * F5B_new_global_int_domain | ( | const char * | coordnames[], |
| int | dimension, | ||
| const char * | name, | ||
| const int | perm_vector[FIBER_MAX_RANK], | ||
| int | cell_dimensionality ) |
Create a domain with positions in n-dimensional integer coordinates, where 32bit and 64bit are available ( H5T_NATIVE_B32 and H5T_NATIVE_B64 in HDF5.)
Definition at line 529 of file F5Bchart.c.
References ChartDomain_IDs::DoublePrecision, F5B_new_global_domain(), F5Bchart_add_tangential_types(), FIBER_MAX_RANK, ChartDomain_IDs::HalfPrecision, name, ChartDomain_IDs::OneBytePrecision, and ChartDomain_IDs::SinglePrecision.
Referenced by F5B_new_global_edge_cells(), F5B_new_global_hexahedral_cells(), F5B_new_global_quad_cells(), F5B_new_global_tetrahedral_cells(), F5B_new_global_triangle_cells(), F5B_new_global_triangle_cells_ijk(), F5B_new_integer_regular_domain3D(), and old_F5B_new_global_tetrahedral_cells().
| hsize_t * F5B_permute_dimensions | ( | hsize_t * | target_dims, |
| int | rank, | ||
| const hsize_t * | source_dims, | ||
| int | perm_vector[FIBER_MAX_RANK], | ||
| int | perm_vector_size ) |
Permute a given dimensions array according to the given permutation vector.
| source_dims | The source dimensions. |
| target_dims | The target dimensions array, may be identical to the source dimensions array. |
| perm_vector | The permutation vector, may be F5_FORTRAN_ORDER, F5_C_ORDER or an explicity integer array specifying an arbitrary reodering of indices. |
Definition at line 72 of file F5Bchart.c.
References F5_C_ORDER, F5printf, and FIBER_MAX_RANK.
Referenced by F5Fcreate(), and F5Tpermute_dimensions().
| ChartDomain_IDs * F5B_read_chart_domain | ( | hid_t | ChartDomainLocationID, |
| const char * | DefaultChartName ) |
Make failsafe if a type definition does not exist.
Add support for dynamically defined types.
Definition at line 720 of file F5Bchart.c.
References ChartDomain_IDs::domain_name, ChartDomain_IDs::DoublePrecision, F5Aget_string(), F5Atry_to_open(), F5Bchart_read_tangential_types(), F5Gtry_to_open(), F5printf, F_H5Aread(), FIBER_HDF5_CHART_DOMAIN, FIBER_HDF5_CHART_DOUBLE_PRECISION, FIBER_HDF5_CHART_MEMLAYOUT, FIBER_HDF5_CHART_SINGLE_PRECISION, free(), H5Gclose, ChartDomain_IDs::perm_vector, _F5_ChartPrecisionTypes::Point_hid_t, ChartDomain_IDs::refs, and ChartDomain_IDs::SinglePrecision.
Referenced by F5B_read_global_chart().
| ChartDomain_IDs * F5B_read_global_chart | ( | hid_t | ChartsID, |
| const char * | name ) |
Definition at line 696 of file F5Bchart.c.
References F5B_read_chart_domain(), F5printf, H5Gclose, and name.
Referenced by F5FB_read_global_chart().
| ChartDomain_IDs * F5B_save_global_chart | ( | const ChartDomain_IDs * | MemoryIDs, |
| hid_t | Domain_hid ) |
Create File ID's from MemoryID's.
Definition at line 801 of file F5Bchart.c.
References ChartDomain_IDs::cell_dimensionality, ChartDomain_IDs::domain_name, ChartDomain_IDs::DoublePrecision, F5Asave_ints(), F5T_save_perm_vector(), F5Tsave_tensor(), FIBER_HDF5_CELLDIMENSIONALITY, FIBER_HDF5_CHART_DOUBLE_PRECISION, FIBER_HDF5_CHART_POINT_TYPE, FIBER_HDF5_CHART_SINGLE_PRECISION, FIBER_MAX_RANK, H5Gclose, ChartDomain_IDs::perm_vector, _F5_ChartPrecisionTypes::Point_hid_t, ChartDomain_IDs::refs, and ChartDomain_IDs::SinglePrecision.
Referenced by F5LTcreateV().
| void F5Bchart_add_tangential_types | ( | F5_ChartPrecisionTypes * | IDs, |
| const char * | coordnames[], | ||
| int | dimension, | ||
| hid_t | coord_type ) |
Adds tangential types (vector, covector, metric) to a given chart domain. These types are derived from the specified coord_type.
Get dimension and coordnames from the chart domain's points.
CALL this function for various numerical precisions
Definition at line 326 of file F5Bchart.c.
References _FIBER_MAX_COORDNAME_LENGTH, _F5_ChartPrecisionTypes::Bicovector_hid_t, _F5_ChartPrecisionTypes::Bivector_hid_t, _F5_ChartPrecisionTypes::Cometric_hid_t, _F5_ChartPrecisionTypes::Covector_hid_t, FIBER_MAX_RANK, _F5_ChartPrecisionTypes::Metric_hid_t, and _F5_ChartPrecisionTypes::Vector_hid_t.
Referenced by F5B_new_global_float_chart(), F5B_new_global_int_chart(), and F5B_new_global_int_domain().
| void F5Bchart_read_tangential_types | ( | F5_ChartPrecisionTypes * | H5Types, |
| hid_t | location ) |
Definition at line 674 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::Bicovector_hid_t, _F5_ChartPrecisionTypes::Bivector_hid_t, _F5_ChartPrecisionTypes::Cometric_hid_t, _F5_ChartPrecisionTypes::Covector_hid_t, FIBER_HDF5_CHART_BICOVECTOR_TYPE, FIBER_HDF5_CHART_BIVECTOR_TYPE, FIBER_HDF5_CHART_COVECTOR_TYPE, FIBER_HDF5_CHART_METRIC_TYPE, FIBER_HDF5_CHART_POINT_TYPE, FIBER_HDF5_CHART_PSEUDOCOSCALAR_TYPE, FIBER_HDF5_CHART_PSEUDOSCALAR_TYPE, FIBER_HDF5_CHART_VECTOR_TYPE, _F5_ChartPrecisionTypes::Metric_hid_t, _F5_ChartPrecisionTypes::Point_hid_t, _F5_ChartPrecisionTypes::Pseudocoscalar_hid_t, _F5_ChartPrecisionTypes::Pseudoscalar_hid_t, and _F5_ChartPrecisionTypes::Vector_hid_t.
Referenced by F5B_read_chart_domain().
| ChartDomain_IDs * F5Bcopy_chart_domain | ( | const ChartDomain_IDs * | IDs | ) |
Make a copy of a coordinate domain. All types are created from the existing information as if it were created from scratch. This function may be used to convert named data types into transient types. This is e.g. useful when reading a file. @TODO Add complementary cleanup function.
Definition at line 851 of file F5Bchart.c.
References ChartDomain_IDs::cell_dimensionality, ChartDomain_IDs::domain_name, ChartDomain_IDs::DoublePrecision, F5B_new_global_domain(), FIBER_MAX_RANK, ChartDomain_IDs::perm_vector, _F5_ChartPrecisionTypes::Point_hid_t, and ChartDomain_IDs::SinglePrecision.
| int F5Bget_chart_dims | ( | const ChartDomain_IDs * | IDs | ) |
Get the dimensionality of this chart. This information is taken from the number of elements of the associated point type.
Definition at line 899 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::Point_hid_t, and ChartDomain_IDs::SinglePrecision.
Referenced by F5Fcreate(), and F5Tpermute_dimensions().
| F5_ChartPrecisionTypes * F5Bget_precision_by_size | ( | ChartDomain_IDs * | CD, |
| int | TypeSize ) |
Given the size of some type in byte, yield the appropriate precision type structur from a chart domain. The function will fail if the TypeSize is anything but 1,2,4,8 or 16.
Definition at line 916 of file F5Bchart.c.
References ChartDomain_IDs::DoublePrecision, ChartDomain_IDs::ExtendedPrecision, ChartDomain_IDs::HalfPrecision, ChartDomain_IDs::OneBytePrecision, and ChartDomain_IDs::SinglePrecision.
Referenced by F5Bget_precision_by_type(), and F5file_type().
| F5_ChartPrecisionTypes * F5Bget_precision_by_type | ( | ChartDomain_IDs * | CD, |
| hid_t | type_id ) |
Given some compound type, yield the precision type corresponding to the compound type's first member. The function will fail if the provided type is not a compound type.
Definition at line 931 of file F5Bchart.c.
References F5Bget_precision_by_size(), and H5Tclose().
| void F5Binsert_tensor_type | ( | ChartDomain_IDs * | This, |
| F5Ttensor_t * | T ) |
Definition at line 588 of file F5Bchart.c.
References ChartDomain_IDs::TensorTypes.
| hid_t F5file_type | ( | F5Path * | fpath, |
| hid_t | fieldtype ) |
In F5, types are saved to the file to store certain information about datasets. The insufficiency in HDF5 is that a certain type can be saved to one file only, but not to many files, like a dataset. When a type is saved to a file, it becomes a "named type" - in contrast to "transient" types, which are not bound to a file. Only named types may carry attributes, transient types may not contain attributes.
Type attributes are used to describe properties of a type, in particular its tensorial properties, which is beyond the raw native type definition of e.g. float and dimension. We cannot store this information with a transient type, but must do it by our own ;-( .
Generic support would be desireable, but is not implemented right now. For now, only a limited set of pre-defined low-tensorial data types is hard-coded. By knowing this hard-coded type, also the tensorial type information is written into the file when saving the data type. Admittedly, this is not pretty, and a future revision will provide a more dynamically mechanism here.
The functionality is as follows:
Given a transient HDF5 type, return a named type that is suitable for the current file. The file ID's will be filled with the named data types.
@Note The file which is contained in fpath will be changed by this operation, because a new type might be created and saved into the file, so the fpath parameter cannot be const.
@Note This function currently only knows aboout point, vector and predefined tensor types in the ChartId. It is NOT fully generic. If it cannot convert some field type into a file type, it returns the transient type, i.e. we don't get a named type in this case.
Definition at line 941 of file F5Bchart.c.
References _F5_ChartPrecisionTypes::Bicovector_hid_t, _F5_ChartPrecisionTypes::Bivector_hid_t, ChartDomain_IDs::cell_dimensionality, _F5_ChartPrecisionTypes::Cometric_hid_t, _F5_ChartPrecisionTypes::Covector_hid_t, F5Asave_ints(), F5B_inject_precision_type(), F5Bget_precision_by_size(), F5Gappend(), F5printf, F5T_save_perm_vector(), F5Tappend(), F5Tmake_precise_tensor(), FIBER_HDF5_ANONYMOUS_TYPENAME, FIBER_HDF5_CELLDIMENSIONALITY, FIBER_HDF5_CHART_BICOVECTOR_TYPE, FIBER_HDF5_CHART_BIVECTOR_TYPE, FIBER_HDF5_CHART_COMETRIC_TYPE, FIBER_HDF5_CHART_COVECTOR_TYPE, FIBER_HDF5_CHART_METRIC_TYPE, FIBER_HDF5_CHART_POINT_TYPE, FIBER_HDF5_CHART_VECTOR_TYPE, F5Path::FileIDs, F5Path::GlobalChart_hid, H5Gclose, H5Tclose(), _F5_ChartPrecisionTypes::Metric_hid_t, F5Path::myChart, ChartDomain_IDs::perm_vector, _F5_ChartPrecisionTypes::Point_hid_t, and _F5_ChartPrecisionTypes::Vector_hid_t.
Referenced by F5Fcreate(), F5FSwrite_fraction(), F5Fwrite_1D(), F5Fwrite_flexible(), F5Fwrite_fraction(), F5Fwrite_fraction_external(), F5Fwrite_fractionS(), F5Fwrite_linear(), F5Fwrite_linear_fraction(), F5FwriteIMAGE(), F5Fwrites(), F5FwriteX(), F5Rcreate_uniform_sparse(), F5write_particle_cartesian3Dv(), F5write_particle_cartesian3DvU(), and F5write_particle_double_cartesian3Dv().
| void F5T_save_perm_vector | ( | hid_t | location, |
| int | rank, | ||
| int | perm_vector[] ) |
Definition at line 879 of file F5Bchart.c.
References F5Acreate(), and FIBER_HDF5_CHART_MEMLAYOUT.
Referenced by F5B_save_global_chart(), and F5file_type().