Changeset 14358


Ignore:
Timestamp:
2021-01-28T12:05:04+01:00 (5 months ago)
Author:
cbricaud
Message:

add ISF top limit condition for GLS in dev_r14318_MOI-02_MOI-GLS-ICE (ticket #2604 )

Location:
NEMO/branches/2021/dev_r14318_MOI-02_MOI-GLS-ICE/src/OCE/ZDF
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14318_MOI-02_MOI-GLS-ICE/src/OCE/ZDF/zdfgls.F90

    r14345 r14358  
    340340      zdiag(:,:,2) = 1._wp 
    341341      ! 
     342      IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     343         DO_2D( 0, 0, 0, 0 ) 
     344            IF( mikt(ji,jj) > 1 )THEN 
     345               itop   = mikt(ji,jj)       ! k   top w-point 
     346               itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     347               ! 
     348               z_en = MAX( rc02r *  ustar2_top(ji,jj), rn_emin ) 
     349               ! 
     350               ! Dirichlet condition applied at:  
     351               !     top level (itop)         &      Just below it (itopp1)    
     352               zd_lw(ji,jj,itop) = 0._wp   ;   zd_lw(ji,jj,itopp1) = 0._wp 
     353               zd_up(ji,jj,itop) = 0._wp   ;   zd_up(ji,jj,itopp1) = 0._wp 
     354               zdiag(ji,jj,itop) = 1._wp   ;   zdiag(ji,jj,itopp1) = 1._wp 
     355               en   (ji,jj,itop) = z_en    ;   en   (ji,jj,itopp1) = z_en 
     356            ENDIF 
     357         END_2D 
     358      ENDIF 
    342359      ! 
    343360      CASE ( 1 )             ! Neumann boundary condition (set d(e)/dz) 
     
    361378      en(:,:,2) = en(:,:,2) + zflxs(:,:) / e3w(:,:,2,Kmm) 
    362379      ! 
     380      IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     381         DO_2D( 0, 0, 0, 0 ) 
     382            IF( mikt(ji,jj) > 1 )THEN 
     383               itop   = mikt(ji,jj)       ! k   top w-point 
     384               itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     385               ! 
     386               zd_lw(ji,jj,itop) = en(ji,jj,itop) 
     387               zd_up(ji,jj,itop) = 0._wp 
     388               zdiag(ji,jj,itop) = 1._wp 
     389               ! 
     390               zdiag(ji,jj,itopp1) = zdiag(ji,jj,itopp1) + zd_lw(ji,jj,itopp1) !Remove zd_lw from zdiag 
     391               zd_lw(ji,jj,itopp1) = 0._wp 
     392 
     393               zkar (ji,jj)   = (rl_sf +(vkarmn-rl_sf)*(1.-EXP(-rtrans*(gdept(ji,jj,itop,Kmm)-gdepw(ji,jj,itop,Kmm))/r_z0_top))) 
     394               zflxs(ji,jj)   = rsbc_tke2 * ustar2_top(ji,jj)**1.5_wp * zkar(ji,jj) & 
     395                            &                    * (  (r_z0_top+(gdept(ji,jj,itop,Kmm)-gdepw(ji,jj,itop,Kmm)) ) / r_z0_top)**(1.5_wp*ra_sf) 
     396               en(ji,jj,itopp1) = en(ji,jj,itopp1) + zflxs(ji,jj)/e3w(ji,jj,itopp1,Kmm) 
     397            ENDIF 
     398         END_2D 
     399      ENDIF 
    363400      ! 
    364401      END SELECT 
     
    422459            en   (ji,jj,ibot) = z_en 
    423460         END_2D 
     461         ! 
    424462         IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
    425463            DO_2D( 0, 0, 0, 0 ) 
     
    555593         zdiag(:,:,2) = 1._wp 
    556594         ! 
     595         IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     596            DO_2D( 0, 0, 0, 0 ) 
     597               IF( mikt(ji,jj) > 1 )THEN 
     598                  itop   = mikt(ji,jj)       ! k   top w-point 
     599                  itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     600                  ! 
     601                  zdep(ji,jj)         = vkarmn * r_z0_top 
     602                  psi  (ji,jj,itop)   = rc0**rpp * en(ji,jj,itop)**rmm*zdep(ji,jj)**rnn 
     603                  zd_lw(ji,jj,itop)   = 0._wp 
     604                  zd_up(ji,jj,itop)   = 0._wp 
     605                  zdiag(ji,jj,itop)   = 1._wp 
     606                  ! 
     607                  zdep(ji,jj)         = vkarmn * ( r_z0_top + e3t(ji,jj,itopp1,Kmm) ) 
     608                  psi  (ji,jj,itopp1) = rc0**rpp * en(ji,jj,itopp1)**rmm *zdep(ji,jj)**rnn 
     609                  zd_lw(ji,jj,itopp1) = 0._wp 
     610                  zd_up(ji,jj,itopp1) = 0._wp 
     611                  zdiag(ji,jj,itopp1) = 1._wp 
     612               ENDIF 
     613            END_2D 
     614         ENDIF 
     615         ! 
    557616      CASE ( 1 )             ! Neumann boundary condition on d(psi)/dz 
    558617         ! 
     
    579638         zflxs(:,:)   = zdep(:,:) * zflxs(:,:) 
    580639         psi  (:,:,2) = psi(:,:,2) + zflxs(:,:) / e3w(:,:,2,Kmm) 
     640         ! 
     641         IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     642            DO_2D( 0, 0, 0, 0 ) 
     643               IF( mikt(ji,jj) > 1 )THEN 
     644                  itop   = mikt(ji,jj)       ! k   top w-point 
     645                  itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     646                  ! 
     647                  zdep(ji,jj) = vkarmn * r_z0_top 
     648                  psi  (ji,jj,itop) = rc0**rpp * en(ji,jj,itop)**rmm * zdep(ji,jj)**rnn 
     649                  zd_lw(ji,jj,itop) = psi(ji,jj,itop) 
     650                  zd_up(ji,jj,itop) = 0._wp 
     651                  zdiag(ji,jj,itop) = 1._wp 
     652                  ! 
     653                  zdiag(ji,jj,itopp1) = zdiag(ji,jj,itopp1) + zd_lw(ji,jj,itopp1) 
     654                  zd_lw(ji,jj,itopp1) = 0._wp 
     655                  zdep(ji,jj) = vkarmn * ( r_z0_top + e3t(ji,jj,itopp1,Kmm) ) 
     656                  zflxb = rsbc_psi2 * ( p_avm(ji,jj,itop) + p_avm(ji,jj,itopp1)) & 
     657                        &  * (0.5_wp*(en(ji,jj,itop)+en(ji,jj,itopp1)))**rmm * zdep(ji,jj)**(rnn-1._wp) 
     658                  psi(ji,jj,itopp1) = psi(ji,jj,itopp1) + zflxb / e3w(ji,jj,itopp1,Kmm) 
     659               ENDIF 
     660            END_2D 
     661         ENDIF 
     662 
    581663         ! 
    582664      END SELECT 
  • NEMO/branches/2021/dev_r14318_MOI-02_MOI-GLS-ICE/src/OCE/ZDF/zdfphy.F90

    r14072 r14358  
    207207      IF( ioptio /= 1 )    CALL ctl_stop( 'zdf_phy_init: one and only one vertical diffusion option has to be defined ' ) 
    208208      IF( ln_isfcav ) THEN 
    209       IF( ln_zdfric .OR. ln_zdfgls )    CALL ctl_stop( 'zdf_phy_init: zdfric and zdfgls never tested with ice shelves cavities ' ) 
     209      IF( ln_zdfric )    CALL ctl_stop( 'zdf_phy_init: zdfric never tested with ice shelves cavities ' ) 
    210210      ENDIF 
    211211      !                                ! shear production term flag 
Note: See TracChangeset for help on using the changeset viewer.