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 6404 for branches/2015/dev_r5803_UKMO_AGRIF_Vert_interp/NEMOGCM/NEMO/OFF_SRC – NEMO

Ignore:
Timestamp:
2016-03-29T11:24:48+02:00 (8 years ago)
Author:
timgraham
Message:

First attempt at upgrading branch to the head of the trunk. This should include all of the simplification branch from the merge in Dec 2015.

Location:
branches/2015/dev_r5803_UKMO_AGRIF_Vert_interp/NEMOGCM/NEMO/OFF_SRC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5803_UKMO_AGRIF_Vert_interp/NEMOGCM/NEMO/OFF_SRC/domrea.F90

    r6401 r6404  
    44   !! Ocean initialization : domain initialization 
    55   !!============================================================================== 
     6   !! History :  OPA  ! 1990-10  (C. Levy - G. Madec)  Original code 
     7   !!                 ! 1992-01  (M. Imbard) insert time step initialization 
     8   !!                 ! 1996-06  (G. Madec) generalized vertical coordinate  
     9   !!                 ! 1997-02  (G. Madec) creation of domwri.F 
     10   !!                 ! 2001-05  (E.Durand - G. Madec) insert closed sea 
     11   !!  NEMO      1.0  ! 2002-08  (G. Madec)  F90: Free form and module 
     12   !!---------------------------------------------------------------------- 
    613 
    714   !!---------------------------------------------------------------------- 
     
    1017   !!   dom_ctl        : control print for the ocean domain 
    1118   !!---------------------------------------------------------------------- 
    12    !! * Modules used 
    1319   USE oce             !  
     20   USE trc_oce         ! shared ocean/biogeochemical variables 
    1421   USE dom_oce         ! ocean space and time domain 
    1522   USE phycst          ! physical constants 
     23   USE domstp          ! domain: set the time-step 
     24   ! 
    1625   USE in_out_manager  ! I/O manager 
    1726   USE lib_mpp         ! distributed memory computing library 
    18  
    19    USE domstp          ! domain: set the time-step 
    20  
    2127   USE lbclnk          ! lateral boundary condition - MPP exchanges 
    22    USE trc_oce         ! shared ocean/biogeochemical variables 
    2328   USE wrk_nemo   
    2429    
     
    2631   PRIVATE 
    2732 
    28    !! * Routine accessibility 
    29    PUBLIC dom_rea       ! called by opa.F90 
     33   PUBLIC   dom_rea    ! called by nemogcm.F90 
    3034 
    3135   !! * Substitutions 
    32 #  include "domzgr_substitute.h90" 
    3336#  include "vectopt_loop_substitute.h90" 
    3437   !!---------------------------------------------------------------------- 
    35    !! NEMO/OFF 3.3 , NEMO Consortium (2010) 
     38   !! NEMO/OFF 3.7 , NEMO Consortium (2015) 
    3639   !! $Id$ 
    3740   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    3841   !!---------------------------------------------------------------------- 
    39  
    4042CONTAINS 
    4143 
     
    5153      !!      - dom_stp: defined the model time step 
    5254      !!      - dom_rea: read the meshmask file if nmsh=1 
    53       !! 
    54       !! History : 
    55       !!        !  90-10  (C. Levy - G. Madec)  Original code 
    56       !!        !  91-11  (G. Madec) 
    57       !!        !  92-01  (M. Imbard) insert time step initialization 
    58       !!        !  96-06  (G. Madec) generalized vertical coordinate  
    59       !!        !  97-02  (G. Madec) creation of domwri.F 
    60       !!        !  01-05  (E.Durand - G. Madec) insert closed sea 
    61       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    62       !!---------------------------------------------------------------------- 
    63       !! * Local declarations 
    64       INTEGER ::   jk                ! dummy loop argument 
    65       INTEGER ::   iconf = 0         ! temporary integers 
    66       !!---------------------------------------------------------------------- 
    67  
     55      !!---------------------------------------------------------------------- 
     56      INTEGER ::   jk          ! dummy loop index 
     57      INTEGER ::   iconf = 0   ! local integers 
     58      !!---------------------------------------------------------------------- 
     59      ! 
    6860      IF(lwp) THEN 
    6961         WRITE(numout,*) 
     
    7163         WRITE(numout,*) '~~~~~~~~' 
    7264      ENDIF 
    73  
    74       CALL dom_nam      ! read namelist ( namrun, namdom, namcla ) 
     65      ! 
     66      CALL dom_nam      ! read namelist ( namrun, namdom ) 
    7567      CALL dom_zgr      ! Vertical mesh and bathymetry option 
    7668      CALL dom_grd      ! Create a domain file 
    77  
    78      ! 
    79       ! - ML - Used in dom_vvl_sf_nxt and lateral diffusion routines 
    80       !        but could be usefull in many other routines 
    81       e12t    (:,:) = e1t(:,:) * e2t(:,:) 
    82       e1e2t   (:,:) = e1t(:,:) * e2t(:,:) 
    83       e12u    (:,:) = e1u(:,:) * e2u(:,:) 
    84       e12v    (:,:) = e1v(:,:) * e2v(:,:) 
    85       e12f    (:,:) = e1f(:,:) * e2f(:,:) 
    86       r1_e12t (:,:) = 1._wp    / e12t(:,:) 
    87       r1_e12u (:,:) = 1._wp    / e12u(:,:) 
    88       r1_e12v (:,:) = 1._wp    / e12v(:,:) 
    89       r1_e12f (:,:) = 1._wp    / e12f(:,:) 
    90       re2u_e1u(:,:) = e2u(:,:) / e1u(:,:) 
    91       re1v_e2v(:,:) = e1v(:,:) / e2v(:,:) 
    92       ! 
    93       hu(:,:) = 0._wp                          ! Ocean depth at U- and V-points 
    94       hv(:,:) = 0._wp 
    95       DO jk = 1, jpk 
    96          hu(:,:) = hu(:,:) + fse3u_n(:,:,jk) * umask(:,:,jk) 
    97          hv(:,:) = hv(:,:) + fse3v_n(:,:,jk) * vmask(:,:,jk) 
     69      ! 
     70      !                                      ! associated horizontal metrics 
     71      ! 
     72      r1_e1t(:,:) = 1._wp / e1t(:,:)   ;   r1_e2t (:,:) = 1._wp / e2t(:,:) 
     73      r1_e1u(:,:) = 1._wp / e1u(:,:)   ;   r1_e2u (:,:) = 1._wp / e2u(:,:) 
     74      r1_e1v(:,:) = 1._wp / e1v(:,:)   ;   r1_e2v (:,:) = 1._wp / e2v(:,:) 
     75      r1_e1f(:,:) = 1._wp / e1f(:,:)   ;   r1_e2f (:,:) = 1._wp / e2f(:,:) 
     76      ! 
     77!!gm BUG if scale factor reduction !!!! 
     78      e1e2t (:,:) = e1t(:,:) * e2t(:,:)   ;   r1_e1e2t(:,:) = 1._wp / e1e2t(:,:) 
     79      e1e2u (:,:) = e1u(:,:) * e2u(:,:)   ;   r1_e1e2u(:,:) = 1._wp / e1e2u(:,:) 
     80      e1e2v (:,:) = e1v(:,:) * e2v(:,:)   ;   r1_e1e2v(:,:) = 1._wp / e1e2v(:,:) 
     81      e1e2f (:,:) = e1f(:,:) * e2f(:,:)   ;   r1_e1e2f(:,:) = 1._wp / e1e2f(:,:) 
     82      !    
     83      e2_e1u(:,:) = e2u(:,:) / e1u(:,:) 
     84      e1_e2v(:,:) = e1v(:,:) / e2v(:,:) 
     85      ! 
     86      hu_n(:,:) = e3u_n(:,:,1) * umask(:,:,1)     ! Ocean depth at U- and V-points 
     87      hv_n(:,:) = e3v_n(:,:,1) * vmask(:,:,1) 
     88      DO jk = 2, jpk 
     89         hu_n(:,:) = hu_n(:,:) + e3u_n(:,:,jk) * umask(:,:,jk) 
     90         hv_n(:,:) = hv_n(:,:) + e3v_n(:,:,jk) * vmask(:,:,jk) 
    9891      END DO 
    9992      !                                        ! Inverse of the local depth 
    100       hur(:,:) = 1._wp / ( hu(:,:) + 1._wp - umask(:,:,1) ) * umask(:,:,1) 
    101       hvr(:,:) = 1._wp / ( hv(:,:) + 1._wp - vmask(:,:,1) ) * vmask(:,:,1) 
    102  
     93      r1_hu_n(:,:) = 1._wp / ( hu_n(:,:) + 1._wp - umask(:,:,1) ) * umask(:,:,1) 
     94      r1_hv_n(:,:) = 1._wp / ( hv_n(:,:) + 1._wp - vmask(:,:,1) ) * vmask(:,:,1) 
     95      ! 
    10396      CALL dom_stp      ! Time step 
    10497      CALL dom_msk      ! Masks 
    10598      CALL dom_ctl      ! Domain control 
    106  
     99      ! 
    107100   END SUBROUTINE dom_rea 
     101 
    108102 
    109103   SUBROUTINE dom_nam 
     
    115109      !! ** input   : - namrun namelist 
    116110      !!              - namdom namelist 
    117       !!              - namcla namelist 
    118111      !!---------------------------------------------------------------------- 
    119112      USE ioipsl 
    120       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    121       NAMELIST/namrun/ cn_ocerst_indir, cn_ocerst_outdir, nn_stocklist, ln_rst_list,               & 
    122          &             nn_no   , cn_exp    , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl,   & 
    123          &             nn_it000, nn_itend  , nn_date0    , nn_leapy     , nn_istate , nn_stock ,   & 
    124          &             nn_write, ln_dimgnnn, ln_mskland  , ln_cfmeta    , ln_clobber, nn_chunksz, nn_euler 
    125       NAMELIST/namdom/ nn_bathy , rn_bathy, rn_e3zps_min, rn_e3zps_rat, nn_msh    , rn_hmin,   & 
    126          &             nn_acc   , rn_atfp     , rn_rdt      , rn_rdtmin ,            & 
    127          &             rn_rdtmax, rn_rdth     , nn_baro     , nn_closea , ln_crs, & 
    128          &             jphgr_msh, & 
     113      INTEGER  ::   ios   ! Local integer output status for namelist read 
     114      ! 
     115      NAMELIST/namrun/ cn_ocerst_indir, cn_ocerst_outdir, nn_stocklist, ln_rst_list,                         & 
     116         &             nn_no   , cn_exp    , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl,             & 
     117         &             nn_it000, nn_itend  , nn_date0    , nn_time0, nn_leapy     , nn_istate , nn_stock ,   & 
     118         &             nn_write, ln_iscpl  , ln_mskland  , ln_cfmeta    , ln_clobber, nn_chunksz, nn_euler 
     119      NAMELIST/namdom/ nn_bathy , rn_bathy , rn_e3zps_min, rn_e3zps_rat , nn_msh    , rn_hmin   , rn_isfhmin,& 
     120         &             rn_atfp  , rn_rdt   , nn_baro     , nn_closea    , ln_crs    , jphgr_msh,             & 
    129121         &             ppglam0, ppgphi0, ppe1_deg, ppe2_deg, ppe1_m, ppe2_m, & 
    130122         &             ppsur, ppa0, ppa1, ppkth, ppacr, ppdzmin, pphmax, ldbletanh, & 
    131123         &             ppa2, ppkth2, ppacr2 
    132       NAMELIST/namcla/ nn_cla 
    133124#if defined key_netcdf4 
    134125      NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip 
     
    161152         WRITE(numout,*) '      frequency of restart file       nn_stock   = ', nn_stock 
    162153         WRITE(numout,*) '      frequency of output file        nn_write   = ', nn_write 
    163          WRITE(numout,*) '      multi file dimgout              ln_dimgnnn = ', ln_dimgnnn 
    164154         WRITE(numout,*) '      mask land points                ln_mskland = ', ln_mskland 
    165155         WRITE(numout,*) '      additional CF standard metadata ln_cfmeta  = ', ln_cfmeta 
     
    178168      nstocklist = nn_stocklist 
    179169      nwrite = nn_write 
    180  
    181  
     170      ! 
    182171      !                             ! control of output frequency 
    183172      IF ( nstock == 0 .OR. nstock > nitend ) THEN 
     
    194183      ! parameters correspondting to nit000 - 1 (as we start the step loop with a call to day) 
    195184      ndastp = ndate0 - 1        ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 
    196       adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 
     185      adatrj = ( REAL( nit000-1, wp ) * rdt ) / rday 
    197186 
    198187#if defined key_agrif 
     
    239228         WRITE(numout,*) '      asselin time filter parameter        rn_atfp   = ', rn_atfp 
    240229         WRITE(numout,*) '      time-splitting: nb of sub time-step  nn_baro   = ', nn_baro 
    241          WRITE(numout,*) '      acceleration of converge             nn_acc    = ', nn_acc 
    242          WRITE(numout,*) '        nn_acc=1: surface tracer rdt       rn_rdtmin = ', rn_rdtmin 
    243          WRITE(numout,*) '                  bottom  tracer rdt       rdtmax    = ', rn_rdtmax 
    244          WRITE(numout,*) '                  depth of transition      rn_rdth   = ', rn_rdth 
    245230         WRITE(numout,*) '      suppression of closed seas (=0)      nn_closea = ', nn_closea 
    246231         WRITE(numout,*) '      type of horizontal mesh jphgr_msh           = ', jphgr_msh 
     
    268253      e3zps_rat = rn_e3zps_rat 
    269254      nmsh      = nn_msh 
    270       nacc      = nn_acc 
    271255      atfp      = rn_atfp 
    272256      rdt       = rn_rdt 
    273       rdtmin    = rn_rdtmin 
    274       rdtmax    = rn_rdtmin 
    275       rdth      = rn_rdth 
    276  
    277       REWIND( numnam_ref )              ! Namelist namcla in reference namelist : Cross land advection 
    278       READ  ( numnam_ref, namcla, IOSTAT = ios, ERR = 905) 
    279 905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in reference namelist', lwp ) 
    280  
    281       REWIND( numnam_cfg )              ! Namelist namcla in configuration namelist : Cross land advection 
    282       READ  ( numnam_cfg, namcla, IOSTAT = ios, ERR = 906 ) 
    283 906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in configuration namelist', lwp ) 
    284       IF(lwm) WRITE( numond, namcla ) 
    285  
    286       IF(lwp) THEN 
    287          WRITE(numout,*) 
    288          WRITE(numout,*) '   Namelist namcla' 
    289          WRITE(numout,*) '      cross land advection                 nn_cla    = ', nn_cla 
    290       ENDIF 
    291  
    292257#if defined key_netcdf4 
    293258      !                             ! NetCDF 4 case   ("key_netcdf4" defined) 
     
    321286   END SUBROUTINE dom_nam 
    322287 
     288 
    323289   SUBROUTINE dom_zgr 
    324290      !!---------------------------------------------------------------------- 
     
    341307      INTEGER ::   ios 
    342308      !! 
    343       NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 
     309      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav, ln_linssh 
    344310      !!---------------------------------------------------------------------- 
    345311 
     
    362328         WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
    363329         WRITE(numout,*) '             ice shelf cavity               ln_isfcav = ', ln_isfcav 
     330         WRITE(numout,*) '             Linear free surface            ln_linssh = ', ln_linssh 
    364331      ENDIF 
    365332 
     
    374341   END SUBROUTINE dom_zgr 
    375342 
     343 
    376344   SUBROUTINE dom_ctl 
    377345      !!---------------------------------------------------------------------- 
     
    382350      !! ** Method  :   compute and print extrema of masked scale factors 
    383351      !! 
    384       !! History : 
    385       !!   8.5  !  02-08  (G. Madec)    Original code 
    386       !!---------------------------------------------------------------------- 
    387       !! * Local declarations 
     352      !!---------------------------------------------------------------------- 
    388353      INTEGER ::   iimi1, ijmi1, iimi2, ijmi2, iima1, ijma1, iima2, ijma2 
    389354      INTEGER, DIMENSION(2) ::   iloc      !  
     
    421386         ijma2 = iloc(2) + njmpp - 1 
    422387      ENDIF 
    423  
     388      ! 
    424389      IF(lwp) THEN 
    425390         WRITE(numout,"(14x,'e1t maxi: ',1f10.2,' at i = ',i5,' j= ',i5)") ze1max, iima1, ijma1 
     
    428393         WRITE(numout,"(14x,'e2t mini: ',1f10.2,' at i = ',i5,' j= ',i5)") ze2min, iimi2, ijmi2 
    429394      ENDIF 
    430  
     395      ! 
    431396   END SUBROUTINE dom_ctl 
     397 
    432398 
    433399   SUBROUTINE dom_grd 
     
    538504         CALL iom_get( inum2, jpdom_data, 'facvolt', facvol ) 
    539505#endif 
    540  
    541506         !                                                         ! horizontal mesh (inum3) 
    542507         CALL iom_get( inum3, jpdom_data, 'glamt', glamt ) 
     
    578543            CALL iom_get( inum4, jpdom_unknown, 'esigw', esigw ) 
    579544 
    580             CALL iom_get( inum4, jpdom_data, 'e3t_0', fse3t_n(:,:,:) ) ! scale factors 
    581             CALL iom_get( inum4, jpdom_data, 'e3u_0', fse3u_n(:,:,:) ) 
    582             CALL iom_get( inum4, jpdom_data, 'e3v_0', fse3v_n(:,:,:) ) 
    583             CALL iom_get( inum4, jpdom_data, 'e3w_0', fse3w_n(:,:,:) ) 
     545            CALL iom_get( inum4, jpdom_data, 'e3t_0', e3t_0(:,:,:) ) ! scale factors 
     546            CALL iom_get( inum4, jpdom_data, 'e3u_0', e3u_0(:,:,:) ) 
     547            CALL iom_get( inum4, jpdom_data, 'e3v_0', e3v_0(:,:,:) ) 
     548            CALL iom_get( inum4, jpdom_data, 'e3w_0', e3w_0(:,:,:) ) 
    584549 
    585550            CALL iom_get( inum4, jpdom_unknown, 'gdept_1d', gdept_1d ) ! depth 
     
    595560            ! 
    596561            IF( nmsh <= 6 ) THEN                                        ! 3D vertical scale factors 
    597                CALL iom_get( inum4, jpdom_data, 'e3t_0', fse3t_n(:,:,:) ) 
    598                CALL iom_get( inum4, jpdom_data, 'e3u_0', fse3u_n(:,:,:) ) 
    599                CALL iom_get( inum4, jpdom_data, 'e3v_0', fse3v_n(:,:,:) ) 
    600                CALL iom_get( inum4, jpdom_data, 'e3w_0', fse3w_n(:,:,:) ) 
     562               CALL iom_get( inum4, jpdom_data, 'e3t_0', e3t_0(:,:,:) ) 
     563               CALL iom_get( inum4, jpdom_data, 'e3u_0', e3u_0(:,:,:) ) 
     564               CALL iom_get( inum4, jpdom_data, 'e3v_0', e3v_0(:,:,:) ) 
     565               CALL iom_get( inum4, jpdom_data, 'e3w_0', e3w_0(:,:,:) ) 
    601566            ELSE                                                        ! 2D bottom scale factors 
    602567               CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp ) 
     
    604569               !                                                        ! deduces the 3D scale factors 
    605570               DO jk = 1, jpk 
    606                   fse3t_n(:,:,jk) = e3t_1d(jk)                                    ! set to the ref. factors 
    607                   fse3u_n(:,:,jk) = e3t_1d(jk) 
    608                   fse3v_n(:,:,jk) = e3t_1d(jk) 
    609                   fse3w_n(:,:,jk) = e3w_1d(jk) 
     571                  e3t_0(:,:,jk) = e3t_1d(jk)                                    ! set to the ref. factors 
     572                  e3u_0(:,:,jk) = e3t_1d(jk) 
     573                  e3v_0(:,:,jk) = e3t_1d(jk) 
     574                  e3w_0(:,:,jk) = e3w_1d(jk) 
    610575               END DO 
    611576               DO jj = 1,jpj                                                  ! adjust the deepest values 
    612577                  DO ji = 1,jpi 
    613578                     ik = mbkt(ji,jj) 
    614                      fse3t_n(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 
    615                      fse3w_n(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 
     579                     e3t_0(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 
     580                     e3w_0(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 
    616581                  END DO 
    617582               END DO 
     
    619584                  DO jj = 1, jpjm1 
    620585                     DO ji = 1, jpim1 
    621                         fse3u_n(ji,jj,jk) = MIN( fse3t_n(ji,jj,jk), fse3t_n(ji+1,jj,jk) ) 
    622                         fse3v_n(ji,jj,jk) = MIN( fse3t_n(ji,jj,jk), fse3t_n(ji,jj+1,jk) ) 
     586                        e3u_0(ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
     587                        e3v_0(ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
    623588                     END DO 
    624589                  END DO 
    625590               END DO 
    626                CALL lbc_lnk( fse3u_n(:,:,:) , 'U', 1._wp )   ;   CALL lbc_lnk( fse3uw_n(:,:,:), 'U', 1._wp )   ! lateral boundary conditions 
    627                CALL lbc_lnk( fse3v_n(:,:,:) , 'V', 1._wp )   ;   CALL lbc_lnk( fse3vw_n(:,:,:), 'V', 1._wp ) 
     591               CALL lbc_lnk( e3u_0(:,:,:) , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0(:,:,:), 'U', 1._wp )   ! lateral boundary conditions 
     592               CALL lbc_lnk( e3v_0(:,:,:) , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0(:,:,:), 'V', 1._wp ) 
    628593               ! 
    629594               DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    630                   WHERE( fse3u_n(:,:,jk) == 0._wp )   fse3u_n(:,:,jk) = e3t_1d(jk) 
    631                   WHERE( fse3v_n(:,:,jk) == 0._wp )   fse3v_n(:,:,jk) = e3t_1d(jk) 
     595                  WHERE( e3u_0(:,:,jk) == 0._wp )   e3u_0(:,:,jk) = e3t_1d(jk) 
     596                  WHERE( e3v_0(:,:,jk) == 0._wp )   e3v_0(:,:,jk) = e3t_1d(jk) 
    632597               END DO 
    633598            END IF 
    634599 
    635600            IF( iom_varid( inum4, 'gdept_0', ldstop = .FALSE. ) > 0 ) THEN   ! 3D depth of t- and w-level 
    636                CALL iom_get( inum4, jpdom_data, 'gdept_0', fsdept_n(:,:,:) ) 
    637                CALL iom_get( inum4, jpdom_data, 'gdepw_0', fsdepw_n(:,:,:) ) 
     601               CALL iom_get( inum4, jpdom_data, 'gdept_0', gdept_0(:,:,:) ) 
     602               CALL iom_get( inum4, jpdom_data, 'gdepw_0', gdepw_0(:,:,:) ) 
    638603            ELSE                                                           ! 2D bottom depth 
    639604               CALL iom_get( inum4, jpdom_data, 'hdept', zprt ) 
     
    641606               ! 
    642607               DO jk = 1, jpk                                              ! deduces the 3D depth 
    643                   fsdept_n(:,:,jk) = gdept_1d(jk) 
    644                   fsdepw_n(:,:,jk) = gdepw_1d(jk) 
     608                  gdept_0(:,:,jk) = gdept_1d(jk) 
     609                  gdepw_0(:,:,jk) = gdepw_1d(jk) 
    645610               END DO 
    646611               DO jj = 1, jpj 
     
    648613                     ik = mbkt(ji,jj) 
    649614                     IF( ik > 0 ) THEN 
    650                         fsdepw_n(ji,jj,ik+1) = zprw(ji,jj) 
    651                         fsdept_n(ji,jj,ik  ) = zprt(ji,jj) 
    652                         fsdept_n(ji,jj,ik+1) = fsdept_n(ji,jj,ik) + fse3t_n(ji,jj,ik) 
     615                        gdepw_0(ji,jj,ik+1) = zprw(ji,jj) 
     616                        gdept_0(ji,jj,ik  ) = zprt(ji,jj) 
     617                        gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    653618                     ENDIF 
    654619                  END DO 
     
    664629            CALL iom_get( inum4, jpdom_unknown, 'e3w_1d'  , e3w_1d   ) 
    665630            DO jk = 1, jpk 
    666                fse3t_n(:,:,jk) = e3t_1d(jk)                              ! set to the ref. factors 
    667                fse3u_n(:,:,jk) = e3t_1d(jk) 
    668                fse3v_n(:,:,jk) = e3t_1d(jk) 
    669                fse3w_n(:,:,jk) = e3w_1d(jk) 
    670                fsdept_n(:,:,jk) = gdept_1d(jk) 
    671                fsdepw_n(:,:,jk) = gdepw_1d(jk) 
     631               e3t_0(:,:,jk) = e3t_1d(jk)                              ! set to the ref. factors 
     632               e3u_0(:,:,jk) = e3t_1d(jk) 
     633               e3v_0(:,:,jk) = e3t_1d(jk) 
     634               e3w_0(:,:,jk) = e3w_1d(jk) 
     635               gdept_0(:,:,jk) = gdept_1d(jk) 
     636               gdepw_0(:,:,jk) = gdepw_1d(jk) 
    672637            END DO 
    673638         ENDIF 
     639 
     640      ! 
     641      !              !==  time varying part of coordinate system  ==! 
     642      ! 
     643      !       before        !          now          !       after         ! 
     644      ;  gdept_b = gdept_0  ;   gdept_n = gdept_0   !        ---          ! depth of grid-points 
     645      ;  gdepw_b = gdepw_0  ;   gdepw_n = gdepw_0   !        ---          ! 
     646      ;                     ;   gde3w_n = gde3w_0   !        ---          ! 
     647      ! 
     648      ;    e3t_b =   e3t_0  ;     e3t_n =   e3t_0   ;   e3t_a =  e3t_0    ! scale factors 
     649      ;    e3u_b =   e3u_0  ;     e3u_n =   e3u_0   ;   e3u_a =  e3u_0    ! 
     650      ;    e3v_b =   e3v_0  ;     e3v_n =   e3v_0   ;   e3v_a =  e3v_0    ! 
     651      ;                     ;     e3f_n =   e3f_0   !        ---          ! 
     652      ;    e3w_b =   e3w_0  ;     e3w_n =   e3w_0   !        ---          ! 
     653      ;   e3uw_b =  e3uw_0  ;    e3uw_n =  e3uw_0   !        ---          ! 
     654      ;   e3vw_b =  e3vw_0  ;    e3vw_n =  e3vw_0   !        ---          ! 
     655      ! 
    674656 
    675657!!gm BUG in s-coordinate this does not work! 
     
    701683            &                     e2t  (1,jj), e2u  (1,jj),   & 
    702684            &                     e2v  (1,jj), jj = 1, jpj, 10 ) 
    703       ENDIF 
    704  
    705  
    706       IF( nprint == 1 .AND. lwp ) THEN 
    707          WRITE(numout,*) '          e1u e2u ' 
    708          CALL prihre( e1u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout ) 
    709          CALL prihre( e2u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout ) 
    710          WRITE(numout,*) '          e1v e2v  ' 
    711          CALL prihre( e1v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout ) 
    712          CALL prihre( e2v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout ) 
    713685      ENDIF 
    714686 
     
    756728      !!                                     (min value = 1 over land) 
    757729      !!---------------------------------------------------------------------- 
    758       ! 
    759730      INTEGER ::   ji, jj   ! dummy loop indices 
    760731      REAL(wp), POINTER, DIMENSION(:,:) :: zmbk 
     
    785756   END SUBROUTINE zgr_bot_level 
    786757 
     758 
    787759   SUBROUTINE dom_msk 
    788760      !!--------------------------------------------------------------------- 
     
    799771      !!               tpol     : ??? 
    800772      !!---------------------------------------------------------------------- 
    801       ! 
    802       INTEGER  ::   ji, jj, jk                   ! dummy loop indices 
    803       INTEGER  ::   iif, iil, ijf, ijl       ! local integers 
     773      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     774      INTEGER  ::   iif, iil, ijf, ijl   ! local integers 
    804775      INTEGER, POINTER, DIMENSION(:,:) ::  imsk  
    805       ! 
    806776      !!--------------------------------------------------------------------- 
    807777       
     
    839809      DO jj = 1, jpjm1 
    840810         DO ji = 1, fs_jpim1   ! vector loop 
    841             umask_i(ji,jj)  = ssmask(ji,jj) * ssmask(ji+1,jj  )  * MIN(1._wp,SUM(umask(ji,jj,:))) 
    842             vmask_i(ji,jj)  = ssmask(ji,jj) * ssmask(ji  ,jj+1)  * MIN(1._wp,SUM(vmask(ji,jj,:))) 
     811            ssumask(ji,jj)  = ssmask(ji,jj) * ssmask(ji+1,jj  )  * MIN(1._wp,SUM(umask(ji,jj,:))) 
     812            ssvmask(ji,jj)  = ssmask(ji,jj) * ssmask(ji  ,jj+1)  * MIN(1._wp,SUM(vmask(ji,jj,:))) 
    843813         END DO 
    844814         DO ji = 1, jpim1      ! NO vector opt. 
    845             fmask_i(ji,jj) =  ssmask(ji,jj  ) * ssmask(ji+1,jj  )   & 
     815            ssfmask(ji,jj) =  ssmask(ji,jj  ) * ssmask(ji+1,jj  )   & 
    846816               &            * ssmask(ji,jj+1) * ssmask(ji+1,jj+1) * MIN(1._wp,SUM(fmask(ji,jj,:))) 
    847817         END DO 
    848818      END DO 
    849       CALL lbc_lnk( umask_i, 'U', 1._wp )      ! Lateral boundary conditions 
    850       CALL lbc_lnk( vmask_i, 'V', 1._wp ) 
    851       CALL lbc_lnk( fmask_i, 'F', 1._wp ) 
     819      CALL lbc_lnk( ssumask, 'U', 1._wp )      ! Lateral boundary conditions 
     820      CALL lbc_lnk( ssvmask, 'V', 1._wp ) 
     821      CALL lbc_lnk( ssfmask, 'F', 1._wp ) 
    852822 
    853823      ! 3. Ocean/land mask at wu-, wv- and w points  
    854824      !---------------------------------------------- 
    855       wmask (:,:,1) = tmask(:,:,1) ! ???????? 
    856       wumask(:,:,1) = umask(:,:,1) ! ???????? 
    857       wvmask(:,:,1) = vmask(:,:,1) ! ???????? 
    858       DO jk=2,jpk 
    859          wmask (:,:,jk)=tmask(:,:,jk) * tmask(:,:,jk-1) 
    860          wumask(:,:,jk)=umask(:,:,jk) * umask(:,:,jk-1)    
    861          wvmask(:,:,jk)=vmask(:,:,jk) * vmask(:,:,jk-1) 
     825      wmask (:,:,1) = tmask(:,:,1)        ! surface value 
     826      wumask(:,:,1) = umask(:,:,1)  
     827      wvmask(:,:,1) = vmask(:,:,1) 
     828      DO jk = 2, jpk                      ! deeper value 
     829         wmask (:,:,jk) = tmask(:,:,jk) * tmask(:,:,jk-1) 
     830         wumask(:,:,jk) = umask(:,:,jk) * umask(:,:,jk-1)    
     831         wvmask(:,:,jk) = vmask(:,:,jk) * vmask(:,:,jk-1) 
    862832      END DO 
    863       ! 
    864       IF( nprint == 1 .AND. lwp ) THEN    ! Control print 
    865          imsk(:,:) = INT( tmask_i(:,:) ) 
    866          WRITE(numout,*) ' tmask_i : ' 
    867          CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout) 
    868          WRITE (numout,*) 
    869          WRITE (numout,*) ' dommsk: tmask for each level' 
    870          WRITE (numout,*) ' ----------------------------' 
    871          DO jk = 1, jpk 
    872             imsk(:,:) = INT( tmask(:,:,jk) ) 
    873             WRITE(numout,*) 
    874             WRITE(numout,*) ' level = ',jk 
    875             CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout) 
    876          END DO 
    877       ENDIF 
    878833      ! 
    879834      CALL wrk_dealloc( jpi, jpj, imsk ) 
  • branches/2015/dev_r5803_UKMO_AGRIF_Vert_interp/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90

    r6401 r6404  
    2626   USE trc_oce         ! share ocean/biogeo variables 
    2727   USE phycst          ! physical constants 
     28   USE ldftra          ! lateral diffusivity coefficients 
    2829   USE trabbl          ! active tracer: bottom boundary layer 
    2930   USE ldfslp          ! lateral diffusion: iso-neutral slopes 
    30    USE ldfeiv          ! eddy induced velocity coef.  
    31    USE ldftra_oce      ! ocean tracer   lateral physics 
    3231   USE zdfmxl          ! vertical physics: mixed layer depth 
    3332   USE eosbn2          ! equation of state - Brunt Vaisala frequency 
     
    4039   USE fldread         ! read input fields  
    4140   USE timing          ! Timing 
     41   USE wrk_nemo 
    4242 
    4343   IMPLICIT NONE 
     
    5050   LOGICAL            ::   ln_dynwzv    !: vertical velocity read in a file (T) or computed from u/v (F) 
    5151   LOGICAL            ::   ln_dynbbl    !: bbl coef read in a file (T) or computed (F) 
    52    LOGICAL            ::   ln_degrad    !: degradation option enabled or not 
    5352   LOGICAL            ::   ln_dynrnf    !: read runoff data in file (T) or set to zero (F) 
    5453 
    55    INTEGER  , PARAMETER ::   jpfld = 21     ! maximum number of fields to read 
     54   INTEGER  , PARAMETER ::   jpfld = 15     ! maximum number of fields to read 
    5655   INTEGER  , SAVE      ::   jf_tem         ! index of temperature 
    5756   INTEGER  , SAVE      ::   jf_sal         ! index of salinity 
     
    6867   INTEGER  , SAVE      ::   jf_ubl         ! index of u-bbl coef 
    6968   INTEGER  , SAVE      ::   jf_vbl         ! index of v-bbl coef 
    70    INTEGER  , SAVE      ::   jf_ahu         ! index of u-diffusivity coef 
    71    INTEGER  , SAVE      ::   jf_ahv         ! index of v-diffusivity coef  
    72    INTEGER  , SAVE      ::   jf_ahw         ! index of w-diffusivity coef 
    73    INTEGER  , SAVE      ::   jf_eiu         ! index of u-eiv 
    74    INTEGER  , SAVE      ::   jf_eiv         ! index of v-eiv 
    75    INTEGER  , SAVE      ::   jf_eiw         ! index of w-eiv 
    7669   INTEGER  , SAVE      ::   jf_fmf         ! index of downward salt flux 
    7770 
     
    9285 
    9386   !! * Substitutions 
    94 #  include "domzgr_substitute.h90" 
    9587#  include "vectopt_loop_substitute.h90" 
    9688   !!---------------------------------------------------------------------- 
     
    112104      !!             - interpolates data if needed 
    113105      !!---------------------------------------------------------------------- 
    114       ! 
    115       USE oce, ONLY:  zts    => tsa  
     106      USE oce, ONLY:  zts    => tsa 
    116107      USE oce, ONLY:  zuslp  => ua   , zvslp  => va 
    117       USE oce, ONLY:  zwslpi => rotb , zwslpj => rotn 
    118       USE oce, ONLY:  zu     => ub   , zv     => vb,  zw => hdivb 
     108      USE oce, ONLY:  zu     => ub   , zv     => vb,  zw => rke 
    119109      ! 
    120110      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     111      ! 
     112       REAL(wp), DIMENSION(jpi,jpj,jpk     )  :: zwslpi, zwslpj 
     113!      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts)  :: zts 
     114!      REAL(wp), DIMENSION(jpi,jpj,jpk     )  :: zuslp, zvslp, zwslpi, zwslpj 
     115!      REAL(wp), DIMENSION(jpi,jpj,jpk     )  :: zu, zv, zw 
     116      ! 
    121117      ! 
    122118      INTEGER  ::   ji, jj     ! dummy loop indices 
     
    138134         CALL fld_read( kt, 1, sf_dyn )      !==   read data at kt time step   ==! 
    139135         ! 
    140          IF( lk_ldfslp .AND. .NOT.lk_c1d .AND. sf_dyn(jf_tem)%ln_tint ) THEN    ! Computes slopes (here avt is used as workspace)                        
     136         IF( l_ldfslp .AND. .NOT.lk_c1d .AND. sf_dyn(jf_tem)%ln_tint ) THEN    ! Computes slopes (here avt is used as workspace)                        
    141137            zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,1) * tmask(:,:,:)   ! temperature 
    142138            zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,1) * tmask(:,:,:)   ! salinity  
     
    162158      ENDIF 
    163159      !  
    164       IF( lk_ldfslp .AND. .NOT.lk_c1d ) THEN    ! Computes slopes (here avt is used as workspace)                        
     160      IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN    ! Computes slopes (here avt is used as workspace)                        
    165161         iswap_tem = 0 
    166162         IF(  kt /= nit000 .AND. ( sf_dyn(jf_tem)%nrec_a(2) - nrecprev_tem ) /= 0 )  iswap_tem = 1 
     
    267263      rnf (:,:)        = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1)    ! river runoffs  
    268264 
     265      !                                               ! update eddy diffusivity coeff. and/or eiv coeff. at kt 
     266      IF( l_ldftra_time .OR. l_ldfeiv_time )   CALL ldf_tra( kt )  
    269267      !                                                      ! bbl diffusive coef 
    270268#if defined key_trabbl && ! defined key_c1d 
     
    276274         CALL bbl( kt, nit000, 'TRC') 
    277275      END IF 
    278 #endif 
    279 #if ( ! defined key_degrad && defined key_traldf_c2d && defined key_traldf_eiv ) && ! defined key_c1d  
    280       aeiw(:,:)        = sf_dyn(jf_eiw)%fnow(:,:,1) * tmask(:,:,1)    ! w-eiv 
    281       !                                                           ! Computes the horizontal values from the vertical value 
    282       DO jj = 2, jpjm1 
    283          DO ji = fs_2, fs_jpim1   ! vector opt. 
    284             aeiu(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji+1,jj  ) )  ! Average the diffusive coefficient at u- v- points 
    285             aeiv(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji  ,jj+1) )  ! at u- v- points 
    286          END DO 
    287       END DO 
    288       CALL lbc_lnk( aeiu, 'U', 1. )   ;   CALL lbc_lnk( aeiv, 'V', 1. )    ! lateral boundary condition 
    289 #endif 
    290        
    291 #if defined key_degrad && ! defined key_c1d  
    292       !                                          ! degrad option : diffusive and eiv coef are 3D 
    293       ahtu(:,:,:) = sf_dyn(jf_ahu)%fnow(:,:,:) * umask(:,:,:) 
    294       ahtv(:,:,:) = sf_dyn(jf_ahv)%fnow(:,:,:) * vmask(:,:,:) 
    295       ahtw(:,:,:) = sf_dyn(jf_ahw)%fnow(:,:,:) * tmask(:,:,:) 
    296 #  if defined key_traldf_eiv  
    297       aeiu(:,:,:) = sf_dyn(jf_eiu)%fnow(:,:,:) * umask(:,:,:) 
    298       aeiv(:,:,:) = sf_dyn(jf_eiv)%fnow(:,:,:) * vmask(:,:,:) 
    299       aeiw(:,:,:) = sf_dyn(jf_eiw)%fnow(:,:,:) * tmask(:,:,:) 
    300 #  endif 
    301276#endif 
    302277      ! 
     
    339314      TYPE(FLD_N), DIMENSION(jpfld) ::  slf_d    ! array of namelist informations on the fields to read 
    340315      TYPE(FLD_N) :: sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf  ! informations about the fields to be read 
    341       TYPE(FLD_N) :: sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl          !   "                                 " 
    342       TYPE(FLD_N) :: sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf  !   "                                 " 
    343       !!---------------------------------------------------------------------- 
    344       ! 
    345       NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_degrad, ln_dynrnf,    & 
     316      TYPE(FLD_N) :: sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl, sn_fmf          !   "                                 " 
     317      NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_dynrnf,    & 
    346318         &                sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf,  & 
    347          &                sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl,          & 
    348          &                sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf 
     319         &                sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl, sn_fmf   
     320      !!---------------------------------------------------------------------- 
    349321      ! 
    350322      REWIND( numnam_ref )              ! Namelist namdta_dyn in reference namelist : Offline: init. of dynamical data 
     
    365337         WRITE(numout,*) '      vertical velocity read from file (T) or computed (F) ln_dynwzv  = ', ln_dynwzv 
    366338         WRITE(numout,*) '      bbl coef read from file (T) or computed (F)          ln_dynbbl  = ', ln_dynbbl 
    367          WRITE(numout,*) '      degradation option enabled (T) or not (F)            ln_degrad  = ', ln_degrad 
    368339         WRITE(numout,*) '      river runoff option enabled (T) or not (F)           ln_dynrnf  = ', ln_dynrnf 
    369340         WRITE(numout,*) 
    370341      ENDIF 
    371342      !  
    372       IF( ln_degrad .AND. .NOT.lk_degrad ) THEN 
    373          CALL ctl_warn( 'dta_dyn_init: degradation option requires key_degrad activated ; force ln_degrad to false' ) 
    374          ln_degrad = .FALSE. 
    375       ENDIF 
    376343      IF( ln_dynbbl .AND. ( .NOT.lk_trabbl .OR. lk_c1d ) ) THEN 
    377344         CALL ctl_warn( 'dta_dyn_init: bbl option requires key_trabbl activated ; force ln_dynbbl to false' ) 
     
    391358                jf_rnf = jfld + 1  ;  jfld  = jf_rnf 
    392359         slf_d(jf_rnf) = sn_rnf 
     360         ! Activate runoff key of sbc_oce 
     361         ln_rnf = .true. 
     362         WRITE(numout,*) 'dta_dyn : Activate the runoff data structure from ocean core ( force ln_rnf = .true.) ' 
     363         WRITE(numout,*) 
    393364      ELSE 
    394365         rnf (:,:) = 0._wp 
    395366      ENDIF 
    396367 
    397       ! 
    398       IF( .NOT.ln_degrad ) THEN     ! no degrad option 
    399          IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN        ! eiv & bbl 
    400                  jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;        jf_eiw  = jfld + 3   ;   jfld = jf_eiw 
    401            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl  ;   slf_d(jf_eiw) = sn_eiw 
    402          ENDIF 
    403          IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN   ! no eiv & bbl 
     368      IF( ln_dynbbl ) THEN         ! eiv & bbl 
    404369                 jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;  jfld = jf_vbl 
    405370           slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl 
    406          ENDIF 
    407          IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN   ! eiv & no bbl 
    408            jf_eiw = jfld + 1 ; jfld = jf_eiw ; slf_d(jf_eiw) = sn_eiw 
    409          ENDIF 
    410       ELSE 
    411               jf_ahu  = jfld + 1 ;        jf_ahv  = jfld + 2 ;        jf_ahw  = jfld + 3  ;  jfld = jf_ahw 
    412         slf_d(jf_ahu) = sn_ahu  ;   slf_d(jf_ahv) = sn_ahv  ;   slf_d(jf_ahw) = sn_ahw 
    413         IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN         ! eiv & bbl 
    414                  jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ; 
    415            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl 
    416                  jf_eiu  = jfld + 3 ;        jf_eiv  = jfld + 4 ;    jf_eiw  = jfld + 5   ;  jfld = jf_eiw  
    417            slf_d(jf_eiu) = sn_eiu  ;   slf_d(jf_eiv) = sn_eiv  ;    slf_d(jf_eiw) = sn_eiw 
    418         ENDIF 
    419         IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN    ! no eiv & bbl 
    420                  jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;  jfld = jf_vbl 
    421            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl 
    422         ENDIF 
    423         IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN    ! eiv & no bbl 
    424                  jf_eiu  = jfld + 1 ;         jf_eiv  = jfld + 2 ;    jf_eiw  = jfld + 3   ; jfld = jf_eiw  
    425            slf_d(jf_eiu) = sn_eiu  ;   slf_d(jf_eiv) = sn_eiv  ;   slf_d(jf_eiw) = sn_eiw 
    426         ENDIF 
    427       ENDIF 
    428    
     371      ENDIF 
     372 
     373 
    429374      ALLOCATE( sf_dyn(jfld), STAT=ierr )         ! set sf structure 
    430375      IF( ierr > 0 ) THEN 
     
    452397      END DO 
    453398      ! 
    454       IF( lk_ldfslp .AND. .NOT.lk_c1d ) THEN                  ! slopes  
     399      IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN                  ! slopes  
    455400         IF( sf_dyn(jf_tem)%ln_tint ) THEN      ! time interpolation 
    456401            ALLOCATE( uslpdta (jpi,jpj,jpk,2), vslpdta (jpi,jpj,jpk,2),    & 
     
    479424   END SUBROUTINE dta_dyn_init 
    480425 
     426 
    481427   SUBROUTINE dta_dyn_wzv( pu, pv, pw ) 
    482428      !!---------------------------------------------------------------------- 
     
    507453         DO jj = 2, jpjm1 
    508454            DO ji = fs_2, fs_jpim1   ! vector opt. 
    509                zu  = pu(ji  ,jj  ,jk) * umask(ji  ,jj  ,jk) * e2u(ji  ,jj  ) * fse3u(ji  ,jj  ,jk) 
    510                zu1 = pu(ji-1,jj  ,jk) * umask(ji-1,jj  ,jk) * e2u(ji-1,jj  ) * fse3u(ji-1,jj  ,jk) 
    511                zv  = pv(ji  ,jj  ,jk) * vmask(ji  ,jj  ,jk) * e1v(ji  ,jj  ) * fse3v(ji  ,jj  ,jk) 
    512                zv1 = pv(ji  ,jj-1,jk) * vmask(ji  ,jj-1,jk) * e1v(ji  ,jj-1) * fse3v(ji  ,jj-1,jk) 
    513                zet = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    514                zhdiv(ji,jj,jk) = ( zu - zu1 + zv - zv1 ) * zet  
     455               zu  = pu(ji  ,jj  ,jk) * umask(ji  ,jj  ,jk) * e2u(ji  ,jj  ) * e3u_n(ji  ,jj  ,jk) 
     456               zu1 = pu(ji-1,jj  ,jk) * umask(ji-1,jj  ,jk) * e2u(ji-1,jj  ) * e3u_n(ji-1,jj  ,jk) 
     457               zv  = pv(ji  ,jj  ,jk) * vmask(ji  ,jj  ,jk) * e1v(ji  ,jj  ) * e3v_n(ji  ,jj  ,jk) 
     458               zv1 = pv(ji  ,jj-1,jk) * vmask(ji  ,jj-1,jk) * e1v(ji  ,jj-1) * e3v_n(ji  ,jj-1,jk) 
     459               zhdiv(ji,jj,jk) = ( zu - zu1 + zv - zv1 ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)  
    515460            END DO 
    516461         END DO 
    517462      END DO 
     463      !                              !  update the horizontal divergence with the runoff inflow 
     464      IF( ln_dynrnf )   zhdiv(:,:,1) = zhdiv(:,:,1) - rnf(:,:) * r1_rau0 / e3t_n(:,:,1) 
     465      ! 
    518466      CALL lbc_lnk( zhdiv, 'T', 1. )      ! Lateral boundary conditions on zhdiv 
    519       ! 
    520467      ! computation of vertical velocity from the bottom 
    521468      pw(:,:,jpk) = 0._wp 
    522469      DO jk = jpkm1, 1, -1 
    523          pw(:,:,jk) = pw(:,:,jk+1) - fse3t(:,:,jk) * zhdiv(:,:,jk) 
     470         pw(:,:,jk) = pw(:,:,jk+1) - e3t_n(:,:,jk) * zhdiv(:,:,jk) 
    524471      END DO 
    525472      ! 
     
    540487      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(out) :: pwslpj   ! meridional diapycnal slopes 
    541488      !!--------------------------------------------------------------------- 
    542 #if defined key_ldfslp && ! defined key_c1d 
    543       CALL eos    ( pts, rhd, rhop, gdept_0(:,:,:) ) 
    544       CALL eos_rab( pts, rab_n )       ! now local thermal/haline expension ratio at T-points 
    545       CALL bn2    ( pts, rab_n, rn2  ) ! now    Brunt-Vaisala 
     489      IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN    ! Computes slopes (here avt is used as workspace)                        
     490         CALL eos    ( pts, rhd, rhop, gdept_0(:,:,:) ) 
     491         CALL eos_rab( pts, rab_n )       ! now local thermal/haline expension ratio at T-points 
     492         CALL bn2    ( pts, rab_n, rn2  ) ! now    Brunt-Vaisala 
    546493 
    547494      ! Partial steps: before Horizontal DErivative 
     
    550497         &                                        rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
    551498      IF( ln_zps .AND.        ln_isfcav)                            & 
    552          &            CALL zps_hde_isf( kt, jpts, pts, gtsu, gtsv,  &    ! Partial steps for top cell (ISF) 
    553          &                                        rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   & 
    554          &                                 gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the first ocean level 
    555  
    556       rn2b(:,:,:) = rn2(:,:,:)         ! need for zdfmxl 
    557       CALL zdf_mxl( kt )            ! mixed layer depth 
    558       CALL ldf_slp( kt, rhd, rn2 )  ! slopes 
    559       puslp (:,:,:) = uslp (:,:,:)  
    560       pvslp (:,:,:) = vslp (:,:,:)  
    561       pwslpi(:,:,:) = wslpi(:,:,:)  
    562       pwslpj(:,:,:) = wslpj(:,:,:)  
    563 #else 
    564       puslp (:,:,:) = 0.            ! to avoid warning when compiling 
    565       pvslp (:,:,:) = 0. 
    566       pwslpi(:,:,:) = 0. 
    567       pwslpj(:,:,:) = 0. 
    568 #endif 
     499         &            CALL zps_hde_isf( kt, jpts, pts, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
     500         &                                        rhd, gru , grv , grui, grvi   )  ! of t, s, rd at the first ocean level 
     501 
     502         rn2b(:,:,:) = rn2(:,:,:)         ! need for zdfmxl 
     503         CALL zdf_mxl( kt )            ! mixed layer depth 
     504         CALL ldf_slp( kt, rhd, rn2 )  ! slopes 
     505         puslp (:,:,:) = uslp (:,:,:)  
     506         pvslp (:,:,:) = vslp (:,:,:)  
     507         pwslpi(:,:,:) = wslpi(:,:,:)  
     508         pwslpj(:,:,:) = wslpj(:,:,:)  
     509     ELSE 
     510         puslp (:,:,:) = 0.            ! to avoid warning when compiling 
     511         pvslp (:,:,:) = 0. 
     512         pwslpi(:,:,:) = 0. 
     513         pwslpj(:,:,:) = 0. 
     514     ENDIF 
    569515      ! 
    570516   END SUBROUTINE dta_dyn_slp 
  • branches/2015/dev_r5803_UKMO_AGRIF_Vert_interp/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90

    r6401 r6404  
    2626   USE traqsr          ! solar radiation penetration    (tra_qsr_init routine) 
    2727   USE trabbl          ! bottom boundary layer          (tra_bbl_init routine) 
     28   USE traldf          ! lateral physics                (tra_ldf_init routine) 
    2829   USE zdfini          ! vertical physics: initialization 
    2930   USE sbcmod          ! surface boundary condition       (sbc_init     routine) 
     
    5152   USE trcrst 
    5253   USE diaptr         ! Need to initialise this as some variables are used in if statements later 
     54   USE sbc_oce, ONLY: ln_rnf 
     55   USE sbcrnf 
    5356 
    5457   IMPLICIT NONE 
     
    9396      !                            !-----------------------! 
    9497      istp = nit000 
     98      ! 
     99      ! Initialize arrays of runoffs structures and read data from the namelist 
     100      IF ( ln_rnf ) CALL sbc_rnf(istp) 
    95101      !  
    96102      CALL iom_init( cxios_context )            ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS) 
     
    147153      NAMELIST/namctl/ ln_ctl  , nn_print, nn_ictls, nn_ictle,   & 
    148154         &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle,   & 
    149          &             nn_bench, nn_timing 
     155         &             nn_bench, nn_timing, nn_diacfl 
    150156      NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & 
    151157         &             jpizoom, jpjzoom, jperio, ln_use_jattr 
     
    283289                            CALL     sbc_init   ! Forcings : surface module 
    284290 
    285 #if ! defined key_degrad 
    286291                            CALL ldf_tra_init   ! Lateral ocean tracer physics 
    287 #endif 
    288       IF( lk_ldfslp )       CALL ldf_slp_init   ! slope of lateral mixing 
     292                            CALL ldf_eiv_init   ! Eddy induced velocity param 
     293                            CALL tra_ldf_init   ! lateral mixing 
     294      IF( l_ldfslp )        CALL ldf_slp_init   ! slope of lateral mixing 
    289295 
    290296                            CALL tra_qsr_init   ! penetrative solar radiation qsr 
     
    444450      USE dom_oce,      ONLY: dom_oce_alloc 
    445451      USE zdf_oce,      ONLY: zdf_oce_alloc 
    446       USE ldftra_oce,   ONLY: ldftra_oce_alloc 
    447452      USE trc_oce,      ONLY: trc_oce_alloc 
    448453      ! 
     
    453458      ierr = ierr + dia_wri_alloc   () 
    454459      ierr = ierr + dom_oce_alloc   ()          ! ocean domain 
    455       ierr = ierr + ldftra_oce_alloc()          ! ocean lateral  physics : tracers 
    456460      ierr = ierr + zdf_oce_alloc   ()          ! ocean vertical physics 
    457461      ! 
Note: See TracChangeset for help on using the changeset viewer.