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

Changeset 15640


Ignore:
Timestamp:
2022-01-13T10:11:35+01:00 (2 years ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.4_fixed_plus_varying_viscosity : science changes.

Location:
NEMO/branches/UKMO/NEMO_4.0.4_fixed_plus_varying_viscosity
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_fixed_plus_varying_viscosity/cfgs/SHARED/namelist_ref

    r14075 r15640  
    938938   ln_dynldf_iso = .false.     !  iso-neutral (lap only) 
    939939   !                       !  Coefficient 
    940    nn_ahm_ijk_t  = 0           !  space/time variation of eddy coefficient : 
     940   nn_ahm_ijk_fix  = 0         !  space variation of time-fixed eddy coefficient : 
     941      !                             !  =-99  no time-fixed viscosity 
    941942      !                             !  =-30  read in eddy_viscosity_3D.nc file 
    942943      !                             !  =-20  read in eddy_viscosity_2D.nc file 
     
    945946      !                             !  = 20  F(i,j)=F(grid spacing)=c2d 
    946947      !                             !  = 30  F(i,j,k)=c2d*c1d 
     948   nn_ahm_ijk_vary  = 0        !  space variation of time-varying eddy coefficient : 
     949      !                             !  =-99  no time-varying viscosity 
    947950      !                             !  = 31  F(i,j,k)=F(grid spacing and local velocity) 
    948951      !                             !  = 32  F(i,j,k)=F(local gridscale and deformation rate) 
  • NEMO/branches/UKMO/NEMO_4.0.4_fixed_plus_varying_viscosity/src/OCE/LDF/ldfdyn.F90

    r14075 r15640  
    3939   LOGICAL , PUBLIC ::   ln_dynldf_hor   !: horizontal (geopotential) direction 
    4040!  LOGICAL , PUBLIC ::   ln_dynldf_iso   !: iso-neutral direction                        (see ldfslp) 
    41    INTEGER , PUBLIC ::   nn_ahm_ijk_t    !: choice of time & space variations of the lateral eddy viscosity coef. 
     41   INTEGER , PUBLIC ::   nn_ahm_ijk_fix  !: choice of time & space variations of the time-fixed lateral eddy viscosity coef. 
     42   INTEGER , PUBLIC ::   nn_ahm_ijk_vary !: choice of time & space variations of the time-varying lateral eddy viscosity coef. 
    4243   !                                        !  time invariant coefficients:  aht = 1/2  Ud*Ld   (lap case)  
    4344   !                                           !                             bht = 1/12 Ud*Ld^3 (blp case) 
     
    6263 
    6364   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahmt, ahmf   !: eddy viscosity coef. at T- and F-points [m2/s or m4/s] 
     65   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahmt_fixed, ahmf_fixed   !: time-fixed eddy viscosity coef. at T- and F-points [m2/s or m4/s] 
    6466   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dtensq       !: horizontal tension squared         (Smagorinsky only) 
    6567   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dshesq       !: horizontal shearing strain squared (Smagorinsky only) 
     
    111113      NAMELIST/namdyn_ldf/ ln_dynldf_OFF, ln_dynldf_lap, ln_dynldf_blp,   &   ! type of operator 
    112114         &                 ln_dynldf_lev, ln_dynldf_hor, ln_dynldf_iso,   &   ! acting direction of the operator 
    113          &                 nn_ahm_ijk_t , rn_Uv    , rn_Lv,  rn_ahm_b,   &   ! lateral eddy coefficient 
     115         &                 nn_ahm_ijk_fix, nn_ahm_ijk_vary, rn_Uv, rn_Lv, rn_ahm_b,   &   ! lateral eddy coefficient 
    114116         &                 rn_csmc      , rn_minfac    , rn_maxfac            ! Smagorinsky settings 
    115117      !!---------------------------------------------------------------------- 
     
    141143         ! 
    142144         WRITE(numout,*) '      coefficients :' 
    143          WRITE(numout,*) '         type of time-space variation         nn_ahm_ijk_t  = ', nn_ahm_ijk_t 
     145         WRITE(numout,*) '         type of time-fixed space variation         nn_ahm_ijk_fix  = ', nn_ahm_ijk_fix 
     146         WRITE(numout,*) '         type of time-varying space variation       nn_ahm_ijk_vary = ', nn_ahm_ijk_vary 
    144147         WRITE(numout,*) '         lateral viscous velocity  (if cst)      rn_Uv      = ', rn_Uv, ' m/s' 
    145148         WRITE(numout,*) '         lateral viscous length    (if cst)      rn_Lv      = ', rn_Lv, ' m' 
     
    239242         ! 
    240243         !                                         ! allocate the ahm arrays 
    241          ALLOCATE( ahmt(jpi,jpj,jpk) , ahmf(jpi,jpj,jpk) , STAT=ierr ) 
     244         ALLOCATE( ahmt(jpi,jpj,jpk) , ahmf(jpi,jpj,jpk) , ahmt_fixed(jpi,jpj,jpk) , ahmf_fixed(jpi,jpj,jpk) , STAT=ierr ) 
    242245         IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'ldf_dyn_init: failed to allocate arrays') 
    243246         ! 
    244247         ahmt(:,:,:) = 0._wp                       ! init to 0 needed  
    245248         ahmf(:,:,:) = 0._wp 
     249         ahmt_fixed(:,:,:) = 0._wp                 
     250         ahmf_fixed(:,:,:) = 0._wp 
    246251         ! 
    247252         !                                         ! value of lap/blp eddy mixing coef. 
     
    252257         zah_max = zUfac * (ra*rad)**inn              ! maximum reachable coefficient (value at the Equator) 
    253258         ! 
    254          SELECT CASE(  nn_ahm_ijk_t  )             !* Specification of space-time variations of ahmt, ahmf 
    255          ! 
     259         SELECT CASE(  nn_ahm_ijk_fix  )             !* Specification of space variations of time-fixed viscosity 
     260         ! 
     261         CASE(   -99  )      !==  zero  ==! 
     262            IF(lwp) WRITE(numout,*) '   ==>>>   time-fixed eddy viscosity = zero ' 
     263            ! Arrays already initialised to zero. 
     264            ! 
    256265         CASE(   0  )      !==  constant  ==! 
    257266            IF(lwp) WRITE(numout,*) '   ==>>>   eddy viscosity. = constant = ', zah0, cl_Units 
    258             ahmt(:,:,1:jpkm1) = zah0 
    259             ahmf(:,:,1:jpkm1) = zah0 
     267            ahmt_fixed(:,:,1:jpkm1) = zah0 
     268            ahmf_fixed(:,:,1:jpkm1) = zah0 
    260269            ! 
    261270         CASE(  10  )      !==  fixed profile  ==! 
    262271            IF(lwp) WRITE(numout,*) '   ==>>>   eddy viscosity = F( depth )' 
    263272            IF(lwp) WRITE(numout,*) '           surface viscous coef. = constant = ', zah0, cl_Units 
    264             ahmt(:,:,1) = zah0                        ! constant surface value 
    265             ahmf(:,:,1) = zah0 
    266             CALL ldf_c1d( 'DYN', ahmt(:,:,1), ahmf(:,:,1), ahmt, ahmf ) 
     273            ahmt_fixed(:,:,1) = zah0                        ! constant surface value 
     274            ahmf_fixed(:,:,1) = zah0 
     275            CALL ldf_c1d( 'DYN', ahmt_fixed(:,:,1), ahmf_fixed(:,:,1), ahmt_fixed, ahmf_fixed ) 
    267276            ! 
    268277         CASE ( -20 )      !== fixed horizontal shape read in file  ==! 
    269278            IF(lwp) WRITE(numout,*) '   ==>>>   eddy viscosity = F(i,j) read in eddy_viscosity.nc file' 
    270279            CALL iom_open( 'eddy_viscosity_2D.nc', inum ) 
    271             CALL iom_get ( inum, jpdom_data, 'ahmt_2d', ahmt(:,:,1) ) 
    272             CALL iom_get ( inum, jpdom_data, 'ahmf_2d', ahmf(:,:,1) ) 
     280            CALL iom_get ( inum, jpdom_data, 'ahmt_2d', ahmt_fixed(:,:,1) ) 
     281            CALL iom_get ( inum, jpdom_data, 'ahmf_2d', ahmf_fixed(:,:,1) ) 
    273282            CALL iom_close( inum ) 
    274283            DO jk = 2, jpkm1 
    275                ahmt(:,:,jk) = ahmt(:,:,1) 
    276                ahmf(:,:,jk) = ahmf(:,:,1) 
     284               ahmt_fixed(:,:,jk) = ahmt_fixed(:,:,1) 
     285               ahmf_fixed(:,:,jk) = ahmf_fixed(:,:,1) 
    277286            END DO 
    278287            ! 
     
    281290            IF(lwp) WRITE(numout,*) '           using a fixed viscous velocity = ', rn_Uv  ,' m/s   and   Lv = Max(e1,e2)' 
    282291            IF(lwp) WRITE(numout,*) '           maximum reachable coefficient (at the Equator) = ', zah_max, cl_Units, '  for e1=1°)' 
    283             CALL ldf_c2d( 'DYN', zUfac      , inn        , ahmt, ahmf )         ! surface value proportional to scale factor^inn 
     292            CALL ldf_c2d( 'DYN', zUfac      , inn        , ahmt_fixed, ahmf_fixed )         ! surface value proportional to scale factor^inn 
    284293            ! 
    285294         CASE( -30  )      !== fixed 3D shape read in file  ==! 
    286295            IF(lwp) WRITE(numout,*) '   ==>>>   eddy viscosity = F(i,j,k) read in eddy_viscosity_3D.nc file' 
    287296            CALL iom_open( 'eddy_viscosity_3D.nc', inum ) 
    288             CALL iom_get ( inum, jpdom_data, 'ahmt_3d', ahmt ) 
    289             CALL iom_get ( inum, jpdom_data, 'ahmf_3d', ahmf ) 
     297            CALL iom_get ( inum, jpdom_data, 'ahmt_3d', ahmt_fixed ) 
     298            CALL iom_get ( inum, jpdom_data, 'ahmf_3d', ahmf_fixed ) 
    290299            CALL iom_close( inum ) 
    291300            ! 
     
    294303            IF(lwp) WRITE(numout,*) '           using a fixed viscous velocity = ', rn_Uv  ,' m/s   and   Ld = Max(e1,e2)' 
    295304            IF(lwp) WRITE(numout,*) '           maximum reachable coefficient (at the Equator) = ', zah_max, cl_Units, '  for e1=1°)' 
    296             CALL ldf_c2d( 'DYN', zUfac      , inn        , ahmt, ahmf )         ! surface value proportional to scale factor^inn 
    297             CALL ldf_c1d( 'DYN', ahmt(:,:,1), ahmf(:,:,1), ahmt, ahmf )  ! reduction with depth 
     305            CALL ldf_c2d( 'DYN', zUfac      , inn        , ahmt_fixed, ahmf_fixed )         ! surface value proportional to scale factor^inn 
     306            CALL ldf_c1d( 'DYN', ahmt_fixed(:,:,1), ahmf_fixed(:,:,1), ahmt_fixed, ahmf_fixed )  ! reduction with depth 
     307            ! 
     308         CASE DEFAULT 
     309            CALL ctl_stop('ldf_dyn_init: wrong choice for nn_ahm_ijk_fix, the type of space variation of time-fixed ahm') 
     310         END SELECT 
     311         ! 
     312         ! 
     313         SELECT CASE(  nn_ahm_ijk_vary  )             !* Specification of space variations of time-varying viscosity 
     314         ! 
     315         CASE(   -99  )      !==  zero  ==! 
     316            IF(lwp) WRITE(numout,*) '   ==>>>   time-varying eddy viscosity not used. ' 
     317            ! 
     318            l_ldfdyn_time = .FALSE.      
    298319            ! 
    299320         CASE(  31  )       !==  time varying 3D field  ==! 
     
    321342            ! 
    322343         CASE DEFAULT 
    323             CALL ctl_stop('ldf_dyn_init: wrong choice for nn_ahm_ijk_t, the type of space-time variation of ahm') 
     344            CALL ctl_stop('ldf_dyn_init: wrong choice for nn_ahm_ijk_vary, the type of space variation of time-varying ahm') 
    324345         END SELECT 
    325346         ! 
    326          IF( .NOT.l_ldfdyn_time ) THEN             !* No time variation  
    327             IF(     ln_dynldf_lap ) THEN                 !   laplacian operator (mask only) 
    328                ahmt(:,:,1:jpkm1) =       ahmt(:,:,1:jpkm1)   * tmask(:,:,1:jpkm1) 
    329                ahmf(:,:,1:jpkm1) =       ahmf(:,:,1:jpkm1)   * fmask(:,:,1:jpkm1) 
    330             ELSEIF( ln_dynldf_blp ) THEN                 ! bilaplacian operator (square root + mask) 
    331                ahmt(:,:,1:jpkm1) = SQRT( ahmt(:,:,1:jpkm1) ) * tmask(:,:,1:jpkm1) 
    332                ahmf(:,:,1:jpkm1) = SQRT( ahmf(:,:,1:jpkm1) ) * fmask(:,:,1:jpkm1) 
    333             ENDIF 
     347         IF(     ln_dynldf_lap ) THEN                 !   laplacian operator (mask only) 
     348            ahmt_fixed(:,:,1:jpkm1) =       ahmt_fixed(:,:,1:jpkm1)   * tmask(:,:,1:jpkm1) 
     349            ahmf_fixed(:,:,1:jpkm1) =       ahmf_fixed(:,:,1:jpkm1)   * fmask(:,:,1:jpkm1) 
     350         ELSEIF( ln_dynldf_blp ) THEN                 ! bilaplacian operator (square root + mask) 
     351            ahmt_fixed(:,:,1:jpkm1) = SQRT( ahmt_fixed(:,:,1:jpkm1) ) * tmask(:,:,1:jpkm1) 
     352            ahmf_fixed(:,:,1:jpkm1) = SQRT( ahmf_fixed(:,:,1:jpkm1) ) * fmask(:,:,1:jpkm1) 
     353         ENDIF 
     354         IF( .NOT. l_ldfdyn_time ) THEN 
     355            ahmt(:,:,1:jpkm1) =       ahmt_fixed(:,:,1:jpkm1) 
     356            ahmf(:,:,1:jpkm1) =       ahmf_fixed(:,:,1:jpkm1) 
     357            DEALLOCATE( ahmt_fixed, ahmf_fixed ) 
    334358         ENDIF 
    335359         ! 
     
    365389      IF( ln_timing )   CALL timing_start('ldf_dyn') 
    366390      ! 
    367       SELECT CASE(  nn_ahm_ijk_t  )       !== Eddy vicosity coefficients ==! 
     391      SELECT CASE(  nn_ahm_ijk_vary  )       !== Eddy vicosity coefficients ==! 
    368392      ! 
    369393      CASE(  31  )       !==  time varying 3D field  ==!   = F( local velocity ) 
     
    504528      END SELECT 
    505529      ! 
     530      ! Add on time-fixed viscosity (which can be zero): 
     531      ahmt(:,:,1:jpkm1) = ahmt(:,:,1:jpkm1) + ahmt_fixed(:,:,1:jpkm1) 
     532      ahmf(:,:,1:jpkm1) = ahmf(:,:,1:jpkm1) + ahmf_fixed(:,:,1:jpkm1) 
     533      ! 
    506534      CALL iom_put( "ahmt_2d", ahmt(:,:,1) )   ! surface u-eddy diffusivity coeff. 
    507535      CALL iom_put( "ahmf_2d", ahmf(:,:,1) )   ! surface v-eddy diffusivity coeff. 
Note: See TracChangeset for help on using the changeset viewer.