Changeset 10494


Ignore:
Timestamp:
2019-01-10T12:14:03+01:00 (15 months ago)
Author:
hadjt
Message:

Updated region mean for consistency with noos code - better handling of potential Nans

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/OPA_SRC/DIA/diaregmean.F90

    r10493 r10494  
    730730      ! Local variables 
    731731      INTEGER, DIMENSION(jpi, jpj) :: internal_region_mask    ! Input 3d field and mask  
     732      REAL(wp), DIMENSION(jpi, jpj) :: internal_infield    ! Internal data field 
    732733      REAL(wp), ALLOCATABLE, DIMENSION(:) ::   zrmet_ave,zrmet_tot,zrmet_var,zrmet_cnt,zrmet_mask_id,zrmet_reg_id  ,zrmet_min,zrmet_max 
    733734      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zrmet_out 
     
    744745      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   dummy_zrmet 
    745746      LOGICAL       ::   verbose      
    746       verbose = .FALSE. 
     747      verbose = .False. 
    747748 
    748749 
     
    772773        IF( ierr /= 0 )   CALL ctl_stop( 'dia_wri_region_mean: failed to allocate zrmet_reg_id array' ) 
    773774 
    774  
     775   
    775776       
    776777        IF(lwp .AND. verbose) THEN  
     
    779780              WRITE(numout,*) 
    780781        ENDIF 
     782         
     783      DO ji = 1,jpi 
     784          DO jj = 1,jpj 
     785            internal_infield(ji,jj) = infield(ji,jj) 
     786          END DO 
     787      END DO 
     788         
     789      ! Check for NANS # JT   03/09/2018 
     790      DO ji = 1,jpi 
     791          DO jj = 1,jpj 
     792              IF ( tmask(ji,jj,1) == 1.0_wp ) THEN 
     793                  IF ( internal_infield(ji,jj) .ne. internal_infield(ji,jj) ) THEN 
     794                      WRITE(numout,*) 'dia_wri_region_mean : '//tmp_name//' Nan at (kt,i,j): ',kt,ji - (-jpizoom+1-nimpp+1),jj - (-jpjzoom+1-njmpp+1) 
     795                      internal_infield(ji,jj) = 0. 
     796                  ENDIF 
     797              ELSE                 
     798                  IF ( internal_infield(ji,jj) .ne. internal_infield(ji,jj) ) THEN 
     799                      WRITE(numout,*) 'dia_wri_region_mean : '//tmp_name//' Masked Nan at (kt,i,j): ',kt,ji - (-jpizoom+1-nimpp+1),jj - (-jpjzoom+1-njmpp+1) 
     800                      internal_infield(ji,jj) = 0. 
     801                  ENDIF 
     802              ENDIF 
     803          END DO 
     804      END DO 
     805       
    781806       
    782807      zrmet_ave(:) = zmdi 
     
    849874                    IF ( tmask(ji,jj,1) == 1.0_wp ) THEN 
    850875                        ind = internal_region_mask(ji,jj)+1 
    851                         tot_mat(ind) = tot_mat(ind) + (infield(ji,jj)) 
    852                         ssq_mat(ind) = ssq_mat(ind) + ( infield(ji,jj) *  infield(ji,jj)) 
     876                        tot_mat(ind) = tot_mat(ind) + (internal_infield(ji,jj)) 
     877                        ssq_mat(ind) = ssq_mat(ind) + ( internal_infield(ji,jj) *  internal_infield(ji,jj)) 
    853878                        cnt_mat(ind) = cnt_mat(ind) + 1. 
    854879 
    855                         min_mat(ind) = min(min_mat(ind),infield(ji,jj)) 
    856                         max_mat(ind) = max(max_mat(ind),infield(ji,jj)) 
     880                        min_mat(ind) = min(min_mat(ind),internal_infield(ji,jj)) 
     881                        max_mat(ind) = max(max_mat(ind),internal_infield(ji,jj)) 
    857882                    ENDIF 
    858883              END DO 
     
    963988!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    964989!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    965 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     990            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    966991            zrmet_out(:,:,jm) = zrmet_val 
    967992          END DO       
     
    9771002!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    9781003!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    979 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     1004            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    9801005            zrmet_out(:,:,jm) = zrmet_val 
    9811006          END DO 
     
    9911016!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    9921017!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    993 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     1018            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    9941019            zrmet_out(:,:,jm) = zrmet_val 
    9951020          END DO 
     
    10051030!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    10061031!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    1007 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     1032            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    10081033            zrmet_out(:,:,jm) = zrmet_val 
    10091034          END DO 
     
    10191044!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    10201045!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    1021 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     1046            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    10221047            zrmet_out(:,:,jm) = zrmet_val 
    10231048          END DO 
     
    10331058!            if (zrmet_val .LT. -1e16) zrmet_val = -1e16 
    10341059!            if (zrmet_val .GT. 1e16) zrmet_val = 1e16 
    1035 !            if (zrmet_val .NE. zrmet_val) zrmet_val = 0. 
     1060            if (zrmet_val .NE. zrmet_val) zrmet_val = 1e20 
    10361061            zrmet_out(:,:,jm) = zrmet_val 
    10371062          END DO 
Note: See TracChangeset for help on using the changeset viewer.