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 – 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

Location:
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF
Files:
3 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 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r9023 r9089  
    3131   USE in_out_manager ! I/O manager 
    3232   USE iom            ! I/O manager library 
    33    USE timing         ! Timing 
    34    USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)  
     33   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    3534 
    3635   IMPLICIT NONE 
     
    160159      !!-------------------------------------------------------------------- 
    161160      ! 
    162       IF( ln_timing )   CALL timing_start('zdf_gls') 
    163       ! 
    164161      ! Preliminary computing 
    165162 
     
    822819         CALL prt_ctl( tab3d_1=p_avm, clinfo1=' gls  - m: ', ovlap=1, kdim=jpk ) 
    823820      ENDIF 
    824       ! 
    825       IF( ln_timing )   CALL timing_stop('zdf_gls') 
    826821      ! 
    827822   END SUBROUTINE zdf_gls 
     
    852847         &            nn_stab_func, nn_clos 
    853848      !!---------------------------------------------------------- 
    854       ! 
    855       IF( ln_timing )   CALL timing_start('zdf_gls_init') 
    856849      ! 
    857850      REWIND( numnam_ref )              ! Namelist namzdf_gls in reference namelist : Vertical eddy diffivity and viscosity using gls turbulent closure scheme 
     
    11291122      !                                !* read or initialize all required files   
    11301123      CALL gls_rst( nit000, 'READ' )      ! (en, avt_k, avm_k, hmxl_n) 
    1131       ! 
    1132       IF( ln_timing )   CALL timing_stop('zdf_gls_init') 
    11331124      ! 
    11341125   END SUBROUTINE zdf_gls_init 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfosm.F90

    r9019 r9089  
    5959   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    6060   USE prtctl         ! Print control 
    61    USE timing         ! Timing 
    6261   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    6362 
     
    253252      !!-------------------------------------------------------------------- 
    254253      ! 
    255       IF( ln_timing )  CALL timing_start('zdf_osm') 
     254      IF( nn_timing == 1 )  CALL timing_start('zdf_osm') 
    256255      ! 
    257256      ALLOCATE( lconv(jpi,jpj),  STAT= i_lconv_alloc ) 
     
    13521351      CALL lbc_lnk( p_avt(:,:,:), 'W', 1. ) 
    13531352      ! 
    1354       IF( ln_timing )  CALL timing_stop('zdf_osm') 
    1355       ! 
    13561353   END SUBROUTINE zdf_osm 
    13571354 
     
    13761373          & ,ln_kpprimix, rn_riinfty, rn_difri, ln_convmix, rn_difconv 
    13771374     !!---------------------------------------------------------------------- 
    1378      ! 
    1379      IF( ln_timing )  CALL timing_start('zdf_osm_init') 
    13801375     ! 
    13811376     REWIND( numnam_ref )              ! Namelist namzdf_osm in reference namelist : Osmosis ML model 
     
    15031498     ghamu(:,:,:) = 0. 
    15041499     ghamv(:,:,:) = 0. 
    1505  
    1506      ! 
    1507      IF( ln_timing )  CALL timing_stop('zdf_osm_init') 
    15081500     ! 
    15091501   END SUBROUTINE zdf_osm_init 
     
    16161608      INTEGER :: ji, jj, jk 
    16171609      ! 
    1618       IF( ln_timing )  CALL timing_start('tra_osm') 
    1619       ! 
    16201610      IF( kt == nit000 ) THEN 
    16211611         IF(lwp) WRITE(numout,*) 
     
    16581648         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    16591649      ENDIF 
    1660       ! 
    1661       IF( ln_timing )  CALL timing_stop('tra_osm') 
    16621650      ! 
    16631651   END SUBROUTINE tra_osm 
     
    16951683      !!---------------------------------------------------------------------- 
    16961684      ! 
    1697       IF( ln_timing )  CALL timing_start('dyn_osm') 
    1698       ! 
    16991685      IF( kt == nit000 ) THEN 
    17001686         IF(lwp) WRITE(numout,*) 
     
    17161702         END DO 
    17171703      END DO 
    1718  
     1704      ! 
    17191705      ! code for saving tracer trends removed 
    17201706      ! 
    1721       IF( ln_timing )  CALL timing_stop('dyn_osm') 
    1722       ! 
    17231707   END SUBROUTINE dyn_osm 
    17241708 
Note: See TracChangeset for help on using the changeset viewer.