summaryrefslogtreecommitdiffstats
path: root/java/test/TestH5R.java
blob: 7b9f5381fcdfab58e347e90f0b2d1389b7c4c5b7 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

package test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.File;

import hdf.hdf5lib.H5;
import hdf.hdf5lib.HDF5Constants;
import hdf.hdf5lib.exceptions.HDF5Exception;
import hdf.hdf5lib.exceptions.HDF5LibraryException;
import hdf.hdf5lib.exceptions.HDF5FunctionArgumentException;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;

public class TestH5R {
    @Rule public TestName testname = new TestName();
    private static final String H5_FILE = "testH5R.h5";
    private static final int DIM_X = 4;
    private static final int DIM_Y = 6;
    long H5fid = -1;
    long H5dsid = -1;
    long H5did = -1;
    long H5gid = -1;
    long H5did2 = -1;
    long[] H5dims = { DIM_X, DIM_Y };
    int[][] dset_data = new int[DIM_X][DIM_Y];
    int FILLVAL = 99;

    private final void _deleteFile(String filename) {
        File file = null;
        try {
            file = new File(filename);
        }
        catch (Throwable err) {}

        if (file.exists()) {
            try {file.delete();} catch (SecurityException e) {e.printStackTrace();}
        }
        assertFalse("TestH5R._deleteFile file still exists ", file.exists());
    }

    private final long _createDataset(long fid, long dsid, String name, long dapl) {
        long did = -1;
        try {
            did = H5.H5Dcreate(fid, name,
                        HDF5Constants.H5T_STD_I32BE, dsid,
                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("H5.H5Dcreate: " + err);
        }
        assertTrue("TestH5R._createDataset: ", did > 0);

        return did;
    }

    private final long _createGroup(long fid, String name) {
        long gid = -1;
        try {
            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("H5.H5Gcreate: " + err);
        }
        assertTrue("TestH5R._createGroup: ",gid > 0);

        return gid;
    }

    @Before
    public void createH5file()
            throws NullPointerException, HDF5Exception {
        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
        System.out.print(testname.getMethodName());

        try {
            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
            H5dsid = H5.H5Screate_simple(2, H5dims, null);
            H5gid = _createGroup(H5fid, "Group1");
            H5did2 = _createDataset(H5gid, H5dsid, "dset2", HDF5Constants.H5P_DEFAULT);
            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);

            // Initialize the dataset.
            for (int indx = 0; indx < DIM_X; indx++)
                for (int jndx = 0; jndx < DIM_Y; jndx++)
                    dset_data[indx][jndx] = FILLVAL;

            try {
                if (H5did >= 0)
                    H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_INT,
                            HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
                            HDF5Constants.H5P_DEFAULT, dset_data[0]);
            }
            catch (Exception e) {
                e.printStackTrace();
            }

        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("TestH5R.createH5file: " + err);
        }
        assertTrue("TestH5R.createH5file: H5.H5Fcreate: ",H5fid > 0);
        assertTrue("TestH5R.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
        assertTrue("TestH5R.createH5file: _createDataset: ",H5did > 0);

        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
    }

    @After
    public void deleteH5file() throws HDF5LibraryException {
        if (H5dsid > 0)
            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
        if (H5did > 0)
            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
        if (H5fid > 0)
            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
        if (H5gid > 0)
            try {H5.H5Gclose(H5gid);} catch (Exception ex) {}
        if (H5did2 > 0)
            try {H5.H5Dclose(H5did2);} catch (Exception ex) {}

        _deleteFile(H5_FILE);
        System.out.println();
    }

    // Test v1.8 APIs params
    /*
     * @Ignore public void testH5Rget_name() { long loc_id = H5fid; int ref_type =
     * HDF5Constants.H5R_OBJECT; long ret_val = -1; byte[] ref = null; String[] name = {""}; String
     * objName = "/dset";
     *
     * try { ref = H5.H5Rcreate(H5fid, objName, ref_type, -1); } catch (Throwable err) {
     * err.printStackTrace(); fail("H5.H5Rget_name:H5Rcreate " + err); }
     *
     * try { ret_val = H5.H5Rget_name(loc_id, ref_type, ref, name, 16); } catch (Throwable err) {
     * err.printStackTrace(); fail("H5.H5Rget_name: " + err); }
     *
     * assertTrue("testH5Rget_name: H5Rget_name", ret_val>0); assertTrue("The name of the object: ",
     * objName.equals(name[0])); }
     *
     * @Ignore public void testH5Rget_obj_type2() { int ref_type=HDF5Constants.H5R_OBJECT; byte[]
     * ref=null;
     *
     * String objName = "/dset"; int obj_type = -1;
     *
     * try { ref = H5.H5Rcreate(H5fid, objName, ref_type, -1); } catch(Throwable err) {
     * err.printStackTrace(); }
     *
     * try { obj_type = H5.H5Rget_obj_type(H5fid, HDF5Constants.H5R_OBJECT, ref); } catch (Throwable
     * err) { err.printStackTrace(); fail("H5.H5Rget_obj_type2: " + err); } assertEquals(obj_type,
     * HDF5Constants.H5O_TYPE_DATASET); }
     *
     * @Ignore public void testH5Rcreate_refobj() { byte[] ref = null;
     *
     * try { ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, -1); } catch (Throwable err) {
     * err.printStackTrace(); fail("H5.H5Rcreate: " + err); } assertNotNull(ref); }
     *
     * @Ignore public void testH5Rcreate_regionrefobj() { byte[] ref = null; try { ref =
     * H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid); } catch (Throwable err) {
     * err.printStackTrace(); fail("H5.H5Rcreate: " + err); } assertNotNull(ref); }
     *
     * @Ignore public void testH5Rdereference() { byte[] ref1 = null; byte[] ref2 = null; long
     * dataset_id = -1; long group_id = -1; try { //Create reference on dataset ref1 =
     * H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid); dataset_id=
     * H5.H5Rdereference(H5fid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_DATASET_REGION, ref1);
     *
     * //Create reference on group ref2 = H5.H5Rcreate(H5gid, "/Group1", HDF5Constants.H5R_OBJECT, -1);
     * group_id= H5.H5Rdereference(H5gid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref2);
     * assertNotNull(ref1); assertNotNull(ref2); assertTrue(dataset_id >= 0); assertTrue(group_id >= 0);
     * } catch (Throwable err) { err.printStackTrace(); fail("TestH5Rdereference " + err); } finally {
     * try {H5.H5Dclose(dataset_id);} catch (Exception ex) {} try {H5.H5Gclose(group_id);} catch
     * (Exception ex) {} } }
     *
     * @Ignore public void testH5Rget_region() { byte[] ref = null; long dsid = -1; try { ref =
     * H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid); dsid =
     * H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref); assertNotNull(ref);
     * assertTrue(dsid >= 0); } catch (Throwable err) { err.printStackTrace();
     * fail("TestH5Rget_region: " + err); } finally { try {H5.H5Sclose(dsid);} catch (Exception ex) {} }
     * }
     *
     * @Ignore//(expected = IllegalArgumentException.class) public void testH5Rget_name_Invalidreftype()
     * throws Throwable { byte[] ref = null; String[] name = {""}; ref = H5.H5Rcreate(H5fid, "/dset",
     * HDF5Constants.H5R_OBJECT, -1); H5.H5Rget_name(H5fid, HDF5Constants.H5R_DATASET_REGION, ref, name,
     * 16); }
     *
     * @Ignore//(expected = NullPointerException.class) public void testH5Rget_name_NULLreference()
     * throws Throwable { byte[] ref = null; String[] name = {""}; H5.H5Rget_name(H5fid,
     * HDF5Constants.H5R_OBJECT, ref, name, 16); }
     *
     * @Ignore//(expected = HDF5LibraryException.class) public void
     * testH5Rget_obj_type2_Invalidreftype() throws Throwable { byte[] ref = null; ref =
     * H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, -1); H5.H5Rget_obj_type(H5fid,
     * HDF5Constants.H5R_DATASET_REGION, ref); }
     *
     * @Ignore//(expected = HDF5LibraryException.class) public void testH5Rcreate_InvalidObjectName()
     * throws Throwable { byte[] ref=H5.H5Rcreate(H5fid, "/GROUPS", HDF5Constants.H5R_OBJECT, -1); }
     *
     * @Ignore//(expected = HDF5LibraryException.class) public void testH5Rcreate_Invalidspace_id()
     * throws Throwable { byte[] ref=H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, -1);
     * }
     *
     * @Ignore//(expected = IllegalArgumentException.class) public void testH5Rcreate_Invalidreftype()
     * throws Throwable { byte[] ref=H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_BADTYPE, -1); }
     *
     * @Ignore//(expected = IllegalArgumentException.class) public void
     * testH5Rgetregion_Invalidreftype() throws Throwable { byte[] ref = null; ref = H5.H5Rcreate(H5fid,
     * "/dset", HDF5Constants.H5R_OBJECT, H5dsid); H5.H5Rget_region(H5fid,
     * HDF5Constants.H5R_DATASET_REGION, ref); }
     *
     * @Ignore//(expected = IllegalArgumentException.class) public void
     * testH5Rgetregion_Badreferencetype() throws Throwable { byte[] ref = null; ref =
     * H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, H5dsid); H5.H5Rget_region(H5fid,
     * HDF5Constants.H5R_OBJECT, ref); }
     *
     * @Ignore//(expected = NullPointerException.class) public void testH5Rgetregion_Nullreference()
     * throws Throwable { byte[] ref = null; H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION,
     * ref); }
     *
     * @Ignore//(expected = NullPointerException.class) public void testH5Rdereference_Nullreference()
     * throws Throwable { byte[] ref = null; H5.H5Rdereference(H5did2, HDF5Constants.H5P_DEFAULT,
     * HDF5Constants.H5R_OBJECT, ref); }
     *
     * @Ignore//(expected = IllegalArgumentException.class) public void
     * testH5Rdereference_Invalidreference() throws Throwable { byte[] ref1 = null; byte[] ref2 = null;
     * ref1 = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid); ref2 =
     * H5.H5Rcreate(H5gid, "/Group1", HDF5Constants.H5R_OBJECT, -1); H5.H5Rdereference(H5gid,
     * HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref1); }
     */
    // Test v1.12 APIs params

    @Test
    public void testH5Rget_object() {
        int ref_type = HDF5Constants.H5R_OBJECT2;
        long ret_val = -1;
        byte[] ref = null;
        String name = "";
        String objName = "/dset";

        try {
            ref = H5.H5Rcreate_object(H5fid, objName, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Rcreate_object " + err);
        }

        try {
            ret_val = H5.H5Rget_type(ref);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Rget_type: " + err);
        }
        assertTrue("testH5Rget_object: H5Rget_type", ret_val == ref_type);

        try {
            name = H5.H5Rget_file_name(ref);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Rget_file_name: " + err);
        }
        assertTrue("testH5Rget_object: H5Rget_file_name", H5_FILE.equals(name));

        try {
            name = H5.H5Rget_obj_name(ref, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Rget_obj_name: " + err);
        }
        assertTrue("The name of the object: ", objName.equals(name));
        H5.H5Rdestroy(ref);
    }

    @Test
    public void testH5Rget_obj_type3() {
        int obj_type = -1;
        byte[] ref = null;
        String objName = "/dset";

        try {
            ref = H5.H5Rcreate_object(H5fid, objName, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_obj_type3: H5Rcreate_object " + err);
        }

        try {
            obj_type = H5.H5Rget_obj_type3(ref, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_obj_type3: H5.H5Rget_obj_type3: " + err);
        }
        assertEquals(obj_type, HDF5Constants.H5O_TYPE_DATASET);
        H5.H5Rdestroy(ref);
    }

    @Test
    public void testH5Rcreate_regionref_object() {
        byte[] ref = null;
        String objName = "/dset";
        long start[] = {2,2};     // Starting location of hyperslab
        long stride[] = {1,1};    // Stride of hyperslab
        long count[] = {1,1};     // Element count of hyperslab
        long block[] = {3,3};     // Block size of hyperslab

        // Select 3x3 hyperslab for reference
        try {
            H5.H5Sselect_hyperslab(H5dsid, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Sselect_hyperslab " + err);
        }
        try {
            ref = H5.H5Rcreate_region(H5fid, objName, H5dsid, HDF5Constants.H5P_DEFAULT);
        }
        catch (Throwable err) {
            err.printStackTrace();
            fail("testH5Rget_object: H5Rcreate_region " + err);
        }
        assertNotNull(ref);
        H5.H5Rdestroy(ref);
    }

// These tests need to be updated with new APIs
//    @Test//
//    public void testH5Rget_group() {
//        long loc_id = H5fid;
//        int ref_type = HDF5Constants.H5R_OBJECT2;
//        long ret_val = -1;
//        byte[] ref = null;
//        String name = "";
//        String objName = "/dset";
//
//        try {
//            ref = H5.H5Rcreate_object(H5fid, objName, HDF5Constants.H5P_DEFAULT);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("testH5Rget_object: H5Rcreate_object " + err);
//        }
//        try {
//            dataset_id= H5.H5Rdereference(H5fid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_DATASET_REGION, ref1);
//
//            //Create reference on group
//            ref2 = H5.H5Rcreate(H5gid, "/Group1", HDF5Constants.H5R_OBJECT, -1);
//            group_id= H5.H5Rdereference(H5gid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref2);
//            assertNotNull(ref1);
//            assertNotNull(ref2);
//            assertTrue(dataset_id >= 0);
//            assertTrue(group_id >= 0);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("TestH5Rdereference " + err);
//        }
//        finally {
//            try {H5.H5Dclose(dataset_id);} catch (Exception ex) {}
//            try {H5.H5Gclose(group_id);} catch (Exception ex) {}
//        }
//    }

//    @Test//
//    public void testH5Rget_region_dataset() {
//        long loc_id = H5fid;
//        int ref_type = HDF5Constants.H5R_OBJECT2;
//        long ret_val = -1;
//        byte[] ref = null;
//        String name = "";
//        String objName = "/dset";
//
//        try {
//            ref = H5.H5Rcreate_object(H5fid, objName, HDF5Constants.H5P_DEFAULT);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("testH5Rget_object: H5Rcreate_object " + err);
//        }
//        try {
//            dsid = H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
//            assertNotNull(ref);
//            assertTrue(dsid >= 0);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("TestH5Rget_region: " + err);
//        }
//        finally {
//            try {H5.H5Sclose(dsid);} catch (Exception ex) {}
//        }
//    }

//    @Test//
//    public void testH5Rget_attr() {
//        long loc_id = H5fid;
//        int ref_type = HDF5Constants.H5R_OBJECT2;
//        long ret_val = -1;
//        byte[] ref = null;
//        String name = "";
//        String objName = "/dset";
//
//        try {
//            ref = H5.H5Rcreate_object(H5fid, objName, HDF5Constants.H5P_DEFAULT);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("testH5Rget_object: H5Rcreate_object " + err);
//        }
//        try {
//            dsid = H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
//            assertNotNull(ref);
//            assertTrue(dsid >= 0);
//        }
//        catch (Throwable err) {
//            err.printStackTrace();
//            fail("TestH5Rget_region: " + err);
//        }
//        finally {
//            try {H5.H5Sclose(dsid);} catch (Exception ex) {}
//        }
//    }

    // Test parameters to H5Rcreate_object
    @Test(expected = NullPointerException.class)
    public void testH5Rcreate_object_Nullname() throws Throwable {
        String name = null;
        H5.H5Rcreate_object(H5fid, name, HDF5Constants.H5P_DEFAULT);
    }

    @Test(expected = HDF5FunctionArgumentException.class)
    public void testH5Rget_name_Invalidloc() throws Throwable {
        String name= "";
        H5.H5Rcreate_object(-1, name, HDF5Constants.H5P_DEFAULT);
    }

    // Test parameters to H5Rcreate_region
    @Test(expected = NullPointerException.class)
    public void testH5Rcreate_region_Nullname() throws Throwable {
        String name = null;
        H5.H5Rcreate_region(H5fid, name, -1, HDF5Constants.H5P_DEFAULT);
    }

    @Test(expected = HDF5FunctionArgumentException.class)
    public void testH5Rcreate_region_Invalidloc() throws Throwable {
        String name= "";
        H5.H5Rcreate_region(-1, name, -1, HDF5Constants.H5P_DEFAULT);
    }

    // Test parameters to H5Rcreate_attr
    @Test(expected = NullPointerException.class)
    public void testH5Rcreate_attr_Nullname() throws Throwable {
        String name = null;
        String attrname = "";
        H5.H5Rcreate_attr(H5fid, name, attrname, HDF5Constants.H5P_DEFAULT);
    }

    @Test(expected = NullPointerException.class)
    public void testH5Rcreate_attr_Nullattrname() throws Throwable {
        String name = "";
        String attrname = null;
        H5.H5Rcreate_attr(H5fid, name, attrname, HDF5Constants.H5P_DEFAULT);
    }

    @Test(expected = HDF5FunctionArgumentException.class)
    public void testH5Rcreate_attr_Invalidloc() throws Throwable {
        String name= "";
        String attrname= "";
        H5.H5Rcreate_attr(-1, name, attrname, HDF5Constants.H5P_DEFAULT);
    }

    // Test parameters to H5Rdestroy
    @Test(expected = NullPointerException.class)
    public void testH5Rdestroy_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rdestroy(ref);
    }

    // Test parameters to H5Rget_type
    @Test(expected = NullPointerException.class)
    public void testH5Rget_type_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rget_type(ref);
    }

    // Test parameters to H5Requal
    @Test(expected = NullPointerException.class)
    public void testH5Requal_Nullref1() throws Throwable {
        byte[] ref1 = null;
        byte[] ref2 = {0,0,0,0};
        H5.H5Requal(ref1, ref2);
    }

    @Test(expected = NullPointerException.class)
    public void testH5Requal_Nullref2() throws Throwable {
        byte[] ref1 = {0,0,0,0};
        byte[] ref2 = null;
        H5.H5Requal(ref1, ref2);
    }

    // Test parameters to H5Rcopy
    @Test(expected = NullPointerException.class)
    public void testH5Rcopy_Nullref1() throws Throwable {
        byte[] ref1 = null;
        byte[] ref2 = H5.H5Rcopy(ref1);
    }

    // Test parameters to H5Ropen_object
    @Test(expected = NullPointerException.class)
    public void testH5Ropen_object_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Ropen_object(ref, -1, -1);
    }

    // Test parameters to H5Ropen_region
    @Test(expected = NullPointerException.class)
    public void testH5Ropen_region_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Ropen_region(ref, -1, -1);
    }

    // Test parameters to H5Ropen_attr
    @Test(expected = NullPointerException.class)
    public void testH5Ropen_attr_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Ropen_attr(ref, -1, -1);
    }

    // Test parameters to H5Rget_obj_type3
    @Test(expected = NullPointerException.class)
    public void testH5Rget_obj_type3_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rget_obj_type3(ref, -1);
    }

    // Test parameters to H5Rget_file_name
    @Test(expected = NullPointerException.class)
    public void testH5Rget_file_name_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rget_file_name(ref);
    }

    // Test parameters to H5Rget_obj_name
    @Test(expected = NullPointerException.class)
    public void testH5Rget_obj_name_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rget_obj_name(ref, -1);
    }

    // Test parameters to H5Rget_attr_name
    @Test(expected = NullPointerException.class)
    public void testH5Rget_attr_name_Nullref() throws Throwable {
        byte[] ref = null;
        H5.H5Rget_attr_name(ref);
    }

}
> ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_select_hyper_nblocks_f(space_id, num_blocks, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: num_blocks INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_hyper_nblocks_c (space_id, num_blocks) & BIND(C,NAME='h5sget_select_hyper_nblocks_c') IMPORT :: HID_T, HSSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: num_blocks END FUNCTION h5sget_select_hyper_nblocks_c END INTERFACE hdferr = h5sget_select_hyper_nblocks_c (space_id, num_blocks) END SUBROUTINE h5sget_select_hyper_nblocks_f ! !****s* H5S/h5sget_select_hyper_blocklist_f ! ! NAME ! h5sget_select_hyper_blocklist_f ! ! PURPOSE ! Gets the list of hyperslab blocks currently selected. ! ! INPUTS ! space_id - dataspace identifier ! startblock - hyperslab block to start with ! num_blocks - number of blocks to get ! OUTPUTS ! buf - buffer to hold block list ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! SOURCE SUBROUTINE h5sget_select_hyper_blocklist_f(space_id, startblock, & num_blocks, buf, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(IN) :: startblock INTEGER(HSIZE_T), INTENT(IN) :: num_blocks INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_hyper_blocklist_c(space_id, startblock, & num_blocks, buf ) BIND(C,NAME='h5sget_select_hyper_blocklist_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(IN) :: startblock INTEGER(HSIZE_T), INTENT(IN) :: num_blocks INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf END FUNCTION h5sget_select_hyper_blocklist_c END INTERFACE hdferr = h5sget_select_hyper_blocklist_c(space_id, startblock, num_blocks, buf ) END SUBROUTINE h5sget_select_hyper_blocklist_f ! !****s* H5S/h5sget_select_bounds_f ! ! NAME ! h5sget_select_bounds_f ! ! PURPOSE ! Gets the bounding box containing the current selection. ! ! INPUTS ! space_id - dataspace identifier ! ! OUTPUTS ! start - starting coordinates of bounding box ! end - ending coordinates of bounding box ! i.e., the coordinates of the diagonally opposite corner ! hdferr - Returns 0 if successful and -1 if fails ! OPTIONAL PARAMETERS ! NONE ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! SOURCE SUBROUTINE h5sget_select_bounds_f(space_id, start, END, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: start INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: END INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_bounds_c(space_id, start, end) & BIND(C,NAME='h5sget_select_bounds_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: start INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: END END FUNCTION h5sget_select_bounds_c END INTERFACE hdferr = h5sget_select_bounds_c(space_id, start, END) END SUBROUTINE h5sget_select_bounds_f ! !****s* H5S/h5sget_select_elem_npoints_f ! ! NAME ! h5sget_select_elem_npoints_f ! ! PURPOSE ! Gets the number of element points in the current selection ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! num_points - number of element points in the current ! dataspace selection ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_select_elem_npoints_f(space_id, num_points, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: num_points INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_elem_npoints_c (space_id, num_points) BIND(C,NAME='h5sget_select_elem_npoints_c') IMPORT :: HID_T, HSSIZE_T INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: num_points END FUNCTION h5sget_select_elem_npoints_c END INTERFACE hdferr = h5sget_select_elem_npoints_c (space_id, num_points) END SUBROUTINE h5sget_select_elem_npoints_f ! !****s* H5S/h5sget_select_elem_pointlist_f ! ! NAME ! h5sget_select_elem_pointlist_f ! ! PURPOSE ! Gets the list of element points currently selected. ! ! INPUTS ! space_id - dataspace identifier ! startpoint - element point to start with ! num_points - number of elemnt points to get ! OUTPUTS ! buf - buffer with element points selected ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_select_elem_pointlist_f(space_id, startpoint, & num_points, buf, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(IN) :: startpoint INTEGER(HSIZE_T), INTENT(IN) :: num_points INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_elem_pointlist_c(space_id, startpoint, & num_points, buf ) BIND(C,NAME='h5sget_select_elem_pointlist_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(IN) :: startpoint INTEGER(HSIZE_T), INTENT(IN) :: num_points INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf END FUNCTION h5sget_select_elem_pointlist_c END INTERFACE hdferr = h5sget_select_elem_pointlist_c(space_id, startpoint, & num_points, buf ) END SUBROUTINE h5sget_select_elem_pointlist_f ! !****s* H5S/h5sselect_elements_f ! ! NAME ! h5sselect_elements_f ! ! PURPOSE ! Selects elements to be included in the selection for ! a dataspace ! ! INPUTS ! space_id - dataspace identifier ! operator - flag, valid values are: ! H5S_SELECT_SET_F ! H5S_SELECT_APPEND_F ! H5S_SELECT_PREPEND_F ! rank - number of dataspace dimensions ! num_elements - number of elements to be selected ! coord - 2D (rank x num_elements) array with the ! elements coordinates ( 1-based); in C the ! array is stored in 2D as (num_element x rank) ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! SOURCE SUBROUTINE h5sselect_elements_f(space_id, OPERATOR, rank, & num_elements, coord, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: OPERATOR INTEGER, INTENT(IN) :: rank INTEGER(SIZE_T), INTENT(IN) :: num_elements INTEGER(HSIZE_T), INTENT(IN) , DIMENSION(rank,num_elements) :: coord INTEGER, INTENT(OUT) :: hdferr !***** INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:,:) :: c_coord INTEGER :: error, i INTERFACE INTEGER FUNCTION h5sselect_elements_c(space_id, OPERATOR,& num_elements,c_c_coord) BIND(C,NAME='h5sselect_elements_c') IMPORT :: HID_T, SIZE_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: OPERATOR INTEGER(SIZE_T), INTENT(IN) :: num_elements INTEGER(HSIZE_T),DIMENSION(*) :: c_c_coord END FUNCTION h5sselect_elements_c END INTERFACE ALLOCATE(c_coord(rank,num_elements), STAT = error) IF (error.NE. 0) THEN hdferr = -1 RETURN ENDIF DO i = 1, rank c_coord(i,:) = coord(rank-i+1, :) - 1 ENDDO hdferr = h5sselect_elements_c(space_id, OPERATOR, num_elements, c_coord) ! ALLOCATE(c_coord(num_elements,rank), stat = error) ! IF (error.NE. 0) THEN ! hdferr = -1 ! RETURN ! ENDIF ! ! c_coord = TRANSPOSE(coord) ! hdferr = h5sselect_elements_c(space_id, OPERATOR, INT(rank,size_t), c_coord) DEALLOCATE(c_coord) END SUBROUTINE h5sselect_elements_f ! !****s* H5S/h5sselect_all_f ! ! NAME ! h5sselect_all_f ! ! PURPOSE ! Selects the entire dataspace. ! ! INPUTS ! space_id - Identifier for the dataspace in which ! selection being made ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sselect_all_f(space_id, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sselect_all_c(space_id) BIND(C,NAME='h5sselect_all_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id END FUNCTION h5sselect_all_c END INTERFACE hdferr = h5sselect_all_c(space_id) END SUBROUTINE h5sselect_all_f ! !****s* H5S/h5sselect_none_f ! ! NAME ! h5sselect_none_f ! ! PURPOSE ! Resets the selection region to include no elements. ! ! INPUTS ! space_id - the identifier for the dataspace in which ! the selection is being reset. ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sselect_none_f(space_id, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sselect_none_c(space_id) BIND(C,NAME='h5sselect_none_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id END FUNCTION h5sselect_none_c END INTERFACE hdferr = h5sselect_none_c(space_id) END SUBROUTINE h5sselect_none_f ! !****s* H5S/h5sselect_valid_f ! ! NAME ! h5sselect_valid_f ! ! PURPOSE ! Verifies that the selection is within the extent of ! the dataspace. ! ! INPUTS ! space_id - identifier for the dataspace for which ! selection is verified ! OUTPUTS ! status - TRUE if the selection is contained within ! the extent, FALSE otherwise. ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sselect_valid_f(space_id, status, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id LOGICAL, INTENT(OUT) :: status INTEGER, INTENT(OUT) :: hdferr !***** INTEGER :: flag ! "TRUE/FALSE/ERROR" flag from C routine INTERFACE INTEGER FUNCTION h5sselect_valid_c(space_id, flag) BIND(C,NAME='h5sselect_valid_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER :: flag END FUNCTION h5sselect_valid_c END INTERFACE hdferr = h5sselect_valid_c(space_id, flag) status = .TRUE. IF (flag .EQ. 0) status = .FALSE. END SUBROUTINE h5sselect_valid_f ! !****s* H5S/h5sget_simple_extent_npoints_f ! ! NAME ! h5sget_simple_extent_npoints_f ! ! PURPOSE ! Determines the number of elements in a dataspace. ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! npoints - number of elements in the dataspace ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_simple_extent_npoints_f(space_id, npoints, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(OUT) :: npoints INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_simple_extent_npoints_c( space_id, npoints) BIND(C,NAME='h5sget_simple_extent_npoints_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(OUT) :: npoints END FUNCTION h5sget_simple_extent_npoints_c END INTERFACE hdferr = h5sget_simple_extent_npoints_c( space_id, npoints) END SUBROUTINE h5sget_simple_extent_npoints_f ! !****s* H5S/h5sget_select_npoints_f ! ! NAME ! h5sget_select_npoints_f ! ! PURPOSE ! Determines the number of elements in a dataspace selection. ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! npoints - number of points in the dataspace selection ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! SOURCE SUBROUTINE h5sget_select_npoints_f(space_id, npoints, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: npoints INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_npoints_c(space_id, npoints) BIND(C,NAME='h5sget_select_npoints_c') IMPORT :: HID_T, HSSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), INTENT(OUT) :: npoints END FUNCTION h5sget_select_npoints_c END INTERFACE hdferr = h5sget_select_npoints_c(space_id, npoints) END SUBROUTINE h5sget_select_npoints_f ! !****s* H5S/h5sget_simple_extent_ndims_f ! ! NAME ! h5sget_simple_extent_ndims_f ! ! PURPOSE ! Determines the dimensionality of a dataspace ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! rank - number of dataspace dimensions ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_simple_extent_ndims_f(space_id, rank, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: rank INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_simple_extent_ndims_c(space_id, rank) BIND(C,NAME='h5sget_simple_extent_ndims_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: rank END FUNCTION h5sget_simple_extent_ndims_c END INTERFACE hdferr = h5sget_simple_extent_ndims_c(space_id, rank) END SUBROUTINE h5sget_simple_extent_ndims_f ! !****s* H5S/h5sget_simple_extent_dims_f ! ! NAME ! h5sget_simple_extent_dims_f ! ! PURPOSE ! Retrieves dataspace dimension size and maximum size. ! ! INPUTS ! space_id - dataspace identifier ! ! OUTPUTS ! dims - array to store size of each dimension ! maxdims - array to store maximum size of each dimension ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: maxdims INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_simple_extent_dims_c(space_id, dims, maxdims) BIND(C,NAME='h5sget_simple_extent_dims_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: maxdims END FUNCTION h5sget_simple_extent_dims_c END INTERFACE hdferr = h5sget_simple_extent_dims_c(space_id, dims, maxdims) END SUBROUTINE h5sget_simple_extent_dims_f ! !****s* H5S/h5sget_simple_extent_type_f ! ! NAME ! h5sget_simple_extent_type_f ! ! PURPOSE ! Determine the current class of a dataspace ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! classtype - class type, possible values are: ! H5S_NO_CLASS_F ! H5S_SCALAR_F ! H5S_SIMPLE_F ! H5S_NULL_F ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sget_simple_extent_type_f(space_id, classtype, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: classtype INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_simple_extent_type_c(space_id, classtype) BIND(C,NAME='h5sget_simple_extent_type_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: classtype END FUNCTION h5sget_simple_extent_type_c END INTERFACE hdferr = h5sget_simple_extent_type_c(space_id, classtype) END SUBROUTINE h5sget_simple_extent_type_f ! !****s* H5S/h5sset_extent_simple_f ! ! NAME ! h5sset_extent_simple_f ! ! PURPOSE ! Sets or resets the size of an existing dataspace. ! ! INPUTS ! space_id - dataspace identifier ! rank - dataspace number of dimensions ! current_size - array with the new sizes of dimensions ! maximum_size - array with the new maximum sizes of ! dimensions ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sset_extent_simple_f(space_id, rank, current_size, & maximum_size, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: rank INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: current_size INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: maximum_size INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sset_extent_simple_c(space_id, rank, & current_size, maximum_size) BIND(C,NAME='h5sset_extent_simple_c') IMPORT :: HID_T, HSIZE_T INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: rank INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: current_size INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: maximum_size END FUNCTION h5sset_extent_simple_c END INTERFACE hdferr = h5sset_extent_simple_c(space_id, rank, current_size, & maximum_size) END SUBROUTINE h5sset_extent_simple_f ! !****s* H5S/h5sis_simple_f ! ! NAME ! h5sis_simple_f ! ! PURPOSE ! Determines whether a dataspace is a simple dataspace. ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! status - flag to indicate if dataspace ! is simple or not (TRUE or FALSE) ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sis_simple_f(space_id, status, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id LOGICAL, INTENT(OUT) :: status INTEGER, INTENT(OUT) :: hdferr !***** INTEGER :: flag ! "TRUE/FALSE/ERROR from C" INTERFACE INTEGER FUNCTION h5sis_simple_c(space_id, flag) BIND(C,NAME='h5sis_simple_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER :: flag END FUNCTION h5sis_simple_c END INTERFACE hdferr = h5sis_simple_c(space_id, flag) status = .TRUE. IF (flag .EQ. 0) status = .FALSE. END SUBROUTINE h5sis_simple_f ! !****s* H5S/h5soffset_simple_f ! ! NAME ! h5soffset_simple_f ! ! PURPOSE ! Sets the offset of a simple dataspace. ! ! INPUTS ! space_id - dataspace identifier ! offset - the offset at which to position the ! selection ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! OPTIONAL PARAMETERS ! NONE ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5soffset_simple_f(space_id, offset, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), DIMENSION(*), INTENT(IN) :: offset INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5soffset_simple_c(space_id, offset) BIND(C,NAME='h5soffset_simple_c') IMPORT :: HID_T, HSSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSSIZE_T), DIMENSION(*), INTENT(IN) :: offset END FUNCTION h5soffset_simple_c END INTERFACE hdferr = h5soffset_simple_c(space_id, offset) END SUBROUTINE h5soffset_simple_f ! !****s* H5S/h5sextent_copy_f ! ! NAME ! h5sextent_copy_f ! ! PURPOSE ! Copies the extent of a dataspace. ! ! INPUTS ! dest_space_id - the identifier for the dataspace to which ! the extent is copied ! source_space_id - the identifier for the dataspace from ! which the extent is copied ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! OPTIONAL PARAMETERS ! NONE ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! NOTES ! ! SOURCE SUBROUTINE h5sextent_copy_f(dest_space_id, source_space_id, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: dest_space_id INTEGER(HID_T), INTENT(IN) :: source_space_id INTEGER, INTENT(OUT) :: hdferr ! Error code !***** INTERFACE INTEGER FUNCTION h5sextent_copy_c(dest_space_id, source_space_id) BIND(C,NAME='h5sextent_copy_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: dest_space_id INTEGER(HID_T), INTENT(IN) :: source_space_id END FUNCTION h5sextent_copy_c END INTERFACE hdferr = h5sextent_copy_c(dest_space_id, source_space_id) END SUBROUTINE h5sextent_copy_f ! !****s* H5S/h5sset_extent_none_f ! ! NAME ! h5sset_extent_none_f ! ! PURPOSE ! Removes the extent from a dataspace. ! ! INPUTS ! space_id - dataspace identifier ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sset_extent_none_f(space_id, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sset_extent_none_c(space_id) BIND(C,NAME='h5sset_extent_none_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id END FUNCTION h5sset_extent_none_c END INTERFACE hdferr = h5sset_extent_none_c(space_id) END SUBROUTINE h5sset_extent_none_f ! !****s* H5S/h5sselect_hyperslab_f ! ! NAME ! h5sselect_hyperslab_f ! ! PURPOSE ! Selects a hyperslab region to add to the current selected ! region ! ! INPUTS ! space_id - dataspace identifier ! operator - flag, valid values are: ! H5S_SELECT_SET_F ! H5S_SELECT_OR_F ! start - array with hyperslab offsets ! count - number of blocks included in the hyperslab ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! OPTIONAL PARAMETERS ! stride - array with hyperslab strides ! block - array with hyperslab block sizes ! ! AUTHOR ! Elena Pourmal ! August 12, 1999 ! ! HISTORY ! Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows ! port). March 6, 2001 ! ! SOURCE SUBROUTINE h5sselect_hyperslab_f(space_id, OPERATOR, start, count, & hdferr, stride, BLOCK) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: OPERATOR INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count INTEGER, INTENT(OUT) :: hdferr INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: stride INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: BLOCK !***** INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride INTEGER :: rank INTEGER :: error1, error2 INTERFACE INTEGER FUNCTION h5sselect_hyperslab_c(space_id, OPERATOR, & start, count, stride, BLOCK) BIND(C,NAME='h5sselect_hyperslab_c') IMPORT :: HID_T, HSIZE_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(IN) :: OPERATOR INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: stride INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: BLOCK END FUNCTION h5sselect_hyperslab_c END INTERFACE IF (PRESENT(stride).AND. PRESENT(BLOCK)) THEN hdferr = h5sselect_hyperslab_c(space_id, OPERATOR, start, count, & stride, BLOCK) RETURN ENDIF ! Case of optional parameters. ! ! Find the rank of the dataspace to allocate memory for ! default stride and block arrays. ! CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr) IF( hdferr .EQ. -1) RETURN ! IF (PRESENT(stride).AND. .NOT.PRESENT(BLOCK)) THEN ALLOCATE(def_block(rank), stat=error1) IF (error1.NE.0) THEN hdferr = -1 RETURN ENDIF def_block = 1 hdferr = h5sselect_hyperslab_c(space_id, OPERATOR, start, count, & stride, def_block) DEALLOCATE(def_block) RETURN ENDIF IF (.NOT.PRESENT(stride).AND. PRESENT(BLOCK)) THEN ALLOCATE(def_stride(rank), stat=error2) IF (error2.NE.0) THEN hdferr = -1 RETURN ENDIF def_stride = 1 hdferr = h5sselect_hyperslab_c(space_id, OPERATOR, start, count, & def_stride, BLOCK) DEALLOCATE(def_stride) RETURN ENDIF ALLOCATE(def_block(rank), stat=error1) ALLOCATE(def_stride(rank), stat=error2) IF ((error1.NE.0) .OR. (error2.NE.0)) THEN hdferr = -1 RETURN ENDIF def_block = 1 def_stride = 1 hdferr = h5sselect_hyperslab_c(space_id, OPERATOR, start, count, & def_stride, def_block) DEALLOCATE(def_block) DEALLOCATE(def_stride) END SUBROUTINE h5sselect_hyperslab_f ! !$! ! !$!****s* H5S/h5scombine_hyperslab_f ! !$! ! !$! NAME ! !$! h5scombine_hyperslab_f ! !$! ! !$! PURPOSE ! !$! Combine a hyperslab selection with the current ! !$! selection for a dataspace ! !$! ! !$! INPUTS ! !$! space_id - dataspace of selection to use ! !$! operator - flag, valid values are: ! !$! H5S_SELECT_NOOP_F ! !$! H5S_SELECT_SET_F ! !$! H5S_SELECT_OR_F ! !$! H5S_SELECT_AND_F ! !$! H5S_SELECT_XOR_F ! !$! H5S_SELECT_NOTB_F ! !$! H5S_SELECT_NOTA_F ! !$! H5S_SELECT_APPEND_F ! !$! H5S_SELECT_PREPEND_F ! !$! start - array with hyperslab offsets ! !$! count - number of blocks included in the ! !$! hyperslab ! !$! OUTPUTS ! !$! hyper_id - identifier for the new hyperslab ! !$! hdferr: - error code ! !$! Success: 0 ! !$! Failure: -1 ! !$! OPTIONAL PARAMETERS ! !$! stride - array with hyperslab strides ! !$! block - array with hyperslab block sizes ! !$! ! !$! AUTHOR ! !$! Elena Pourmal ! !$! October 7, 2002 ! !$! ! !$! HISTORY ! !$! ! !$! ! !$! NOTES ! !$! Commented out until 1.6 ? 10/08/2002 ! !$! ! !$! SOURCE ! SUBROUTINE h5scombine_hyperslab_f(space_id, operator, start, count, & ! hyper_id, hdferr, stride, block) ! IMPLICIT NONE ! INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier ! INTEGER, INTENT(IN) :: operator ! Flag, valid values are: ! H5S_SELECT_NOOP_F ! H5S_SELECT_SET_F ! H5S_SELECT_OR_F ! H5S_SELECT_AND_F ! H5S_SELECT_XOR_F ! H5S_SELECT_NOTB_F ! H5S_SELECT_NOTA_F ! H5S_SELECT_APPEND_F ! H5S_SELECT_PREPEND_F ! ! INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start ! Starting coordinates of the hyperslab ! INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count ! Number of blocks to select ! from dataspace ! INTEGER(HID_T), INTENT(OUT) :: hyper_id ! New hyperslab identifier ! INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: stride ! Array of how many elements to move ! in each direction ! INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: block ! Sizes of element block ! INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block ! INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride ! INTEGER :: rank ! INTEGER :: error1, error2 ! INTERFACE ! INTEGER FUNCTION h5scombine_hyperslab_c(space_id, operator, & ! start, count, stride, block, hyper_id) ! USE H5GLOBAL ! !DEC$IF DEFINED(HDF5F90_WINDOWS) ! !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_HYPERSLAB_C'::h5scombine_hyperslab_c ! !DEC$ENDIF ! INTEGER(HID_T), INTENT(IN) :: space_id ! INTEGER, INTENT(IN) :: operator ! INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start ! INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count ! INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: stride ! INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: block ! INTEGER(HID_T), INTENT(OUT) :: hyper_id ! END FUNCTION h5scombine_hyperslab_c ! END INTERFACE ! if (present(stride).and. present(block)) then ! hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, & ! stride, block, hyper_id) ! return ! endif ! Case of optional parameters. ! ! Find the rank of the dataspace to allocate memory for ! default stride and block arrays. ! ! CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr) ! if( hdferr .EQ. -1) return ! ! if (present(stride).and. .not.present(block)) then ! allocate(def_block(rank), stat=error1) ! if (error1.NE.0) then ! hdferr = -1 ! return ! endif ! def_block = 1 ! hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, & ! stride, def_block, hyper_id) ! deallocate(def_block) ! return ! endif ! if (.not.present(stride).and. present(block)) then ! allocate(def_stride(rank), stat=error2) ! if (error2.NE.0) then ! hdferr = -1 ! return ! endif ! def_stride = 1 ! hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, & ! def_stride, block, hyper_id) ! deallocate(def_stride) ! return ! endif ! allocate(def_block(rank), stat=error1) ! allocate(def_stride(rank), stat=error2) ! if ((error1.NE.0) .OR. (error2.NE.0)) then ! hdferr = -1 ! return ! endif ! def_block = 1 ! def_stride = 1 ! hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, & ! def_stride, def_block, hyper_id) ! deallocate(def_block) ! deallocate(def_stride) ! END SUBROUTINE h5scombine_hyperslab_f ! !$! ! !$!****s* H5S/ ! !$! ! !$! NAME ! !$! h5scombine_select_f ! !$! ! !$! PURPOSE ! !$! Combine two hyperslab selections with an operation ! !$! and return a dataspace with resulting selection. ! !$! ! !$! INPUTS ! !$! space1_id - dataspace of selection to use ! !$! operator - flag, valid values are: ! !$! H5S_SELECT_NOOP_F ! !$! H5S_SELECT_SET_F ! !$! H5S_SELECT_OR_F ! !$! H5S_SELECT_AND_F ! !$! H5S_SELECT_XOR_F ! !$! H5S_SELECT_NOTB_F ! !$! H5S_SELECT_NOTA_F ! !$! H5S_SELECT_APPEND_F ! !$! H5S_SELECT_PREPEND_F ! !$! space2_id - dataspace of selection to use ! !$! OUTPUTS ! !$! ds_id - idataspace identifier with the new selection ! !$! hdferr: - error code ! !$! Success: 0 ! !$! Failure: -1 ! !$! OPTIONAL PARAMETERS - NONE ! !$! ! !$! AUTHOR ! !$! Elena Pourmal ! !$! October 7, 2002 ! !$! ! !$! HISTORY ! !$! ! !$! ! !$! NOTES commented out until 1.6 release(?) 10/08/2002 ! !$! ! ! SOURCE ! !$ SUBROUTINE h5scombine_select_f(space1_id, operator, space2_id, & ! ds_id, hdferr) ! IMPLICIT NONE ! INTEGER(HID_T), INTENT(IN) :: space1_id ! First dataspace identifier ! INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier ! INTEGER, INTENT(IN) :: operator ! Flag, valid values are: ! H5S_SELECT_NOOP_F ! H5S_SELECT_SET_F ! H5S_SELECT_OR_F ! H5S_SELECT_AND_F ! H5S_SELECT_XOR_F ! H5S_SELECT_NOTB_F ! H5S_SELECT_NOTA_F ! H5S_SELECT_APPEND_F ! H5S_SELECT_PREPEND_F ! ! INTEGER(HID_T), INTENT(OUT) :: ds_id ! New dataspace identifier ! INTEGER, INTENT(OUT) :: hdferr ! Error code ! ! INTERFACE ! INTEGER FUNCTION h5scombine_select_c(space1_id, operator, & ! space2_id, ds_id) ! USE H5GLOBAL ! !DEC$IF DEFINED(HDF5F90_WINDOWS) ! !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_SELECT_C'::h5scombine_select_c ! !DEC$ENDIF ! INTEGER(HID_T), INTENT(IN) :: space1_id ! INTEGER(HID_T), INTENT(IN) :: space2_id ! INTEGER, INTENT(IN) :: operator ! INTEGER(HID_T), INTENT(OUT) :: ds_id ! END FUNCTION h5scombine_select_c ! END INTERFACE ! hdferr = h5scombine_select_c(space1_id, operator, space2_id, & ! ds_id) ! return ! END SUBROUTINE h5scombine_select_f ! !$! ! !$!****s* H5S/ ! !$! ! !$! NAME ! !$! h5smodify_select_f ! !$! ! !$! PURPOSE ! !$! Refine a hyperslab selection with an operation ! !$! using second hyperslab ! !$! ! !$! INPUTS ! !$! space1_id - dataspace of selection to modify ! !$! operator - flag, valid values are: ! !$! H5S_SELECT_NOOP_F ! !$! H5S_SELECT_SET_F ! !$! H5S_SELECT_OR_F ! !$! H5S_SELECT_AND_F ! !$! H5S_SELECT_XOR_F ! !$! H5S_SELECT_NOTB_F ! !$! H5S_SELECT_NOTA_F ! !$! H5S_SELECT_APPEND_F ! !$! H5S_SELECT_PREPEND_F ! !$! space2_id - dataspace of selection to use ! !$! ! !$! OUTPUTS ! !$! hdferr: - error code ! !$! Success: 0 ! !$! Failure: -1 ! !$! OPTIONAL PARAMETERS - NONE ! !$! ! !$! AUTHOR ! !$! Elena Pourmal ! !$! October 7, 2002 ! !$! ! !$! HISTORY ! !$! ! !$! ! !$! NOTESCommented out until 1.6 release(?) 10/08/2002 EIP ! !$! ! ! SOURCE ! SUBROUTINE h5smodify_select_f(space1_id, operator, space2_id, & ! hdferr) ! IMPLICIT NONE ! INTEGER(HID_T), INTENT(INOUT) :: space1_id ! Dataspace identifier to ! modify ! INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier ! INTEGER, INTENT(IN) :: operator ! Flag, valid values are: ! H5S_SELECT_NOOP_F ! H5S_SELECT_SET_F ! H5S_SELECT_OR_F ! H5S_SELECT_AND_F ! H5S_SELECT_XOR_F ! H5S_SELECT_NOTB_F ! H5S_SELECT_NOTA_F ! H5S_SELECT_APPEND_F ! H5S_SELECT_PREPEND_F ! ! INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTERFACE ! INTEGER FUNCTION h5smodify_select_c(space1_id, operator, & ! space2_id) ! USE H5GLOBAL ! !DEC$IF DEFINED(HDF5F90_WINDOWS) ! !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SMODIFY_SELECT_C'::h5smodify_select_c ! !DEC$ENDIF ! INTEGER(HID_T), INTENT(INOUT) :: space1_id ! INTEGER(HID_T), INTENT(IN) :: space2_id ! INTEGER, INTENT(IN) :: operator ! END FUNCTION h5smodify_select_c ! END INTERFACE ! hdferr = h5smodify_select_c(space1_id, operator, space2_id) ! return ! END SUBROUTINE h5smodify_select_f ! !****s* H5S/h5sget_select_type_f ! ! NAME ! h5sget_select_type_f ! ! PURPOSE ! Retrieve the type of selection ! ! INPUTS ! space_id - dataspace identifier with selection ! OUTPUTS ! type - selection type flag, valid values are: ! H5S_SEL_ERROR_F ! H5S_SEL_NONE_F ! H5S_SEL_POINTS_F ! H5S_SEL_HYPERSLABS_F ! H5S_SEL_ALL_F ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! Elena Pourmal ! October 7, 2002 ! ! SOURCE SUBROUTINE h5sget_select_type_f(space_id, TYPE, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(INOUT) :: space_id INTEGER, INTENT(OUT) :: TYPE INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sget_select_type_c(space_id, TYPE) BIND(C,NAME='h5sget_select_type_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER, INTENT(OUT) :: TYPE END FUNCTION h5sget_select_type_c END INTERFACE hdferr = h5sget_select_type_c(space_id, TYPE) RETURN END SUBROUTINE h5sget_select_type_f ! !****s* H5S/H5Sdecode_f ! ! NAME ! H5Sdecode_f ! ! PURPOSE ! Decode a binary object description of data space and return a new object handle. ! ! INPUTS ! buf - Buffer for the data space object to be decoded. ! obj_id - Object ID ! OUTPUTS ! hdferr - Returns 0 if successful and -1 if fails ! ! AUTHOR ! M. Scot Breitenfeld ! March 26, 2008 ! SOURCE SUBROUTINE h5sdecode_f(buf, obj_id, hdferr) IMPLICIT NONE CHARACTER(LEN=*), INTENT(IN) :: buf INTEGER(HID_T), INTENT(OUT) :: obj_id INTEGER, INTENT(OUT) :: hdferr !***** INTERFACE INTEGER FUNCTION h5sdecode_c(buf, obj_id) BIND(C,NAME='h5sdecode_c') IMPORT :: C_CHAR IMPORT :: HID_T CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: buf INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object ID END FUNCTION h5sdecode_c END INTERFACE hdferr = h5sdecode_c(buf, obj_id) END SUBROUTINE h5sdecode_f ! !****s* H5S/H5Sencode_f ! ! NAME ! H5Sencode_f ! ! PURPOSE ! Encode a data space object description into a binary buffer. ! ! INPUTS ! obj_id - Identifier of the object to be encoded. ! buf - Buffer for the object to be encoded into. ! nalloc - The size of the allocated buffer. ! OUTPUTS ! nalloc - The size of the buffer needed. ! hdferr - Returns 0 if successful and -1 if fails. ! ! AUTHOR ! M. Scot Breitenfeld ! March 26, 2008 ! SOURCE SUBROUTINE h5sencode_f(obj_id, buf, nalloc, hdferr, fapl_id) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: obj_id CHARACTER(LEN=*), INTENT(OUT) :: buf INTEGER(SIZE_T), INTENT(INOUT) :: nalloc INTEGER, INTENT(OUT) :: hdferr INTEGER(HID_T), OPTIONAL, INTENT(IN) :: fapl_id ! File access property list !***** INTEGER(HID_T) :: fapl_id_default INTERFACE INTEGER FUNCTION h5sencode_c(buf, obj_id, nalloc, fapl_id_default) BIND(C,NAME='h5sencode_c') IMPORT :: C_CHAR IMPORT :: HID_T, SIZE_T INTEGER(HID_T), INTENT(IN) :: obj_id CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: buf INTEGER(SIZE_T), INTENT(INOUT) :: nalloc INTEGER(HID_T) :: fapl_id_default END FUNCTION h5sencode_c END INTERFACE fapl_id_default = H5P_DEFAULT_F IF(PRESENT(fapl_id)) fapl_id_default = fapl_id hdferr = h5sencode_c(buf, obj_id, nalloc, fapl_id_default) END SUBROUTINE h5sencode_f !****s* H5S/h5sextent_equal_f ! ! NAME ! h5sextent_equal_f ! ! PURPOSE ! Determines whether two dataspace extents are equal. ! ! INPUTS ! space1_id - First dataspace identifier. ! space2_id - Second dataspace identifier. ! OUTPUTS ! Equal - .TRUE. if equal, .FALSE. if unequal. ! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! M. Scot Breitenfeld ! April 2, 2008 ! ! SOURCE SUBROUTINE h5sextent_equal_f(space1_id, space2_id, equal, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space1_id INTEGER(HID_T), INTENT(IN) :: space2_id LOGICAL, INTENT(OUT) :: Equal INTEGER, INTENT(OUT) :: hdferr !***** INTEGER(HID_T) :: c_equal INTERFACE INTEGER FUNCTION h5sextent_equal_c(space1_id, space2_id, c_equal) BIND(C,NAME='h5sextent_equal_c') IMPORT :: HID_T IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space1_id INTEGER(HID_T), INTENT(IN) :: space2_id INTEGER(HID_T) :: c_equal END FUNCTION h5sextent_equal_c END INTERFACE hdferr = h5sextent_equal_c(space1_id, space2_id, c_equal) equal = .FALSE. IF(c_equal.GT.0) equal = .TRUE. END SUBROUTINE h5sextent_equal_f ! !****s* H5S/h5sget_regular_hyperslab_f ! ! NAME ! h5sget_regular_hyperslab_f ! ! PURPOSE ! Retrieves a regular hyperslab selection. ! ! INPUTS ! space_id - The identifier of the dataspace. ! OUTPUTS ! start - Offset of the start of the regular hyperslab. ! stride - Stride of the regular hyperslab. ! count - Number of blocks in the regular hyperslab. ! block - Size of a block in the regular hyperslab. ! hdferr - Returns 0 if successful and -1 if fails. ! ! AUTHOR ! M. Scot Breitenfeld ! January, 28 2016 ! SOURCE SUBROUTINE h5sget_regular_hyperslab_f(space_id, start, stride, count, block, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET :: start INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET :: stride INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET :: count INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET :: block INTEGER, INTENT(OUT) :: hdferr !***** TYPE(C_PTR) :: start_c, stride_c, count_c, block_c INTEGER :: n INTERFACE INTEGER FUNCTION h5sget_regular_hyperslab(space_id, start, stride, count, block) BIND(C,NAME='H5Sget_regular_hyperslab') IMPORT :: HID_T, C_PTR IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: space_id TYPE(C_PTR), VALUE :: start, stride, count, block END FUNCTION h5sget_regular_hyperslab END INTERFACE hdferr = 0 start_c = C_LOC(start(1)) stride_c = C_LOC(stride(1)) count_c = C_LOC(count(1)) block_c = C_LOC(block(1)) IF(INT(h5sget_regular_hyperslab(space_id, start_c, stride_c, count_c, block_c)).LT.0) hdferr = -1 ! Reverse the C arrays description values of the hyperslab because ! the hyperslab was for a C stored hyperslab CALL H5Sget_simple_extent_ndims_f(space_id,n,hdferr) IF(hdferr.LT.0.OR.n.EQ.0)THEN hdferr=-1 ELSE start(1:n) = start(n:1:-1) stride(1:n) = stride(n:1:-1) count(1:n) = count(n:1:-1) block(1:n) = block(n:1:-1) ENDIF END SUBROUTINE h5sget_regular_hyperslab_f !****s* H5S/h5sis_regular_hyperslab_f ! ! NAME ! h5sis_regular_hyperslab_f ! ! PURPOSE ! Retrieves a regular hyperslab selection. ! ! INPUTS ! space_id - The identifier of the dataspace. ! OUTPUTS ! IsRegular - TRUE or FALSE for hyperslab selection if successful. ! hdferr - Returns 0 if successful and -1 if fails. ! ! AUTHOR ! M. Scot Breitenfeld ! January, 28 2016 ! SOURCE SUBROUTINE h5sis_regular_hyperslab_f(space_id, IsRegular, hdferr) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: space_id LOGICAL :: IsRegular INTEGER, INTENT(OUT) :: hdferr !***** INTEGER(C_INT) :: status INTERFACE INTEGER(C_INT) FUNCTION H5Sis_regular_hyperslab(space_id) BIND(C,NAME='H5Sis_regular_hyperslab') IMPORT :: HID_T, C_INT IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: space_id END FUNCTION H5Sis_regular_hyperslab END INTERFACE status = H5Sis_regular_hyperslab(space_id) hdferr = 0 IsRegular = .FALSE. IF(status.GT.0)THEN IsRegular = .TRUE. ELSE IF(status.LT.0)THEN hdferr = -1 ENDIF END SUBROUTINE H5Sis_regular_hyperslab_f END MODULE H5S