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 9089 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfdrg.F90 – NEMO

Ignore:
Timestamp:
2017-12-15T18:00:09+01:00 (6 years ago)
Author:
gm
Message:

dev_merge_2017: bug correction in zdfdrg + ISOMIP cfg

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfdrg.F90

    r9019 r9089  
    2929   USE lib_mpp        ! distributed memory computing 
    3030   USE prtctl         ! Print control 
    31    USE timing         ! Timing 
    3231 
    3332   IMPLICIT NONE 
     
    7877CONTAINS 
    7978 
    80    SUBROUTINE zdf_drg( kt, k_mk, pCdmin, pCdmax, pz0, pke0, pCd0, pCdU ) 
     79   SUBROUTINE zdf_drg( kt, k_mk, pCdmin, pCdmax, pz0, pke0, pCd0,   &   ! <<== in  
     80      &                                                     pCdU )      ! ==>> out : bottom drag [m/s] 
    8181      !!---------------------------------------------------------------------- 
    8282      !!                   ***  ROUTINE zdf_drg  *** 
     
    108108      REAL(wp)::   zzz, zut, zvt, zcd   ! local scalars 
    109109      !!---------------------------------------------------------------------- 
    110       ! 
    111       IF( ln_timing )   CALL timing_start('zdf_drg') 
    112       ! 
    113110      ! 
    114111      IF( l_log_not_linssh ) THEN     !==  "log layer"  ==!   compute Cd and -Cd*|U| 
     
    123120               zcd = (  vkarmn / LOG( zzz / pz0 )  )**2 
    124121               zcd = pCd0(ji,jj) * MIN(  MAX( pCdmin , zcd ) , pCdmax  )   ! here pCd0 = mask*boost 
    125                pCdU(ji,jj) = - zcd * SQRT(  0.25 * ( zut*zvt + zvt*zvt ) + pke0  ) 
     122               pCdU(ji,jj) = - zcd * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0  ) 
    126123            END DO 
    127124         END DO 
     
    133130               zvt = vn(ji,jj,imk) + vn(ji,jj-1,imk) 
    134131               !                                                           ! here pCd0 = mask*boost * drag 
    135                pCdU(ji,jj) = - pCd0(ji,jj) * SQRT(  0.25 * ( zut*zvt + zvt*zvt ) + pke0  ) 
     132               pCdU(ji,jj) = - pCd0(ji,jj) * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0  ) 
    136133            END DO 
    137134         END DO 
     
    139136      ! 
    140137      IF(ln_ctl)   CALL prt_ctl( tab2d_1=pCdU, clinfo1=' Cd*U ') 
    141       ! 
    142       IF( ln_timing )   CALL timing_stop('zdf_drg') 
    143138      ! 
    144139   END SUBROUTINE zdf_drg 
     
    200195      !                     !==  TOP drag setting  ==!   (applied at the top of ocean cavities) 
    201196      ! 
    202       IF ( ln_isfcav ) THEN             ! Ocean cavities: top friction setting 
     197      IF( ln_isfcav ) THEN              ! Ocean cavities: top friction setting 
    203198         ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 
    204199         CALL drg_init( 'TOP   '   , mikt       ,                                         &   ! <== in 
    205             &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_bot, rCdU_bot )   ! ==> out 
     200            &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top )   ! ==> out 
    206201      ENDIF 
    207202      ! 
     
    223218      REAL(wp)                , INTENT(  out) ::   pke0            ! background KE          [m2/s2] 
    224219      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCd0            ! masked precomputed part of the non-linear drag coefficient 
    225       REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCdU            ! linear drag*|U| at t-points  [m/s] 
     220      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCdU            ! minus linear drag*|U| at t-points  [m/s] 
    226221      !! 
    227222      CHARACTER(len=40) ::   cl_namdrg, cl_file, cl_varname, cl_namref, cl_namcfg  ! local names  
     
    318313         l_zdfdrg = .FALSE.         ! no time variation of the drag: set it one for all 
    319314         ! 
    320          pCdU(:,:) = 0._wp          ! pCd0 never used 
     315         pCdU(:,:) = 0._wp 
     316         pCd0(:,:) = 0._wp 
    321317         ! 
    322318      CASE( np_lin )             !==  linear friction  ==!   (pCdU = Cd0 * Uc0) 
     
    326322         l_zdfdrg = .FALSE.         ! no time variation of the Cd*|U| : set it one for all 
    327323         !                       
    328          pCdU(:,:) = - rn_Cd0 * rn_Uc0 * zmsk_boost(:,:)   ! pCd0 never used: remain undefined 
     324         pCd0(:,:) = rn_Cd0 * zmsk_boost(:,:)  !* constant in time drag coefficient (= mask (and boost) Cd0) 
     325         pCdU(:,:) = - pCd0(:,:) * rn_Uc0      !  using a constant velocity 
    329326         ! 
    330327      CASE( np_non_lin )         !== non-linear friction  ==!   (pCd0 = Cd0 ) 
     
    337334         ! 
    338335         pCd0(:,:) = rn_Cd0 * zmsk_boost(:,:)  !* constant in time proportionality coefficient (= mask (and boost) Cd0) 
     336         pCdU(:,:) = 0._wp                     !   
    339337         ! 
    340338      CASE( np_loglayer )       !== logarithmic layer formulation of friction  ==!   (CdU = (vkarman log(z/z0))^2 |U| ) 
     
    349347         ! 
    350348         IF( ln_linssh ) THEN       !* pCd0 = (v log(z/z0))^2   as velocity points have a fixed z position 
    351          IF(lwp) WRITE(numout,*) 
    352          IF(lwp) WRITE(numout,*) '   N.B.   linear free surface case, Cd0 computed one for all' 
     349            IF(lwp) WRITE(numout,*) 
     350            IF(lwp) WRITE(numout,*) '   N.B.   linear free surface case, Cd0 computed one for all' 
    353351            ! 
    354352            l_log_not_linssh = .FALSE.    !- don't update Cd at each time step 
     
    369367            pCd0(:,:) = zmsk_boost(:,:) 
    370368         ENDIF 
     369         pCdU(:,:) = 0._wp          ! initialisation to zero (will be updated at each time step) 
    371370         ! 
    372371      CASE DEFAULT 
Note: See TracChangeset for help on using the changeset viewer.