1! Copyright (c) 2017-2021, Lawrence Livermore National Security, LLC and
2! other Axom Project Developers. See the top-level LICENSE file for details.
3!
4! SPDX-License-Identifier: (BSD-3-Clause)
5
6#include "axom/config.hpp"
7
8program spio_basic_write_read
9  use iso_c_binding
10  use axom_sidre
11  use axom_spio
12  implicit none
13
14  include 'mpif.h'
15
16  integer mpierr
17  integer num_files
18  integer testvalue1, testvalue2
19  integer return_val
20
21  type(SidreDataStore) ds1, ds2
22  type(SidreGroup) root1, root2
23  type(SidreGroup) flds1, flds2
24  type(SidreGroup) ga, gb
25  type(SidreView)  view1, view2
26
27  type(IOManager) writer, reader
28
29#ifdef AXOM_USE_HDF5
30  character(18) :: protocol = "sidre_hdf5        "
31  character(18) :: root_ext = ".root             "
32#else
33  character(18) :: protocol = "sidre_conduit_json"
34  character(18) :: root_ext = ".root"
35#endif
36
37
38  call mpi_init(mpierr)
39
40  ds1 = SidreDataStore()
41  root1 = ds1%get_root()
42
43  flds1 = root1%create_group("fields")
44  flds2 = root1%create_group("fields2")
45
46  ga = flds1%create_group("a")
47  gb = flds2%create_group("b")
48
49  view1 = ga%create_view_scalar_int("i0", 101)
50  view2 = gb%create_view_scalar_int("i1", 404)
51
52  num_files = 1
53  writer = IOManager(MPI_COMM_WORLD)
54
55  call writer%write(root1, num_files, "F_out_spio_basic_write_read", protocol )
56
57  ds2 = SidreDataStore()
58
59  reader = IOManager(MPI_COMM_WORLD)
60
61  root2 = ds2%get_root()
62  call reader%read(root2, "F_out_spio_basic_write_read" // root_ext )
63
64  return_val = 0
65  if (.not. root2%is_equivalent_to(root1)) then
66     return_val = 1
67  endif
68
69  view1 = root1%get_view("fields/a/i0")
70  testvalue1 = view1%get_data_int()
71  view2 = root2%get_view("fields/a/i0")
72  testvalue2 = view1%get_data_int()
73
74  if (testvalue1 .ne. testvalue2) then
75     return_val = 1
76  endif
77
78  view1 = root1%get_view("fields2/b/i1")
79  testvalue1 = view1%get_data_int()
80  view2 = root2%get_view("fields2/b/i1")
81  testvalue2 = view1%get_data_int()
82
83  if (testvalue1 .ne. testvalue2) then
84     return_val = 1
85  endif
86
87  call ds1%delete()
88  call ds2%delete()
89
90  call mpi_finalize(mpierr)
91
92  if (return_val .ne. 0) then
93     call exit(1)
94  endif
95end program spio_basic_write_read
96