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 13710 for NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OFF – NEMO

Ignore:
Timestamp:
2020-11-02T10:56:42+01:00 (4 years ago)
Author:
emanuelaclementi
Message:

branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves: merge with trunk@13708, see #2155 and #2339

Location:
NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OFF/dtadyn.F90

    r12489 r13710  
    2323   USE c1d             ! 1D configuration: lk_c1d 
    2424   USE dom_oce         ! ocean domain: variables 
     25#if ! defined key_qco  
    2526   USE domvvl          ! variable volume 
     27#else 
     28   USE domqco 
     29#endif 
    2630   USE zdf_oce         ! ocean vertical physics: variables 
    2731   USE sbc_oce         ! surface module: variables 
     
    5256   PUBLIC   dta_dyn_sed        ! called by nemo_gcm 
    5357   PUBLIC   dta_dyn_atf        ! called by nemo_gcm 
     58#if ! defined key_qco 
    5459   PUBLIC   dta_dyn_sf_interp  ! called by nemo_gcm 
     60#endif 
    5561 
    5662   CHARACTER(len=100) ::   cn_dir          !: Root directory for location of ssr files 
     
    6571   INTEGER  , SAVE      ::   jf_uwd         ! index of u-transport 
    6672   INTEGER  , SAVE      ::   jf_vwd         ! index of v-transport 
    67    INTEGER  , SAVE      ::   jf_wwd         ! index of v-transport 
     73   INTEGER  , SAVE      ::   jf_wwd         ! index of w-transport 
    6874   INTEGER  , SAVE      ::   jf_avt         ! index of Kz 
    6975   INTEGER  , SAVE      ::   jf_mld         ! index of mixed layer deptht 
     
    122128      ! 
    123129      IF( kt == nit000 ) THEN    ;    nprevrec = 0 
    124       ELSE                       ;    nprevrec = sf_dyn(jf_tem)%nrec_a(2) 
     130      ELSE                       ;    nprevrec = sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%naa) 
    125131      ENDIF 
    126132      CALL fld_read( kt, 1, sf_dyn )      !=  read data at kt time step   ==! 
     
    149155         emp_b  (:,:)   = sf_dyn(jf_empb)%fnow(:,:,1) * tmask(:,:,1)    ! E-P 
    150156         zemp   (:,:)   = ( 0.5_wp * ( emp(:,:) + emp_b(:,:) ) + rnf(:,:) + fwbcorr ) * tmask(:,:,1) 
    151          CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) )  !=  ssh, vertical scale factor & vertical transport 
     157#if defined key_qco 
     158         CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa) ) 
     159         CALL dom_qco_r3c( ssh(:,:,Kaa), r3t(:,:,Kaa), r3u(:,:,Kaa), r3v(:,:,Kaa) ) 
     160#else 
     161         CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) )  !=  ssh, vertical scale factor 
     162#endif 
    152163         DEALLOCATE( zemp , zhdivtr ) 
    153164         !                                           Write in the tracer restart file 
     
    283294      !                                         ! fill sf with slf_i and control print 
    284295      CALL fld_fill( sf_dyn, slf_d, cn_dir, 'dta_dyn_init', 'Data in file', 'namdta_dyn' ) 
     296      sf_dyn(jf_uwd)%cltype = 'U'   ;   sf_dyn(jf_uwd)%zsgn = -1._wp   
     297      sf_dyn(jf_vwd)%cltype = 'V'   ;   sf_dyn(jf_vwd)%zsgn = -1._wp   
     298      ! 
     299      IF( ln_trabbl ) THEN 
     300         sf_dyn(jf_ubl)%cltype = 'U'   ;   sf_dyn(jf_ubl)%zsgn =  1._wp   
     301         sf_dyn(jf_vbl)%cltype = 'V'   ;   sf_dyn(jf_vbl)%zsgn =  1._wp   
     302      END IF 
    285303      ! 
    286304      ! Open file for each variable to get his number of dimension 
     
    319337           iom_varid( numrtr, 'sshn', ldstop = .FALSE. ) > 0 ) THEN 
    320338           IF(lwp) WRITE(numout,*) ' ssh(:,:,Kmm) forcing fields read in the restart file for initialisation' 
    321            CALL iom_get( numrtr, jpdom_autoglo, 'sshn', ssh(:,:,Kmm)   ) 
    322            CALL iom_get( numrtr, jpdom_autoglo, 'sshb', ssh(:,:,Kbb)   ) 
     339           CALL iom_get( numrtr, jpdom_auto, 'sshn', ssh(:,:,Kmm)   ) 
     340           CALL iom_get( numrtr, jpdom_auto, 'sshb', ssh(:,:,Kbb)   ) 
    323341        ELSE 
    324342           IF(lwp) WRITE(numout,*) ' ssh(:,:,Kmm) forcing fields read in the restart file for initialisation' 
    325343           CALL iom_open( 'restart', inum ) 
    326            CALL iom_get( inum, jpdom_autoglo, 'sshn', ssh(:,:,Kmm)   ) 
    327            CALL iom_get( inum, jpdom_autoglo, 'sshb', ssh(:,:,Kbb)   ) 
     344           CALL iom_get( inum, jpdom_auto, 'sshn', ssh(:,:,Kmm)   ) 
     345           CALL iom_get( inum, jpdom_auto, 'sshb', ssh(:,:,Kbb)   ) 
    328346           CALL iom_close( inum )                                        ! close file 
    329347        ENDIF 
    330348        ! 
     349#if defined key_qco 
     350        CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) ) 
     351        CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) ) 
     352#else 
    331353        DO jk = 1, jpkm1 
    332            e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 
     354           e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * r1_ht_0(:,:) * tmask(:,:,jk) ) 
    333355        ENDDO 
    334356        e3t(:,:,jpk,Kaa) = e3t_0(:,:,jpk) 
     
    342364        ! ------------------------------------ 
    343365        CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w(:,:,:,Kmm), 'W' ) 
    344    
     366!!gm this should be computed from ssh(Kbb)   
    345367        e3t(:,:,:,Kbb)  = e3t(:,:,:,Kmm) 
    346368        e3u(:,:,:,Kbb)  = e3u(:,:,:,Kmm) 
     
    352374        gdepw(:,:,1,Kmm) = 0.0_wp 
    353375 
    354         DO_3D_11_11( 2, jpk ) 
     376        DO_3D( 1, 1, 1, 1, 2, jpk ) 
    355377          !    zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk))   ! 0 everywhere 
    356378          !    tmask = wmask, ie everywhere expect at jk = mikt 
     
    367389        ! 
    368390      ENDIF 
     391#endif 
    369392      ! 
    370393      IF( ln_dynrnf .AND. ln_dynrnf_depth ) THEN       ! read depht over which runoffs are distributed 
     
    372395         IF(lwp) WRITE(numout,*) ' read in the file depht over which runoffs are distributed' 
    373396         CALL iom_open ( "runoffs", inum )                           ! open file 
    374          CALL iom_get  ( inum, jpdom_data, 'rodepth', h_rnf )   ! read the river mouth array 
     397         CALL iom_get  ( inum, jpdom_global, 'rodepth', h_rnf )   ! read the river mouth array 
    375398         CALL iom_close( inum )                                        ! close file 
    376399         ! 
    377400         nk_rnf(:,:) = 0                               ! set the number of level over which river runoffs are applied 
    378          DO_2D_11_11 
     401         DO_2D( 1, 1, 1, 1 ) 
    379402            IF( h_rnf(ji,jj) > 0._wp ) THEN 
    380403               jk = 2 
     
    389412            ENDIF 
    390413         END_2D 
    391          DO_2D_11_11 
     414         DO_2D( 1, 1, 1, 1 )                           ! set the associated depth 
    392415            h_rnf(ji,jj) = 0._wp 
    393416            DO jk = 1, nk_rnf(ji,jj) 
     
    413436   END SUBROUTINE dta_dyn_init 
    414437 
     438    
    415439   SUBROUTINE dta_dyn_sed( kt, Kmm ) 
    416440      !!---------------------------------------------------------------------- 
     
    434458      ! 
    435459      IF( kt == nit000 ) THEN    ;    nprevrec = 0 
    436       ELSE                       ;    nprevrec = sf_dyn(jf_tem)%nrec_a(2) 
     460      ELSE                       ;    nprevrec = sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%naa) 
    437461      ENDIF 
    438462      CALL fld_read( kt, 1, sf_dyn )      !=  read data at kt time step   ==! 
     
    529553   END SUBROUTINE dta_dyn_sed_init 
    530554 
     555    
    531556   SUBROUTINE dta_dyn_atf( kt, Kbb, Kmm, Kaa ) 
    532557     !!--------------------------------------------------------------------- 
     
    552577   END SUBROUTINE dta_dyn_atf 
    553578    
     579    
     580#if ! defined key_qco     
    554581   SUBROUTINE dta_dyn_sf_interp( kt, Kmm ) 
    555582      !!--------------------------------------------------------------------- 
     
    580607      gdepw(:,:,1,Kmm) = 0.0_wp 
    581608      ! 
    582       DO_3D_11_11( 2, jpk ) 
     609      DO_3D( 1, 1, 1, 1, 2, jpk ) 
    583610         zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    584611         gdepw(ji,jj,jk,Kmm) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm) 
     
    588615      ! 
    589616   END SUBROUTINE dta_dyn_sf_interp 
     617#endif 
     618 
    590619 
    591620   SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb,  pemp, pssha, pe3ta ) 
     
    606635      !!          The boundary conditions are w=0 at the bottom (no flux) 
    607636      !! 
    608       !! ** action  :   ssh(:,:,Kaa) / e3t(:,:,:,Kaa) / ww 
     637      !! ** action  :   ssh(:,:,Kaa) / e3t(:,:,k,Kaa) / ww 
    609638      !! 
    610639      !! Reference  : Leclair, M., and G. Madec, 2009, Ocean Modelling. 
     
    630659      !                                                ! Sea surface  elevation time-stepping 
    631660      pssha(:,:) = ( psshb(:,:) - z2dt * ( r1_rho0 * pemp(:,:)  + zhdiv(:,:) ) ) * ssmask(:,:) 
    632       !                                                 !  
    633       !                                                 ! After acale factors at t-points ( z_star coordinate ) 
     661      ! 
     662      IF( PRESENT( pe3ta ) ) THEN                      ! After acale factors at t-points ( z_star coordinate ) 
    634663      DO jk = 1, jpkm1 
    635         pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 
     664            pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * r1_ht_0(:,:) * tmask(:,:,jk) ) 
    636665      END DO 
     666      ENDIF 
    637667      ! 
    638668   END SUBROUTINE dta_dyn_ssh 
     
    657687      !!---------------------------------------------------------------------- 
    658688      ! 
    659       DO_2D_11_11 
     689      DO_2D( 1, 1, 1, 1 )               ! update the depth over which runoffs are distributed 
    660690         h_rnf(ji,jj) = 0._wp 
    661691         DO jk = 1, nk_rnf(ji,jj)                           ! recalculates h_rnf to be the depth in metres 
     
    686716      !!--------------------------------------------------------------------- 
    687717      ! 
    688       IF( sf_dyn(jf_tem)%ln_tint ) THEN    ! Computes slopes (here avt is used as workspace)                        
     718      IF( sf_dyn(jf_tem)%ln_tint ) THEN    ! Computes slopes (here avt is used as workspace) 
     719         ! 
    689720         IF( kt == nit000 ) THEN 
    690721            IF(lwp) WRITE(numout,*) ' Compute new slopes at kt = ', kt 
    691             zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,1) * tmask(:,:,:)   ! temperature 
    692             zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,1) * tmask(:,:,:)   ! salinity  
    693             avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,1) * tmask(:,:,:)   ! vertical diffusive coef. 
     722            zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,sf_dyn(jf_tem)%nbb) * tmask(:,:,:)   ! temperature 
     723            zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,sf_dyn(jf_sal)%nbb) * tmask(:,:,:)   ! salinity  
     724            avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,sf_dyn(jf_avt)%nbb) * tmask(:,:,:)   ! vertical diffusive coef. 
    694725            CALL compute_slopes( kt, zts, zuslp, zvslp, zwslpi, zwslpj, Kbb, Kmm ) 
    695726            uslpdta (:,:,:,1) = zuslp (:,:,:)  
     
    698729            wslpjdta(:,:,:,1) = zwslpj(:,:,:)  
    699730            ! 
    700             zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,2) * tmask(:,:,:)   ! temperature 
    701             zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,2) * tmask(:,:,:)   ! salinity  
    702             avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,2) * tmask(:,:,:)   ! vertical diffusive coef. 
     731            zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,sf_dyn(jf_tem)%naa) * tmask(:,:,:)   ! temperature 
     732            zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,sf_dyn(jf_sal)%naa) * tmask(:,:,:)   ! salinity  
     733            avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,sf_dyn(jf_avt)%naa) * tmask(:,:,:)   ! vertical diffusive coef. 
    703734            CALL compute_slopes( kt, zts, zuslp, zvslp, zwslpi, zwslpj, Kbb, Kmm ) 
    704735            uslpdta (:,:,:,2) = zuslp (:,:,:)  
     
    709740           !  
    710741           iswap = 0 
    711            IF( sf_dyn(jf_tem)%nrec_a(2) - nprevrec /= 0 )  iswap = 1 
    712            IF( nsecdyn > sf_dyn(jf_tem)%nrec_b(2) .AND. iswap == 1 )  THEN    ! read/update the after data 
     742           IF( sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%naa) - nprevrec /= 0 )  iswap = 1 
     743           IF( nsecdyn > sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%nbb) .AND. iswap == 1 )  THEN    ! read/update the after data 
    713744              IF(lwp) WRITE(numout,*) ' Compute new slopes at kt = ', kt 
    714745              uslpdta (:,:,:,1) =  uslpdta (:,:,:,2)         ! swap the data 
     
    717748              wslpjdta(:,:,:,1) =  wslpjdta(:,:,:,2)  
    718749              ! 
    719               zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,2) * tmask(:,:,:)   ! temperature 
    720               zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,2) * tmask(:,:,:)   ! salinity  
    721               avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,2) * tmask(:,:,:)   ! vertical diffusive coef. 
     750              zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,sf_dyn(jf_tem)%naa) * tmask(:,:,:)   ! temperature 
     751              zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,sf_dyn(jf_sal)%naa) * tmask(:,:,:)   ! salinity  
     752              avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,sf_dyn(jf_avt)%naa) * tmask(:,:,:)   ! vertical diffusive coef. 
    722753              CALL compute_slopes( kt, zts, zuslp, zvslp, zwslpi, zwslpj, Kbb, Kmm ) 
    723754              ! 
     
    731762      ! 
    732763      IF( sf_dyn(jf_tem)%ln_tint )  THEN 
    733          ztinta =  REAL( nsecdyn - sf_dyn(jf_tem)%nrec_b(2), wp )  & 
    734             &    / REAL( sf_dyn(jf_tem)%nrec_a(2) - sf_dyn(jf_tem)%nrec_b(2), wp ) 
     764         ztinta =  REAL( nsecdyn - sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%nbb), wp )  & 
     765            &    / REAL( sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%naa) - sf_dyn(jf_tem)%nrec(2,sf_dyn(jf_tem)%nbb), wp ) 
    735766         ztintb =  1. - ztinta 
    736767         IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN    ! Computes slopes (here avt is used as workspace) 
  • NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OFF/nemogcm.F90

    r12641 r13710  
    2828   USE usrdef_nam     ! user defined configuration 
    2929   USE eosbn2         ! equation of state            (eos bn2 routine) 
     30#if defined key_qco 
     31   USE domqco         ! tools for scale factor         (dom_qco_r3c  routine) 
     32#endif 
     33   USE bdyini         ! open boundary cond. setting        (bdy_init routine) 
    3034   !              ! ocean physics 
    3135   USE ldftra         ! lateral diffusivity setting    (ldf_tra_init routine) 
     
    3640   USE sbcmod         ! surface boundary condition     (sbc_init     routine) 
    3741   USE phycst         ! physical constant                   (par_cst routine) 
     42   USE zdfphy         ! vertical physics manager       (zdf_phy_init routine) 
    3843   USE dtadyn         ! Lecture and Interpolation of the dynamical fields 
    3944   USE trcini         ! Initilization of the passive tracers 
     
    4550   USE trcnam         ! passive tracer : namelist 
    4651   USE trcrst         ! passive tracer restart 
    47    USE diaptr         ! Need to initialise this as some variables are used in if statements later 
    4852   USE sbc_oce , ONLY : ln_rnf 
    4953   USE sbcrnf         ! surface boundary condition : runoffs 
     
    5963   USE timing         ! Timing 
    6064   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    61    USE lbcnfd  , ONLY : isendto, nsndto, nfsloop, nfeloop   ! Setup of north fold exchanges 
     65   USE lbcnfd  , ONLY : isendto, nsndto   ! Setup of north fold exchanges 
    6266   USE step, ONLY : Nbb, Nnn, Naa, Nrhs   ! time level indices 
     67   USE halo_mng 
    6368 
    6469   IMPLICIT NONE 
     
    6873 
    6974   CHARACTER (len=64) ::   cform_aaa="( /, 'AAAAAAAA', / ) "   ! flag for output listing 
     75#if defined key_mpp_mpi 
     76   ! need MPI_Wtime 
     77   INCLUDE 'mpif.h' 
     78#endif 
    7079 
    7180   !!---------------------------------------------------------------------- 
     
    9099      !!              Madec, 2008, internal report, IPSL. 
    91100      !!---------------------------------------------------------------------- 
    92       INTEGER :: istp, indic       ! time step index 
     101      INTEGER :: istp       ! time step index 
     102      REAL(wp)::   zstptiming   ! elapsed time for 1 time step 
    93103      !!---------------------------------------------------------------------- 
    94104 
     
    109119      !  
    110120      DO WHILE ( istp <= nitend .AND. nstop == 0 )    !==  OFF time-stepping  ==! 
     121 
     122         IF( ln_timing ) THEN 
     123            zstptiming = MPI_Wtime() 
     124            IF ( istp == ( nit000 + 1 ) ) elapsed_time = zstptiming 
     125            IF ( istp ==         nitend ) elapsed_time = zstptiming - elapsed_time 
     126         ENDIF 
    111127         ! 
    112128         IF( istp /= nit000 )   CALL day        ( istp )         ! Calendar (day was already called at nit000 in day_init) 
     
    117133                                CALL dta_dyn    ( istp, Nbb, Nnn, Naa )       ! Interpolation of the dynamical fields 
    118134#endif 
     135#if ! defined key_sed_off 
     136         IF( .NOT.ln_linssh ) THEN 
     137                                CALL dta_dyn_atf( istp, Nbb, Nnn, Naa )       ! time filter of sea  surface height and vertical scale factors 
     138# if defined key_qco 
     139                                CALL dom_qco_r3c( ssh(:,:,Kmm), r3t_f, r3u_f, r3v_f ) 
     140# endif 
     141         ENDIF 
    119142                                CALL trc_stp    ( istp, Nbb, Nnn, Nrhs, Naa ) ! time-stepping 
    120 #if ! defined key_sed_off 
    121          IF( .NOT.ln_linssh )   CALL dta_dyn_atf( istp, Nbb, Nnn, Naa )       ! time filter of sea  surface height and vertical scale factors 
     143# if defined key_qco 
     144                                !r3t(:,:,Kmm) = r3t_f(:,:)                     ! update ssh to h0 ratio 
     145                                !r3u(:,:,Kmm) = r3u_f(:,:) 
     146                                !r3v(:,:,Kmm) = r3v_f(:,:) 
     147# endif 
    122148#endif 
    123149         ! Swap time levels 
     
    127153         Naa = Nrhs 
    128154         ! 
     155#if ! defined key_qco 
    129156#if ! defined key_sed_off 
    130157         IF( .NOT.ln_linssh )   CALL dta_dyn_sf_interp( istp, Nnn )  ! calculate now grid parameters 
    131158#endif 
    132                                 CALL stp_ctl    ( istp, indic )  ! Time loop: control and print 
     159#endif          
     160         CALL stp_ctl    ( istp )             ! Time loop: control and print 
    133161         istp = istp + 1 
     162 
     163         IF( lwp .AND. ln_timing )   WRITE(numtime,*) 'timing step ', istp-1, ' : ', MPI_Wtime() - zstptiming 
     164 
    134165      END DO 
    135166      ! 
     
    145176      IF( nstop /= 0 .AND. lwp ) THEN                 ! error print 
    146177         WRITE(ctmp1,*) '   ==>>>   nemo_gcm: a total of ', nstop, ' errors have been found' 
    147          CALL ctl_stop( ctmp1 ) 
     178         WRITE(ctmp2,*) '           Look for "E R R O R" messages in all existing ocean_output* files' 
     179         CALL ctl_stop( ' ', ctmp1, ' ', ctmp2 ) 
    148180      ENDIF 
    149181      ! 
     
    175207      INTEGER ::   ios, ilocal_comm   ! local integers 
    176208      !! 
    177       NAMELIST/namctl/ sn_cfctl, nn_print, nn_ictls, nn_ictle,              & 
    178          &             nn_isplt , nn_jsplt, nn_jctls, nn_jctle,             & 
    179          &             ln_timing, ln_diacfl 
     209      NAMELIST/namctl/ sn_cfctl, ln_timing, ln_diacfl,                                & 
     210         &             nn_isplt,  nn_jsplt,  nn_ictls, nn_ictle, nn_jctls, nn_jctle 
    180211      NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_closea, ln_write_cfg, cn_domcfg_out, ln_use_jattr 
    181212      !!---------------------------------------------------------------------- 
    182213      ! 
    183214      cxios_context = 'nemo' 
     215      nn_hls = 1 
    184216      ! 
    185217      !                             !-------------------------------------------------! 
     
    227259      ! 
    228260      ! finalize the definition of namctl variables 
    229       IF( sn_cfctl%l_allon ) THEN 
    230          ! Turn on all options. 
    231          CALL nemo_set_cfctl( sn_cfctl, .TRUE., .TRUE. ) 
    232          ! Ensure all processors are active 
    233          sn_cfctl%procmin = 0 ; sn_cfctl%procmax = 1000000 ; sn_cfctl%procincr = 1 
    234       ELSEIF( sn_cfctl%l_config ) THEN 
    235          ! Activate finer control of report outputs 
    236          ! optionally switch off output from selected areas (note this only 
    237          ! applies to output which does not involve global communications) 
    238          IF( ( narea < sn_cfctl%procmin .OR. narea > sn_cfctl%procmax  ) .OR. & 
    239            & ( MOD( narea - sn_cfctl%procmin, sn_cfctl%procincr ) /= 0 ) )    & 
    240            &   CALL nemo_set_cfctl( sn_cfctl, .FALSE., .FALSE. ) 
    241       ELSE 
    242          ! turn off all options. 
    243          CALL nemo_set_cfctl( sn_cfctl, .FALSE., .TRUE. ) 
    244       ENDIF 
     261      IF( narea < sn_cfctl%procmin .OR. narea > sn_cfctl%procmax .OR. MOD( narea - sn_cfctl%procmin, sn_cfctl%procincr ) /= 0 )   & 
     262         &   CALL nemo_set_cfctl( sn_cfctl, .FALSE. ) 
    245263      ! 
    246264      lwp = (narea == 1) .OR. sn_cfctl%l_oceout    ! control of all listing output print 
     
    288306      ! 
    289307      IF( ln_read_cfg ) THEN              ! Read sizes in domain configuration file 
    290          CALL domain_cfg ( cn_cfg, nn_cfg, jpiglo, jpjglo, jpkglo, jperio ) 
     308         CALL domain_cfg ( cn_cfg, nn_cfg, Ni0glo, Nj0glo, jpkglo, jperio ) 
    291309      ELSE                                ! user-defined namelist 
    292          CALL usr_def_nam( cn_cfg, nn_cfg, jpiglo, jpjglo, jpkglo, jperio ) 
     310         CALL usr_def_nam( cn_cfg, nn_cfg, Ni0glo, Nj0glo, jpkglo, jperio ) 
    293311      ENDIF 
    294312      ! 
     
    302320      CALL mpp_init 
    303321 
     322      CALL halo_mng_init() 
    304323      ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays 
    305324      CALL nemo_alloc() 
     
    307326      ! Initialise time level indices 
    308327      Nbb = 1; Nnn = 2; Naa = 3; Nrhs = Naa 
    309     
    310328 
    311329      !                             !-------------------------------! 
     
    329347 
    330348                           CALL     sbc_init( Nbb, Nnn, Naa )    ! Forcings : surface module 
     349                           CALL     bdy_init    ! Open boundaries initialisation 
     350                            
     351                           CALL zdf_phy_init( Nnn )    ! Vertical physics 
    331352 
    332353      !                                      ! Tracer physics 
    333354                           CALL ldf_tra_init    ! Lateral ocean tracer physics 
    334                            CALL ldf_eiv_init    ! Eddy induced velocity param 
     355                           CALL ldf_eiv_init    ! Eddy induced velocity param. must be done after ldf_tra_init 
    335356                           CALL tra_ldf_init    ! lateral mixing 
    336357      IF( l_ldfslp     )   CALL ldf_slp_init    ! slope of lateral mixing 
     
    346367                           CALL dta_dyn_init( Nbb, Nnn, Naa )        ! Initialization for the dynamics 
    347368#endif 
    348  
    349369                           CALL     trc_init( Nbb, Nnn, Naa )        ! Passive tracers initialization 
    350                            CALL dia_ptr_init   ! Poleward TRansports initialization 
    351370                            
    352371      IF(lwp) WRITE(numout,cform_aaa)           ! Flag AAAAAAA 
     
    371390         WRITE(numout,*) '~~~~~~~~' 
    372391         WRITE(numout,*) '   Namelist namctl' 
    373          WRITE(numout,*) '                              sn_cfctl%l_glochk  = ', sn_cfctl%l_glochk 
    374          WRITE(numout,*) '                              sn_cfctl%l_allon   = ', sn_cfctl%l_allon 
    375          WRITE(numout,*) '       finer control over o/p sn_cfctl%l_config  = ', sn_cfctl%l_config 
    376392         WRITE(numout,*) '                              sn_cfctl%l_runstat = ', sn_cfctl%l_runstat 
    377393         WRITE(numout,*) '                              sn_cfctl%l_trcstat = ', sn_cfctl%l_trcstat 
     
    385401         WRITE(numout,*) '                              sn_cfctl%procincr  = ', sn_cfctl%procincr  
    386402         WRITE(numout,*) '                              sn_cfctl%ptimincr  = ', sn_cfctl%ptimincr  
    387          WRITE(numout,*) '      level of print                  nn_print   = ', nn_print 
    388          WRITE(numout,*) '      Start i indice for SUM control  nn_ictls   = ', nn_ictls 
    389          WRITE(numout,*) '      End i indice for SUM control    nn_ictle   = ', nn_ictle 
    390          WRITE(numout,*) '      Start j indice for SUM control  nn_jctls   = ', nn_jctls 
    391          WRITE(numout,*) '      End j indice for SUM control    nn_jctle   = ', nn_jctle 
    392          WRITE(numout,*) '      number of proc. following i     nn_isplt   = ', nn_isplt 
    393          WRITE(numout,*) '      number of proc. following j     nn_jsplt   = ', nn_jsplt 
    394403         WRITE(numout,*) '      timing by routine               ln_timing  = ', ln_timing 
    395404         WRITE(numout,*) '      CFL diagnostics                 ln_diacfl  = ', ln_diacfl 
    396405      ENDIF 
    397       ! 
    398       nprint    = nn_print          ! convert DOCTOR namelist names into OLD names 
    399       nictls    = nn_ictls 
    400       nictle    = nn_ictle 
    401       njctls    = nn_jctls 
    402       njctle    = nn_jctle 
    403       isplt     = nn_isplt 
    404       jsplt     = nn_jsplt 
    405  
     406 
     407      IF( .NOT.ln_read_cfg )   ln_closea = .false.   ! dealing possible only with a domcfg file 
    406408      IF(lwp) THEN                  ! control print 
    407409         WRITE(numout,*) 
     
    414416         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr     = ', ln_use_jattr 
    415417      ENDIF 
    416       IF( .NOT.ln_read_cfg )   ln_closea = .false.   ! dealing possible only with a domcfg file 
    417       ! 
    418       !                             ! Parameter control 
    419       ! 
    420       IF( sn_cfctl%l_prtctl .OR. sn_cfctl%l_prttrc ) THEN              ! sub-domain area indices for the control prints 
    421          IF( lk_mpp .AND. jpnij > 1 ) THEN 
    422             isplt = jpni   ;   jsplt = jpnj   ;   ijsplt = jpni*jpnj   ! the domain is forced to the real split domain 
    423          ELSE 
    424             IF( isplt == 1 .AND. jsplt == 1  ) THEN 
    425                CALL ctl_warn( ' - isplt & jsplt are equal to 1',   & 
    426                   &           ' - the print control will be done over the whole domain' ) 
    427             ENDIF 
    428             ijsplt = isplt * jsplt            ! total number of processors ijsplt 
    429          ENDIF 
    430          IF(lwp) WRITE(numout,*)'          - The total number of processors over which the' 
    431          IF(lwp) WRITE(numout,*)'            print control will be done is ijsplt : ', ijsplt 
    432          ! 
    433          !                              ! indices used for the SUM control 
    434          IF( nictls+nictle+njctls+njctle == 0 )   THEN    ! print control done over the default area 
    435             lsp_area = .FALSE. 
    436          ELSE                                             ! print control done over a specific  area 
    437             lsp_area = .TRUE. 
    438             IF( nictls < 1 .OR. nictls > jpiglo )   THEN 
    439                CALL ctl_warn( '          - nictls must be 1<=nictls>=jpiglo, it is forced to 1' ) 
    440                nictls = 1 
    441             ENDIF 
    442             IF( nictle < 1 .OR. nictle > jpiglo )   THEN 
    443                CALL ctl_warn( '          - nictle must be 1<=nictle>=jpiglo, it is forced to jpiglo' ) 
    444                nictle = jpiglo 
    445             ENDIF 
    446             IF( njctls < 1 .OR. njctls > jpjglo )   THEN 
    447                CALL ctl_warn( '          - njctls must be 1<=njctls>=jpjglo, it is forced to 1' ) 
    448                njctls = 1 
    449             ENDIF 
    450             IF( njctle < 1 .OR. njctle > jpjglo )   THEN 
    451                CALL ctl_warn( '          - njctle must be 1<=njctle>=jpjglo, it is forced to jpjglo' ) 
    452                njctle = jpjglo 
    453             ENDIF 
    454          ENDIF 
    455       ENDIF 
    456418      ! 
    457419      IF( 1._wp /= SIGN(1._wp,-0._wp)  )   CALL ctl_stop( 'nemo_ctl: The intrinsec SIGN function follows f2003 standard.',  & 
     
    492454      USE zdf_oce,   ONLY : zdf_oce_alloc 
    493455      USE trc_oce,   ONLY : trc_oce_alloc 
     456      USE bdy_oce,   ONLY : bdy_oce_alloc 
    494457      ! 
    495458      INTEGER :: ierr 
     
    501464      ierr = ierr + zdf_oce_alloc()          ! ocean vertical physics 
    502465      ierr = ierr + trc_oce_alloc()          ! shared TRC / TRA arrays 
     466      ierr = ierr + bdy_oce_alloc()    ! bdy masks (incl. initialization)       
    503467      ! 
    504468      CALL mpp_sum( 'nemogcm', ierr ) 
     
    507471   END SUBROUTINE nemo_alloc 
    508472 
    509    SUBROUTINE nemo_set_cfctl(sn_cfctl, setto, for_all ) 
     473   SUBROUTINE nemo_set_cfctl(sn_cfctl, setto ) 
    510474      !!---------------------------------------------------------------------- 
    511475      !!                     ***  ROUTINE nemo_set_cfctl  *** 
    512476      !! 
    513477      !! ** Purpose :   Set elements of the output control structure to setto. 
    514       !!                for_all should be .false. unless all areas are to be 
    515       !!                treated identically. 
    516       !! 
     478     !! 
    517479      !! ** Method  :   Note this routine can be used to switch on/off some 
    518       !!                types of output for selected areas but any output types 
    519       !!                that involve global communications (e.g. mpp_max, glob_sum) 
    520       !!                should be protected from selective switching by the 
    521       !!                for_all argument 
    522       !!---------------------------------------------------------------------- 
    523       LOGICAL :: setto, for_all 
    524       TYPE(sn_ctl) :: sn_cfctl 
    525       !!---------------------------------------------------------------------- 
    526       IF( for_all ) THEN 
    527          sn_cfctl%l_runstat = setto 
    528          sn_cfctl%l_trcstat = setto 
    529       ENDIF 
     480      !!                types of output for selected areas. 
     481      !!---------------------------------------------------------------------- 
     482      TYPE(sn_ctl), INTENT(inout) :: sn_cfctl 
     483      LOGICAL     , INTENT(in   ) :: setto 
     484      !!---------------------------------------------------------------------- 
     485      sn_cfctl%l_runstat = setto 
     486      sn_cfctl%l_trcstat = setto 
    530487      sn_cfctl%l_oceout  = setto 
    531488      sn_cfctl%l_layout  = setto 
     
    557514 
    558515 
    559    SUBROUTINE stp_ctl( kt, kindic ) 
     516   SUBROUTINE stp_ctl( kt ) 
    560517      !!---------------------------------------------------------------------- 
    561518      !!                    ***  ROUTINE stp_ctl  *** 
     
    568525      !!---------------------------------------------------------------------- 
    569526      INTEGER, INTENT(in   ) ::   kt      ! ocean time-step index 
    570       INTEGER, INTENT(inout) ::   kindic  ! indicator of solver convergence 
    571527      !!---------------------------------------------------------------------- 
    572528      ! 
Note: See TracChangeset for help on using the changeset viewer.