29 class(fmsnetcdfdomainfile_t),
intent(in) :: fileobj
30 character(len=*),
intent(in) :: variable_name
31 class(*),
dimension(:,:),
intent(in) :: variable_data
32 logical,
intent(out) :: is_decomposed
33 character(len=32) :: chksum
37 type(domain2d),
pointer :: io_domain
46 logical :: buffer_includes_halos
49 integer,
dimension(2) :: c
50 integer,
dimension(2) :: e
51 integer(kind=i4_kind),
dimension(:,:),
allocatable :: buf_i4_kind
52 integer(kind=i8_kind),
dimension(:,:),
allocatable :: buf_i8_kind
53 real(kind=r4_kind),
dimension(:,:),
allocatable :: buf_r4_kind
54 real(kind=r8_kind),
dimension(:,:),
allocatable :: buf_r8_kind
55 integer(kind=i4_kind) :: fill_i4_kind
56 integer(kind=i8_kind) :: fill_i8_kind
57 real(kind=r4_kind) :: fill_r4_kind
58 real(kind=r8_kind) :: fill_r8_kind
59 integer(kind=i8_kind) :: chksum_val
61 is_decomposed = is_variable_domain_decomposed(fileobj, variable_name, &
62 xindex=xdim, yindex=ydim, &
64 if (.not. is_decomposed)
then
69 call domain_offsets(
size(variable_data, xdim),
size(variable_data, ydim), fileobj%domain, &
70 xpos, ypos, isd, isc, xc_size, jsd, jsc, &
71 yc_size, buffer_includes_halos, extra_x, extra_y, &
72 msg=
"file:"//trim(fileobj%path)//
" and variable:"//trim(variable_name))
74 if (buffer_includes_halos)
then
76 c(xdim) = isc - isd + 1
77 c(ydim) = jsc - jsd + 1
79 e(:) = shape(variable_data)
95 select type (variable_data)
96 type is (
integer(kind=i4_kind))
97 call allocate_array(buf_i4_kind, e)
98 call get_array_section(buf_i4_kind, variable_data, c, e)
99 if (get_fill_value(fileobj, variable_name, fill_i4_kind))
then
100 chksum_val = mpp_chksum(buf_i4_kind, mask_val=fill_i4_kind)
102 chksum_val = mpp_chksum(buf_i4_kind)
104 deallocate(buf_i4_kind)
105 type is (
integer(kind=i8_kind))
106 call allocate_array(buf_i8_kind, e)
107 call get_array_section(buf_i8_kind, variable_data, c, e)
108 if (get_fill_value(fileobj, variable_name, fill_i8_kind))
then
109 chksum_val = mpp_chksum(buf_i8_kind, mask_val=fill_i8_kind)
111 chksum_val = mpp_chksum(buf_i8_kind)
113 deallocate(buf_i8_kind)
114 type is (real(kind=r4_kind))
115 call allocate_array(buf_r4_kind, e)
116 call get_array_section(buf_r4_kind, variable_data, c, e)
117 if (get_fill_value(fileobj, variable_name, fill_r4_kind))
then
118 chksum_val = mpp_chksum(buf_r4_kind, mask_val=fill_r4_kind)
120 chksum_val = mpp_chksum(buf_r4_kind)
122 deallocate(buf_r4_kind)
123 type is (real(kind=r8_kind))
124 call allocate_array(buf_r8_kind, e)
125 call get_array_section(buf_r8_kind, variable_data, c, e)
126 if (get_fill_value(fileobj, variable_name, fill_r8_kind))
then
127 chksum_val = mpp_chksum(buf_r8_kind, mask_val=fill_r8_kind)
129 chksum_val = mpp_chksum(buf_r8_kind)
131 deallocate(buf_r8_kind)
133 call error(
"unsupported variable type: compute_global_checksum_2d: file: "//trim(fileobj%path)//
" variable:"// &
134 & trim(variable_name))
137 write(chksum,
"(Z16)") chksum_val
146 class(fmsnetcdfdomainfile_t),
intent(in) :: fileobj
147 character(len=*),
intent(in) :: variable_name
148 class(*),
dimension(:,:,:),
intent(in) :: variable_data
149 logical,
intent(out) :: is_decomposed
150 character(len=32) :: chksum
154 type(domain2d),
pointer :: io_domain
163 logical :: buffer_includes_halos
166 integer,
dimension(3) :: c
167 integer,
dimension(3) :: e
168 integer(kind=i4_kind),
dimension(:,:,:),
allocatable :: buf_i4_kind
169 integer(kind=i8_kind),
dimension(:,:,:),
allocatable :: buf_i8_kind
170 real(kind=r4_kind),
dimension(:,:,:),
allocatable :: buf_r4_kind
171 real(kind=r8_kind),
dimension(:,:,:),
allocatable :: buf_r8_kind
172 integer(kind=i4_kind) :: fill_i4_kind
173 integer(kind=i8_kind) :: fill_i8_kind
174 real(kind=r4_kind) :: fill_r4_kind
175 real(kind=r8_kind) :: fill_r8_kind
176 integer(kind=i8_kind) :: chksum_val
178 is_decomposed = is_variable_domain_decomposed(fileobj, variable_name, &
179 xindex=xdim, yindex=ydim, &
180 xpos=xpos, ypos=ypos)
181 if (.not. is_decomposed)
then
186 call domain_offsets(
size(variable_data, xdim),
size(variable_data, ydim), fileobj%domain, &
187 xpos, ypos, isd, isc, xc_size, jsd, jsc, &
188 yc_size, buffer_includes_halos, extra_x, extra_y, &
189 msg=
"file:"//trim(fileobj%path)//
" and variable:"//trim(variable_name))
191 if (buffer_includes_halos)
then
193 c(xdim) = isc - isd + 1
194 c(ydim) = jsc - jsd + 1
196 e(:) = shape(variable_data)
203 e(xdim) = e(xdim) - 1
209 e(ydim) = e(ydim) - 1
211 select type (variable_data)
212 type is (
integer(kind=i4_kind))
213 call allocate_array(buf_i4_kind, e)
214 call get_array_section(buf_i4_kind, variable_data, c, e)
215 if (get_fill_value(fileobj, variable_name, fill_i4_kind))
then
216 chksum_val = mpp_chksum(buf_i4_kind, mask_val=fill_i4_kind)
218 chksum_val = mpp_chksum(buf_i4_kind)
220 deallocate(buf_i4_kind)
221 type is (
integer(kind=i8_kind))
222 call allocate_array(buf_i8_kind, e)
223 call get_array_section(buf_i8_kind, variable_data, c, e)
224 if (get_fill_value(fileobj, variable_name, fill_i8_kind))
then
225 chksum_val = mpp_chksum(buf_i8_kind, mask_val=fill_i8_kind)
227 chksum_val = mpp_chksum(buf_i8_kind)
229 deallocate(buf_i8_kind)
230 type is (real(kind=r4_kind))
231 call allocate_array(buf_r4_kind, e)
232 call get_array_section(buf_r4_kind, variable_data, c, e)
233 if (get_fill_value(fileobj, variable_name, fill_r4_kind))
then
234 chksum_val = mpp_chksum(buf_r4_kind, mask_val=fill_r4_kind)
236 chksum_val = mpp_chksum(buf_r4_kind)
238 deallocate(buf_r4_kind)
239 type is (real(kind=r8_kind))
240 call allocate_array(buf_r8_kind, e)
241 call get_array_section(buf_r8_kind, variable_data, c, e)
242 if (get_fill_value(fileobj, variable_name, fill_r8_kind))
then
243 chksum_val = mpp_chksum(buf_r8_kind, mask_val=fill_r8_kind)
245 chksum_val = mpp_chksum(buf_r8_kind)
247 deallocate(buf_r8_kind)
249 call error(
"unsupported variable type: compute_global_checksum_3d: file: "//trim(fileobj%path)//
" variable:"// &
250 & trim(variable_name))
253 write(chksum,
"(Z16)") chksum_val
262 class(fmsnetcdfdomainfile_t),
intent(in) :: fileobj
263 character(len=*),
intent(in) :: variable_name
264 class(*),
dimension(:,:,:,:),
intent(in) :: variable_data
265 logical,
intent(out) :: is_decomposed
266 character(len=32) :: chksum
270 type(domain2d),
pointer :: io_domain
279 logical :: buffer_includes_halos
282 integer,
dimension(4) :: c
283 integer,
dimension(4) :: e
284 integer(kind=i4_kind),
dimension(:,:,:,:),
allocatable :: buf_i4_kind
285 integer(kind=i8_kind),
dimension(:,:,:,:),
allocatable :: buf_i8_kind
286 real(kind=r4_kind),
dimension(:,:,:,:),
allocatable :: buf_r4_kind
287 real(kind=r8_kind),
dimension(:,:,:,:),
allocatable :: buf_r8_kind
288 integer(kind=i4_kind) :: fill_i4_kind
289 integer(kind=i8_kind) :: fill_i8_kind
290 real(kind=r4_kind) :: fill_r4_kind
291 real(kind=r8_kind) :: fill_r8_kind
292 integer(kind=i8_kind) :: chksum_val
294 is_decomposed = is_variable_domain_decomposed(fileobj, variable_name, &
295 xindex=xdim, yindex=ydim, &
296 xpos=xpos, ypos=ypos)
297 if (.not. is_decomposed)
then
302 call domain_offsets(
size(variable_data, xdim),
size(variable_data, ydim), fileobj%domain, &
303 xpos, ypos, isd, isc, xc_size, jsd, jsc, &
304 yc_size, buffer_includes_halos, extra_x, extra_y, &
305 msg=
"file:"//trim(fileobj%path)//
" and variable:"//trim(variable_name))
307 if (buffer_includes_halos)
then
309 c(xdim) = isc - isd + 1
310 c(ydim) = jsc - jsd + 1
312 e(:) = shape(variable_data)
319 e(xdim) = e(xdim) - 1
325 e(ydim) = e(ydim) - 1
328 select type (variable_data)
329 type is (
integer(kind=i4_kind))
330 call allocate_array(buf_i4_kind, e)
331 call get_array_section(buf_i4_kind, variable_data, c, e)
332 if (get_fill_value(fileobj, variable_name, fill_i4_kind))
then
333 chksum_val = mpp_chksum(buf_i4_kind, mask_val=fill_i4_kind)
335 chksum_val = mpp_chksum(buf_i4_kind)
337 deallocate(buf_i4_kind)
338 type is (
integer(kind=i8_kind))
339 call allocate_array(buf_i8_kind, e)
340 call get_array_section(buf_i8_kind, variable_data, c, e)
341 if (get_fill_value(fileobj, variable_name, fill_i8_kind))
then
342 chksum_val = mpp_chksum(buf_i8_kind, mask_val=fill_i8_kind)
344 chksum_val = mpp_chksum(buf_i8_kind)
346 deallocate(buf_i8_kind)
347 type is (real(kind=r4_kind))
348 call allocate_array(buf_r4_kind, e)
349 call get_array_section(buf_r4_kind, variable_data, c, e)
350 if (get_fill_value(fileobj, variable_name, fill_r4_kind))
then
351 chksum_val = mpp_chksum(buf_r4_kind, mask_val=fill_r4_kind)
353 chksum_val = mpp_chksum(buf_r4_kind)
355 deallocate(buf_r4_kind)
356 type is (real(kind=r8_kind))
357 call allocate_array(buf_r8_kind, e)
358 call get_array_section(buf_r8_kind, variable_data, c, e)
359 if (get_fill_value(fileobj, variable_name, fill_r8_kind))
then
360 chksum_val = mpp_chksum(buf_r8_kind, mask_val=fill_r8_kind)
362 chksum_val = mpp_chksum(buf_r8_kind)
364 deallocate(buf_r8_kind)
366 call error(
"unsupported variable type: compute_global_checksum_4d: file: "//trim(fileobj%path)//
" variable:"// &
367 & trim(variable_name))
370 write(chksum,
"(Z16)") chksum_val
character(len=32) function compute_global_checksum_3d(fileobj, variable_name, variable_data, is_decomposed)
@briefs Calculates a variable's checksum across all ranks in the current pelist.
character(len=32) function compute_global_checksum_4d(fileobj, variable_name, variable_data, is_decomposed)
@briefs Calculates a variable's checksum across all ranks in the current pelist.
character(len=32) function compute_global_checksum_2d(fileobj, variable_name, variable_data, is_decomposed)
@briefs Calculates a variable's checksum across all ranks in the current pelist.
type(domain2d) function, pointer mpp_get_io_domain(domain)
Set user stack size.