New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 12077 for NEMO/branches/2019/UKMO_MERGE_2019/src/OCE/ISF/isfutils.F90 – NEMO

Ignore:
Timestamp:
2019-12-05T18:41:39+01:00 (4 years ago)
Author:
mathiot
Message:

include ENHANCE-02_ISF_nemo in UKMO merge branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/UKMO_MERGE_2019/src/OCE/ISF/isfutils.F90

    r11931 r12077  
    1515   USE lib_fortran   , ONLY: glob_sum, glob_min, glob_max             ! compute global value 
    1616   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 
    1820 
    1921   IMPLICIT NONE 
     
    5456      !!                  ***  ROUTINE isf_debug2d  *** 
    5557      !! 
    56       !! ** Purpose : add debug print 
     58      !! ** Purpose : add debug print for 2d variables 
    5759      !! 
    5860      !!-------------------------- IN  ------------------------------------- 
    59       CHARACTER(LEN=256)          , INTENT(in   ) :: cdtxt 
     61      CHARACTER(LEN=*)            , INTENT(in   ) :: cdtxt 
    6062      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pvar 
    6163      !!-------------------------------------------------------------------- 
    62       REAL(wp) :: zmin, zmax, zsum 
     64      REAL(wp)    :: zmin, zmax, zsum 
     65      INTEGER(i8) :: imodd, ip 
     66      INTEGER     :: itmps,imods, ji, jj, jk 
    6367      !!-------------------------------------------------------------------- 
    6468      ! 
     69      ! global min/max/sum to check data range and NaN 
    6570      zsum = glob_sum( 'debug', pvar(:,:) ) 
    6671      zmin = glob_min( 'debug', pvar(:,:) ) 
    6772      zmax = glob_max( 'debug', pvar(:,:) ) 
    6873      ! 
    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) 
    7087      ! 
    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 
    7293      ! 
    7394   END SUBROUTINE debug2d 
     
    7798      !!                  ***  ROUTINE isf_debug3d  *** 
    7899      !! 
    79       !! ** Purpose : add debug print 
     100      !! ** Purpose : add debug print for 3d variables 
    80101      !! 
    81102      !!-------------------------- IN  ------------------------------------- 
    82       CHARACTER(LEN=256)              , INTENT(in   ) :: cdtxt 
     103      CHARACTER(LEN=*)                , INTENT(in   ) :: cdtxt 
    83104      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) :: pvar 
    84105      !!-------------------------------------------------------------------- 
    85106      REAL(wp) :: zmin, zmax, zsum 
     107      INTEGER(i8) :: imodd, ip 
     108      INTEGER     :: itmps,imods, ji, jj, jk 
    86109      !!-------------------------------------------------------------------- 
    87110      ! 
     111      ! global min/max/sum to check data range and NaN 
    88112      zsum = glob_sum( 'debug', pvar(:,:,:) ) 
    89113      zmin = glob_min( 'debug', pvar(:,:,:) ) 
    90114      zmax = glob_max( 'debug', pvar(:,:,:) ) 
    91115      ! 
    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) 
    93131      ! 
    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 
    95137      ! 
    96138   END SUBROUTINE debug3d 
    97139 
    98140END MODULE isfutils 
    99  
Note: See TracChangeset for help on using the changeset viewer.