Changeset 13250


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

merge with r4.0-HEAD at r13249

Location:
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/cfgs/AGRIF_DEMO/EXPREF/1_namelist_cfg

    r12206 r13250  
    353353&namzdf_tke    !   turbulent eddy kinetic dependent vertical diffusion  (ln_zdftke =T) 
    354354!----------------------------------------------------------------------- 
    355       rn_eice     =   0       !  below sea ice: =0 ON ; =4 OFF when ice fraction > 1/4    
    356355/ 
    357356!!====================================================================== 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/C1D/step_c1d.F90

    r12955 r13250  
    8383      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    8484                         CALL dia_wri( kstp )       ! ocean model: outputs 
    85       IF( lk_diahth  )   CALL dia_hth( kstp )       ! Thermocline depth (20°C) 
     85                         CALL dia_hth( kstp )       ! Thermocline depth (20 degres isotherm depth) 
    8686 
    8787 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DIA/diaar5.F90

    r12631 r13250  
    7676      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     :: zarea_ssh , zbotpres       ! 2D workspace  
    7777      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     :: zpe, z2d                   ! 2D workspace  
    78       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   :: zrhd , zrhop, ztpot   ! 3D workspace 
     78      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   :: zrhd , ztpot               ! 3D workspace 
    7979      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztsn                       ! 4D workspace 
    8080 
     
    8686      IF( l_ar5 ) THEN  
    8787         ALLOCATE( zarea_ssh(jpi,jpj), zbotpres(jpi,jpj), z2d(jpi,jpj) ) 
    88          ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk) ) 
     88         ALLOCATE( zrhd(jpi,jpj,jpk) ) 
    8989         ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 
    9090         zarea_ssh(:,:) = e1e2t(:,:) * sshn(:,:) 
     
    156156       
    157157         !                                         ! steric sea surface height 
    158          CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) )                 ! now in situ and potential density 
    159          zrhop(:,:,jpk) = 0._wp 
    160          CALL iom_put( 'rhop', zrhop ) 
    161          ! 
    162158         zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
    163159         DO jk = 1, jpkm1 
    164             zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
     160            zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * rhd(:,:,jk) 
    165161         END DO 
    166162         IF( ln_linssh ) THEN 
     
    169165                  DO jj = 1,jpj 
    170166                     iks = mikt(ji,jj) 
    171                      zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj) 
     167                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * rhd(ji,jj,iks) + riceload(ji,jj) 
    172168                  END DO 
    173169               END DO 
    174170            ELSE 
    175                zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     171               zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * rhd(:,:,1) 
    176172            END IF 
    177173         END IF 
     
    310306      IF( l_ar5 ) THEN 
    311307        DEALLOCATE( zarea_ssh , zbotpres, z2d ) 
    312         DEALLOCATE( zrhd      , zrhop    ) 
    313         DEALLOCATE( ztsn                 ) 
     308        DEALLOCATE( zrhd      ) 
     309        DEALLOCATE( ztsn      ) 
    314310      ENDIF 
    315311      ! 
     
    392388      IF(   iom_use( 'voltot'  ) .OR. iom_use( 'sshtot'    )  .OR. iom_use( 'sshdyn' )  .OR.  &  
    393389         &  iom_use( 'masstot' ) .OR. iom_use( 'temptot'   )  .OR. iom_use( 'saltot' ) .OR.  &     
    394          &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) L_ar5 = .TRUE. 
     390         &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' ) .OR. & 
     391         &  iom_use( 'rhop' )  ) L_ar5 = .TRUE. 
    395392   
    396393      IF( l_ar5 ) THEN 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DIA/diawri.F90

    r12494 r13250  
    167167         CALL iom_put( "sbs", z2d )                ! bottom salinity 
    168168      ENDIF 
     169 
     170      CALL iom_put( "rhop", rhop(:,:,:) )          ! 3D potential density (sigma0) 
    169171 
    170172      IF ( iom_use("taubot") ) THEN                ! bottom stress 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DOM/istate.F90

    r10499 r13250  
    2424   USE dom_oce        ! ocean space and time domain  
    2525   USE daymod         ! calendar 
    26    USE divhor         ! horizontal divergence            (div_hor routine) 
    2726   USE dtatsd         ! data temperature and salinity   (dta_tsd routine) 
    2827   USE dtauvd         ! data: U & V current             (dta_uvd routine) 
     
    123122         un   (:,:,:)   = ub  (:,:,:) 
    124123         vn   (:,:,:)   = vb  (:,:,:) 
    125          hdivn(:,:,jpk) = 0._wp               ! bottom divergence set one for 0 to zero at jpk level 
    126          CALL div_hor( 0 )                    ! compute interior hdivn value   
    127 !!gm                                    hdivn(:,:,:) = 0._wp 
    128124 
    129125!!gm POTENTIAL BUG : 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DYN/dynhpg.F90

    r11536 r13250  
    10271027      DO jj = 1, jpj 
    10281028        DO ji = 1, jpi 
    1029           jk = mbkt(ji,jj)+1 
    1030           IF(     jk <=  0   ) THEN   ;   zrhh(ji,jj,    :   ) = 0._wp 
    1031           ELSEIF( jk ==  1   ) THEN   ;   zrhh(ji,jj,jk+1:jpk) = rhd(ji,jj,jk) 
     1029          jk = mbkt(ji,jj) 
     1030          IF(     jk <=  1   ) THEN   ;   zrhh(ji,jj,    :   ) = 0._wp 
     1031          ELSEIF( jk ==  2   ) THEN   ;   zrhh(ji,jj,jk+1:jpk) = rhd(ji,jj,jk) 
    10321032          ELSEIF( jk < jpkm1 ) THEN 
    10331033             DO jkk = jk+1, jpk 
    10341034                zrhh(ji,jj,jkk) = interp1(gde3w_n(ji,jj,jkk  ), gde3w_n(ji,jj,jkk-1),   & 
    1035                    &                      gde3w_n(ji,jj,jkk-2), rhd    (ji,jj,jkk-1), rhd(ji,jj,jkk-2)) 
     1035                   &                      gde3w_n(ji,jj,jkk-2), zrhh    (ji,jj,jkk-1), zrhh(ji,jj,jkk-2)) 
    10361036             END DO 
    10371037          ENDIF 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/ICB/icbrst.F90

    r11536 r13250  
    189189      ! 
    190190      INTEGER ::   jn   ! dummy loop index 
     191      INTEGER ::   idg  ! number of digits 
    191192      INTEGER ::   ix_dim, iy_dim, ik_dim, in_dim 
    192193      CHARACTER(len=256)     :: cl_path 
    193194      CHARACTER(len=256)     :: cl_filename 
     195      CHARACTER(len=8  )     :: cl_kt 
     196      CHARACTER(LEN=12 )     :: clfmt            ! writing format 
    194197      TYPE(iceberg), POINTER :: this 
    195198      TYPE(point)  , POINTER :: pt 
     
    206209         cl_path = TRIM(cn_ocerst_outdir) 
    207210         IF( cl_path(LEN_TRIM(cl_path):) /= '/' ) cl_path = TRIM(cl_path) // '/' 
     211         WRITE(cl_kt, '(i8.8)') kt 
     212         cl_filename = TRIM(cexper)//"_icebergs_"//cl_kt//"_restart" 
    208213         IF( lk_mpp ) THEN 
    209             WRITE(cl_filename,'(A,"_icebergs_",I8.8,"_restart_",I4.4,".nc")') TRIM(cexper), kt, narea-1 
     214            idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 )          ! how many digits to we need to write? min=4, max=9 
     215            WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg          ! '(a,a,ix.x,a)' 
     216            WRITE(cl_filename,  clfmt) TRIM(cl_filename), '_', narea-1, '.nc' 
    210217         ELSE 
    211             WRITE(cl_filename,'(A,"_icebergs_",I8.8,"_restart.nc")') TRIM(cexper), kt 
     218            WRITE(cl_filename,'(a,a)') TRIM(cl_filename),               '.nc' 
    212219         ENDIF 
    213220         IF ( lwp .AND. nn_verbose_level >= 0) WRITE(numout,'(2a)') 'icebergs, write_restart: creating ',  & 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/ICB/icbtrj.F90

    r10068 r13250  
    6262      ! 
    6363      INTEGER                ::   iret, iyear, imonth, iday 
     64      INTEGER                ::   idg  ! number of digits 
    6465      REAL(wp)               ::   zfjulday, zsec 
    6566      CHARACTER(len=80)      ::   cl_filename 
    66       CHARACTER(LEN=20)      ::   cldate_ini, cldate_end 
     67      CHARACTER(LEN=8 )      ::   cldate_ini, cldate_end 
     68      CHARACTER(LEN=12)      ::   clfmt            ! writing format 
    6769      TYPE(iceberg), POINTER ::   this 
    6870      TYPE(point)  , POINTER ::   pt 
     
    8082 
    8183      ! define trajectory output name 
    82       IF ( lk_mpp ) THEN   ;   WRITE(cl_filename,'("trajectory_icebergs_",A,"-",A,"_",I4.4,".nc")')   & 
    83          &                        TRIM(ADJUSTL(cldate_ini)), TRIM(ADJUSTL(cldate_end)), narea-1 
    84       ELSE                 ;   WRITE(cl_filename,'("trajectory_icebergs_",A,"-",A         ,".nc")')   & 
    85          &                        TRIM(ADJUSTL(cldate_ini)), TRIM(ADJUSTL(cldate_end)) 
     84      cl_filename = 'trajectory_icebergs_'//cldate_ini//'-'//cldate_end 
     85      IF ( lk_mpp ) THEN 
     86         idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 )          ! how many digits to we need to write? min=4, max=9 
     87         WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg          ! '(a,a,ix.x,a)' 
     88         WRITE(cl_filename,  clfmt) TRIM(cl_filename), '_', narea-1, '.nc' 
     89      ELSE 
     90         WRITE(cl_filename,'(a,a)') TRIM(cl_filename),               '.nc' 
    8691      ENDIF 
    8792      IF( lwp .AND. nn_verbose_level >= 0 )   WRITE(numout,'(2a)') 'icebergs, icb_trj_init: creating ',TRIM(cl_filename) 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/IOM/iom_def.F90

    r10425 r13250  
    3333   INTEGER, PARAMETER, PUBLIC ::   jpmax_vars   = 1200 !: maximum number of variables in one file 
    3434   INTEGER, PARAMETER, PUBLIC ::   jpmax_dims   =  4   !: maximum number of dimensions for one variable 
    35    INTEGER, PARAMETER, PUBLIC ::   jpmax_digits =  5   !: maximum number of digits for the cpu number in the file name 
     35   INTEGER, PARAMETER, PUBLIC ::   jpmax_digits =  9   !: maximum number of digits for the cpu number in the file name 
    3636 
    3737 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/IOM/iom_nf90.F90

    r11536 r13250  
    6060      CHARACTER(LEN=256) ::   clinfo           ! info character 
    6161      CHARACTER(LEN=256) ::   cltmp            ! temporary character 
     62      CHARACTER(LEN=12 ) ::   clfmt            ! writing format 
     63      INTEGER            ::   idg              ! number of digits 
    6264      INTEGER            ::   iln              ! lengths of character 
    6365      INTEGER            ::   istop            ! temporary storage of nstop 
     
    6971      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7072      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
    71       INTEGER            ::   ilevels           ! vertical levels 
     73      INTEGER            ::   ilevels          ! vertical levels 
    7274      !--------------------------------------------------------------------- 
    7375      ! 
     
    104106         IF( ldwrt ) THEN              !* the file should be open in write mode so we create it... 
    105107            IF( jpnij > 1 ) THEN 
    106                WRITE(cltmp,'(a,a,i4.4,a)') cdname(1:iln-1), '_', narea-1, '.nc' 
     108               idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 )          ! how many digits to we need to write? min=4, max=9 
     109               WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg          ! '(a,a,ix.x,a)' 
     110               WRITE(cltmp,clfmt) cdname(1:iln-1), '_', narea-1, '.nc' 
    107111               cdname = TRIM(cltmp) 
    108112            ENDIF 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/LBC/lib_mpp.F90

    r13014 r13250  
    11901190      ! 
    11911191      CHARACTER(len=80) ::   clfile 
     1192      CHARACTER(LEN=10) ::   clfmt            ! writing format 
    11921193      INTEGER           ::   iost 
     1194      INTEGER           ::   idg              ! number of digits 
    11931195      !!---------------------------------------------------------------------- 
    11941196      ! 
     
    11971199      clfile = TRIM(cdfile) 
    11981200      IF( PRESENT( karea ) ) THEN 
    1199          IF( karea > 1 )   WRITE(clfile, "(a,'_',i4.4)") TRIM(clfile), karea-1 
     1201         IF( karea > 1 ) THEN 
     1202            ! Warning: jpnij is maybe not already defined when calling ctl_opn -> use mppsize instead of jpnij 
     1203            idg = MAX( INT(LOG10(REAL(MAX(1,mppsize-1),wp))) + 1, 4 )      ! how many digits to we need to write? min=4, max=9 
     1204            WRITE(clfmt, "('(a,a,i', i1, '.', i1, ')')") idg, idg          ! '(a,a,ix.x)' 
     1205            WRITE(clfile, clfmt) TRIM(clfile), '_', karea-1 
     1206         ENDIF 
    12001207      ENDIF 
    12011208#if defined key_agrif 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/SBC/sbccpl.F90

    r13004 r13250  
    18551855            ENDDO 
    18561856         ELSE 
    1857             qns_tot(:,:) = qns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
     1857            zqns_tot(:,:) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    18581858            DO jl = 1, jpl 
    1859                zqns_tot(:,:   ) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    18601859               zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
    18611860            END DO 
     
    19991998            END DO 
    20001999         ELSE 
    2001             qsr_tot(:,:   ) = qsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
     2000            zqsr_tot(:,:) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    20022001            DO jl = 1, jpl 
    2003                zqsr_tot(:,:   ) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    20042002               zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
    20052003            END DO 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/TRD/trdtra.F90

    r10425 r13250  
    8181      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   ptra    ! now tracer variable 
    8282      ! 
    83       INTEGER ::   jk   ! loop indices 
     83      INTEGER ::   jk    ! loop indices 
     84      INTEGER ::   i01   ! 0 or 1 
    8485      REAL(wp),        DIMENSION(jpi,jpj,jpk) ::   ztrds             ! 3D workspace 
    8586      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zwt, zws, ztrdt   ! 3D workspace 
     
    8990         IF( trd_tra_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trd_tra : unable to allocate arrays' ) 
    9091      ENDIF 
    91  
     92      ! 
     93      i01 = COUNT( (/ PRESENT(pun) .OR. ( ktrd /= jptra_xad .AND. ktrd /= jptra_yad .AND. ktrd /= jptra_zad ) /) ) 
     94      ! 
    9295      IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN   !==  Temperature trend  ==! 
    9396         ! 
    94          SELECT CASE( ktrd ) 
     97         SELECT CASE( ktrd*i01 ) 
    9598         !                            ! advection: transform the advective flux into a trend 
    9699         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx )  
     
    111114      IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN      !==  Salinity trends  ==! 
    112115         ! 
    113          SELECT CASE( ktrd ) 
     116         SELECT CASE( ktrd*i01 ) 
    114117         !                            ! advection: transform the advective flux into a trend 
    115118         !                            !            and send T & S trends to trd_tra_mng 
     
    162165      IF( ctype == 'TRC' ) THEN                           !==  passive tracer trend  ==! 
    163166         ! 
    164          SELECT CASE( ktrd ) 
     167         SELECT CASE( ktrd*i01 ) 
    165168         !                            ! advection: transform the advective flux into a masked trend 
    166169         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds )  
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/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      ! 
  • 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.