summaryrefslogtreecommitdiffstats
path: root/examples/test_write.c
blob: 15421b77ed6b37ffcc35877388e498713051bb99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

/* This program creates two datasets and stores them in HDF5 file */

#include "hdf5.h"    

/* Define data type, dimensionlity, architecture and name for the first
   dataset  */


#define DATA1_BASE  H5T_INT
#define DATA1_LEN   2
#define DATA1_RANK  2
#define DATA1_DIM1  10
#define DATA1_DIM2  5
#define DATA1_ARCH  H5T_BIGENDIAN
#define DATA1_NAME  "ShortIntegers" 

/* Define data type, dimensionality, architecture and name for the second 
   dataset  */


#define DATA2_BASE  H5T_FLOAT
#define DATA2_LEN   8 
#define DATA2_RANK  1 
#define DATA2_DIM1  8 
#define DATA2_ARCH  H5T_LITTLEENDIAN
#define DATA2_NAME  "DoubleFloats"

main(void)

{

     hid_t   file1_id, file2_id;        /* HDF5 file IDs */

     hid_t   t1_id;          /* Type ID for the first dataset */
     hid_t   d1_id;          /* Dimensionality ID for the first dataset */
     hid_t   data1_id;       /* Data ID for the first dataset */

     uint32  dims1[DATA1_RANK] = {DATA1_DIM1, DATA1_DIM2};
     int16   data1[DATA1_DIM1][DATA1_DIM2];

 
     hid_t   t2_id;          /* Type ID for the second dataset */
     hid_t   d2_id;          /* Dimensionality ID for the second dataset */
     hid_t   data2_id;       /* Data ID for the second dataset */

     uint32  dims2[DATA2_RANK] = {DATA2_DIM1};
     float64 data2[DATA2_DIM1];

     herr_t   ret;

     intn    k,l;

/* Initialize datasets  */

     for (k=0; k<DATA1_DIM1; k++) {
          for (l=0; l<DATA1_DIM2; l++) {
               data1[k][l] = (k+l);
          }
     } 
        
 
     for (k=0; k<DATA2_DIM1; k++) {
          data2[k] = (double) (k);
     } 

/* Create HDF5 file */

     file1_id = H5Fcreate("HDF5_file", H5ACC_OVERWRITE,0,0);

/* Create and initialize datatype object for the first dataset */

     t1_id = H5Mcreate(file1_id,H5_DATATYPE,"Short Integer data type");
     ret = H5Tset_type(t1_id, DATA1_BASE, DATA1_LEN, DATA1_ARCH);

/* Create and initialize dimensionality object for the first dataset */

     d1_id = H5Mcreate(file1_id, H5_DATASPACE, "2D");
     ret = H5Pset_space(d1_id,DATA1_RANK, dims1);

/* Create and initialize first dataset object */

     data1_id = H5Mcreate(file1_id, H5_DATASET, DATA1_NAME);
     ret = H5Dset_info (data1_id, t1_id, d1_id);

/* Write first dataset into HDF5_file */

     ret = H5Dwrite(data1_id, H5P_ALL, data1);

/* Release all ID's and close the file */

     ret = H5Mrelease(t1_id);
     ret = H5Mrelease(d1_id);
     ret = H5Mrelease(data1_id);

     H5Fclose(file1_id); 

/* Reopen the file  to add second dataset */

     file2_id = H5Fopen("HDF5_file", H5ACC_WRITE, 0);  

 
/* Create and initialize datatype object for the second dataset */

     t2_id = H5Mcreate(file2_id,H5_DATATYPE,"Double float data type");
     ret = H5Tset_type(t2_id, DATA2_BASE, DATA2_LEN, DATA2_ARCH);

/* Create and initialize dimensionality object for the second dataset */

     d2_id = H5Mcreate(file2_id, H5_DATASPACE, "1D");
     ret = H5Pset_space(d2_id,DATA2_RANK, dims2);

/* Create and initialize second dataset object */

     data2_id = H5Mcreate(file2_id, H5_DATASET, DATA2_NAME);
     ret = H5Dset_info (data2_id, t2_id, d2_id);

/* Write second dataset into HDF5_file */

     ret = H5Dwrite(data2_id, H5P_ALL, data2);

/* Release all ID's and close the file */

     ret = H5Mrelease(t2_id);
     ret = H5Mrelease(d2_id);
     ret = H5Mrelease(data2_id);

     ret = H5Fclose(file2_id);

}