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 13250 for NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/tests/CANAL/MY_SRC/stpctl.F90 – NEMO

Ignore:
Timestamp:
2020-07-04T12:40:46+02:00 (4 years ago)
Author:
clem
Message:

merge with r4.0-HEAD at r13249

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/tests/CANAL/MY_SRC/stpctl.F90

    r13014 r13250  
    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 ) 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 
     
    200212         ! 
    201213         IF( ll_colruns .or. jpnij == 1 ) THEN   ! all processes synchronized -> use lwp to print in opened ocean.output files 
    202             IF(lwp)   CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 
     214            IF(lwp) THEN   ;   CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 
     215            ELSE           ;   nstop = MAX(1, nstop)   ! make sure nstop > 0 (automatically done when calling ctl_stop) 
     216            ENDIF 
    203217         ELSE                                    ! only mpi subdomains with errors are here -> STOP now 
    204218            CALL ctl_stop( 'STOP', ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 
    205219         ENDIF 
    206220         ! 
    207          IF( nstop == 0 )   nstop = 1  
    208          ngrdstop = Agrif_Fixed() 
    209          ! 
     221      ENDIF 
     222      ! 
     223      IF( nstop > 0 ) THEN                                                  ! an error was detected and we did not abort yet... 
     224         ngrdstop = Agrif_Fixed()                                           ! store which grid got this error 
     225         IF( .NOT. ll_colruns .AND. jpnij > 1 )   CALL ctl_stop( 'STOP' )   ! we must abort here to avoid MPI deadlock 
    210226      ENDIF 
    211227      ! 
Note: See TracChangeset for help on using the changeset viewer.