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 11758 for NEMO/branches/2019 – NEMO

Changeset 11758 for NEMO/branches/2019


Ignore:
Timestamp:
2019-10-21T18:19:16+02:00 (4 years ago)
Author:
acc
Message:

Branch 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. Removal of unnecessary cyclic dependancy between oce_trc and step and update to previously untested BENCH MY_SRC files

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/nemogcm.F90

    r11480 r11758  
    473473#if defined key_top 
    474474      !                                      ! Passive tracers 
    475                            CALL     trc_init 
     475                           CALL     trc_init( Nbb, Nnn, Naa ) 
    476476#endif 
    477477      IF( l_ldfslp     )   CALL ldf_slp_init    ! slope of lateral mixing 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/oce_trc.F90

    r11527 r11758  
    4343   USE oce , ONLY :   ssh    =>    ssh    !: sea surface height at t-point [m]    
    4444   USE oce , ONLY :   rab_n  =>    rab_n  !: local thermal/haline expension ratio at T-points 
    45  
    46    USE step, ONLY : Nbb, Nnn, Naa, Nrhs   ! time level indices 
    4745 
    4846   !* surface fluxes * 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcini.F90

    r11527 r11758  
    3939CONTAINS 
    4040    
    41    SUBROUTINE trc_init 
     41   SUBROUTINE trc_init( Kbb, Kmm, Kaa ) 
    4242      !!--------------------------------------------------------------------- 
    4343      !!                     ***  ROUTINE trc_init  *** 
     
    5151      !!                or read data or analytical formulation 
    5252      !!--------------------------------------------------------------------- 
     53      INTEGER, INTENT(in) :: Kbb, Kmm, Kaa   ! time level indices 
    5354      ! 
    5455      IF( ln_timing )   CALL timing_start('trc_init') 
     
    6970      IF(lwp) WRITE(numout,*) 
    7071      ! 
    71       CALL trc_ini_sms( Nnn )   ! SMS 
     72      CALL trc_ini_sms( Kmm )   ! SMS 
    7273      CALL trc_ini_trp          ! passive tracers transport 
    7374      CALL trc_ice_ini          ! Tracers in sea ice 
     
    7778      ENDIF 
    7879      ! 
    79       CALL trc_ini_state( Nbb, Nnn, Naa )  !  passive tracers initialisation : from a restart or from clim 
    80       ! 
    81       CALL trc_ini_inv( Nnn )              ! Inventories 
     80      CALL trc_ini_state( Kbb, Kmm, Kaa )  !  passive tracers initialisation : from a restart or from clim 
     81      ! 
     82      CALL trc_ini_inv( Kmm )              ! Inventories 
    8283      ! 
    8384      IF( ln_timing )   CALL timing_stop('trc_init') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcwri.F90

    r10975 r11758  
    7171   PUBLIC trc_wri 
    7272CONTAINS 
    73    SUBROUTINE trc_wri( kt )                     ! Empty routine    
     73   SUBROUTINE trc_wri( kt, Kmm )                     ! Empty routine    
    7474   INTEGER, INTENT(in) :: kt 
     75   INTEGER, INTENT(in) :: Kmm  ! time level indices 
    7576   END SUBROUTINE trc_wri 
    7677#endif 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/BENCH/MY_SRC/diawri.F90

    r10410 r11758  
    5252 
    5353#if defined key_si3 
    54    USE ice 
     54   USE ice  
    5555   USE icewri  
    5656#endif 
    5757   USE lib_mpp         ! MPP library 
    5858   USE timing          ! preformance summary 
    59    USE diurnal_bulk    ! diurnal warm layer 
    60    USE cool_skin       ! Cool skin 
     59   USE diu_bulk        ! diurnal warm layer 
     60   USE diu_coolskin    ! Cool skin 
    6161 
    6262   IMPLICIT NONE 
     
    9797 
    9898    
    99    SUBROUTINE dia_wri( kt ) 
     99   SUBROUTINE dia_wri( kt, Kmm ) 
    100100      !!--------------------------------------------------------------------- 
    101101      !!                  ***  ROUTINE dia_wri  *** 
     
    107107      !!---------------------------------------------------------------------- 
    108108      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     109      INTEGER, INTENT( in ) ::   Kmm     ! ocean time level index 
    109110      !! 
    110111      INTEGER ::   ji, jj, jk       ! dummy loop indices 
     
    120121      ! Output the initial state and forcings 
    121122      IF( ninist == 1 ) THEN                        
    122          CALL dia_wri_state( 'output.init' ) 
     123         CALL dia_wri_state( Kmm, 'output.init' ) 
    123124         ninist = 0 
    124125      ENDIF 
     
    129130      CALL iom_put("e3v_0", e3v_0(:,:,:) ) 
    130131      ! 
    131       CALL iom_put( "e3t" , e3t_n(:,:,:) ) 
    132       CALL iom_put( "e3u" , e3u_n(:,:,:) ) 
    133       CALL iom_put( "e3v" , e3v_n(:,:,:) ) 
    134       CALL iom_put( "e3w" , e3w_n(:,:,:) ) 
     132      CALL iom_put( "e3t" , e3t(:,:,:,Kmm) ) 
     133      CALL iom_put( "e3u" , e3u(:,:,:,Kmm) ) 
     134      CALL iom_put( "e3v" , e3v(:,:,:,Kmm) ) 
     135      CALL iom_put( "e3w" , e3w(:,:,:,Kmm) ) 
    135136      IF( iom_use("e3tdef") )   & 
    136          CALL iom_put( "e3tdef"  , ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) 
     137         CALL iom_put( "e3tdef"  , ( ( e3t(:,:,:,Kmm) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) 
    137138 
    138139      IF( ll_wd ) THEN 
    139          CALL iom_put( "ssh" , (sshn+ssh_ref)*tmask(:,:,1) )   ! sea surface height (brought back to the reference used for wetting and drying) 
     140         CALL iom_put( "ssh" , (ssh(:,:,Kmm)+ssh_ref)*tmask(:,:,1) )   ! sea surface height (brought back to the reference used for wetting and drying) 
    140141      ELSE 
    141          CALL iom_put( "ssh" , sshn )              ! sea surface height 
     142         CALL iom_put( "ssh" , ssh(:,:,Kmm) )              ! sea surface height 
    142143      ENDIF 
    143144 
    144145      IF( iom_use("wetdep") )   &                  ! wet depth 
    145          CALL iom_put( "wetdep" , ht_0(:,:) + sshn(:,:) ) 
    146        
    147       CALL iom_put( "toce", tsn(:,:,:,jp_tem) )    ! 3D temperature 
    148       CALL iom_put(  "sst", tsn(:,:,1,jp_tem) )    ! surface temperature 
     146         CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Kmm) ) 
     147       
     148      CALL iom_put( "toce", ts(:,:,:,jp_tem,Kmm) )    ! 3D temperature 
     149      CALL iom_put(  "sst", ts(:,:,1,jp_tem,Kmm) )    ! surface temperature 
    149150      IF ( iom_use("sbt") ) THEN 
    150151         DO jj = 1, jpj 
    151152            DO ji = 1, jpi 
    152153               ikbot = mbkt(ji,jj) 
    153                z2d(ji,jj) = tsn(ji,jj,ikbot,jp_tem) 
     154               z2d(ji,jj) = ts(ji,jj,ikbot,jp_tem,Kmm) 
    154155            END DO 
    155156         END DO 
     
    157158      ENDIF 
    158159       
    159       CALL iom_put( "soce", tsn(:,:,:,jp_sal) )    ! 3D salinity 
    160       CALL iom_put(  "sss", tsn(:,:,1,jp_sal) )    ! surface salinity 
     160      CALL iom_put( "soce", ts(:,:,:,jp_sal,Kmm) )    ! 3D salinity 
     161      CALL iom_put(  "sss", ts(:,:,1,jp_sal,Kmm) )    ! surface salinity 
    161162      IF ( iom_use("sbs") ) THEN 
    162163         DO jj = 1, jpj 
    163164            DO ji = 1, jpi 
    164165               ikbot = mbkt(ji,jj) 
    165                z2d(ji,jj) = tsn(ji,jj,ikbot,jp_sal) 
     166               z2d(ji,jj) = ts(ji,jj,ikbot,jp_sal,Kmm) 
    166167            END DO 
    167168         END DO 
     
    174175         DO jj = 2, jpjm1 
    175176            DO ji = fs_2, fs_jpim1   ! vector opt. 
    176                zztmp2 = (  ( rCdU_bot(ji+1,jj)+rCdU_bot(ji  ,jj) ) * un(ji  ,jj,mbku(ji  ,jj))  )**2   & 
    177                   &   + (  ( rCdU_bot(ji  ,jj)+rCdU_bot(ji-1,jj) ) * un(ji-1,jj,mbku(ji-1,jj))  )**2   & 
    178                   &   + (  ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj  ) ) * vn(ji,jj  ,mbkv(ji,jj  ))  )**2   & 
    179                   &   + (  ( rCdU_bot(ji,jj  )+rCdU_bot(ji,jj-1) ) * vn(ji,jj-1,mbkv(ji,jj-1))  )**2 
     177               zztmp2 = (  ( rCdU_bot(ji+1,jj)+rCdU_bot(ji  ,jj) ) * uu(ji  ,jj,mbku(ji  ,jj),Kmm)  )**2   & 
     178                  &   + (  ( rCdU_bot(ji  ,jj)+rCdU_bot(ji-1,jj) ) * uu(ji-1,jj,mbku(ji-1,jj),Kmm)  )**2   & 
     179                  &   + (  ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj  ) ) * vv(ji,jj  ,mbkv(ji,jj  ),Kmm)  )**2   & 
     180                  &   + (  ( rCdU_bot(ji,jj  )+rCdU_bot(ji,jj-1) ) * vv(ji,jj-1,mbkv(ji,jj-1),Kmm)  )**2 
    180181               z2d(ji,jj) = zztmp * SQRT( zztmp2 ) * tmask(ji,jj,1)  
    181182               ! 
     
    186187      ENDIF 
    187188          
    188       CALL iom_put( "uoce", un(:,:,:) )            ! 3D i-current 
    189       CALL iom_put(  "ssu", un(:,:,1) )            ! surface i-current 
     189      CALL iom_put( "uoce", uu(:,:,:,Kmm) )            ! 3D i-current 
     190      CALL iom_put(  "ssu", uu(:,:,1,Kmm) )            ! surface i-current 
    190191      IF ( iom_use("sbu") ) THEN 
    191192         DO jj = 1, jpj 
    192193            DO ji = 1, jpi 
    193194               ikbot = mbku(ji,jj) 
    194                z2d(ji,jj) = un(ji,jj,ikbot) 
     195               z2d(ji,jj) = uu(ji,jj,ikbot,Kmm) 
    195196            END DO 
    196197         END DO 
     
    198199      ENDIF 
    199200       
    200       CALL iom_put( "voce", vn(:,:,:) )            ! 3D j-current 
    201       CALL iom_put(  "ssv", vn(:,:,1) )            ! surface j-current 
     201      CALL iom_put( "voce", vv(:,:,:,Kmm) )            ! 3D j-current 
     202      CALL iom_put(  "ssv", vv(:,:,1,Kmm) )            ! surface j-current 
    202203      IF ( iom_use("sbv") ) THEN 
    203204         DO jj = 1, jpj 
    204205            DO ji = 1, jpi 
    205206               ikbot = mbkv(ji,jj) 
    206                z2d(ji,jj) = vn(ji,jj,ikbot) 
     207               z2d(ji,jj) = vv(ji,jj,ikbot,Kmm) 
    207208            END DO 
    208209         END DO 
     
    210211      ENDIF 
    211212 
    212       CALL iom_put( "woce", wn )                   ! vertical velocity 
     213      CALL iom_put( "woce", ww )                   ! vertical velocity 
    213214      IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN   ! vertical mass transport & its square value 
    214215         ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 
    215216         z2d(:,:) = rau0 * e1e2t(:,:) 
    216217         DO jk = 1, jpk 
    217             z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:) 
     218            z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) 
    218219         END DO 
    219220         CALL iom_put( "w_masstr" , z3d )   
     
    231232         DO jj = 2, jpjm1                                    ! sst gradient 
    232233            DO ji = fs_2, fs_jpim1   ! vector opt. 
    233                zztmp  = tsn(ji,jj,1,jp_tem) 
    234                zztmpx = ( tsn(ji+1,jj,1,jp_tem) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - tsn(ji-1,jj  ,1,jp_tem) ) * r1_e1u(ji-1,jj) 
    235                zztmpy = ( tsn(ji,jj+1,1,jp_tem) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - tsn(ji  ,jj-1,1,jp_tem) ) * r1_e2v(ji,jj-1) 
     234               zztmp  = ts(ji,jj,1,jp_tem,Kmm) 
     235               zztmpx = ( ts(ji+1,jj,1,jp_tem,Kmm) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - ts(ji-1,jj  ,1,jp_tem,Kmm) ) * r1_e1u(ji-1,jj) 
     236               zztmpy = ( ts(ji,jj+1,1,jp_tem,Kmm) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - ts(ji  ,jj-1,1,jp_tem,Kmm) ) * r1_e2v(ji,jj-1) 
    236237               z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy )   & 
    237238                  &              * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) 
     
    250251            DO jj = 1, jpj 
    251252               DO ji = 1, jpi 
    252                   z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 
     253                  z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) * tmask(ji,jj,jk) 
    253254               END DO 
    254255            END DO 
     
    262263            DO jj = 1, jpj 
    263264               DO ji = 1, jpi 
    264                   z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 
     265                  z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) * tmask(ji,jj,jk) 
    265266               END DO 
    266267            END DO 
     
    274275            DO jj = 2, jpjm1 
    275276               DO ji = fs_2, fs_jpim1   ! vector opt. 
    276                   zztmp  = 0.25_wp * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    277                   z3d(ji,jj,jk) = zztmp * (  un(ji-1,jj,jk)**2 * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk)   & 
    278                      &                     + un(ji  ,jj,jk)**2 * e2u(ji  ,jj) * e3u_n(ji  ,jj,jk)   & 
    279                      &                     + vn(ji,jj-1,jk)**2 * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk)   & 
    280                      &                     + vn(ji,jj  ,jk)**2 * e1v(ji,jj  ) * e3v_n(ji,jj  ,jk)   ) 
     277                  zztmp  = 0.25_wp * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     278                  z3d(ji,jj,jk) = zztmp * (  uu(ji-1,jj,jk,Kmm)**2 * e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm)   & 
     279                     &                     + uu(ji  ,jj,jk,Kmm)**2 * e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm)   & 
     280                     &                     + vv(ji,jj-1,jk,Kmm)**2 * e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm)   & 
     281                     &                     + vv(ji,jj  ,jk,Kmm)**2 * e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm)   ) 
    281282               END DO 
    282283            END DO 
     
    286287      ENDIF 
    287288      ! 
    288       CALL iom_put( "hdiv", hdivn )                  ! Horizontal divergence 
     289      CALL iom_put( "hdiv", hdiv )                  ! Horizontal divergence 
    289290      ! 
    290291      IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
     
    292293         z2d(:,:) = 0.e0 
    293294         DO jk = 1, jpkm1 
    294             z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk) 
     295            z3d(:,:,jk) = rau0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 
    295296            z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
    296297         END DO 
     
    304305            DO jj = 2, jpjm1 
    305306               DO ji = fs_2, fs_jpim1   ! vector opt. 
    306                   z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
     307                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji+1,jj,jk,jp_tem,Kmm) ) 
    307308               END DO 
    308309            END DO 
     
    317318            DO jj = 2, jpjm1 
    318319               DO ji = fs_2, fs_jpim1   ! vector opt. 
    319                   z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
     320                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji+1,jj,jk,jp_sal,Kmm) ) 
    320321               END DO 
    321322            END DO 
     
    329330         z3d(:,:,jpk) = 0.e0 
    330331         DO jk = 1, jpkm1 
    331             z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * e3v_n(:,:,jk) * vmask(:,:,jk) 
     332            z3d(:,:,jk) = rau0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 
    332333         END DO 
    333334         CALL iom_put( "v_masstr", z3d )              ! mass transport in j-direction 
     
    339340            DO jj = 2, jpjm1 
    340341               DO ji = fs_2, fs_jpim1   ! vector opt. 
    341                   z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
     342                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji,jj+1,jk,jp_tem,Kmm) ) 
    342343               END DO 
    343344            END DO 
     
    352353            DO jj = 2, jpjm1 
    353354               DO ji = fs_2, fs_jpim1   ! vector opt. 
    354                   z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 
     355                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji,jj+1,jk,jp_sal,Kmm) ) 
    355356               END DO 
    356357            END DO 
     
    365366            DO jj = 2, jpjm1 
    366367               DO ji = fs_2, fs_jpim1   ! vector opt. 
    367                   z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) *  tsn(ji,jj,jk,jp_tem) 
     368                  z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) *  ts(ji,jj,jk,jp_tem,Kmm) 
    368369               END DO 
    369370            END DO 
     
    377378            DO jj = 2, jpjm1 
    378379               DO ji = fs_2, fs_jpim1   ! vector opt. 
    379                   z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) 
     380                  z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) 
    380381               END DO 
    381382            END DO 
     
    388389      ! 
    389390 
    390       IF (ln_diatmb)   CALL dia_tmb                   ! tmb values  
     391      IF (ln_diatmb)   CALL dia_tmb( Kmm )            ! tmb values  
    391392           
    392       IF (ln_dia25h)   CALL dia_25h( kt )             ! 25h averaging 
     393      IF (ln_dia25h)   CALL dia_25h( kt, Kmm )        ! 25h averaging 
    393394 
    394395      IF( ln_timing )   CALL timing_stop('dia_wri') 
     
    407408   END FUNCTION dia_wri_alloc 
    408409 
    409    SUBROUTINE dia_wri( kt ) 
    410       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    411  
     410    
     411   SUBROUTINE dia_wri( kt, Kmm ) 
     412 
     413      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     414      INTEGER, INTENT( in ) ::   Kmm  ! ocean time level index 
    412415      IF( ninist == 1 ) THEN     !==  Output the initial state and forcings  ==! 
    413          CALL dia_wri_state( 'output.init' ) 
     416         CALL dia_wri_state( Kmm, 'output.init' ) 
    414417         ninist = 0 
    415418      ENDIF 
     419      ! 
     420      ! 0. Initialisation 
     421      ! ----------------- 
    416422 
    417423   END SUBROUTINE dia_wri 
     
    419425#endif 
    420426 
    421    SUBROUTINE dia_wri_state( cdfile_name ) 
     427   SUBROUTINE dia_wri_state( Kmm, cdfile_name ) 
    422428      !!--------------------------------------------------------------------- 
    423429      !!                 ***  ROUTINE dia_wri_state  *** 
     
    432438      !!      File 'output.abort.nc' is created in case of abnormal job end 
    433439      !!---------------------------------------------------------------------- 
     440      INTEGER           , INTENT( in ) ::   Kmm              ! time level index 
    434441      CHARACTER (len=* ), INTENT( in ) ::   cdfile_name      ! name of the file created 
    435442      !! 
     
    448455#endif 
    449456 
    450       CALL iom_rstput( 0, 0, inum, 'votemper', tsn(:,:,:,jp_tem) )    ! now temperature 
    451       CALL iom_rstput( 0, 0, inum, 'vosaline', tsn(:,:,:,jp_sal) )    ! now salinity 
    452       CALL iom_rstput( 0, 0, inum, 'sossheig', sshn              )    ! sea surface height 
    453       CALL iom_rstput( 0, 0, inum, 'vozocrtx', un                )    ! now i-velocity 
    454       CALL iom_rstput( 0, 0, inum, 'vomecrty', vn                )    ! now j-velocity 
    455       CALL iom_rstput( 0, 0, inum, 'vovecrtz', wn                )    ! now k-velocity 
     457      CALL iom_rstput( 0, 0, inum, 'votemper', ts(:,:,:,jp_tem,Kmm) )    ! now temperature 
     458      CALL iom_rstput( 0, 0, inum, 'vosaline', ts(:,:,:,jp_sal,Kmm) )    ! now salinity 
     459      CALL iom_rstput( 0, 0, inum, 'sossheig', ssh(:,:,Kmm)              )    ! sea surface height 
     460      CALL iom_rstput( 0, 0, inum, 'vozocrtx', uu(:,:,:,Kmm)                )    ! now i-velocity 
     461      CALL iom_rstput( 0, 0, inum, 'vomecrty', vv(:,:,:,Kmm)                )    ! now j-velocity 
     462      CALL iom_rstput( 0, 0, inum, 'vovecrtz', ww                )    ! now k-velocity 
    456463      IF( ALLOCATED(ahtu) ) THEN 
    457464         CALL iom_rstput( 0, 0, inum,  'ahtu', ahtu              )    ! aht at u-point 
     
    469476      CALL iom_rstput( 0, 0, inum, 'sometauy', vtau              )    ! j-wind stress 
    470477      IF(  .NOT.ln_linssh  ) THEN              
    471          CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept_n        )    !  T-cell depth  
    472          CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t_n          )    !  T-cell thickness   
     478         CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept(:,:,:,Kmm)        )    !  T-cell depth  
     479         CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t(:,:,:,Kmm)          )    !  T-cell thickness   
    473480      END IF 
    474481      IF( ln_wave .AND. ln_sdw ) THEN 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/BENCH/MY_SRC/zdfiwm.F90

    r10420 r11758  
    6969 
    7070 
    71    SUBROUTINE zdf_iwm( kt, p_avm, p_avt, p_avs ) 
     71   SUBROUTINE zdf_iwm( kt, Kmm, p_avm, p_avt, p_avs ) 
    7272      !!---------------------------------------------------------------------- 
    7373      !!                  ***  ROUTINE zdf_iwm  *** 
     
    118118      !!---------------------------------------------------------------------- 
    119119      INTEGER                    , INTENT(in   ) ::   kt             ! ocean time step 
     120      INTEGER                    , INTENT(in   ) ::   Kmm            ! time level index 
    120121      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avm          ! momentum Kz (w-points) 
    121122      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avt, p_avs   ! tracer   Kz (w-points) 
     
    155156         END DO 
    156157      END DO 
    157 !!gm gde3w ==>>>  check for ssh taken into account.... seem OK gde3w_n=gdept_n - sshn 
     158!!gm gde3w ==>>>  check for ssh taken into account.... seem OK gde3w_n=gdept(Kmm) - ssh(Kmm) 
    158159      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    159          zemx_iwm(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w_n(:,:,jk  ) - zhdep(:,:) ) / hcri_iwm(:,:) )                      & 
    160             &                             - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) )  ) * wmask(:,:,jk)   & 
    161             &                          / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    162  
    163 !!gm delta(gde3w_n) = e3t_n  !!  Please verify the grid-point position w versus t-point 
     160         zemx_iwm(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w(:,:,jk  ) - zhdep(:,:) ) / hcri_iwm(:,:) )                      & 
     161            &                             - EXP( ( gde3w(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) )  ) * wmask(:,:,jk)   & 
     162            &                          / ( gde3w(:,:,jk) - gde3w(:,:,jk-1) ) 
     163 
     164!!gm delta(gde3w) = e3t(Kmm)  !!  Please verify the grid-point position w versus t-point 
    164165!!gm it seems to me that only 1/hcri_iwm  is used ==>  compute it one for all 
    165166 
     
    175176         zfact(:,:) = 0._wp 
    176177         DO jk = 2, jpkm1              ! part independent of the level 
    177             zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
     178            zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
    178179         END DO 
    179180         ! 
     
    192193         zfact(:,:) = 0._wp 
    193194         DO jk = 2, jpkm1              ! part independent of the level 
    194             zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 
     195            zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 
    195196         END DO 
    196197         ! 
     
    213214      zfact(:,:)   = 0._wp 
    214215      DO jk = 2, jpkm1 
    215          zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
     216         zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
    216217         zwkb(:,:,jk) = zfact(:,:) 
    217218      END DO 
    218219!!gm even better: 
    219220!      DO jk = 2, jpkm1 
    220 !         zwkb(:,:) = zwkb(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) 
     221!         zwkb(:,:) = zwkb(:,:) + e3w(:,:,jk,Kmm) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) 
    221222!      END DO 
    222223!      zfact(:,:) = zwkb(:,:,jpkm1) 
     
    253254      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    254255         zemx_iwm(:,:,jk) = zemx_iwm(:,:,jk) + zweight(:,:,jk) * zfact(:,:) * wmask(:,:,jk)   & 
    255             &                                / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    256 !!gm  use of e3t_n just above? 
     256            &                                / ( gde3w(:,:,jk) - gde3w(:,:,jk-1) ) 
     257!!gm  use of e3t(:,:,:,Kmm) just above? 
    257258      END DO 
    258259      ! 
    259260!!gm  this is to be replaced by just a constant value znu=1.e-6 m2/s 
    260261      ! Calculate molecular kinematic viscosity 
    261       znu_t(:,:,:) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * tsn(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem)  & 
    262          &                                  + 0.02305_wp * tsn(:,:,:,jp_sal)  ) * tmask(:,:,:) * r1_rau0 
     262      znu_t(:,:,:) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * ts(:,:,:,jp_tem,Kmm) + 0.00694_wp * ts(:,:,:,jp_tem,Kmm) * ts(:,:,:,jp_tem,Kmm)  & 
     263         &                                  + 0.02305_wp * ts(:,:,:,jp_sal,Kmm)  ) * tmask(:,:,:) * r1_rau0 
    263264      DO jk = 2, jpkm1 
    264265         znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 
     
    300301            DO jj = 1, jpj 
    301302               DO ji = 1, jpi 
    302                   zztmp = zztmp + e3w_n(ji,jj,jk) * e1e2t(ji,jj)   & 
     303                  zztmp = zztmp + e3w(ji,jj,jk,Kmm) * e1e2t(ji,jj)   & 
    303304                     &          * MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 
    304305               END DO 
     
    356357         z2d(:,:) = 0._wp 
    357358         DO jk = 2, jpkm1 
    358             z2d(:,:) = z2d(:,:) + e3w_n(:,:,jk) * z3d(:,:,jk) * wmask(:,:,jk) 
     359            z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 
    359360         END DO 
    360361         z2d(:,:) = rau0 * z2d(:,:) 
Note: See TracChangeset for help on using the changeset viewer.