Ignore:
Timestamp:
2012-03-12T15:44:43+01:00 (9 years ago)
Author:
gm
Message:

Ediag branche: #927 add Kinetic Energy trend diagnostics (trdken.F90)

File:
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90

    r3318 r3325  
    1 MODULE trddyn 
     1MODULE trdken 
    22   !!====================================================================== 
    3    !!                       ***  MODULE  trddyn  *** 
    4    !! Ocean diagnostics:  ocean dynamic trends 
     3   !!                       ***  MODULE  trdken  *** 
     4   !! Ocean diagnostics:  compute and output 3D kinetic energy trends 
    55   !!===================================================================== 
    6    !! History :  3.5  !  2012-02  (G. Madec) creation from trdmod: split DYN and TRA trends 
    7    !!                           and manage  3D trends output for U, V, and KE 
    8    !!---------------------------------------------------------------------- 
    9  
    10    !!---------------------------------------------------------------------- 
    11    !!   trd_dyn       : manage the type of momentum trend diagnostics (3D I/O, domain averaged, KE) 
    12    !!   trd_dyn_iom   : output 3D momentum and/or tracer trends using IOM 
    13    !!   trd_dyn_init  : initialization step 
     6   !! History :  3.5  !  2012-02  (G. Madec) original code 
     7   !!---------------------------------------------------------------------- 
     8 
     9   !!---------------------------------------------------------------------- 
     10   !!   trd_ken       : compute and output 3D Kinetic energy trends using IOM 
     11   !!   trd_ken_init  : initialisation 
    1412   !!---------------------------------------------------------------------- 
    1513   USE oce            ! ocean dynamics and tracers variables 
     
    3230   PRIVATE 
    3331 
    34    REAL(wp) ::   r2dt    ! time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0 
    35  
    36    PUBLIC trd_dyn        ! called by all dynXX modules 
     32   PUBLIC   trd_ken       ! called by trddyn module 
     33   PUBLIC   trd_ken_init  ! called by trdini module 
     34 
     35   INTEGER ::   nkstp       ! current time step  
     36   REAL(wp)::   r1_2_rau0   ! = 0.5 / rau0  
     37 
     38   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   bu, bv   ! volume of u- and v-boxes 
     39   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   r1_bt    ! inverse of t-box volume 
    3740 
    3841   !! * Substitutions 
     
    4649CONTAINS 
    4750 
    48    SUBROUTINE trd_dyn( putrd, pvtrd, ktrd, kt ) 
    49       !!--------------------------------------------------------------------- 
    50       !!                  ***  ROUTINE trd_mod  *** 
     51   INTEGER FUNCTION trd_ken_alloc() 
     52      !!--------------------------------------------------------------------- 
     53      !!                  ***  FUNCTION trd_ken_alloc  *** 
     54      !!--------------------------------------------------------------------- 
     55      ALLOCATE( bu(jpi,jpj,jpk) , bv(jpi,jpj,jpk) , r1_bt(jpi,jpj,jpk) , STAT= trd_ken_alloc ) 
     56      ! 
     57      IF( lk_mpp             )   CALL mpp_sum ( trd_ken_alloc ) 
     58      IF( trd_ken_alloc /= 0 )   CALL ctl_warn('trd_ken_alloc: failed to allocate arrays') 
     59   END FUNCTION trd_ken_alloc 
     60 
     61 
     62   SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt ) 
     63      !!--------------------------------------------------------------------- 
     64      !!                  ***  ROUTINE trd_ken  *** 
    5165      !!  
    52       !! ** Purpose :   Dispatch momentum trend computation, e.g. 3D output,  
    53       !!              integral constraints, barotropic vorticity, kinetic enrgy,  
    54       !!              and/or mixed layer budget. 
    55       !!---------------------------------------------------------------------- 
    56       REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends  
     66      !! ** Purpose :   output 3D Kinetic Energy trends using IOM 
     67      !! 
     68      !! ** Method  : - apply lbc to the input masked velocity trends  
     69      !!              - compute the associated KE trend: 
     70      !!          zke = 0.5 * (  mi-1[ un * putrd * bu ] + mj-1[ vn * pvtrd * bv]  ) / bt 
     71      !!      where bu, bv, bt are the volume of u-, v- and t-boxes.  
     72      !!              - vertical diffusion case (jpdyn_zdf):  
     73      !!          diagnose separately the KE trend associated with wind stress 
     74      !!              - bottom friction case (jpdyn_bfr): 
     75      !!          explicit case (ln_bfrimp=F): bottom trend put in the 1st level  
     76      !!                                       of putrd, pvtrd 
     77      ! 
     78      ! 
     79      !!---------------------------------------------------------------------- 
     80      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V masked trends 
    5781      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    5882      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
    59       !! 
    60       INTEGER ::   ji, jj   ! dummy loop indices 
    61       REAL(wp), POINTER, DIMENSION(:,:) ::   ztswu, ztswv    ! 2D workspace  
    62       !!---------------------------------------------------------------------- 
    63  
    64       CALL wrk_alloc( jpi, jpj, ztswu, ztswv ) 
    65  
    66       IF( neuler == 0 .AND. kt == nit000    ) THEN   ;   r2dt =      rdt      ! = rdtra (restart with Euler time stepping) 
    67       ELSEIF(               kt <= nit000 + 1) THEN   ;   r2dt = 2. * rdt      ! = 2 rdttra (leapfrog) 
     83      ! 
     84      INTEGER ::   ji, jj, jk       ! dummy loop indices 
     85      INTEGER ::   ikbu  , ikbv     ! local integers 
     86      INTEGER ::   ikbum1, ikbvm1   !   -       - 
     87      REAL(wp), POINTER, DIMENSION(:,:)   ::   z2dx, z2dy, zke2d   ! 2D workspace  
     88      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zke                 ! 3D workspace  
     89      !!---------------------------------------------------------------------- 
     90      ! 
     91      CALL lbc_lnk( putrd, 'U', -1. )   ;   CALL lbc_lnk( pvtrd, 'V', -1. )      ! lateral boundary conditions 
     92      ! 
     93      IF ( lk_vvl .AND. kt /= nkstp ) THEN   ! Variable volume: set box volume at the 1st call of kt time step 
     94         nkstp = kt 
     95         DO jk = 1, jpkm1 
     96            bu   (:,:,jk) =  e1u(:,:) * e2u(:,:) * fse3u_n(:,:,jk) 
     97            bv   (:,:,jk) =  e1v(:,:) * e2v(:,:) * fse3v_n(:,:,jk) 
     98            r1_bt(:,:,jk) = 1._wp / ( e1e2t(:,:) * fse3t_n(:,:,jk) ) * tmask(:,:,jk) 
     99         END DO 
    68100      ENDIF 
    69  
    70       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    71       !   3D output of momentum and/or tracers trends using IOM interface 
    72       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    73       IF( ln_dyn_trd )   CALL trd_dyn_iom( putrd, pvtrd, ktrd, kt ) 
    74           
    75       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    76       !  Integral Constraints Properties for momentum and/or tracers trends 
    77       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    78       IF( ln_glo_trd  )   CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt ) 
    79  
    80       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    81       !  Kinetic Energy trends 
    82       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    83 !!gm      IF( ln_KE_trd  )   CALL trd_KE( putrd, pvtrd, ktrd, kt ) 
    84  
    85       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    86       !  Vorticity trends 
    87       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    88       IF( ln_vor_trd  )   CALL trd_vor( putrd, pvtrd, ktrd, kt ) 
    89  
    90       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    91       !  Mixed layer trends for active tracers 
    92       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    93 !!gm      IF( ln_dyn_mld )   CALL trd_mld_dyn    
    94       ! 
    95       CALL wrk_dealloc( jpi, jpj, ztswu, ztswv ) 
    96       ! 
    97    END SUBROUTINE trd_dyn 
    98  
    99  
    100    SUBROUTINE trd_dyn_iom( putrd, pvtrd, ktrd, kt ) 
    101       !!--------------------------------------------------------------------- 
    102       !!                  ***  ROUTINE trd_dyn_iom  *** 
    103       !!  
    104       !! ** Purpose :   output 3D trends using IOM 
    105       !!---------------------------------------------------------------------- 
    106       REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends 
    107       INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    108       INTEGER                   , INTENT(in   ) ::   kt             ! time step 
    109       ! 
    110       INTEGER ::   ji, jj, jk   ! dummy loop indices 
    111       INTEGER ::   ikbu, ikbv   ! local integers 
    112       REAL(wp), POINTER, DIMENSION(:,:)   ::   z2dx, z2dy, ztswu, ztswv   ! 2D workspace  
    113       REAL(wp), POINTER, DIMENSION(:,:,:) ::   z3dx, z3dy                 ! 3D workspace  
    114       !!---------------------------------------------------------------------- 
    115       ! 
    116       putrd(:,:,:) = putrd(:,:,:) * umask(:,:,:)                       ! mask the trends 
    117       pvtrd(:,:,:) = pvtrd(:,:,:) * vmask(:,:,:) 
    118  
    119 !!gm NB : here a lbc_lnk should probably be added 
    120  
    121       ! 
    122       SELECT CASE( ktrd ) 
    123       CASE( jpdyn_hpg )   ;   CALL iom_put( "utrd_hpg", putrd )    ! hydrostatic pressure gradient 
    124                               CALL iom_put( "vtrd_hpg", pvtrd ) 
    125       CASE( jpdyn_spg )   ;   CALL iom_put( "utrd_spg", putrd )    ! surface pressure gradient 
    126                               CALL iom_put( "vtrd_spg", pvtrd ) 
    127       CASE( jpdyn_pvo )   ;   CALL iom_put( "utrd_pvo", putrd )    ! planetary vorticity 
    128                               CALL iom_put( "vtrd_pvo", pvtrd ) 
    129       CASE( jpdyn_rvo )   ;   CALL iom_put( "utrd_rvo", putrd )    ! relative  vorticity     (or metric term) 
    130                               CALL iom_put( "vtrd_rvo", pvtrd ) 
    131       CASE( jpdyn_keg )   ;   CALL iom_put( "utrd_keg", putrd )    ! Kinetic Energy gradient (or had) 
    132                               CALL iom_put( "vtrd_keg", pvtrd ) 
    133          z3dx(:,:,:) = 0._wp                                           ! U.dxU & V.dyV (approximation) 
    134          z3dy(:,:,:) = 0._wp 
    135          DO jk = 1, jpkm1                                                  ! no mask as un,vn are masked 
    136             DO jj = 2, jpjm1 
    137                 DO ji = 2, jpim1 
    138                   z3dx(ji,jj,jk) = un(ji,jj,jk) * ( un(ji+1,jj,jk) - un(ji-1,jj,jk) ) / ( 2._wp * e1u(ji,jj) ) 
    139                   z3dy(ji,jj,jk) = vn(ji,jj,jk) * ( vn(ji,jj+1,jk) - vn(ji,jj-1,jk) ) / ( 2._wp * e2v(ji,jj) ) 
    140                END DO 
     101      ! 
     102      zke(:,:,jpk) = 0._wp 
     103      zke(1,:, : ) = 0._wp 
     104      zke(:,1, : ) = 0._wp 
     105      DO jk = 1, jpkm1 
     106         DO jj = 2, jpj 
     107            DO ji = 2, jpj 
     108               zke(ji,jj,jk) = 0.5_wp * (   un(ji  ,jj,jk) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
     109                  &                       + un(ji-1,jj,jk) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
     110                  &                       + vn(ji,jj  ,jk) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
     111                  &                       + vn(ji,jj-1,jk) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk)  ) * r1_bt(ji,jj,jk) 
    141112            END DO 
    142113         END DO 
    143          CALL lbc_lnk( z3dx, 'U', -1. )   ;    CALL lbc_lnk( z3dy, 'V', -1. ) 
    144                               CALL iom_put( "utrd_udx", z3dx  )  
    145                               CALL iom_put( "vtrd_vdy", z3dy  ) 
    146       CASE( jpdyn_zad )   ;   CALL iom_put( "utrd_zad", putrd )    ! vertical   advection 
    147                               CALL iom_put( "vtrd_zad", pvtrd ) 
    148       CASE( jpdyn_ldf )   ;   CALL iom_put( "utrd_ldf", putrd )    ! lateral diffusion 
    149                               CALL iom_put( "vtrd_ldf", pvtrd ) 
    150       CASE( jpdyn_zdf )   ;   CALL iom_put( "utrd_zdf", putrd )    ! vertical diffusion  
    151                               CALL iom_put( "vtrd_zdf", pvtrd ) 
    152                               !                                    ! wind stress trends 
    153                               z2dx(:,:) = ( utau_b(ji,jj) + utau(ji,jj) ) / ( fse3u(:,:,1) * rau0 ) 
    154                               z2dy(:,:) = ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( fse3v(:,:,1) * rau0 ) 
    155                               CALL iom_put( "utrd_tau", z2dx ) 
    156                               CALL iom_put( "vtrd_tau", z2dy ) 
    157       CASE( jpdyn_bfr ) 
    158          IF( .NOT.ln_bfrimp )     CALL iom_put( "utrd_bfr", putrd )    ! bottom friction (explicit case) 
    159          IF( .NOT.ln_bfrimp )     CALL iom_put( "vtrd_bfr", pvtrd ) 
     114      END DO 
     115      ! 
     116      SELECT CASE( ktrd ) 
     117      CASE( jpdyn_hpg )   ;   CALL iom_put( "ketrd_hpg", zke )    ! hydrostatic pressure gradient 
     118      CASE( jpdyn_spg )   ;   CALL iom_put( "ketrd_spg", zke )    ! surface pressure gradient 
     119      CASE( jpdyn_pvo )   ;   CALL iom_put( "ketrd_pvo", zke )    ! planetary vorticity 
     120      CASE( jpdyn_rvo )   ;   CALL iom_put( "ketrd_rvo", zke )    ! relative  vorticity     (or metric term) 
     121      CASE( jpdyn_keg )   ;   CALL iom_put( "ketrd_keg", zke )    ! Kinetic Energy gradient (or had) 
     122      CASE( jpdyn_zad )   ;   CALL iom_put( "ketrd_zad", zke )    ! vertical   advection 
     123      CASE( jpdyn_ldf )   ;   CALL iom_put( "ketrd_ldf", zke )    ! lateral diffusion 
     124      CASE( jpdyn_zdf )   ;   CALL iom_put( "ketrd_zdf", zke )    ! vertical diffusion  
     125                              !                                   ! wind stress trends 
     126         z2dx(:,:) = un(:,:,1) * ( utau_b(:,:) + utau(:,:) ) * e1u(:,:) * e2u(:,:) * umask(:,:,1) 
     127         z2dy(:,:) = vn(:,:,1) * ( vtau_b(:,:) + vtau(:,:) ) * e1v(:,:) * e2v(:,:) * vmask(:,:,1) 
     128         zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
     129         DO jj = 2, jpj 
     130            DO ji = 2, jpj 
     131               zke2d(ji,jj) = r1_2_rau0 * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
     132                  &                         + z2dy(ji,jj) + z2dy(ji,jj-1)   ) * r1_bt(ji,jj,1) 
     133            END DO            ! 
     134         END DO               ! 
     135                              CALL iom_put( "ketrd_tau", zke2d ) 
     136      CASE( jpdyn_bfr )   ;   CALL iom_put( "ketrd_bfr", zke )    ! bottom friction (explicit)  
     137!!gm TO BE DONE properly 
     138!         IF( .NOT.ln_bfrimp ) THEN 
     139!            DO jj = 1, jpj    !    
     140!               DO ji = 1, jpi 
     141!                  ikbu = mbku(ji,jj)         ! deepest ocean u- & v-levels 
     142!                  ikbv = mbkv(ji,jj)    
     143!                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) 
     144!                  z2dy(ji,jj) = vn(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) 
     145!               END DO 
     146!            END DO 
     147!            zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
     148!            DO jj = 2, jpj 
     149!               DO ji = 2, jpj 
     150!                  zke2d(ji,jj) = 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
     151!                     &                      + z2dy(ji,jj) + z2dy(ji,jj-1)   ) * r1_bt(ji,jj,  BEURK!!! 
     152!               END DO 
     153!            END DO 
     154!                              CALL iom_put( "ketrd_bfr", zke2d )    ! bottom friction (explicit case) 
    160155!!gm only valid if ln_bfrimp=T otherwise the bottom stress as to be recomputed at the end of the compuation.... 
    161  
    162       CASE( jpdyn_atf )   ;   CALL iom_put( "utrd_atf", putrd )    ! asselin filter trends  
    163                               CALL iom_put( "vtrd_atf", pvtrd ) 
    164          IF( ln_bfrimp ) THEN                                          ! bottom friction (implicit case) 
    165             z3dx(:,:,:) = 0._wp   ;   z3dy(:,:,:) = 0._wp                 ! after velocity known (now filed at this stage) 
    166             DO jk = 1, jpkm1 
    167                DO jj = 2, jpjm1 
    168                   DO ji = 2, jpim1 
    169                      ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    170                      ikbv = mbkv(ji,jj) 
    171                      z3dx(ji,jj,jk) = bfrua(ji,jj) * un(ji,jj,ikbu) / fse3u(ji,jj,ikbu) 
    172                      z3dy(ji,jj,jk) = bfrva(ji,jj) * vn(ji,jj,ikbv) / fse3v(ji,jj,ikbv) 
    173                   END DO 
    174                END DO 
    175             END DO 
    176                               CALL iom_put( "utrd_bfr", z3dx )    ! bottom friction (implicit) 
    177                               CALL iom_put( "vtrd_bfr", z3dy ) 
    178          ENDIF 
     156!         ENDIF 
     157!!gm end 
     158      CASE( jpdyn_atf )   ;   CALL iom_put( "ketrd_atf", zke )    ! asselin filter trends  
     159 
     160 
     161!! a faire !!!!  idee changer dynnxt pour avoir un appel a jpdynbfr avant le swap !!! 
     162!! reflechir à une possible sauvegarde du "vrai" un,vn pour le calcul de atf.... 
     163! 
     164!         IF( ln_bfrimp ) THEN                                          ! bottom friction (implicit case) 
     165!            DO jj = 1, jpj                                                  ! after velocity known (now filed at this stage) 
     166!               DO ji = 1, jpi 
     167!                  ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
     168!                  ikbv = mbkv(ji,jj) 
     169!                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) / fse3u(ji,jj,ikbu) 
     170!                  z2dy(ji,jj) = un(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) / fse3v(ji,jj,ikbv) 
     171!               END DO 
     172!            END DO 
     173!            zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
     174!            DO jj = 2, jpj 
     175!               DO ji = 2, jpj 
     176!                  zke2d(ji,jj) = 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
     177!                     &                      + z2dy(ji,jj) + z2dy(ji,jj-1)   ) 
     178!               END DO 
     179!            END DO 
     180!                              CALL iom_put( "ketrd_bfr", zke2d ) 
     181!         ENDIF 
    179182         ! 
    180183      END SELECT 
    181184      ! 
    182       CALL wrk_dealloc( jpi, jpj     , z2dx, z2dy, ztswu, ztswv ) 
    183       CALL wrk_dealloc( jpi, jpj, jpk, z3dx, z3dy ) 
    184       ! 
    185    END SUBROUTINE trd_dyn_iom 
     185      CALL wrk_dealloc( jpi, jpj     , z2dx, z2dy, zke2d ) 
     186      CALL wrk_dealloc( jpi, jpj, jpk, zke ) 
     187      ! 
     188   END SUBROUTINE trd_ken 
     189 
     190 
     191   SUBROUTINE trd_ken_init 
     192      !!--------------------------------------------------------------------- 
     193      !!                  ***  ROUTINE trd_ken_init  *** 
     194      !!  
     195      !! ** Purpose :   initialisation of 3D Kinetic Energy trend diagnostic 
     196      !!---------------------------------------------------------------------- 
     197      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     198      !!---------------------------------------------------------------------- 
     199      ! 
     200      IF(lwp) THEN 
     201         WRITE(numout,*) 
     202         WRITE(numout,*) 'trd_ken_init : 3D Kinetic Energy trends' 
     203         WRITE(numout,*) '~~~~~~~~~~~~~' 
     204      ENDIF 
     205      !                           ! allocate box volume arrays 
     206      IF ( trd_ken_alloc() /= 0 )   CALL ctl_stop('trd_ken_alloc: failed to allocate arrays') 
     207      ! 
     208      IF ( .NOT.lk_vvl ) THEN     ! constant volume: bu, bv, 1/bt computed one for all 
     209         DO jk = 1, jpkm1 
     210            bu   (:,:,jk) =  e1u(:,:) * e2u(:,:) * fse3u_n(:,:,jk) 
     211            bv   (:,:,jk) =  e1v(:,:) * e2v(:,:) * fse3v_n(:,:,jk) 
     212            r1_bt(:,:,jk) = 1._wp / ( e1e2t(:,:) * fse3t_n(:,:,jk) ) 
     213         END DO 
     214      ENDIF 
     215      ! 
     216      nkstp     = 0 
     217      r1_2_rau0 = 0.5_wp / rau0 
     218      ! 
     219   END SUBROUTINE trd_ken_init 
    186220 
    187221   !!====================================================================== 
    188 END MODULE trddyn 
     222END MODULE trdken 
Note: See TracChangeset for help on using the changeset viewer.