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

Changeset 15605


Ignore:
Timestamp:
2021-12-16T14:58:14+01:00 (2 years ago)
Author:
khutchinson
Message:

changes required to add background tidal velocities in isf cavities (not sette tested yet)

Location:
NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ISF/isfcavgam.F90

    r13237 r15605  
    1717   USE phycst  , ONLY: grav, vkarmn        ! physical constant 
    1818   USE eosbn2  , ONLY: eos_rab             ! equation of state 
    19    USE zdfdrg  , ONLY: rCd0_top, r_ke0_top ! vertical physics: top/bottom drag coef. 
     19! tipaccs 2d top tidal velocity 
     20   USE zdfdrg  , ONLY: rCd0_top, rke0_top  ! vertical physics: top/bottom drag coef. 
     21! end tipaccs 2d top tidal velocity 
    2022   USE iom     , ONLY: iom_put             ! 
    2123   USE lib_mpp , ONLY: ctl_stop 
     
    9294         pgs(:,:) = rn_gammas0 
    9395      CASE ( 'vel' ) ! gamma is proportional to u* 
    94          CALL gammats_vel      (                   zutbl, zvtbl, rCd0_top, r_ke0_top,               pgt, pgs ) 
     96! tipaccs 2d top tidal velocity 
     97         CALL gammats_vel      (                   zutbl, zvtbl, rCd0_top, rke0_top,               pgt, pgs ) 
    9598      CASE ( 'vel_stab' ) ! gamma depends of stability of boundary layer and u* 
    96          CALL gammats_vel_stab (Kmm, pttbl, pstbl, zutbl, zvtbl, rCd0_top, r_ke0_top, pqoce, pqfwf, pgt, pgs ) 
     99         CALL gammats_vel_stab (Kmm, pttbl, pstbl, zutbl, zvtbl, rCd0_top, rke0_top, pqoce, pqfwf, pgt, pgs ) 
     100! end tipaccs 2d top tidal velocity 
    97101      CASE DEFAULT 
    98102         CALL ctl_stop('STOP','method to compute gamma (cn_gammablk) is unknown (should not see this)') 
     
    131135      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: putbl, pvtbl ! velocity in the losch top boundary layer 
    132136      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pCd          ! drag coefficient 
    133       REAL(wp),                     INTENT(in   ) :: pke2         ! background velocity 
     137! tipaccs (2d tidal velocity) 
     138      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pke2         ! background velocity 
     139! end tipaccs (2d tidal velocity) 
    134140      !!--------------------------------------------------------------------- 
    135141      REAL(wp), DIMENSION(jpi,jpj) :: zustar 
     
    137143      ! 
    138144      ! compute ustar (AD15 eq. 27) 
    139       zustar(:,:) = SQRT( pCd(:,:) * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2 ) ) * mskisf_cav(:,:) 
     145! tipaccs (2d tidal velocity) 
     146      zustar(:,:) = SQRT( pCd(:,:) * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2(:,:) ) ) * mskisf_cav(:,:) 
     147! end tipaccs (2d tidal velocity) 
    140148      ! 
    141149      ! Compute gammats 
     
    161169      !!-------------------------- IN  ------------------------------------- 
    162170      INTEGER                                     :: Kmm            ! ocean time level index 
    163       REAL(wp),                     INTENT(in   ) :: pke2           ! background velocity squared 
     171! tipaccs (2d tidal velocity) 
     172      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pke2           ! background velocity squared 
     173! end tipaccs (2d tidal velocity) 
    164174      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pqoce, pqfwf   ! surface heat flux and fwf flux 
    165175      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pCd            ! drag coeficient 
     
    186196      ! 
    187197      ! compute ustar 
    188       zustar(:,:) = SQRT( pCd * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2 ) ) 
     198! tipaccs (2d tidal velocity) 
     199      zustar(:,:) = SQRT( pCd * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2(:,:) ) ) 
     200! end tipaccs (2d tidal velocity) 
    189201      ! 
    190202      ! output ustar 
  • NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ISF/isfstp.F90

    r14143 r15605  
    2323   USE oce      , ONLY: ssh                           ! sea surface height 
    2424   USE domvvl,  ONLY: ln_vvl_zstar                      ! zstar logical 
    25    USE zdfdrg,  ONLY: r_Cdmin_top, r_ke0_top            ! vertical physics: top/bottom drag coef. 
     25! tipaccs 2d top tidal velocity 
     26   USE zdfdrg,  ONLY: r_Cdmin_top, rke0_top, ln_2d_ttv  ! vertical physics: top/bottom drag coef. 
     27! end tipaccs 2d top tidal velocity 
    2628   ! 
    2729   USE lib_mpp, ONLY: ctl_stop, ctl_nam 
     
    205207                  WRITE(numout,*) '         gammat coefficient                       rn_gammat0   = ', rn_gammat0   
    206208                  WRITE(numout,*) '         gammas coefficient                       rn_gammas0   = ', rn_gammas0   
    207                   WRITE(numout,*) '         top background ke used (from namdrg_top) rn_ke0       = ', r_ke0_top 
     209! tipaccs 2d top tidal velocity 
     210                  IF (ln_2d_ttv) THEN 
     211                     WRITE(numout,*) '         top background ke used (from namdrg_top_tippacs) read from 2d file (see zdfdrg bloc)' 
     212                  ELSE 
     213                     WRITE(numout,*) '         top background ke used (from namdrg_top) rn_ke0       = ', MAXVAL(rke0_top) 
     214                  ENDIF 
     215! end tipaccs 2d top tidal velocity 
    208216                  WRITE(numout,*) '         top drag coef.    used (from namdrg_top) rn_Cd0       = ', r_Cdmin_top 
    209217               END IF 
  • NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ZDF/zdfdrg.F90

    r13558 r15605  
    3333   USE prtctl         ! Print control 
    3434   USE sbc_oce , ONLY : nn_ice  
     35! tipaccs 2d top tidal velocity 
     36   USE fldread, ONLY : FLD_N 
     37! end tipaccs 2d top tidal velocity 
    3538 
    3639   IMPLICIT NONE 
     
    4851   LOGICAL , PUBLIC ::   ln_drgimp    ! implicit top/bottom friction flag 
    4952   LOGICAL , PUBLIC ::   ln_drgice_imp ! implicit ice-ocean drag  
     53! tipaccs 2d top tidal velocity 
     54   LOGICAL , PUBLIC ::   ln_2d_ttv    ! top tidal velocity 
     55! end tipaccs 2d top tidal velocity 
    5056   !                                 !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * 
    5157   REAL(wp)         ::   rn_Cd0       !: drag coefficient                                           [ - ] 
     
    5763   REAL(wp)         ::   rn_boost     !: local boost factor                                         [ - ] 
    5864 
    59    REAL(wp), PUBLIC ::   r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top   ! set from namdrg_top namelist values 
    60    REAL(wp), PUBLIC ::   r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot   !  -    -  namdrg_bot    -       - 
     65! tipaccs 2d top tidal velocity 
     66   REAL(wp), PUBLIC ::   r_Cdmin_top, r_Cdmax_top, r_z0_top   ! set from namdrg_top namelist values 
     67   REAL(wp), PUBLIC ::   r_Cdmin_bot, r_Cdmax_bot, r_z0_bot   !  -    -  namdrg_bot    -       - 
     68! end tipaccs 2d top tidal velocity 
    6169 
    6270   INTEGER ::              ndrg       ! choice of the type of drag coefficient 
     
    7078   LOGICAL          ::   l_log_not_linssh   !: flag to update at each time step the position ot the velocity point  
    7179   ! 
     80! tipaccs 2d top tidal velocity 
     81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   rke0_top, rke0_bot   !: precomputed top/bottom tidal velocity 
     82! end tipaccs 2d top tidal velocity 
    7283   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   rCd0_top, rCd0_bot   !: precomputed top/bottom drag coeff. at t-point (>0) 
    7384   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   rCdU_top, rCdU_bot   !: top/bottom drag coeff. at t-point (<0)  [m/s] 
     
    107118      REAL(wp)                , INTENT(in   ) ::   pCdmax   ! max drag value 
    108119      REAL(wp)                , INTENT(in   ) ::   pz0      ! roughness 
    109       REAL(wp)                , INTENT(in   ) ::   pke0     ! background tidal KE 
     120! tipaccs 2d top tidal velocity 
     121      REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   pke0     ! background tidal KE 
     122! end tipaccs 2d top tidal velocity 
    110123      REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   pCd0     ! masked precomputed part of Cd0 
    111124      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCdU     ! = - Cd*|U|   (t-points) [m/s] 
     
    126139            zcd = (  vkarmn / LOG( zzz / pz0 )  )**2 
    127140            zcd = pCd0(ji,jj) * MIN(  MAX( pCdmin , zcd ) , pCdmax  )   ! here pCd0 = mask*boost 
    128             pCdU(ji,jj) = - zcd * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0  ) 
     141            pCdU(ji,jj) = - zcd * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0(ji,jj)  ) 
    129142         END_2D 
    130143      ELSE                                            !==  standard Cd  ==! 
     
    134147            zvt = vv(ji,jj,imk,Kmm) + vv(ji,jj-1,imk,Kmm) 
    135148            !                                                           ! here pCd0 = mask*boost * drag 
    136             pCdU(ji,jj) = - pCd0(ji,jj) * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0  ) 
     149            pCdU(ji,jj) = - pCd0(ji,jj) * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0(ji,jj)  ) 
    137150         END_2D 
    138151      ENDIF 
     
    266279      !                     !==  BOTTOM drag setting  ==!   (applied at seafloor) 
    267280      ! 
    268       ALLOCATE( rCd0_bot(jpi,jpj), rCdU_bot(jpi,jpj) ) 
     281      ALLOCATE( rCd0_bot(jpi,jpj), rCdU_bot(jpi,jpj), rke0_bot(jpi,jpj) ) 
     282! tipaccs 2d top tidal velocity 
    269283      CALL drg_init( 'BOTTOM'   , mbkt       ,                                         &   ! <== in 
    270          &           r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot, rCd0_bot, rCdU_bot )   ! ==> out 
     284         &           r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, rke0_bot, rCd0_bot, rCdU_bot )   ! ==> out 
     285! end tipaccs 2d top tidal velocity 
     286 
    271287      ! 
    272288      !                     !==  TOP drag setting  ==!   (applied at the top of ocean cavities) 
     
    277293      ! 
    278294      IF( ln_isfcav ) THEN 
    279          ALLOCATE( rCd0_top(jpi,jpj)) 
     295         ALLOCATE( rCd0_top(jpi,jpj), rke0_top(jpi,jpj)) 
     296! tipaccs 2d top tidal velocity 
    280297         CALL drg_init( 'TOP   '   , mikt       ,                                         &   ! <== in 
    281             &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top )   ! ==> out 
     298            &           r_Cdmin_top, r_Cdmax_top, r_z0_top, rke0_top, rCd0_top, rCdU_top )   ! ==> out 
     299! end tipaccs 2d top tidal velocity 
    282300      ENDIF 
    283301      ! 
     
    297315      REAL(wp)                , INTENT(  out) ::   pCdmin, pCdmax  ! min and max drag coef. [-] 
    298316      REAL(wp)                , INTENT(  out) ::   pz0             ! roughness              [m] 
    299       REAL(wp)                , INTENT(  out) ::   pke0            ! background KE          [m2/s2] 
     317! tipaccs 2d top tidal velocity 
     318      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pke0            ! background KE          [m2/s2] 
     319! end tipaccs 2d top tidal velocity 
    300320      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCd0            ! masked precomputed part of the non-linear drag coefficient 
    301321      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pCdU            ! minus linear drag*|U| at t-points  [m/s] 
     
    310330      NAMELIST/namdrg_top/ rn_Cd0, rn_Uc0, rn_Cdmax, rn_ke0, rn_z0, ln_boost, rn_boost 
    311331      NAMELIST/namdrg_bot/ rn_Cd0, rn_Uc0, rn_Cdmax, rn_ke0, rn_z0, ln_boost, rn_boost 
     332 
     333! tipaccs 2d top tidal velocity 
     334      CHARACTER(len=255) :: cn_dirttv 
     335      TYPE(FLD_N)        :: sn_ttv 
     336      REAL(wp)           :: rn_ttv_sf, rn_ttv_os 
     337      NAMELIST/namdrg_top_tipaccs/ ln_2d_ttv, rn_ttv_sf, rn_ttv_os, cn_dirttv, sn_ttv 
     338! end tipaccs 2d top tidal velocity 
    312339      !!---------------------------------------------------------------------- 
    313340      ! 
     
    345372      IF(lwm .AND. ll_top)   WRITE ( numond, namdrg_top ) 
    346373      IF(lwm .AND. ll_bot)   WRITE ( numond, namdrg_bot ) 
     374 
     375! tipaccs 2d top tidal velocity 
     376      IF (ll_top) THEN 
     377         READ (numnam_ref, namdrg_top_tipaccs, IOSTAT = ios, ERR = 905) 
     378905      IF( ios /= 0 )   CALL ctl_nam( ios , TRIM(cl_namref)//'_tipaccs' ) 
     379         READ (numnam_cfg, namdrg_top_tipaccs, IOSTAT = ios, ERR = 906) 
     380906      IF( ios /= 0 )   CALL ctl_nam( ios , TRIM(cl_namcfg)//'_tipaccs' ) 
     381      ENDIF 
     382! end tipaccs 2d top tidal velocity 
     383 
    347384      ! 
    348385      IF(lwp) THEN 
     
    352389         WRITE(numout,*) '      characteristic velocity (linear case)   rn_Uc0   = ', rn_Uc0, ' m/s' 
    353390         WRITE(numout,*) '      non-linear drag maximum                 rn_Cdmax = ', rn_Cdmax 
    354          WRITE(numout,*) '      background kinetic energy  (n-l case)   rn_ke0   = ', rn_ke0 
     391 
     392! tipaccs 2d top tidal velocity 
     393         IF (ll_top) WRITE(numout,*) '      use 2d top tidal velocity               ln_2d_ttv= ', ln_2d_ttv 
     394         IF (ln_2d_ttv .AND. ll_top) THEN 
     395            WRITE(numout,*) '      2d top tital velocity read from file    sn_ttv   = ',TRIM(sn_ttv%clname) 
     396            WRITE(numout,*) '      scale factor applied to ttv             rn_ttv_sf= ', rn_ttv_sf 
     397            WRITE(numout,*) '      offset       applied to ttv             rn_ttv_os= ', rn_ttv_os 
     398         ELSE 
     399            WRITE(numout,*) '      background kinetic energy  (n-l case)   rn_ke0   = ', rn_ke0 
     400         ENDIF 
     401! end tipaccs 2d top tidal velocity 
    355402         WRITE(numout,*) '      bottom roughness           (n-l case)   rn_z0    = ', rn_z0 
    356403         WRITE(numout,*) '      set a regional boost of Cd0             ln_boost = ', ln_boost 
     
    364411      pke0   = rn_ke0 
    365412      ! 
     413! tipaccs 2d top tidal velocity 
     414      IF (ln_2d_ttv) THEN 
     415                  IF(lwp) WRITE(numout,*) 
     416         IF(lwp) WRITE(numout,*) '   ==>>>   use a 2d top tidal velocity read in ',TRIM(sn_ttv%clname), ' file' 
     417         ! 2d top tidal velocity 
     418         CALL iom_open ( TRIM(sn_ttv%clname), inum ) 
     419         CALL iom_get  ( inum, jpdom_global, TRIM(sn_ttv%clvar), pke0, 1 ) 
     420         CALL iom_close( inum) 
     421         !  
     422         ! Eq 9c Jourdain et al. (2019) 
     423         ! input file is a velocity, NEMO need a square velocity 
     424         pke0 = pke0 * rn_ttv_sf + rn_ttv_os 
     425         pke0 = pke0 * pke0 
     426         ! 
     427      ENDIF 
     428! end tipaccs 2d top tidal velocity 
    366429      !                          !==  mask * boost factor  ==! 
    367430      ! 
     
    409472         IF(lwp) WRITE(numout,*) '   ==>>>   quadratic ',TRIM(cd_topbot),' friction (propotional to module of the velocity)' 
    410473         IF(lwp) WRITE(numout,*) '   with    a drag coefficient Cd0 = ', rn_Cd0, ', and' 
    411          IF(lwp) WRITE(numout,*) '           a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 
     474! tipaccs 2d top tidal velocity 
     475         IF (ln_2d_ttv) THEN 
     476            IF(lwp) WRITE(numout,*) '           a 2d top tidal velocity from',TRIM(sn_ttv%clname) 
     477         ELSE 
     478            IF(lwp) WRITE(numout,*) '           a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 
     479         END IF 
     480! end tipaccs 2d top tidal velocity 
    412481         ! 
    413482         l_zdfdrg = .TRUE.          !* Cd*|U| updated at each time-step (it depends on ocean velocity) 
     
    420489         IF(lwp) WRITE(numout,*) '   ==>>>   quadratic ',TRIM(cd_topbot),' drag (propotional to module of the velocity)' 
    421490         IF(lwp) WRITE(numout,*) '   with   a logarithmic Cd0 formulation Cd0 = ( vkarman log(z/z0) )^2 ,' 
    422          IF(lwp) WRITE(numout,*) '          a background velocity module of (rn_ke0)^1/2 = ', SQRT(pke0), 'm/s), ' 
     491! tipaccs 2d top tidal velocity 
     492         IF (ln_2d_ttv) THEN 
     493            IF(lwp) WRITE(numout,*) '           a 2d top tidal velocity from',TRIM(sn_ttv%clname) 
     494         ELSE 
     495            IF(lwp) WRITE(numout,*) '           a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 
     496         END IF 
     497! tipaccs 2d top tidal velocity 
    423498         IF(lwp) WRITE(numout,*) '          a logarithmic formulation: a roughness of ', pz0, ' meters,   and ' 
    424499         IF(lwp) WRITE(numout,*) '          a proportionality factor bounded by min/max values of ', pCdmin, pCdmax 
  • NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ZDF/zdfphy.F90

    r14433 r15605  
    255255         !                       !* bottom drag 
    256256         CALL zdf_drg( kt, Kmm, mbkt , r_Cdmin_bot, r_Cdmax_bot,   &   ! <<== in 
    257             &              r_z0_bot,   r_ke0_bot,    rCd0_bot,   & 
     257            &              r_z0_bot,   rke0_bot,    rCd0_bot,   & 
    258258            &                                        rCdU_bot  )     ! ==>> out : bottom drag [m/s] 
    259259         IF( ln_isfcav ) THEN    !* top drag   (ocean cavities) 
    260260            CALL zdf_drg( kt, Kmm, mikt , r_Cdmin_top, r_Cdmax_top,   &   ! <<== in 
    261                &              r_z0_top,   r_ke0_top,    rCd0_top,   & 
     261               &              r_z0_top,   rke0_top,    rCd0_top,   & 
    262262               &                                        rCdU_top  )     ! ==>> out : bottom drag [m/s] 
    263263         ENDIF 
Note: See TracChangeset for help on using the changeset viewer.