mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
[svn-r3564] made some more changes to tutorial pages
Purpose: [is this a bug fix? feature? ...] Description: [describe the bug, or describe the new feature, etc] Solution: [details about the changes, algorithm, etc...] [Please as detail as you can since your own explanation is better than others guessing it from the code.] Platforms tested: [machines you have tested the changed version. This is absolute important. Test it out on at least two or three different platforms such as Big-endian-32bit (SUN/IRIX), little-endian-32(LINUX) and 64-bit (IRIX64/UNICOS/DEC-ALPHA) would be good.]
This commit is contained in:
parent
345e07fc11
commit
da9346bd99
@ -29,7 +29,6 @@ width=78 height=27 alt="NCSA"><P></A>
|
||||
<LI> <A HREF="#fc">File Contents</A>
|
||||
</UL>
|
||||
</UL>
|
||||
<em><b>Note:</b> The FORTRAN API does not yet support compound datatypes.</em>
|
||||
<HR>
|
||||
<A NAME="def">
|
||||
<H2>Creating Compound Datatypes</H2>
|
||||
@ -69,159 +68,11 @@ the members.
|
||||
<UL>
|
||||
[ <A HREF="examples/h5_compound.c">C Example</A> ] - <code>h5_compound.c</code>
|
||||
<BR>
|
||||
[ <A HREF="examples/compound.f90">Fortran 90 Example</A> ]
|
||||
- <code>compound.f90</code>
|
||||
<BR>
|
||||
[ <A HREF="examples/java/Compound.java">Java Example</A> ] - <code>Compound.java</code>
|
||||
</UL>
|
||||
<PRE>
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
#include "hdf5.h"
|
||||
|
||||
#define FILE "SDScompound.h5"
|
||||
#define DATASETNAME "ArrayOfStructures"
|
||||
#define LENGTH 10
|
||||
#define RANK 1
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
|
||||
/* First structure and dataset*/
|
||||
typedef struct s1_t {
|
||||
int a;
|
||||
float b;
|
||||
double c;
|
||||
} s1_t;
|
||||
s1_t s1[LENGTH];
|
||||
hid_t s1_tid; /* File datatype identifier */
|
||||
|
||||
/* Second structure (subset of s1_t) and dataset*/
|
||||
typedef struct s2_t {
|
||||
double c;
|
||||
int a;
|
||||
} s2_t;
|
||||
s2_t s2[LENGTH];
|
||||
hid_t s2_tid; /* Memory datatype handle */
|
||||
|
||||
/* Third "structure" ( will be used to read float field of s1) */
|
||||
hid_t s3_tid; /* Memory datatype handle */
|
||||
float s3[LENGTH];
|
||||
|
||||
int i;
|
||||
hid_t file, dataset, space; /* Handles */
|
||||
herr_t status;
|
||||
hsize_t dim[] = {LENGTH}; /* Dataspace dimensions */
|
||||
|
||||
|
||||
/*
|
||||
* Initialize the data
|
||||
*/
|
||||
for (i = 0; i < LENGTH; i++) {
|
||||
s1[i].a = i;
|
||||
s1[i].b = i*i;
|
||||
s1[i].c = 1./(i+1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the data space.
|
||||
*/
|
||||
space = H5Screate_simple(RANK, dim, NULL);
|
||||
|
||||
/*
|
||||
* Create the file.
|
||||
*/
|
||||
file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
/*
|
||||
* Create the memory datatype.
|
||||
*/
|
||||
s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
|
||||
H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
|
||||
H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
|
||||
H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
|
||||
|
||||
/*
|
||||
* Create the dataset.
|
||||
*/
|
||||
dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT);
|
||||
|
||||
/*
|
||||
* Wtite data to the dataset;
|
||||
*/
|
||||
status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
|
||||
|
||||
/*
|
||||
* Release resources
|
||||
*/
|
||||
H5Tclose(s1_tid);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
H5Fclose(file);
|
||||
|
||||
/*
|
||||
* Open the file and the dataset.
|
||||
*/
|
||||
file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
|
||||
|
||||
dataset = H5Dopen(file, DATASETNAME);
|
||||
|
||||
/*
|
||||
* Create a datatype for s2
|
||||
*/
|
||||
s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
|
||||
|
||||
H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
|
||||
H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
|
||||
|
||||
/*
|
||||
* Read two fields c and a from s1 dataset. Fields in the file
|
||||
* are found by their names "c_name" and "a_name".
|
||||
*/
|
||||
status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
|
||||
|
||||
/*
|
||||
* Display the fields
|
||||
*/
|
||||
printf("\n");
|
||||
printf("Field c : \n");
|
||||
for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
|
||||
printf("\n");
|
||||
|
||||
printf("\n");
|
||||
printf("Field a : \n");
|
||||
for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
|
||||
printf("\n");
|
||||
|
||||
/*
|
||||
* Create a datatype for s3.
|
||||
*/
|
||||
s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
|
||||
|
||||
status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
|
||||
|
||||
/*
|
||||
* Read field b from s1 dataset. Field in the file is found by its name.
|
||||
*/
|
||||
status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
|
||||
|
||||
/*
|
||||
* Display the field
|
||||
*/
|
||||
printf("\n");
|
||||
printf("Field b : \n");
|
||||
for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
|
||||
printf("\n");
|
||||
|
||||
/*
|
||||
* Release resources
|
||||
*/
|
||||
H5Tclose(s2_tid);
|
||||
H5Tclose(s3_tid);
|
||||
H5Dclose(dataset);
|
||||
H5Fclose(file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
</PRE>
|
||||
The program outputs the following:
|
||||
<PRE>
|
||||
|
||||
|
@ -42,12 +42,13 @@ For further information regarding HDF5, check the HDF5 home page:
|
||||
<BR>
|
||||
<A HREF="http://hdf.ncsa.uiuc.edu/HDF5/">http://hdf.ncsa.uiuc.edu/HDF5/</A>
|
||||
<P>
|
||||
<DT><B>FORTRAN90:</B>
|
||||
<DD> With HDF5-1.4-beta2, support for Fortran 90 is included as part of
|
||||
the installation of the HDF5 library. Download the HDF5-1.4-beta2 source
|
||||
code and compile it with the <I>--enable-fortran</I> flag. Read the instructions
|
||||
in the
|
||||
<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/hdf5-1.4-beta2/RELEASE">RELEASE</A>
|
||||
<DT><B>FORTRAN 90:</B>
|
||||
<DD> With HDF5-1.4.0, support for Fortran 90 is included as part of
|
||||
the installation of the HDF5 library. The pre-compiled binaries include
|
||||
the Fortran library. If you need to build from source, download the
|
||||
HDF5-1.4.0 source code and compile it with the <I>--enable-fortran</I> flag.
|
||||
Read the instructions in the
|
||||
<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/unpacked/RELEASE.txt">RELEASE.txt</A>
|
||||
file for further details.
|
||||
|
||||
<P>
|
||||
@ -75,7 +76,7 @@ are included with this tutorial:
|
||||
<!-- <A HREF="helpdesk.mail.html"> -->
|
||||
<A HREF="mailto:hdfhelp@@ncsa.uiuc.edu">
|
||||
hdfhelp@@ncsa.uiuc.edu</A>
|
||||
<BR> <H6>Last Modified: January 10, 2001</H6><BR>
|
||||
<BR> <H6>Last Modified: March 8, 2001</H6><BR>
|
||||
<!-- modified by Barbara Jones - bljones@@ncsa.uiuc.edu -->
|
||||
<!-- modified by Frank Baker - fbaker@@ncsa.uiuc.edu -->
|
||||
</FONT>
|
||||
|
Loading…
x
Reference in New Issue
Block a user