Changeset 13137


Ignore:
Timestamp:
2020-06-22T08:29:57+02:00 (5 months ago)
Author:
smasson
Message:

r4.0-HEAD: fix maxval values on land subdomains for stpctl, see #2456

Location:
NEMO/releases/r4.0/r4.0-HEAD
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/stpctl.F90

    r13116 r13137  
    6666      REAL(wp), DIMENSION(9) ::   zmax, zmaxlocal 
    6767      LOGICAL                ::   ll_wrtstp, ll_colruns, ll_wrtruns 
     68      LOGICAL, DIMENSION(jpi,jpj,jpk) ::   llmsk 
    6869      CHARACTER(len=20) :: clname 
    6970      !!---------------------------------------------------------------------- 
     
    111112      ! 
    112113      !                                   !==  test of extrema  ==! 
     114      ! 
     115      ! define zmax default value. needed for land processors 
     116      IF( ll_colruns ) THEN    ! default value: must not be kept when calling mpp_max -> must be as small as possible 
     117         zmax(:) = -HUGE(1._wp) 
     118      ELSE                     ! default value: must not give true for any of the tests bellow (-> avoid manipulating HUGE...) 
     119         zmax(:) =  0._wp 
     120         zmax(3) = -1._wp      ! avoid salinity minimum at 0. 
     121      ENDIF 
     122      ! 
    113123      IF( ll_wd ) THEN 
    114124         zmax(1) = MAXVAL(  ABS( sshn(:,:) + ssh_ref*tmask(:,:,1) )  )        ! ssh max  
     
    117127      ENDIF 
    118128      zmax(2) = MAXVAL(  ABS( un(:,:,:) )  )                                  ! velocity max (zonal only) 
    119       zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp )   ! minus salinity max 
    120       zmax(4) = MAXVAL(  tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp )   !       salinity max 
    121       IF( ll_colruns .OR. jpnij == 1 ) THEN     ! following variables are used only in the netcdf file 
    122          zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp )   ! minus temperature max 
    123          zmax(6) = MAXVAL(  tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp )   !       temperature max 
    124          IF( ln_zad_Aimp ) THEN 
    125             zmax(8) = MAXVAL(  ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 
    126             zmax(9) = MAXVAL(   Cu_adv(:,:,:)   , mask = tmask(:,:,:) == 1._wp ) ! partitioning coeff. max 
    127          ELSE 
    128             zmax(8:9) = 0._wp 
    129          ENDIF 
    130       ELSE 
    131          zmax(5:9) = 0._wp 
     129      llmsk(:,:,:) = tmask(:,:,:) == 1._wp 
     130      IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN   ! avoid huge values sent back for land processors...       
     131         zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = llmsk )   ! minus salinity max 
     132         zmax(4) = MAXVAL(  tsn(:,:,:,jp_sal) , mask = llmsk )   !       salinity max 
     133         IF( ll_colruns .OR. jpnij == 1 ) THEN     ! following variables are used only in the netcdf file 
     134            zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = llmsk )   ! minus temperature max 
     135            zmax(6) = MAXVAL(  tsn(:,:,:,jp_tem) , mask = llmsk )   !       temperature max 
     136            IF( ln_zad_Aimp ) THEN 
     137               zmax(9) = MAXVAL(   Cu_adv(:,:,:)   , mask = llmsk ) ! partitioning coeff. max 
     138               llmsk(:,:,:) = wmask(:,:,:) == 1._wp 
     139               IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN   ! avoid huge values sent back for land processors... 
     140                  zmax(8) = MAXVAL(  ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 
     141               ENDIF 
     142            ENDIF 
     143         ENDIF 
    132144      ENDIF 
    133145      zmax(7) = REAL( nstop , wp )                                            ! stop indicator 
  • NEMO/releases/r4.0/r4.0-HEAD/tests/CANAL/MY_SRC/stpctl.F90

    r13116 r13137  
    6666      REAL(wp), DIMENSION(9) ::   zmax, zmaxlocal 
    6767      LOGICAL                ::   ll_wrtstp, ll_colruns, ll_wrtruns 
     68      LOGICAL, DIMENSION(jpi,jpj,jpk) ::   llmsk 
    6869      CHARACTER(len=20) :: clname 
    6970      !!---------------------------------------------------------------------- 
     
    111112      ! 
    112113      !                                   !==  test of extrema  ==! 
     114      ! 
     115      ! define zmax default value. needed for land processors 
     116      IF( ll_colruns ) THEN    ! default value: must not be kept when calling mpp_max -> must be as small as possible 
     117         zmax(:) = -HUGE(1._wp) 
     118      ELSE                     ! default value: must not give true for any of the tests bellow (-> avoid manipulating HUGE...) 
     119         zmax(:) =  0._wp 
     120         zmax(3) = -1._wp      ! avoid salinity minimum at 0. 
     121      ENDIF 
     122      ! 
    113123      IF( ll_wd ) THEN 
    114124         zmax(1) = MAXVAL(  ABS( sshn(:,:) + ssh_ref*tmask(:,:,1) )  )        ! ssh max  
     
    117127      ENDIF 
    118128      zmax(2) = MAXVAL(  ABS( un(:,:,:) )  )                                  ! velocity max (zonal only) 
    119       zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp )   ! minus salinity max 
    120       zmax(4) = MAXVAL(  tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp )   !       salinity max 
    121       IF( ll_colruns .OR. jpnij == 1 ) THEN     ! following variables are used only in the netcdf file 
    122          zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp )   ! minus temperature max 
    123          zmax(6) = MAXVAL(  tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp )   !       temperature max 
    124          IF( ln_zad_Aimp ) THEN 
    125             zmax(8) = MAXVAL(  ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 
    126             zmax(9) = MAXVAL(   Cu_adv(:,:,:)   , mask = tmask(:,:,:) == 1._wp ) ! partitioning coeff. max 
    127          ELSE 
    128             zmax(8:9) = 0._wp 
    129          ENDIF 
    130       ELSE 
    131          zmax(5:9) = 0._wp 
     129      llmsk(:,:,:) = tmask(:,:,:) == 1._wp 
     130      IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN   ! avoid huge values sent back for land processors...       
     131         zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = llmsk )   ! minus salinity max 
     132         zmax(4) = MAXVAL(  tsn(:,:,:,jp_sal) , mask = llmsk )   !       salinity max 
     133         IF( ll_colruns .OR. jpnij == 1 ) THEN     ! following variables are used only in the netcdf file 
     134            zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = llmsk )   ! minus temperature max 
     135            zmax(6) = MAXVAL(  tsn(:,:,:,jp_tem) , mask = llmsk )   !       temperature max 
     136            IF( ln_zad_Aimp ) THEN 
     137               zmax(9) = MAXVAL(   Cu_adv(:,:,:)   , mask = llmsk ) ! partitioning coeff. max 
     138               llmsk(:,:,:) = wmask(:,:,:) == 1._wp 
     139               IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN   ! avoid huge values sent back for land processors... 
     140                  zmax(8) = MAXVAL(  ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 
     141               ENDIF 
     142            ENDIF 
     143         ENDIF 
    132144      ENDIF 
    133145      zmax(7) = REAL( nstop , wp )                                            ! stop indicator 
Note: See TracChangeset for help on using the changeset viewer.