Changeset 12861


Ignore:
Timestamp:
2020-05-04T17:07:38+02:00 (7 months ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.1_GM_rossby_radius_cutoff : science changes.

Location:
NEMO/branches/UKMO/NEMO_4.0.1_GM_rossby_radius_cutoff
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_GM_rossby_radius_cutoff/cfgs/SHARED/field_def_nemo-oce.xml

    r11536 r12861  
    7070        <field id="bn2"          long_name="squared Brunt-Vaisala frequency"                                           unit="s-1"    grid_ref="grid_T_3D" /> 
    7171        <field id="rhop"         long_name="potential density (sigma0)"        standard_name="sea_water_sigma_theta"   unit="kg/m3"  grid_ref="grid_T_3D" /> 
     72        <field id="RoRad"        long_name="Rossby radius"                                                             unit="m" /> 
    7273 
    7374        <!-- Energy - horizontal divergence --> 
  • NEMO/branches/UKMO/NEMO_4.0.1_GM_rossby_radius_cutoff/src/OCE/LDF/ldftra.F90

    r11715 r12861  
    8484   LOGICAL , PUBLIC ::   l_ldftra_time = .FALSE.   !: flag for time variation of the lateral eddy diffusivity coef. 
    8585   LOGICAL , PUBLIC ::   l_ldfeiv_time = .FALSE.   !: flag for time variation of the eiv coef. 
     86   LOGICAL , PUBLIC ::   l_Ro_cutoff   = .FALSE.   !: flag for Rossby-radius cutoff in calcn of eiv coeff 
    8687 
    8788   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahtu, ahtv   !: eddy diffusivity coef. at U- and V-points   [m2/s] 
     
    408409      !!---------------------------------------------------------------------- 
    409410      ! 
    410       IF( ln_ldfeiv .AND. nn_aei_ijk_t == 21 ) THEN       ! eddy induced velocity coefficients 
     411      IF( ln_ldfeiv .AND. ( nn_aei_ijk_t == 21 .OR. nn_aei_ijk_t == 22 ) ) THEN        
     412         !                                ! eddy induced velocity coefficients 
    411413         !                                ! =F(growth rate of baroclinic instability) 
    412414         !                                ! max value aeiv_0 ; decreased to 0 within 20N-20S 
    413          CALL ldf_eiv( kt, aei0, aeiu, aeiv ) 
     415         CALL ldf_eiv( kt, aei0, aeiu, aeiv, l_Ro_cutoff ) 
    414416      ENDIF 
    415417      ! 
     
    424426            ahtv(:,:,1) = aeiv(:,:,1) 
    425427         ELSE                                            ! compute aht.  
    426             CALL ldf_eiv( kt, aht0, ahtu, ahtv ) 
     428            CALL ldf_eiv( kt, aht0, ahtu, ahtv, .false. ) 
    427429         ENDIF 
    428430         ! 
     
    524526         WRITE(numout,*) '      eiv streamfunction & velocity diag.        ln_ldfeiv_dia = ', ln_ldfeiv_dia 
    525527         WRITE(numout,*) '      coefficients :' 
    526          WRITE(numout,*) '         type of time-space variation            nn_aei_ijk_t  = ', nn_aht_ijk_t 
     528         WRITE(numout,*) '         type of time-space variation            nn_aei_ijk_t  = ', nn_aei_ijk_t 
    527529         WRITE(numout,*) '         lateral diffusive velocity (if cst)     rn_Ue         = ', rn_Ue, ' m/s' 
    528530         WRITE(numout,*) '         lateral diffusive length   (if cst)     rn_Le         = ', rn_Le, ' m' 
     
    559561         zah_max = zUfac * (ra*rad)**inn        ! maximum reachable coefficient (value at the Equator) 
    560562 
     563         l_Ro_cutoff = .FALSE. 
    561564         SELECT CASE( nn_aei_ijk_t )         !* Specification of space-time variations 
    562565         ! 
     
    597600            l_ldfeiv_time = .TRUE.     ! will be calculated by call to ldf_tra routine in step.F90 
    598601            ! 
     602         CASE(  22  )                        !--  time varying 2D field with cutoff --! 
     603            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F( latitude, longitude, time )' 
     604            IF(lwp) WRITE(numout,*) '                                       = F( growth rate of baroclinic instability )' 
     605            IF(lwp) WRITE(numout,*) '           maximum allowed value: aei0 = ', aei0, ' m2/s' 
     606            IF(lwp) WRITE(numout,*) '           Applied only where Rossby radius resolved by 2.dx' 
     607            ! 
     608            l_Ro_cutoff   = .TRUE. 
     609            l_ldfeiv_time = .TRUE.     ! will be calculated by call to ldf_tra routine in step.F90 
     610            ! 
    599611         CASE( -30  )                        !-- fixed 3D shape read in file  --! 
    600612            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F(i,j,k) read in eddy_diffusivity_3D.nc file' 
     
    625637 
    626638 
    627    SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv ) 
     639   SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv, l_Ro_cutoff ) 
    628640      !!---------------------------------------------------------------------- 
    629641      !!                  ***  ROUTINE ldf_eiv  *** 
     
    639651      REAL(wp)                        , INTENT(inout) ::   paei0          ! max value            [m2/s] 
    640652      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   paeiu, paeiv   ! eiv coefficient      [m2/s] 
     653      LOGICAL                         , INTENT(in   ) ::   l_Ro_cutoff    ! Rossby radius cutoff yes/no 
    641654      ! 
    642655      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    643656      REAL(wp) ::   zfw, ze3w, zn2, z1_f20, zaht, zaht_min, zzaei    ! local scalars 
    644       REAL(wp), DIMENSION(jpi,jpj) ::   zn, zah, zhw, zRo, zaeiw   ! 2D workspace 
     657      REAL(wp), DIMENSION(jpi,jpj) ::   zn, zah, zhw, zRo, zRo_lim, zaeiw   ! 2D workspace 
    645658      !!---------------------------------------------------------------------- 
    646659      ! 
     
    649662      zah(:,:) = 0._wp 
    650663      zRo(:,:) = 0._wp 
     664      zRo_lim(:,:) = 0._wp 
    651665      !                       ! Compute lateral diffusive coefficient at T-point 
    652666      IF( ln_traldf_triad ) THEN 
     
    692706         DO ji = fs_2, fs_jpim1   ! vector opt. 
    693707            zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) 
    694             ! Rossby radius at w-point taken betwenn 2 km and  40km 
    695             zRo(ji,jj) = MAX(  2.e3 , MIN( .4 * zn(ji,jj) / zfw, 40.e3 )  ) 
     708            ! Rossby radius at w-point taken between 2 km and  40km 
     709            zRo(ji,jj) = .4 * zn(ji,jj) / zfw 
     710            zRo_lim(ji,jj) = MAX(  2.e3 , MIN( zRo(ji,jj), 40.e3 )  ) 
    696711            ! Compute aeiw by multiplying Ro^2 and T^-1 
    697             zaeiw(ji,jj) = zRo(ji,jj) * zRo(ji,jj) * SQRT( zah(ji,jj) / zhw(ji,jj) ) * tmask(ji,jj,1) 
    698          END DO 
    699       END DO 
    700  
     712            zaeiw(ji,jj) = zRo_lim(ji,jj) * zRo_lim(ji,jj) * SQRT( zah(ji,jj) / zhw(ji,jj) ) * tmask(ji,jj,1) 
     713         END DO 
     714      END DO 
     715      CALL iom_put('RossRad',zRo) 
    701716      !                                         !==  Bound on eiv coeff.  ==! 
    702717      z1_f20 = 1._wp / (  2._wp * omega * sin( rad * 20._wp )  ) 
     
    704719         DO ji = fs_2, fs_jpim1   ! vector opt. 
    705720            zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj)     ! tropical decrease 
    706             zaeiw(ji,jj) = MIN( zzaei , paei0 )                                  ! Max value = paei0 
     721! JD : modifications here to introduce scaling by local rossby radius of deformation vs local grid scale 
     722! arbitrary decision that GM is de-activated if local rossy radius larger than 2 times local grid scale 
     723! based on Hallberg (2013) 
     724            IF ( l_Ro_cutoff .AND. zRo(ji,jj) >= ( 2._wp * MIN( e1t(ji,jj), e2t(ji,jj) ) ) ) THEN 
     725! TODO : use a version of zRo that integrates over a few time steps ? 
     726                zaeiw(ji,jj) = 0._wp 
     727            ELSE 
     728                zaeiw(ji,jj) = MIN( zzaei, paei0 ) 
     729            ENDIF 
    707730         END DO 
    708731      END DO 
Note: See TracChangeset for help on using the changeset viewer.