1program TestBPWriteReadHeatMap6D 2 use mpi 3 use adios2 4 5 implicit none 6 7 integer(kind=8) :: sum_i1, sum_i2 8 type(adios2_adios) :: adios 9 type(adios2_io) :: ioPut, ioGet 10 type(adios2_engine) :: bpWriter, bpReader 11 type(adios2_variable), dimension(6) :: var_temperatures, var_temperaturesIn 12 13 integer(kind=1), dimension(:, :, :, :, :, :), allocatable :: temperatures_i1, & 14 sel_temperatures_i1 15 16 integer(kind=2), dimension(:, :, :, :, :, :), allocatable :: temperatures_i2, & 17 sel_temperatures_i2 18 19 integer(kind=4), dimension(:, :, :, :, :, :), allocatable :: temperatures_i4, & 20 sel_temperatures_i4 21 22 integer(kind=8), dimension(:, :, :, :, :, :), allocatable :: temperatures_i8, & 23 sel_temperatures_i8 24 25 real(kind=4), dimension(:, :, :, :, :, :), allocatable :: temperatures_r4, & 26 sel_temperatures_r4 27 28 real(kind=8), dimension(:, :, :, :, :, :), allocatable :: temperatures_r8, & 29 sel_temperatures_r8 30 31 integer(kind=8), dimension(6) :: ishape, istart, icount 32 integer(kind=8), dimension(6) :: sel_start, sel_count 33 integer :: ierr, irank, isize 34 integer :: in1, in2, in3, in4, in5, in6 35 integer :: i1, i2, i3, i4, i5, i6 36 37 call MPI_INIT(ierr) 38 call MPI_COMM_RANK(MPI_COMM_WORLD, irank, ierr) 39 call MPI_COMM_SIZE(MPI_COMM_WORLD, isize, ierr) 40 41 in1 = 10 42 in2 = 10 43 in3 = 10 44 in4 = 10 45 in5 = 10 46 in6 = 10 47 48 icount = (/in1, in2, in3, in4, in5, in6/) 49 istart = (/0, 0, 0, 0, 0, in6*irank/) 50 ishape = (/in1, in2, in3, in4, in5, in6*isize/) 51 52 allocate (temperatures_i1(in1, in2, in3, in4, in5, in6)) 53 allocate (temperatures_i2(in1, in2, in3, in4, in5, in6)) 54 allocate (temperatures_i4(in1, in2, in3, in4, in5, in6)) 55 allocate (temperatures_i8(in1, in2, in3, in4, in5, in6)) 56 allocate (temperatures_r4(in1, in2, in3, in4, in5, in6)) 57 allocate (temperatures_r8(in1, in2, in3, in4, in5, in6)) 58 59 temperatures_i1 = 1 60 temperatures_i2 = 1 61 temperatures_i4 = 1 62 temperatures_i8 = 1_8 63 temperatures_r4 = 1.0 64 temperatures_r8 = 1.0_8 65 66 ! Start adios2 Writer 67 call adios2_init(adios, MPI_COMM_WORLD, adios2_debug_mode_on, ierr) 68 call adios2_declare_io(ioPut, adios, 'HeatMapWrite', ierr) 69 70 call adios2_define_variable(var_temperatures(1), ioPut, & 71 'temperatures_i1', adios2_type_integer1, & 72 6, ishape, istart, icount, & 73 adios2_constant_dims, ierr) 74 75 call adios2_define_variable(var_temperatures(2), ioPut, & 76 'temperatures_i2', adios2_type_integer2, & 77 6, ishape, istart, icount, & 78 adios2_constant_dims, ierr) 79 80 call adios2_define_variable(var_temperatures(3), ioPut, & 81 'temperatures_i4', adios2_type_integer4, & 82 6, ishape, istart, icount, & 83 adios2_constant_dims, ierr) 84 85 call adios2_define_variable(var_temperatures(4), ioPut, & 86 'temperatures_i8', adios2_type_integer8, & 87 6, ishape, istart, icount, & 88 adios2_constant_dims, ierr) 89 90 call adios2_define_variable(var_temperatures(5), ioPut, & 91 'temperatures_r4', adios2_type_real, & 92 6, ishape, istart, icount, & 93 adios2_constant_dims, ierr) 94 95 call adios2_define_variable(var_temperatures(6), ioPut, & 96 'temperatures_r8', adios2_type_dp, & 97 6, ishape, istart, icount, & 98 adios2_constant_dims, ierr) 99 100 call adios2_open(bpWriter, ioPut, 'HeatMap6D_f.bp', adios2_mode_write, & 101 ierr) 102 103 call adios2_put(bpWriter, var_temperatures(1), temperatures_i1, ierr) 104 call adios2_put(bpWriter, var_temperatures(2), temperatures_i2, ierr) 105 call adios2_put(bpWriter, var_temperatures(3), temperatures_i4, ierr) 106 call adios2_put(bpWriter, var_temperatures(4), temperatures_i8, ierr) 107 call adios2_put(bpWriter, var_temperatures(5), temperatures_r4, ierr) 108 call adios2_put(bpWriter, var_temperatures(6), temperatures_r8, ierr) 109 110 call adios2_close(bpWriter, ierr) 111 112 if (allocated(temperatures_i1)) deallocate (temperatures_i1) 113 if (allocated(temperatures_i2)) deallocate (temperatures_i2) 114 if (allocated(temperatures_i4)) deallocate (temperatures_i4) 115 if (allocated(temperatures_i8)) deallocate (temperatures_i8) 116 if (allocated(temperatures_r4)) deallocate (temperatures_r4) 117 if (allocated(temperatures_r8)) deallocate (temperatures_r8) 118 119 ! Start adios2 Reader in rank 0 120 if (irank == 0) then 121 122 call adios2_declare_io(ioGet, adios, 'HeatMapRead', ierr) 123 124 call adios2_open(bpReader, ioGet, 'HeatMap6D_f.bp', & 125 adios2_mode_read, MPI_COMM_SELF, ierr) 126 127 call adios2_inquire_variable(var_temperaturesIn(1), ioGet, & 128 'temperatures_i1', ierr) 129 call adios2_inquire_variable(var_temperaturesIn(2), ioGet, & 130 'temperatures_i2', ierr) 131 call adios2_inquire_variable(var_temperaturesIn(3), ioGet, & 132 'temperatures_i4', ierr) 133 call adios2_inquire_variable(var_temperaturesIn(4), ioGet, & 134 'temperatures_i8', ierr) 135 call adios2_inquire_variable(var_temperaturesIn(5), ioGet, & 136 'temperatures_r4', ierr) 137 call adios2_inquire_variable(var_temperaturesIn(6), ioGet, & 138 'temperatures_r8', ierr) 139 140 sel_start = (/0, 0, 0, 0, 0, 0/) 141 sel_count = (/ishape(1), ishape(2), ishape(3), ishape(4), ishape(5), & 142 ishape(6)/) 143 144 allocate (sel_temperatures_i1(ishape(1), ishape(2), ishape(3), ishape(4), & 145 ishape(5), ishape(6))) 146 allocate (sel_temperatures_i2(ishape(1), ishape(2), ishape(3), ishape(4), & 147 ishape(5), ishape(6))) 148 allocate (sel_temperatures_i4(ishape(1), ishape(2), ishape(3), ishape(4), & 149 ishape(5), ishape(6))) 150 allocate (sel_temperatures_i8(ishape(1), ishape(2), ishape(3), ishape(4), & 151 ishape(5), ishape(6))) 152 allocate (sel_temperatures_r4(ishape(1), ishape(2), ishape(3), ishape(4), & 153 ishape(5), ishape(6))) 154 allocate (sel_temperatures_r8(ishape(1), ishape(2), ishape(3), ishape(4), & 155 ishape(5), ishape(6))) 156 157 sel_temperatures_i1 = 0 158 sel_temperatures_i2 = 0 159 sel_temperatures_i4 = 0 160 sel_temperatures_i8 = 0_8 161 sel_temperatures_r4 = 0.0_4 162 sel_temperatures_r8 = 0.0_8 163 164 call adios2_set_selection(var_temperaturesIn(1), 6, sel_start, sel_count, & 165 ierr) 166 call adios2_set_selection(var_temperaturesIn(2), 6, sel_start, sel_count, & 167 ierr) 168 call adios2_set_selection(var_temperaturesIn(3), 6, sel_start, sel_count, & 169 ierr) 170 call adios2_set_selection(var_temperaturesIn(4), 6, sel_start, sel_count, & 171 ierr) 172 call adios2_set_selection(var_temperaturesIn(5), 6, sel_start, sel_count, & 173 ierr) 174 call adios2_set_selection(var_temperaturesIn(6), 6, sel_start, sel_count, & 175 ierr) 176 177 call adios2_get(bpReader, var_temperaturesIn(1), sel_temperatures_i1, ierr) 178 call adios2_get(bpReader, var_temperaturesIn(2), sel_temperatures_i2, ierr) 179 call adios2_get(bpReader, var_temperaturesIn(3), sel_temperatures_i4, ierr) 180 call adios2_get(bpReader, var_temperaturesIn(4), sel_temperatures_i8, ierr) 181 call adios2_get(bpReader, var_temperaturesIn(5), sel_temperatures_r4, ierr) 182 call adios2_get(bpReader, var_temperaturesIn(6), sel_temperatures_r8, ierr) 183 184 185 call adios2_close(bpReader, ierr) 186 187 sum_i1 = 0 188 sum_i2 = 0 189 190 do i6 = 1, sel_count(6) 191 do i5 = 1, sel_count(5) 192 do i4 = 1, sel_count(4) 193 do i3 = 1, sel_count(3) 194 do i2 = 1, sel_count(2) 195 do i1 = 1, sel_count(1) 196 sum_i1 = sum_i1 + sel_temperatures_i1(i1, i2, i3, i4, i5, i6) 197 sum_i2 = sum_i2 + sel_temperatures_i2(i1, i2, i3, i4, i5, i6) 198 end do 199 end do 200 end do 201 end do 202 end do 203 end do 204 205 if (sum_i1 /= 1000000*isize) stop 'Test failed integer*1' 206 if (sum_i2 /= 1000000*isize) stop 'Test failed integer*2' 207 if (sum(sel_temperatures_i4) /= 1000000*isize) stop 'Test failed integer*4' 208 if (sum(sel_temperatures_i8) /= 1000000*isize) stop 'Test failed integer*8' 209 if (sum(sel_temperatures_r4) /= 1000000*isize) stop 'Test failed real*4' 210 if (sum(sel_temperatures_r8) /= 1000000*isize) stop 'Test failed real*8' 211 212 if (allocated(sel_temperatures_i1)) deallocate (sel_temperatures_i1) 213 if (allocated(sel_temperatures_i2)) deallocate (sel_temperatures_i2) 214 if (allocated(sel_temperatures_i4)) deallocate (sel_temperatures_i4) 215 if (allocated(sel_temperatures_i8)) deallocate (sel_temperatures_i8) 216 if (allocated(sel_temperatures_r4)) deallocate (sel_temperatures_r4) 217 if (allocated(sel_temperatures_r8)) deallocate (sel_temperatures_r8) 218 219 end if 220 221 call adios2_finalize(adios, ierr) 222 call MPI_Finalize(ierr) 223 224end program TestBPWriteReadHeatMap6D 225