This is an older interface for 1-, 2-, or 3-D checksums.
Definition at line 63 of file MOM_checksums.F90.
|
subroutine | chksum1d (array, mesg, start_i, end_i, compare_PEs) |
| chksum1d does a checksum of a 1-dimensional array. More...
|
|
subroutine | chksum2d (array, mesg) |
| chksum2d does a checksum of all data in a 2-d array. More...
|
|
subroutine | chksum3d (array, mesg) |
| chksum3d does a checksum of all data in a 2-d array. More...
|
|
◆ chksum1d()
subroutine mom_checksums::chksum::chksum1d |
( |
real, dimension(:), intent(in) |
array, |
|
|
character(len=*), intent(in) |
mesg, |
|
|
integer, intent(in), optional |
start_i, |
|
|
integer, intent(in), optional |
end_i, |
|
|
logical, intent(in), optional |
compare_PEs |
|
) |
| |
|
private |
chksum1d does a checksum of a 1-dimensional array.
- Parameters
-
[in] | array | The array to be summed (index starts at 1). |
[in] | mesg | An identifying message. |
[in] | start_i | The starting index for the sum (default 1) |
[in] | end_i | The ending index for the sum (default all) |
[in] | compare_pes | If true, compare across PEs instead of summing and list the root_PE value (default true) |
Definition at line 1551 of file MOM_checksums.F90.
1551 real,
dimension(:),
intent(in) :: array
1552 character(len=*),
intent(in) :: mesg
1553 integer,
optional,
intent(in) :: start_i
1554 integer,
optional,
intent(in) :: end_i
1555 logical,
optional,
intent(in) :: compare_PEs
1558 integer :: is, ie, i, bc, sum1, sum_bc
1560 real,
allocatable :: sum_here(:)
1565 is = lbound(array,1) ; ie = ubound(array,1)
1566 if (
present(start_i)) is = start_i
1567 if (
present(end_i)) ie = end_i
1568 compare = .true. ;
if (
present(compare_pes)) compare = compare_pes
1570 sum = 0.0 ; sum_bc = 0
1572 sum = sum + array(i)
1573 bc = bitcount(abs(array(i)))
1574 sum_bc = sum_bc + bc
1577 pe_num = pe_here() + 1 - root_pe() ; npes = num_pes()
1578 allocate(sum_here(npes)) ; sum_here(:) = 0.0 ; sum_here(pe_num) = sum
1579 call sum_across_pes(sum_here,npes)
1582 call sum_across_pes(sum1)
1584 if (.not.compare)
then
1586 do i=1,npes ; sum = sum + sum_here(i) ;
enddo
1588 elseif (is_root_pe())
then
1589 if (sum1 /= npes*sum_bc) &
1590 write(0,
'(A40," bitcounts do not match across PEs: ",I12,1X,I12)') &
1591 mesg, sum1, npes*sum_bc
1592 do i=1,npes ;
if (sum /= sum_here(i))
then
1593 write(0,
'(A40," PE ",i4," sum mismatches root_PE: ",3(ES22.13,1X))') &
1594 mesg, i, sum_here(i), sum, sum_here(i)-sum
1597 deallocate(sum_here)
1600 write(0,
'(A50,1X,ES25.16,1X,I12)') mesg, sum, sum_bc
◆ chksum2d()
subroutine mom_checksums::chksum::chksum2d |
( |
real, dimension(:,:) |
array, |
|
|
character(len=*) |
mesg |
|
) |
| |
|
private |
chksum2d does a checksum of all data in a 2-d array.
- Parameters
-
array | The array to be checksummed |
mesg | An identifying message |
Definition at line 1609 of file MOM_checksums.F90.
1610 real,
dimension(:,:) :: array
1611 character(len=*) :: mesg
1613 integer :: xs,xe,ys,ye,i,j,sum1,bc
1616 xs = lbound(array,1) ; xe = ubound(array,1)
1617 ys = lbound(array,2) ; ye = ubound(array,2)
1619 sum = 0.0 ; sum1 = 0
1620 do i=xs,xe ;
do j=ys,ye
1621 bc = bitcount(abs(array(i,j)))
1624 call sum_across_pes(sum1)
1626 sum = reproducing_sum(array(:,:))
1629 write(0,
'(A50,1X,ES25.16,1X,I12)') mesg, sum, sum1
◆ chksum3d()
subroutine mom_checksums::chksum::chksum3d |
( |
real, dimension(:,:,:) |
array, |
|
|
character(len=*) |
mesg |
|
) |
| |
|
private |
chksum3d does a checksum of all data in a 2-d array.
- Parameters
-
array | The array to be checksummed |
mesg | An identifying message |
Definition at line 1637 of file MOM_checksums.F90.
1638 real,
dimension(:,:,:) :: array
1639 character(len=*) :: mesg
1641 integer :: xs,xe,ys,ye,zs,ze,i,j,k, bc,sum1
1644 xs = lbound(array,1) ; xe = ubound(array,1)
1645 ys = lbound(array,2) ; ye = ubound(array,2)
1646 zs = lbound(array,3) ; ze = ubound(array,3)
1648 sum = 0.0 ; sum1 = 0
1649 do i=xs,xe ;
do j=ys,ye ;
do k=zs,ze
1650 bc = bitcount(abs(array(i,j,k)))
1652 enddo ;
enddo ;
enddo
1654 call sum_across_pes(sum1)
1655 sum = reproducing_sum(array(:,:,:))
1658 write(0,
'(A50,1X,ES25.16,1X,I12)') mesg, sum, sum1
The documentation for this interface was generated from the following file:
- /glade/work/altuntas/cesm.sandboxes/cesm2_2_alpha_X_mom/components/mom/MOM6/src/framework/MOM_checksums.F90