diff options
author | Frank Baker <fbaker@hdfgroup.org> | 2000-12-22 20:47:59 (GMT) |
---|---|---|
committer | Frank Baker <fbaker@hdfgroup.org> | 2000-12-22 20:47:59 (GMT) |
commit | c1d537db2b803d6908fe3f21f62c592c9cd2bf70 (patch) | |
tree | 56a6cb7f00a6fbec3b071722df9705e744368073 /doc/html/Tutor/selectc.html | |
parent | d4c3773742b8dee426e7325fee4e8fc4015f2802 (diff) | |
download | hdf5-c1d537db2b803d6908fe3f21f62c592c9cd2bf70.zip hdf5-c1d537db2b803d6908fe3f21f62c592c9cd2bf70.tar.gz hdf5-c1d537db2b803d6908fe3f21f62c592c9cd2bf70.tar.bz2 |
[svn-r3196]
Purpose:
Adding Tutorial to development branch (R 1.4)
Platforms tested:
IE 5
Diffstat (limited to 'doc/html/Tutor/selectc.html')
-rw-r--r-- | doc/html/Tutor/selectc.html | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/doc/html/Tutor/selectc.html b/doc/html/Tutor/selectc.html new file mode 100644 index 0000000..e01d9db --- /dev/null +++ b/doc/html/Tutor/selectc.html @@ -0,0 +1,296 @@ +<HTML><HEAD> +<TITLE>HDF5 Tutorial - Selections using H5Sselect_elements and H5Scopy +</TITLE> +</HEAD> + +<body bgcolor="#ffffff"> + +<!-- BEGIN MAIN BODY --> + +<A HREF="http://www.ncsa.uiuc.edu/"><img border=0 +src="http://www.ncsa.uiuc.edu/Images/NCSAhome/footerlogo.gif" +width=78 height=27 alt="NCSA"><P></A> + + [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ] +<H1> +<BIG><BIG><BIG><FONT COLOR="#c101cd">Selections using H5Sselect_elements and H5SCopy</FONT> +</BIG></BIG></BIG></H1> + +<hr noshade size=1> + +<BODY> +<H2>Contents:</H2> +<UL> + <LI> <A HREF="#def">Selecting Independent Points and Copying a Dataspace</A> + <LI> Programming Example + <UL> + <LI> <A HREF="#desc">Description</A> + <LI> <A HREF="#rem">Remarks</A> + <LI> <A HREF="#fc">File Contents</A> + </UL> +</UL> +<HR> +<A NAME="def"> +<H2>Selecting Independent Points and Copying a Dataspace</h2> +You can select independent points to read or write to in a +dataspace by use of the H5Sselect_elements function. +<P> +The H5Scopy function allows you to make an exact copy of a dataspace, +which can help cut down on the number of function calls needed when +selecting a dataspace. +<P> +<H2> Programming Example</H2> +<A NAME="desc"> +<H3><U>Description</U></H3> +This example shows you how to use H5Sselect_elements to select individual +points in a dataset and how to use H5Scopy to make a copy of a dataspace. + +[ <A HREF="examples/h5_copy.c">Download h5_copy.c</A> ] +<PRE> +/***********************************************************************/ +/* */ +/* PROGRAM: h5_copy.c */ +/* PURPOSE: Shows how to use the H5SCOPY function. */ +/* DESCRIPTION: */ +/* This program creates two files, copy1.h5, and copy2.h5. */ +/* In copy1.h5, it creates a 3x4 dataset called 'Copy1', */ +/* and write 0's to this dataset. */ +/* In copy2.h5, it create a 3x4 dataset called 'Copy2', */ +/* and write 1's to this dataset. */ +/* It closes both files, reopens both files, selects two */ +/* points in copy1.h5 and writes values to them. Then it */ +/* does an H5Scopy from the first file to the second, and */ +/* writes the values to copy2.h5. It then closes the */ +/* files, reopens them, and prints the contents of the */ +/* two datasets. */ +/* */ +/***********************************************************************/ + +#include "hdf5.h" +#define FILE1 "copy1.h5" +#define FILE2 "copy2.h5" + +#define RANK 2 +#define DIM1 3 +#define DIM2 4 +#define NUMP 2 + +int main (void) +{ + hid_t file1, file2, dataset1, dataset2; + hid_t mid1, mid2, fid1, fid2; + hsize_t fdim[] = {DIM1, DIM2}; + hsize_t mdim[] = {DIM1, DIM2}; + hsize_t start[2], stride[2], count[2], block[2]; + int buf1[DIM1][DIM2]; + int buf2[DIM1][DIM2]; + int bufnew[DIM1][DIM2]; + int val[] = {53, 59}; + hsize_t marray[] = {2}; + hssize_t coord[NUMP][RANK]; + herr_t ret; + uint i, j; + +/***********************************************************************/ +/* */ +/* Create two files containing identical datasets. Write 0's to one */ +/* and 1's to the other. */ +/* */ +/***********************************************************************/ + + for ( i = 0; i < DIM1; i++ ) + for ( j = 0; j < DIM2; j++ ) + buf1[i][j] = 0; + + for ( i = 0; i < DIM1; i++ ) + for ( j = 0; j < DIM2; j++ ) + buf2[i][j] = 1; + + file1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + file2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + fid1 = H5Screate_simple (RANK, fdim, NULL); + fid2 = H5Screate_simple (RANK, fdim, NULL); + + dataset1 = H5Dcreate (file1, "Copy1", H5T_NATIVE_INT, fid1, H5P_DEFAULT); + dataset2 = H5Dcreate (file2, "Copy2", H5T_NATIVE_INT, fid2, H5P_DEFAULT); + + ret = H5Dwrite(dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1); + ret = H5Dwrite(dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2); + + ret = H5Dclose (dataset1); + ret = H5Dclose (dataset2); + + ret = H5Sclose (fid1); + ret = H5Sclose (fid2); + + ret = H5Fclose (file1); + ret = H5Fclose (file2); + +/***********************************************************************/ +/* */ +/* Open the two files. Select two points in one file, write values to */ +/* those point locations, then do H5Scopy and write the values to the */ +/* other file. Close files. */ +/* */ +/***********************************************************************/ + + file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT); + file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT); + dataset1 = H5Dopen (file1, "Copy1"); + dataset2 = H5Dopen (file2, "Copy2"); + fid1 = H5Dget_space (dataset1); + mid1 = H5Screate_simple(1, marray, NULL); + coord[0][0] = 0; coord[0][1] = 3; + coord[1][0] = 0; coord[1][1] = 1; + + ret = H5Sselect_elements (fid1, H5S_SELECT_SET, NUMP, (const hssize_t **)coord); + + ret = H5Dwrite (dataset1, H5T_NATIVE_INT, mid1, fid1, H5P_DEFAULT, val); + + fid2 = H5Scopy (fid1); + + ret = H5Dwrite (dataset2, H5T_NATIVE_INT, mid1, fid2, H5P_DEFAULT, val); + + ret = H5Dclose (dataset1); + ret = H5Dclose (dataset2); + ret = H5Sclose (fid1); + ret = H5Sclose (fid2); + ret = H5Fclose (file1); + ret = H5Fclose (file2); + ret = H5Sclose (mid1); + +/***********************************************************************/ +/* */ +/* Open both files and print the contents of the datasets. */ +/* */ +/***********************************************************************/ + + file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT); + file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT); + dataset1 = H5Dopen (file1, "Copy1"); + dataset2 = H5Dopen (file2, "Copy2"); + + ret = H5Dread (dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, + H5P_DEFAULT, bufnew); + + printf ("\nDataset 'Copy1' in file 'copy1.h5' contains: \n"); + for (i=0;i<DIM1; i++) { + for (j=0;j<DIM2;j++) printf ("%3d ", bufnew[i][j]); + printf("\n"); + } + + printf ("\nDataset 'Copy2' in file 'copy2.h5' contains: \n"); + + ret = H5Dread (dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, + H5P_DEFAULT, bufnew); + + for (i=0;i<DIM1; i++) { + for (j=0;j<DIM2;j++) printf ("%3d ", bufnew[i][j]); + printf("\n"); + } + ret = H5Dclose (dataset1); + ret = H5Dclose (dataset2); + ret = H5Fclose (file1); + ret = H5Fclose (file2); + +} ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +</PRE> + +<A NAME="rem"> +<H3><U>Remarks</U></H3> +<UL> +<LI>H5Sselect_elements selects array elements to be included in the +selection for a dataspace: +<PRE> + herr_t H5Sselect_elements (hid_t space_id, H5S_seloper_t op, + size_t num_elem, const hssize_t **coord ) +</PRE> +<UL> +<LI>The <I>space_id</I> parameter is the dataspace identifier.<BR> +<LI>The <I>op</I> parameter currently can only be set to H5S_SELECT_SET and +specifies to replace the existing selection with the parameters from this +call. +<LI>The <I>coord</I> array is a two-dimensional array of size 'dataspace rank' +by the number of elements to be selected, <I>num_elem</I>.<BR> +</UL> +<P> +<LI>H5Scopy creates an exact copy of a dataspace: +<PRE> + hid_t H5Scopy(hid_t space_id ) +</PRE> +<UL> +<LI>The <I>space_id</I> parameter is the dataspace identifier to copy. +</UL> +</UL> +</UL> +<P> + +<A NAME="fc"> +<H3><U>File Contents</U></H3> + +Following is the DDL for <I>copy1.h5</I> and <I>copy2.h5</I>, as viewed with +the commands "h5dump copy1.h5" and "h5dump copy2.h5". +<P> +<B>Fig. S.1</B> <I>'copy1.h5' in DDL</I> +<PRE> +HDF5 "copy1.h5" { +GROUP "/" { + DATASET "Copy1" { + DATATYPE { H5T_STD_I32BE } + DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) } + DATA { + 0, 59, 0, 53, + 0, 0, 0, 0, + 0, 0, 0, 0 + } + } +} +} +</PRE> +<B>Fig. S.2</B> <I>'copy2.h5' in DDL</I> +<PRE> +HDF5 "copy2.h5" { +GROUP "/" { + DATASET "Copy2" { + DATATYPE { H5T_STD_I32BE } + DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) } + DATA { + 1, 59, 1, 53, + 1, 1, 1, 1, + 1, 1, 1, 1 + } + } +} +} + +</PRE> + + + +<!-- BEGIN FOOTER INFO --> + +<P><hr noshade size=1> +<font face="arial,helvetica" size="-1"> + <a href="http://www.ncsa.uiuc.edu/"><img border=0 + src="http://www.ncsa.uiuc.edu/Images/NCSAhome/footerlogo.gif" + width=78 height=27 alt="NCSA"><br> + The National Center for Supercomputing Applications</A><br> + <a href="http://www.uiuc.edu/">University of Illinois + at Urbana-Champaign</a><br> + <br> +<!-- <A HREF="helpdesk.mail.html"> --> +<A HREF="mailto:hdfhelp@ncsa.uiuc.edu"> +hdfhelp@ncsa.uiuc.edu</A> +<BR> <H6>Last Modified: August 27, 1999</H6><BR> +<!-- modified by Barbara Jones - bljones@ncsa.uiuc.edu --> +</FONT> +<BR> +<!-- <A HREF="mailto:hdfhelp@ncsa.uiuc.edu"> --> + +</BODY> +</HTML> + + + |