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 5189 for branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90 – NEMO

Ignore:
Timestamp:
2015-03-31T19:58:23+02:00 (9 years ago)
Author:
mathiot
Message:

ISF cleaning branch: simplification and bug correction in hpg_isf, zps_hde_isf, mixed layer definition, slope, diffusion, vertical advection and top friction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90

    r5120 r5189  
    171171            END DO 
    172172         END DO 
     173         CALL lbc_lnk( bfrua, 'U', 1. )   ;   CALL lbc_lnk( bfrva, 'V', 1. )      ! Lateral boundary condition 
    173174         IF ( ln_isfcav ) THEN 
    174175            DO jj = 2, jpjm1 
     
    202203               END DO 
    203204            END DO 
     205            CALL lbc_lnk( tfrua, 'U', 1. )   ;   CALL lbc_lnk( tfrva, 'V', 1. )      ! Lateral boundary condition 
    204206         END IF 
    205207         ! 
    206          CALL lbc_lnk( bfrua, 'U', 1. )   ;   CALL lbc_lnk( bfrva, 'V', 1. )      ! Lateral boundary condition 
    207208         ! 
    208209         IF(ln_ctl)   CALL prt_ctl( tab2d_1=bfrua, clinfo1=' bfr  - u: ', mask1=umask,        & 
     
    295296         bfrua(:,:) = - bfrcoef2d(:,:) 
    296297         bfrva(:,:) = - bfrcoef2d(:,:) 
     298         ! 
     299         IF ( ln_isfcav ) THEN 
     300            IF(ln_tfr2d) THEN 
     301               ! tfr_coef is a coefficient in [0,1] giving the mask where to apply the bfr enhancement 
     302               CALL iom_open('tfr_coef.nc',inum) 
     303               CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! tfrcoef2d is used as tmp array 
     304               CALL iom_close(inum) 
     305               tfrcoef2d(:,:) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
     306            ELSE 
     307               tfrcoef2d(:,:) = rn_tfri1  ! initialize tfrcoef2d to the namelist variable 
     308            ENDIF 
     309            ! 
     310            tfrua(:,:) = - tfrcoef2d(:,:) 
     311            tfrva(:,:) = - tfrcoef2d(:,:) 
     312         END IF 
    297313         ! 
    298314      CASE( 2 ) 
     
    336352            bfrcoef2d(:,:) = rn_bfri2  ! initialize bfrcoef2d to the namelist variable 
    337353         ENDIF 
     354          
     355         IF ( ln_isfcav ) THEN 
     356            IF(ln_tfr2d) THEN 
     357               ! tfr_coef is a coefficient in [0,1] giving the mask where to apply the bfr enhancement 
     358               CALL iom_open('tfr_coef.nc',inum) 
     359               CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! bfrcoef2d is used as tmp array 
     360               CALL iom_close(inum) 
     361               ! 
     362               tfrcoef2d(:,:) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
     363            ELSE 
     364               tfrcoef2d(:,:) = rn_tfri2  ! initialize tfrcoef2d to the namelist variable 
     365            ENDIF 
     366         END IF 
    338367         ! 
    339368         IF ( ln_loglayer.AND.(.NOT.lk_vvl) ) THEN ! set "log layer" bottom friction once for all 
     
    346375               END DO 
    347376            END DO 
     377            IF ( ln_isfcav ) THEN 
     378               DO jj = 1, jpj 
     379                  DO ji = 1, jpi 
     380                     ikbt = mikt(ji,jj) 
     381                     ztmp = tmask(ji,jj,ikbt) * ( vkarmn / LOG( 0.5_wp * fse3t_n(ji,jj,ikbt) / rn_tfrz0 ))**2._wp 
     382                     tfrcoef2d(ji,jj) = MAX(tfrcoef2d(ji,jj), ztmp) 
     383                     tfrcoef2d(ji,jj) = MIN(tfrcoef2d(ji,jj), rn_tfri2_max) 
     384                  END DO 
     385               END DO 
     386            END IF 
    348387         ENDIF 
    349388         ! 
     
    398437             zminbfr = MIN(  zminbfr, MIN( zfru, ABS( bfrcoef2d(ji,jj) ) )  ) 
    399438             zmaxbfr = MAX(  zmaxbfr, MIN( zfrv, ABS( bfrcoef2d(ji,jj) ) )  ) 
     439! (ISF) 
     440             IF ( ln_isfcav ) THEN 
     441                ikbu = miku(ji,jj)       ! deepest ocean level at u- and v-points 
     442                ikbv = mikv(ji,jj) 
     443                zfru = 0.5 * fse3u(ji,jj,ikbu) / rdt 
     444                zfrv = 0.5 * fse3v(ji,jj,ikbv) / rdt 
     445                IF( ABS( tfrcoef2d(ji,jj) ) > zfru ) THEN 
     446                   IF( ln_ctl ) THEN 
     447                      WRITE(numout,*) 'BFR ', narea, nimpp+ji, njmpp+jj, ikbu 
     448                      WRITE(numout,*) 'BFR ', ABS( tfrcoef2d(ji,jj) ), zfru 
     449                   ENDIF 
     450                   ictu = ictu + 1 
     451                ENDIF 
     452                IF( ABS( tfrcoef2d(ji,jj) ) > zfrv ) THEN 
     453                   IF( ln_ctl ) THEN 
     454                      WRITE(numout,*) 'BFR ', narea, nimpp+ji, njmpp+jj, ikbv 
     455                      WRITE(numout,*) 'BFR ', tfrcoef2d(ji,jj), zfrv 
     456                   ENDIF 
     457                   ictv = ictv + 1 
     458                ENDIF 
     459                zmintfr = MIN(  zmintfr, MIN( zfru, ABS( tfrcoef2d(ji,jj) ) )  ) 
     460                zmaxtfr = MAX(  zmaxtfr, MIN( zfrv, ABS( tfrcoef2d(ji,jj) ) )  ) 
     461             END IF 
     462! END ISF 
    400463         END DO 
    401464      END DO 
     
    405468         CALL mpp_min( zminbfr ) 
    406469         CALL mpp_max( zmaxbfr ) 
     470         IF ( ln_isfcav) CALL mpp_min( zmintfr ) 
     471         IF ( ln_isfcav) CALL mpp_max( zmaxtfr ) 
    407472      ENDIF 
    408473      IF( .NOT.ln_bfrimp) THEN 
     
    411476         WRITE(numout,*) ' Bottom friction stability check failed at ', ictv, ' V-points ' 
    412477         WRITE(numout,*) ' Bottom friction coefficient now ranges from: ', zminbfr, ' to ', zmaxbfr 
    413          WRITE(numout,*) ' Bottom friction coefficient now ranges from: ', zmintfr, ' to ', zmaxtfr 
    414478         WRITE(numout,*) ' Bottom friction coefficient will be reduced where necessary' 
     479         IF ( ln_isfcav ) WRITE(numout,*) ' Top friction coefficient now ranges from: ', zmintfr, ' to ', zmaxtfr 
    415480      ENDIF 
    416481      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.