Ignore:
Timestamp:
2019-12-05T18:41:39+01:00 (11 months ago)
Author:
mathiot
Message:

include ENHANCE-02_ISF_nemo in UKMO merge branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/UKMO_MERGE_2019/tests/ISOMIP+/MY_SRC/isfcavgam.F90

    r11889 r12077  
    1010   !!   isfcav_gammats       : compute exchange coeficient gamma  
    1111   !!---------------------------------------------------------------------- 
    12    USE isf 
     12   USE isf_oce 
    1313   USE isfutils, ONLY: debug 
    1414   USE isftbl  , ONLY: isf_tbl 
    1515 
    16    USE oce     , ONLY: un, vn, rn2         ! ocean dynamics and tracers 
     16   USE oce     , ONLY: uu, vv, rn2         ! ocean dynamics and tracers 
    1717   USE phycst  , ONLY: grav, vkarmn        ! physical constant 
    1818   USE eosbn2  , ONLY: eos_rab             ! equation of state 
     
    4141   !!----------------------------------------------------------------------------------------------------- 
    4242   ! 
    43    SUBROUTINE isfcav_gammats( pttbl, pstbl, pqoce, pqfwf, pgt, pgs ) 
     43   SUBROUTINE isfcav_gammats( Kmm, pttbl, pstbl, pqoce, pqfwf, pgt, pgs ) 
    4444      !!---------------------------------------------------------------------- 
    4545      !! ** Purpose    : compute the coefficient echange for heat and fwf flux 
    4646      !! 
    4747      !! ** Method     : select the gamma formulation 
    48       !!                 3 method available (cst, AD15 and HJ99) 
     48      !!                 3 method available (cst, vel and vel_stab) 
    4949      !!--------------------------------------------------------------------- 
    5050      !!-------------------------- OUT ------------------------------------- 
    5151      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pgt  , pgs      ! gamma t and gamma s  
    5252      !!-------------------------- IN  ------------------------------------- 
     53      INTEGER                                     :: Kmm             ! ocean time level index 
    5354      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pqoce, pqfwf    ! isf heat and fwf 
    5455      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pttbl, pstbl    ! top boundary layer tracer 
     
    5758      !!--------------------------------------------------------------------- 
    5859      ! 
    59       ! compute velocity in the tbl if needed 
     60      !========================================== 
     61      ! 1.: compute velocity in the tbl if needed 
     62      !========================================== 
     63      ! 
    6064      SELECT CASE ( cn_gammablk ) 
    6165      CASE ( 'spe'  )  
    6266         ! gamma is constant (specified in namelist) 
    6367         ! nothing to do 
    64       CASE ('ad15', 'hj99') 
     68      CASE ('vel', 'vel_stab') 
    6569         ! compute velocity in tbl 
    66          CALL isf_tbl(un(:,:,:) ,zutbl(:,:),'U', miku, rhisf_tbl_cav) 
    67          CALL isf_tbl(vn(:,:,:) ,zvtbl(:,:),'V', mikv, rhisf_tbl_cav) 
     70         CALL isf_tbl(Kmm, uu(:,:,:,Kmm) ,zutbl(:,:),'U', miku, rhisf_tbl_cav) 
     71         CALL isf_tbl(Kmm, vv(:,:,:,Kmm) ,zvtbl(:,:),'V', mikv, rhisf_tbl_cav) 
    6872         ! 
    6973         ! mask velocity in tbl with ice shelf mask 
     
    7882      END SELECT 
    7983      !  
    80       ! compute gamma 
     84      !========================================== 
     85      ! 2.: compute gamma 
     86      !========================================== 
     87      ! 
    8188      SELECT CASE ( cn_gammablk ) 
    8289      CASE ( 'spe'  ) ! gamma is constant (specified in namelist) 
    8390         pgt(:,:) = rn_gammat0 
    8491         pgs(:,:) = rn_gammas0 
    85       CASE ( 'ad15' ) ! gamma is proportional to u* 
    86          CALL gammats_AD15 (              zutbl, zvtbl, rCd0_top, rn_vtide**2,               pgt, pgs ) 
    87       CASE ( 'hj99' ) ! gamma depends of stability of boundary layer and u* 
    88          CALL gammats_HJ99 (pttbl, pstbl, zutbl, zvtbl, rCd0_top, r_ke0_top  , pqoce, pqfwf, pgt, pgs ) 
     92      CASE ( 'vel' ) ! gamma is proportional to u* 
     93         CALL gammats_vel      (                   zutbl, zvtbl, rCd0_top, r_ke0_top,               pgt, pgs ) 
     94      CASE ( 'vel_stab' ) ! gamma depends of stability of boundary layer and u* 
     95         CALL gammats_vel_stab (Kmm, pttbl, pstbl, zutbl, zvtbl, rCd0_top, r_ke0_top, pqoce, pqfwf, pgt, pgs ) 
    8996      CASE DEFAULT 
    9097         CALL ctl_stop('STOP','method to compute gamma (cn_gammablk) is unknown (should not see this)') 
    9198      END SELECT 
    9299      ! 
    93       ! ouput exchange coeficient and tbl velocity 
     100      !========================================== 
     101      ! 3.: output and debug 
     102      !========================================== 
     103      ! 
    94104      CALL iom_put('isfgammat', pgt(:,:)) 
    95105      CALL iom_put('isfgammas', pgs(:,:)) 
     
    106116   !!----------------------------------------------------------------------------------------------------- 
    107117   ! 
    108    SUBROUTINE gammats_AD15(putbl, pvtbl, pCd, pke2, &   ! <<== in 
     118   SUBROUTINE gammats_vel( putbl, pvtbl, pCd, pke2, &   ! <<== in 
    109119      &                                  pgt, pgs   )   ! ==>> out gammats [m/s] 
    110120      !!---------------------------------------------------------------------- 
     
    113123      !! ** Method     : gamma is velocity dependent ( gt= gt0 * Ustar ) 
    114124      !! 
    115       !! ** Reference  : Jenkins et al., 2010, JPO, p2298-2312 
    116       !!                 Asay-Davis et al., Geosci. Model Dev., 9, 2471-2497, 2016 
     125      !! ** Reference  : Asay-Davis et al., Geosci. Model Dev., 9, 2471-2497, 2016 
    117126      !!--------------------------------------------------------------------- 
    118127      !!-------------------------- OUT ------------------------------------- 
     
    136145      CALL iom_put('isfustar',zustar(:,:)) 
    137146      ! 
    138    END SUBROUTINE gammats_AD15 
    139  
    140    SUBROUTINE gammats_HJ99( pttbl, pstbl, putbl, pvtbl, pCd, pke2, pqoce, pqfwf, &  ! <<== in 
    141       &                                                            pgt  , pgs    )  ! ==>> out gammats [m/s] 
     147   END SUBROUTINE gammats_vel 
     148 
     149   SUBROUTINE gammats_vel_stab( Kmm, pttbl, pstbl, putbl, pvtbl, pCd, pke2, pqoce, pqfwf, &  ! <<== in 
     150      &                                                                     pgt  , pgs    )  ! ==>> out gammats [m/s] 
    142151      !!---------------------------------------------------------------------- 
    143152      !! ** Purpose    : compute the coefficient echange coefficient  
     
    150159      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pgt, pgs     ! gammat and gammas 
    151160      !!-------------------------- IN  ------------------------------------- 
     161      INTEGER                                     :: Kmm            ! ocean time level index 
    152162      REAL(wp),                     INTENT(in   ) :: pke2           ! background velocity squared 
    153163      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pqoce, pqfwf   ! surface heat flux and fwf flux 
     
    199209               ! compute Rc number (as done in zdfric.F90) 
    200210!!gm better to do it like in the new zdfric.F90   i.e. avm weighted Ri computation 
    201                zcoef = 0.5_wp / e3w_n(ji,jj,ikt+1) 
     211               zcoef = 0.5_wp / e3w(ji,jj,ikt+1,Kmm) 
    202212               !                                            ! shear of horizontal velocity 
    203                zdku = zcoef * (  un(ji-1,jj  ,ikt  ) + un(ji,jj,ikt  )  & 
    204                   &             -un(ji-1,jj  ,ikt+1) - un(ji,jj,ikt+1)  ) 
    205                zdkv = zcoef * (  vn(ji  ,jj-1,ikt  ) + vn(ji,jj,ikt  )  & 
    206                   &             -vn(ji  ,jj-1,ikt+1) - vn(ji,jj,ikt+1)  ) 
     213               zdku = zcoef * (  uu(ji-1,jj  ,ikt  ,Kmm) + uu(ji,jj,ikt  ,Kmm)  & 
     214                  &             -uu(ji-1,jj  ,ikt+1,Kmm) - uu(ji,jj,ikt+1,Kmm)  ) 
     215               zdkv = zcoef * (  vv(ji  ,jj-1,ikt  ,Kmm) + vv(ji,jj,ikt  ,Kmm)  & 
     216                  &             -vv(ji  ,jj-1,ikt+1,Kmm) - vv(ji,jj,ikt+1,Kmm)  ) 
    207217               !                                            ! richardson number (minimum value set to zero) 
    208218               zRc = MAX(rn2(ji,jj,ikt+1), 0._wp) / MAX( zdku*zdku + zdkv*zdkv, zeps ) 
     
    211221               zts(jp_tem) = pttbl(ji,jj) 
    212222               zts(jp_sal) = pstbl(ji,jj) 
    213                zdep        = gdepw_n(ji,jj,ikt) 
    214                ! 
    215                CALL eos_rab( zts, zdep, zab ) 
     223               zdep        = gdepw(ji,jj,ikt,Kmm) 
     224               ! 
     225               CALL eos_rab( zts, zdep, zab, Kmm ) 
    216226               ! 
    217227               ! compute length scale (Eq ??) 
     
    220230               ! compute Monin Obukov Length 
    221231               ! Maximum boundary layer depth (Eq ??) 
    222                zhmax = gdept_n(ji,jj,mbkt(ji,jj)) - gdepw_n(ji,jj,mikt(ji,jj)) -0.001_wp 
     232               zhmax = gdept(ji,jj,mbkt(ji,jj),Kmm) - gdepw(ji,jj,mikt(ji,jj),Kmm) -0.001_wp 
    223233               ! 
    224234               ! Compute Monin obukhov length scale at the surface and Ekman depth: (Eq ??) 
     
    243253      END DO 
    244254 
    245    END SUBROUTINE gammats_HJ99 
     255   END SUBROUTINE gammats_vel_stab 
    246256 
    247257END MODULE isfcavgam 
Note: See TracChangeset for help on using the changeset viewer.