22 subroutine stats_ ( dat, low, high, avg, miss, missing_value, mask )
23 real(FMS_HI_KIND_),
intent(in) :: dat(:,:)
24 real(FMS_HI_KIND_),
intent(out) :: low, high, avg
25 integer,
intent(out) :: miss
26 real(FMS_HI_KIND_),
intent(in),
optional :: missing_value
27 real(FMS_HI_KIND_),
intent(in),
optional :: mask(:,:)
29 real(FMS_HI_KIND_) :: dsum, buffer_real(3)
30 integer :: pe, root_pe, npes, p, buffer_int(2), npts
31 integer,
parameter :: kindl = fms_hi_kind_
34 root_pe = mpp_root_pe()
40 if (
present(missing_value))
then
41 miss = count(dat(:,:) == missing_value)
42 low = minval(dat(:,:), dat(:,:) /= missing_value)
43 high = maxval(dat(:,:), dat(:,:) /= missing_value)
44 dsum = sum(dat(:,:), dat(:,:) /= missing_value)
45 else if(
present(mask))
then
46 miss = count(mask(:,:) <= 0.5_kindl )
47 low = minval(dat(:,:),mask=mask(:,:) > 0.5_kindl)
48 high = maxval(dat(:,:),mask=mask(:,:) > 0.5_kindl)
49 dsum = sum(dat(:,:), mask=mask(:,:) > 0.5_kindl)
52 low = minval(dat(:,:))
53 high = maxval(dat(:,:))
58 npts =
size(dat(:,:)) - miss
59 if(pe == root_pe)
then
62 call mpp_recv(buffer_real(1),glen=3, from_pe=p+root_pe, tag=comm_tag_1)
63 dsum = dsum + buffer_real(1)
64 low = min(low, buffer_real(2))
65 high = max(high, buffer_real(3))
66 call mpp_recv(buffer_int(1), glen=2, from_pe=p+root_pe, tag=comm_tag_2)
67 miss = miss + buffer_int(1)
68 npts = npts + buffer_int(2)
71 print*,
'Warning: no points is valid'
73 avg = dsum/real(npts, fms_hi_kind_)
80 call mpp_send(buffer_real(1),plen=3,to_pe=root_pe, tag=comm_tag_1)
83 call mpp_send(buffer_int(1), plen=2, to_pe=root_pe, tag=comm_tag_2)
subroutine stats_(dat, area, asum, dsum, wsum, low, high, miss, mask)
This statistics is for conservative scheme.
subroutine mpp_sync_self(pelist, check, request, msg_size, msg_type)
This is to check if current PE's outstanding puts are complete but we can't use shmem_fence because w...