「HDF5」の版間の差分
 (→HDF5)  | 
				 (→ファイルの作り方)  | 
				||
| (同じ利用者による、間の10版が非表示) | |||
| 行1: | 行1: | ||
== HDF5 ==  | == HDF5 ==  | ||
 HDF5[https://www.hdfgroup.org/ HDF5 group] (Hierarchical Data Format 5)は、階層的な科学データ(3D, 4Dなど)を保存するためのファイルフォーマットおよびライブラリです。  |  HDF5[https://www.hdfgroup.org/ HDF5 group] (Hierarchical Data Format 5)は、階層的な科学データ(3D, 4Dなど)を保存するためのファイルフォーマットおよびライブラリです。  | ||
| + | [[HDFView]]を使って,その構造を見ることができます。  | ||
| + | |||
| + | [[Imaris]]が利用するファイルフォーマットもHDF5フォーマットですが,特別なタグが必要です。  | ||
| + | |||
=== libhdf5の使い方 ===  | === libhdf5の使い方 ===  | ||
| − | ファイルの作り方  | + | ==== ファイルの作り方 ====  | 
  {  |   {  | ||
| 行15: | 行19: | ||
アクセスモード  | アクセスモード  | ||
| − | + |  H5F_ACC_TRUNC  ファイルがあったら,新しくつくりなおす  | |
| − | + |  H5F_ACC_EXCL   ファイルがあったら失敗する  | |
| − | + |  H5F_ACC_RDONLY  読みとりのみ  | |
| − | + |  H5F_ACC_RDWR  読み書き  | |
File Creation Property List    | File Creation Property List    | ||
| 行25: | 行29: | ||
File Access Property List  | File Access Property List  | ||
   H5P_DEFAULT  |    H5P_DEFAULT  | ||
| + | |||
| + | |||
| + |                                                            +--integer  | ||
| + |                                                           +--floating point  | ||
| + |                                 +----atomic  ----+--date and time  | ||
| + |                                  |                         +--character string  | ||
| + |  HDF5 datatypes --|                          +--bitfield  | ||
| + |                                  |                         +--opaque  | ||
| + |                                  |                           | ||
| + |                                 +----compound  | ||
| + | |||
| + | === Chunkingと拡張可能なデータセット ===  | ||
| + | [[https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html]]を参照  | ||
| + | |||
| + | ==== 拡張可能なデータセットの作成 ====  | ||
| + | |||
| + |  拡張可能なデータセットとは、次元を拡張することができるデータセットのことです。HDF5では、あるデータセットをある初期次元で定義し、その後その初期次元のいずれかのサイズを大きくすることができます。  | ||
| + | |||
| + |  HDF5では、拡張可能なデータセットを定義するためにチャンキングを使用する必要があります。これにより、ストレージを必要以上に再配置することなく、データセットを効率的に拡張することができます。  | ||
| + | |||
| + | 拡張可能なデータセットを記述するためには、以下の操作が必要です。  | ||
| + | |||
| + | 1.データセットのデータ空間を、最終的に拡張される可能性のあるすべての次元に対して無制限であると宣言しておく。  | ||
| + | 2.データセット作成のプロパティを設定し、チャンキングを可能にする。  | ||
| + | 3.データセットを作成する。  | ||
| + | 4.データセットのサイズを拡張する。  | ||
| + | |||
| + | |||
| + | プログラミングの例  | ||
| + | '''説明'''  | ||
| + | |||
| + |  この例では、3×3の拡張可能なデータセットを作成し、そのデータセットに書き込み、データセットを10×3に拡張し、再びそのデータセットに書き込む方法を示しています。  | ||
| + | |||
| + | [C 言語の例 ] - h5_extend.c  | ||
| + | <pre>  | ||
| + | /**************************************************************    | ||
| + |  *  | ||
| + |  *   This example shows how to work with extendible datasets.  | ||
| + |  *   In the current version of the library a dataset MUST be  | ||
| + |  *   chunked in order to be extendible.    | ||
| + |  *  | ||
| + |  *   This example is derived from the h5_extend_write.c and   | ||
| + |  *   h5_read_chunk.c examples that are in the "Introduction   | ||
| + |  *   to HDF5".  | ||
| + |  *     | ||
| + |  *************************************************************/  | ||
| + | |||
| + | #include "hdf5.h"  | ||
| + | |||
| + | #define FILE        "ext.h5"  | ||
| + | #define DATASETNAME "ExtendibleArray"   | ||
| + | #define RANK         2  | ||
| + | |||
| + | int  | ||
| + | main (void)  | ||
| + | {  | ||
| + |     hid_t       file;                          /* handles */  | ||
| + |     hid_t       dataspace, dataset;    | ||
| + |     hid_t       filespace;                     | ||
| + |     hid_t       cparms;                       | ||
| + |     hid_t       memspace;  | ||
| + | |||
| + |     hsize_t      dims[2]  = { 3, 3};           /* dataset dimensions			  | ||
| + |                                                   at creation time */  | ||
| + |     hsize_t      dims1[2] = { 3, 3};           /* data1 dimensions */   | ||
| + |     hsize_t      dims2[2] = { 7, 1};           /* data2 dimensions */    | ||
| + | |||
| + |     hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};  | ||
| + |     hsize_t      size[2];  | ||
| + |     hssize_t     offset[2];  | ||
| + |     hsize_t      i,j;  | ||
| + |     herr_t       status, status_n;                               | ||
| + |     int          data1[3][3] = { {1, 1, 1},      /* data to write */  | ||
| + |                                  {1, 1, 1},  | ||
| + |                                  {1, 1, 1} };        | ||
| + | |||
| + |     int          data2[7]    = { 2, 2, 2, 2, 2, 2, 2};  | ||
| + | |||
| + |     /* Variables used in reading data back */  | ||
| + |     hsize_t      chunk_dims[2] ={2, 5};  | ||
| + |     hsize_t      chunk_dimsr[2];  | ||
| + |     hsize_t      dimsr[2];  | ||
| + |     int          data_out[10][3];  | ||
| + |     int          rank, rank_chunk;  | ||
| + | |||
| + |     /* Create the data space with unlimited dimensions. */  | ||
| + |     dataspace = H5Screate_simple (RANK, dims, maxdims); // データ空間(H5S)の作成:maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};  | ||
| + | |||
| + |     /* Create a new file. If file exists its contents will be overwritten. */  | ||
| + |     file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); // ファイル(H5F)の作成:  | ||
| + | |||
| + |     /* Modify dataset creation properties, i.e. enable chunking  */  | ||
| + |     cparms = H5Pcreate (H5P_DATASET_CREATE); // パラメータ用データセット(H5P)の作成   | ||
| + |     status = H5Pset_chunk ( cparms, RANK, chunk_dims); // chunkパラメータの設定  | ||
| + | |||
| + |     /* Create a new dataset within the file using cparms  | ||
| + |        creation properties.  */  | ||
| + |     dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace,  | ||
| + |                          cparms); // データ(H5D)の作成  | ||
| + | |||
| + |     /* Extend the dataset. This call assures that dataset is 3 x 3.*/  | ||
| + |     size[0]   = 3;   | ||
| + |     size[1]   = 3;   | ||
| + |     status = H5Dextend (dataset, size); // データ(H5D)の拡張(元々がUNLIMITEDで設定されている)  | ||
| + | |||
| + |     /* Select a hyperslab  */  | ||
| + |     filespace = H5Dget_space (dataset); // データ(H5D)の空間の設定  | ||
| + |     offset[0] = 0;  | ||
| + |     offset[1] = 0;  | ||
| + |     status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,  | ||
| + |                                   dims1, NULL); // データ空間(H5S)の選択   | ||
| + | |||
| + |     /* Write the data to the hyperslab  */  | ||
| + |     status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,  | ||
| + |                        H5P_DEFAULT, data1); // データ(H5D)の書き出し  | ||
| + | |||
| + |     /* Extend the dataset. Dataset becomes 10 x 3  */  | ||
| + |     dims[0]   = dims1[0] + dims2[0];  | ||
| + |     size[0]   = dims[0];    | ||
| + |     size[1]   = dims[1];   | ||
| + |     status = H5Dextend (dataset, size); // データ(H5D)の拡張  | ||
| + | |||
| + |     /* Select a hyperslab  */  | ||
| + |     filespace = H5Dget_space (dataset); // データ(H5D)の空間選択  | ||
| + |     offset[0] = 3;  | ||
| + |     offset[1] = 0;  | ||
| + |     status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,  | ||
| + |                                   dims2, NULL);  // データ空間(H5S)の選択  | ||
| + | |||
| + |     /* Define memory space */  | ||
| + |     dataspace = H5Screate_simple (RANK, dims2, NULL); // データ空間(H5S)の作成  | ||
| + | |||
| + |     /* Write the data to the hyperslab  */  | ||
| + |     status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,  | ||
| + |                        H5P_DEFAULT, data2); // データ(H5D)の書き出し  | ||
| + | |||
| + |     /* Close resources */  | ||
| + |     status = H5Dclose (dataset);  | ||
| + |     status = H5Sclose (dataspace);  | ||
| + |     status = H5Sclose (filespace);  | ||
| + |     status = H5Fclose (file);  | ||
| + | |||
| + | /****************************************************************  | ||
| + |     Read the data back   | ||
| + |  ***************************************************************/  | ||
| + |                                                                    // open/get  | ||
| + |     file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);            //  file  | ||
| + |     dataset = H5Dopen (file, DATASETNAME);                         //   dataset  | ||
| + |     filespace = H5Dget_space (dataset);                            //    filespace  | ||
| + |     rank = H5Sget_simple_extent_ndims (filespace);                 //     rank  | ||
| + |     status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL); //     dimsr  | ||
| + | |||
| + |     cparms = H5Dget_create_plist (dataset);                        // cparams  | ||
| + |     if (H5D_CHUNKED == H5Pget_layout (cparms))                     //  layout  | ||
| + |     {  | ||
| + |        rank_chunk = H5Pget_chunk (cparms, 2, chunk_dimsr);         //  rank_chunk, chuk_dimsr  | ||
| + |     }  | ||
| + | |||
| + |     memspace = H5Screate_simple (rank,dimsr,NULL);                 // H5S memspace <- create <- rank, dimsr   | ||
| + |     status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace,  | ||
| + |                       H5P_DEFAULT, data_out);                      // H5D data_out <- memspace, filespace, dataset  | ||
| + |     printf("\n");  | ||
| + |     printf("Dataset: \n");  | ||
| + |     for (j = 0; j < dimsr[0]; j++)  | ||
| + |     {  | ||
| + |        for (i = 0; i < dimsr[1]; i++)  | ||
| + |            printf("%d ", data_out[j][i]);  | ||
| + |        printf("\n");  | ||
| + |     }  | ||
| + | |||
| + |     status = H5Pclose (cparms);  | ||
| + |     status = H5Dclose (dataset);  | ||
| + |     status = H5Sclose (filespace);  | ||
| + |     status = H5Sclose (memspace);  | ||
| + |     status = H5Fclose (file);  | ||
| + | }     | ||
| + | </pre>  | ||
| + | |||
| + | [FORTRAN の例 ] - chunk.f90  | ||
| + | |||
| + | 注:Makefileを含むサンプルのtarファイルをダウンロードするには、参考文献のページを参照してください。  | ||
| + | |||
| + | 備考  | ||
| + | ルーチンH5Pcreate / h5pcreate_fは、プロパティリストのインスタンスとして新しいプロパティを作成します。シグネチャは以下の通りです。  | ||
| + | |||
| + | C:  | ||
| + |   hid_t H5Pcreate (H5P_class_t classtype)  | ||
| + | FORTRAN  | ||
| + |   H5PCREATE_F (CLASSTYPE, PRP_ID, HDFERR)   | ||
| + |              classtype IN: INTEGER   | ||
| + |              prp_id OUT: INTEGER(HID_T)  | ||
| + |              hdferr OUT: INTEGER   | ||
| + | |||
| + |  パラメータ classtype は、作成するプロパティリストのタイプである。有効なクラスタイプは以下の通りです。  | ||
| + | |||
| + | {|  | ||
| + | |C   | ||
| + | |FORTRAN  | ||
| + | |-  | ||
| + | |H5P_FILE_CREATE  | ||
| + | |||
| + | H5P_FILE_ACCESS  | ||
| + | |||
| + | H5P_DATASET_CREATE  | ||
| + | |||
| + | H5P_DATASET_XFER  | ||
| + | |||
| + | H5P_MOUNT  | ||
| + | |H5P_FILE_CREATE_F  | ||
| + | |||
| + | H5P_FILE_ACCESS_F  | ||
| + | |||
| + | H5P_DATASET_CREATE_F  | ||
| + | |||
| + | H5P_DATASET_XFER_F  | ||
| + | |||
| + | H5P_MOUNT_F  | ||
| + | |}  | ||
| + | |||
| + | |||
| + |  C言語では、成功した場合はプロパティリストの識別子が返され、失敗した場合は負の値が返されます。FORTRANでは、プロパティリストの識別子をprp_idで、呼び出しの戻り値をhdferrで返します。  | ||
| + | |||
| + | ルーチンH5Pset_chunk / H5Pset_chunk_fは、チャンクされたレイアウトデータセットを格納するために使用されるチャンクのサイズを設定します。このルーチンのシグネチャは次のとおりです。  | ||
| + | C:  | ||
| + |      herr_t H5Pset_chunk (hid_t prp_id, int ndims,   | ||
| + |                          const hsize_t * dims)   | ||
| + | FORTRAN:  | ||
| + |      H5PSET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)   | ||
| + |             prp_id IN: INTEGER(HID_T)  | ||
| + |             ndims IN: INTEGER  | ||
| + |             dims IN: INTEGER(HSIZE_T), DIMENSION(ndims)   | ||
| + |             hdferr OUT: INTEGER  | ||
| + | |||
| + | ・prp_idパラメータは、問い合わせるプロパティリストの識別子である。  | ||
| + | ・ndimsパラメータは各チャンクの次元数である。  | ||
| + | ・dims パラメータは各チャンクのサイズを含む配列です。  | ||
| + | |||
| + | C言語では,成功すれば非負の値が,失敗すれば負の値が返されます.  | ||
| + | FORTRANでは、戻り値はhdferrで返されます:成功した場合は0、それ以外の場合は-1です。  | ||
| + | |||
| + | H5Dextend / H5Dextend_f ルーチンは無制限の次元を持つデータセットを拡張します。シグネチャは次の通りである。  | ||
| + | |||
| + | C:  | ||
| + |     herr_t H5Dextend (hid_t dset_id, const hsize_t * size)   | ||
| + | FORTRAN  | ||
| + |     H5DEXTEND_F (Dset_ID、Size、HDERR)   | ||
| + |             dset_id IN: INTEGER(HID_T)   | ||
| + |             サイズ IN: 整数(hsize_t), 次元(*)    | ||
| + |             hdferr OUT: INTEGER  | ||
| + | |||
| + | dset_id パラメータはデータセット識別子である.  | ||
| + | size パラメータは、各次元の新しい大きさを含む配列である。  | ||
| + | C言語では、この関数は成功すれば非負の値を、そうでなければ負の値を返す。  | ||
| + | FORTRANでは、戻り値はhdferrで返される: 成功すれば0、そうでなければ-1。  | ||
| + | |||
| + | H5Dget_create_plist / H5Dget_create_plist_f ルーチンは、データセットに対するデータセット作成プロパティリストのコピーの識別子を返します。  | ||
| + | C関数H5Pget_layoutは、データセットの生データのレイアウトを返します。有効な型はH5D_CONTIGUOUSとH5D_CHUNKEDです。H5Pget_layoutのFORTRANルーチンはまだ存在しません。  | ||
| + | |||
| + | H5Pget_chunk / H5Pget_chunk_fルーチンは、チャンクされたレイアウトデータセットの生データのチャンクの大きさを取得します。シグネチャは以下の通りです。  | ||
| + | C:  | ||
| + |     int H5Pget_chunk (hid_t prp_id, int ndims, hsize_t * dims)   | ||
| + | FORTRAN:  | ||
| + |     H5PGET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)  | ||
| + |             prp_id IN: INTEGER(HID_T)   | ||
| + |             ndims IN: INTEGER  | ||
| + |             dims OUT: INTEGER(HSIZE_T), DIMENSION(ndims)   | ||
| + |             hdferr OUT: INTEGER   | ||
| + | prp_id パラメータは、問い合わせるプロパティリストの識別子である。  | ||
| + | ndims パラメータは dims 配列のサイズである。  | ||
| + | dimsパラメータは、チャンクの寸法を格納する配列です。  | ||
| + | C では、この関数は成功すればチャンクの次元を返し、そうでなければ負の値を返します。  | ||
| + | FORTRANでは、戻り値はhdferrに返されます:成功した場合はチャンクのランク、そうでない場合は-1です。  | ||
| + | |||
| + | H5Pclose / H5Pclose_fルーチンは、プロパティリストへのアクセスを終了させます。シグネチャは次の通りです。  | ||
| + | |||
| + | C:  | ||
| + |     Herr_t H5Pclose (hid_t prp_id)   | ||
| + | FORTRAN  | ||
| + |     H5PCLOSE_F (PRP_ID, HDFERR)   | ||
| + |             prp_id IN: INTEGER(HID_T)   | ||
| + |             hdferr OUT: INTEGER   | ||
| + | prp_id パラメータは、アクセスを終了させるプロパティリストの識別子である。  | ||
2022年3月24日 (木) 07:35時点における最新版
HDF5
HDF5HDF5 group (Hierarchical Data Format 5)は、階層的な科学データ(3D, 4Dなど)を保存するためのファイルフォーマットおよびライブラリです。 HDFViewを使って,その構造を見ることができます。
Imarisが利用するファイルフォーマットもHDF5フォーマットですが,特別なタグが必要です。
libhdf5の使い方
ファイルの作り方
{
hid_t fileID;
heer_t stutus;
fileID = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
status = H5Fclose(fileID);
}
アクセスモード
H5F_ACC_TRUNC ファイルがあったら,新しくつくりなおす H5F_ACC_EXCL ファイルがあったら失敗する H5F_ACC_RDONLY 読みとりのみ H5F_ACC_RDWR 読み書き
File Creation Property List
H5P_DEFAULT
File Access Property List
H5P_DEFAULT
                                                          +--integer
                                                         +--floating point
                               +----atomic  ----+--date and time
                                |                         +--character string
HDF5 datatypes --|                          +--bitfield
                                |                         +--opaque
                                |                         
                               +----compound
Chunkingと拡張可能なデータセット
[https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html]を参照
拡張可能なデータセットの作成
拡張可能なデータセットとは、次元を拡張することができるデータセットのことです。HDF5では、あるデータセットをある初期次元で定義し、その後その初期次元のいずれかのサイズを大きくすることができます。
HDF5では、拡張可能なデータセットを定義するためにチャンキングを使用する必要があります。これにより、ストレージを必要以上に再配置することなく、データセットを効率的に拡張することができます。
拡張可能なデータセットを記述するためには、以下の操作が必要です。
1.データセットのデータ空間を、最終的に拡張される可能性のあるすべての次元に対して無制限であると宣言しておく。 2.データセット作成のプロパティを設定し、チャンキングを可能にする。 3.データセットを作成する。 4.データセットのサイズを拡張する。
プログラミングの例
説明
この例では、3×3の拡張可能なデータセットを作成し、そのデータセットに書き込み、データセットを10×3に拡張し、再びそのデータセットに書き込む方法を示しています。
[C 言語の例 ] - h5_extend.c
/**************************************************************  
 *
 *   This example shows how to work with extendible datasets.
 *   In the current version of the library a dataset MUST be
 *   chunked in order to be extendible.  
 *
 *   This example is derived from the h5_extend_write.c and 
 *   h5_read_chunk.c examples that are in the "Introduction 
 *   to HDF5".
 *   
 *************************************************************/
 
#include "hdf5.h"
#define FILE        "ext.h5"
#define DATASETNAME "ExtendibleArray" 
#define RANK         2
int
main (void)
{
    hid_t       file;                          /* handles */
    hid_t       dataspace, dataset;  
    hid_t       filespace;                   
    hid_t       cparms;                     
    hid_t       memspace;
    hsize_t      dims[2]  = { 3, 3};           /* dataset dimensions			
                                                  at creation time */
    hsize_t      dims1[2] = { 3, 3};           /* data1 dimensions */ 
    hsize_t      dims2[2] = { 7, 1};           /* data2 dimensions */  
    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
    hsize_t      size[2];
    hssize_t     offset[2];
    hsize_t      i,j;
    herr_t       status, status_n;                             
    int          data1[3][3] = { {1, 1, 1},      /* data to write */
                                 {1, 1, 1},
                                 {1, 1, 1} };      
    int          data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
    /* Variables used in reading data back */
    hsize_t      chunk_dims[2] ={2, 5};
    hsize_t      chunk_dimsr[2];
    hsize_t      dimsr[2];
    int          data_out[10][3];
    int          rank, rank_chunk;
    /* Create the data space with unlimited dimensions. */
    dataspace = H5Screate_simple (RANK, dims, maxdims); // データ空間(H5S)の作成:maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
    /* Create a new file. If file exists its contents will be overwritten. */
    file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); // ファイル(H5F)の作成:
    /* Modify dataset creation properties, i.e. enable chunking  */
    cparms = H5Pcreate (H5P_DATASET_CREATE); // パラメータ用データセット(H5P)の作成 
    status = H5Pset_chunk ( cparms, RANK, chunk_dims); // chunkパラメータの設定
    /* Create a new dataset within the file using cparms
       creation properties.  */
    dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace,
                         cparms); // データ(H5D)の作成
    /* Extend the dataset. This call assures that dataset is 3 x 3.*/
    size[0]   = 3; 
    size[1]   = 3; 
    status = H5Dextend (dataset, size); // データ(H5D)の拡張(元々がUNLIMITEDで設定されている)
    /* Select a hyperslab  */
    filespace = H5Dget_space (dataset); // データ(H5D)の空間の設定
    offset[0] = 0;
    offset[1] = 0;
    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
                                  dims1, NULL); // データ空間(H5S)の選択 
    /* Write the data to the hyperslab  */
    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
                       H5P_DEFAULT, data1); // データ(H5D)の書き出し
    /* Extend the dataset. Dataset becomes 10 x 3  */
    dims[0]   = dims1[0] + dims2[0];
    size[0]   = dims[0];  
    size[1]   = dims[1]; 
    status = H5Dextend (dataset, size); // データ(H5D)の拡張
    /* Select a hyperslab  */
    filespace = H5Dget_space (dataset); // データ(H5D)の空間選択
    offset[0] = 3;
    offset[1] = 0;
    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
                                  dims2, NULL);  // データ空間(H5S)の選択
    /* Define memory space */
    dataspace = H5Screate_simple (RANK, dims2, NULL); // データ空間(H5S)の作成
    /* Write the data to the hyperslab  */
    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
                       H5P_DEFAULT, data2); // データ(H5D)の書き出し
    /* Close resources */
    status = H5Dclose (dataset);
    status = H5Sclose (dataspace);
    status = H5Sclose (filespace);
    status = H5Fclose (file);
/****************************************************************
    Read the data back 
 ***************************************************************/
                                                                   // open/get
    file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);            //  file
    dataset = H5Dopen (file, DATASETNAME);                         //   dataset
    filespace = H5Dget_space (dataset);                            //    filespace
    rank = H5Sget_simple_extent_ndims (filespace);                 //     rank
    status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL); //     dimsr
    cparms = H5Dget_create_plist (dataset);                        // cparams
    if (H5D_CHUNKED == H5Pget_layout (cparms))                     //  layout
    {
       rank_chunk = H5Pget_chunk (cparms, 2, chunk_dimsr);         //  rank_chunk, chuk_dimsr
    }
    memspace = H5Screate_simple (rank,dimsr,NULL);                 // H5S memspace <- create <- rank, dimsr 
    status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace,
                      H5P_DEFAULT, data_out);                      // H5D data_out <- memspace, filespace, dataset
    printf("\n");
    printf("Dataset: \n");
    for (j = 0; j < dimsr[0]; j++)
    {
       for (i = 0; i < dimsr[1]; i++)
           printf("%d ", data_out[j][i]);
       printf("\n");
    }
    status = H5Pclose (cparms);
    status = H5Dclose (dataset);
    status = H5Sclose (filespace);
    status = H5Sclose (memspace);
    status = H5Fclose (file);
}   
[FORTRAN の例 ] - chunk.f90
注:Makefileを含むサンプルのtarファイルをダウンロードするには、参考文献のページを参照してください。
備考 ルーチンH5Pcreate / h5pcreate_fは、プロパティリストのインスタンスとして新しいプロパティを作成します。シグネチャは以下の通りです。
C:
hid_t H5Pcreate (H5P_class_t classtype)
FORTRAN
 H5PCREATE_F (CLASSTYPE, PRP_ID, HDFERR) 
            classtype IN: INTEGER 
            prp_id OUT: INTEGER(HID_T)
            hdferr OUT: INTEGER 
パラメータ classtype は、作成するプロパティリストのタイプである。有効なクラスタイプは以下の通りです。
| C | FORTRAN | 
| H5P_FILE_CREATE
 H5P_FILE_ACCESS H5P_DATASET_CREATE H5P_DATASET_XFER H5P_MOUNT  | 
H5P_FILE_CREATE_F
 H5P_FILE_ACCESS_F H5P_DATASET_CREATE_F H5P_DATASET_XFER_F H5P_MOUNT_F  | 
C言語では、成功した場合はプロパティリストの識別子が返され、失敗した場合は負の値が返されます。FORTRANでは、プロパティリストの識別子をprp_idで、呼び出しの戻り値をhdferrで返します。
ルーチンH5Pset_chunk / H5Pset_chunk_fは、チャンクされたレイアウトデータセットを格納するために使用されるチャンクのサイズを設定します。このルーチンのシグネチャは次のとおりです。 C:
    herr_t H5Pset_chunk (hid_t prp_id, int ndims, 
                        const hsize_t * dims) 
FORTRAN:
    H5PSET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR) 
           prp_id IN: INTEGER(HID_T)
           ndims IN: INTEGER
           dims IN: INTEGER(HSIZE_T), DIMENSION(ndims) 
           hdferr OUT: INTEGER
・prp_idパラメータは、問い合わせるプロパティリストの識別子である。 ・ndimsパラメータは各チャンクの次元数である。 ・dims パラメータは各チャンクのサイズを含む配列です。
C言語では,成功すれば非負の値が,失敗すれば負の値が返されます. FORTRANでは、戻り値はhdferrで返されます:成功した場合は0、それ以外の場合は-1です。
H5Dextend / H5Dextend_f ルーチンは無制限の次元を持つデータセットを拡張します。シグネチャは次の通りである。
C:
herr_t H5Dextend (hid_t dset_id, const hsize_t * size)
FORTRAN
   H5DEXTEND_F (Dset_ID、Size、HDERR) 
           dset_id IN: INTEGER(HID_T) 
           サイズ IN: 整数(hsize_t), 次元(*)  
           hdferr OUT: INTEGER
dset_id パラメータはデータセット識別子である. size パラメータは、各次元の新しい大きさを含む配列である。 C言語では、この関数は成功すれば非負の値を、そうでなければ負の値を返す。 FORTRANでは、戻り値はhdferrで返される: 成功すれば0、そうでなければ-1。
H5Dget_create_plist / H5Dget_create_plist_f ルーチンは、データセットに対するデータセット作成プロパティリストのコピーの識別子を返します。 C関数H5Pget_layoutは、データセットの生データのレイアウトを返します。有効な型はH5D_CONTIGUOUSとH5D_CHUNKEDです。H5Pget_layoutのFORTRANルーチンはまだ存在しません。
H5Pget_chunk / H5Pget_chunk_fルーチンは、チャンクされたレイアウトデータセットの生データのチャンクの大きさを取得します。シグネチャは以下の通りです。 C:
int H5Pget_chunk (hid_t prp_id, int ndims, hsize_t * dims)
FORTRAN:
   H5PGET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)
           prp_id IN: INTEGER(HID_T) 
           ndims IN: INTEGER
           dims OUT: INTEGER(HSIZE_T), DIMENSION(ndims) 
           hdferr OUT: INTEGER 
prp_id パラメータは、問い合わせるプロパティリストの識別子である。 ndims パラメータは dims 配列のサイズである。 dimsパラメータは、チャンクの寸法を格納する配列です。 C では、この関数は成功すればチャンクの次元を返し、そうでなければ負の値を返します。 FORTRANでは、戻り値はhdferrに返されます:成功した場合はチャンクのランク、そうでない場合は-1です。
H5Pclose / H5Pclose_fルーチンは、プロパティリストへのアクセスを終了させます。シグネチャは次の通りです。
C:
Herr_t H5Pclose (hid_t prp_id)
FORTRAN
   H5PCLOSE_F (PRP_ID, HDFERR) 
           prp_id IN: INTEGER(HID_T) 
           hdferr OUT: INTEGER 
prp_id パラメータは、アクセスを終了させるプロパティリストの識別子である。