- Timestamp:
- 2019-12-05T18:41:39+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/UKMO_MERGE_2019/src/OCE/ISF/isfutils.F90
r11931 r12077 15 15 USE lib_fortran , ONLY: glob_sum, glob_min, glob_max ! compute global value 16 16 USE par_oce , ONLY: jpi,jpj,jpk ! domain size 17 USE in_out_manager, ONLY: wp, lwp, numout ! miscelenious 17 USE dom_oce , ONLY: nldi, nlei, nldj, nlej ! local domain 18 USE in_out_manager, ONLY: i8, wp, lwp, numout ! miscelenious 19 USE lib_mpp 18 20 19 21 IMPLICIT NONE … … 54 56 !! *** ROUTINE isf_debug2d *** 55 57 !! 56 !! ** Purpose : add debug print 58 !! ** Purpose : add debug print for 2d variables 57 59 !! 58 60 !!-------------------------- IN ------------------------------------- 59 CHARACTER(LEN= 256), INTENT(in ) :: cdtxt61 CHARACTER(LEN=*) , INTENT(in ) :: cdtxt 60 62 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pvar 61 63 !!-------------------------------------------------------------------- 62 REAL(wp) :: zmin, zmax, zsum 64 REAL(wp) :: zmin, zmax, zsum 65 INTEGER(i8) :: imodd, ip 66 INTEGER :: itmps,imods, ji, jj, jk 63 67 !!-------------------------------------------------------------------- 64 68 ! 69 ! global min/max/sum to check data range and NaN 65 70 zsum = glob_sum( 'debug', pvar(:,:) ) 66 71 zmin = glob_min( 'debug', pvar(:,:) ) 67 72 zmax = glob_max( 'debug', pvar(:,:) ) 68 73 ! 69 IF (lwp) WRITE(numout,*) TRIM(cdtxt),' (min, max, sum) : ',zmin, zmax, zsum 74 ! basic check sum to check reproducibility 75 ! TRANSFER function find out the integer corresponding to pvar(i,j) bit pattern 76 ! MOD allow us to keep only the latest digits during the sum 77 ! imod is not choosen to be very large as at the end there is a classic mpp_sum 78 imodd=65521 ! highest prime number < 2**16 with i8 type 79 imods=65521 ! highest prime number < 2**16 with default integer for mpp_sum subroutine 80 itmps=0 81 DO jj=nldj,nlej 82 DO ji=nldi,nlei 83 itmps = MOD(itmps + MOD(TRANSFER(pvar(ji,jj), ip),imodd), imods) 84 END DO 85 END DO 86 CALL mpp_sum('debug',itmps) 70 87 ! 71 CALL FLUSH(numout) 88 ! print out 89 IF (lwp) THEN 90 WRITE(numout,*) TRIM(cdtxt),' (min, max, sum, tag) : ',zmin, zmax, zsum, itmps 91 CALL FLUSH(numout) 92 END IF 72 93 ! 73 94 END SUBROUTINE debug2d … … 77 98 !! *** ROUTINE isf_debug3d *** 78 99 !! 79 !! ** Purpose : add debug print 100 !! ** Purpose : add debug print for 3d variables 80 101 !! 81 102 !!-------------------------- IN ------------------------------------- 82 CHARACTER(LEN= 256), INTENT(in ) :: cdtxt103 CHARACTER(LEN=*) , INTENT(in ) :: cdtxt 83 104 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pvar 84 105 !!-------------------------------------------------------------------- 85 106 REAL(wp) :: zmin, zmax, zsum 107 INTEGER(i8) :: imodd, ip 108 INTEGER :: itmps,imods, ji, jj, jk 86 109 !!-------------------------------------------------------------------- 87 110 ! 111 ! global min/max/sum to check data range and NaN 88 112 zsum = glob_sum( 'debug', pvar(:,:,:) ) 89 113 zmin = glob_min( 'debug', pvar(:,:,:) ) 90 114 zmax = glob_max( 'debug', pvar(:,:,:) ) 91 115 ! 92 IF (lwp) WRITE(numout,*) TRIM(cdtxt),' (min, max, sum) : ',zmin, zmax, zsum 116 ! basic check sum to check reproducibility 117 ! TRANSFER function find out the integer corresponding to pvar(i,j) bit pattern 118 ! MOD allow us to keep only the latest digits during the sum 119 ! imod is not choosen to be very large as at the end there is a classic mpp_sum 120 imodd=65521 ! highest prime number < 2**16 with i8 type 121 imods=65521 ! highest prime number < 2**16 with default integer for mpp_sum subroutine 122 itmps=0 123 DO jk=1,jpk 124 DO jj=nldj,nlej 125 DO ji=nldi,nlei 126 itmps = MOD(itmps + MOD(TRANSFER(pvar(ji,jj,jk), ip),imodd), imods) 127 END DO 128 END DO 129 END DO 130 CALL mpp_sum('debug',itmps) 93 131 ! 94 CALL FLUSH(numout) 132 ! print out 133 IF (lwp) THEN 134 WRITE(numout,*) TRIM(cdtxt),' (min, max, sum, tag) : ',zmin, zmax, zsum, itmps 135 CALL FLUSH(numout) 136 END IF 95 137 ! 96 138 END SUBROUTINE debug3d 97 139 98 140 END MODULE isfutils 99
Note: See TracChangeset
for help on using the changeset viewer.