Changeset 15640
- Timestamp:
- 2022-01-13T10:11:35+01:00 (3 years ago)
- 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 938 938 ln_dynldf_iso = .false. ! iso-neutral (lap only) 939 939 ! ! 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 941 942 ! ! =-30 read in eddy_viscosity_3D.nc file 942 943 ! ! =-20 read in eddy_viscosity_2D.nc file … … 945 946 ! ! = 20 F(i,j)=F(grid spacing)=c2d 946 947 ! ! = 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 947 950 ! ! = 31 F(i,j,k)=F(grid spacing and local velocity) 948 951 ! ! = 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 39 39 LOGICAL , PUBLIC :: ln_dynldf_hor !: horizontal (geopotential) direction 40 40 ! 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. 42 43 ! ! time invariant coefficients: aht = 1/2 Ud*Ld (lap case) 43 44 ! ! bht = 1/12 Ud*Ld^3 (blp case) … … 62 63 63 64 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] 64 66 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dtensq !: horizontal tension squared (Smagorinsky only) 65 67 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dshesq !: horizontal shearing strain squared (Smagorinsky only) … … 111 113 NAMELIST/namdyn_ldf/ ln_dynldf_OFF, ln_dynldf_lap, ln_dynldf_blp, & ! type of operator 112 114 & 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 coefficient115 & nn_ahm_ijk_fix, nn_ahm_ijk_vary, rn_Uv, rn_Lv, rn_ahm_b, & ! lateral eddy coefficient 114 116 & rn_csmc , rn_minfac , rn_maxfac ! Smagorinsky settings 115 117 !!---------------------------------------------------------------------- … … 141 143 ! 142 144 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 144 147 WRITE(numout,*) ' lateral viscous velocity (if cst) rn_Uv = ', rn_Uv, ' m/s' 145 148 WRITE(numout,*) ' lateral viscous length (if cst) rn_Lv = ', rn_Lv, ' m' … … 239 242 ! 240 243 ! ! 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 ) 242 245 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'ldf_dyn_init: failed to allocate arrays') 243 246 ! 244 247 ahmt(:,:,:) = 0._wp ! init to 0 needed 245 248 ahmf(:,:,:) = 0._wp 249 ahmt_fixed(:,:,:) = 0._wp 250 ahmf_fixed(:,:,:) = 0._wp 246 251 ! 247 252 ! ! value of lap/blp eddy mixing coef. … … 252 257 zah_max = zUfac * (ra*rad)**inn ! maximum reachable coefficient (value at the Equator) 253 258 ! 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 ! 256 265 CASE( 0 ) !== constant ==! 257 266 IF(lwp) WRITE(numout,*) ' ==>>> eddy viscosity. = constant = ', zah0, cl_Units 258 ahmt (:,:,1:jpkm1) = zah0259 ahmf (:,:,1:jpkm1) = zah0267 ahmt_fixed(:,:,1:jpkm1) = zah0 268 ahmf_fixed(:,:,1:jpkm1) = zah0 260 269 ! 261 270 CASE( 10 ) !== fixed profile ==! 262 271 IF(lwp) WRITE(numout,*) ' ==>>> eddy viscosity = F( depth )' 263 272 IF(lwp) WRITE(numout,*) ' surface viscous coef. = constant = ', zah0, cl_Units 264 ahmt (:,:,1) = zah0 ! constant surface value265 ahmf (:,:,1) = zah0266 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 ) 267 276 ! 268 277 CASE ( -20 ) !== fixed horizontal shape read in file ==! 269 278 IF(lwp) WRITE(numout,*) ' ==>>> eddy viscosity = F(i,j) read in eddy_viscosity.nc file' 270 279 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) ) 273 282 CALL iom_close( inum ) 274 283 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) 277 286 END DO 278 287 ! … … 281 290 IF(lwp) WRITE(numout,*) ' using a fixed viscous velocity = ', rn_Uv ,' m/s and Lv = Max(e1,e2)' 282 291 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^inn292 CALL ldf_c2d( 'DYN', zUfac , inn , ahmt_fixed, ahmf_fixed ) ! surface value proportional to scale factor^inn 284 293 ! 285 294 CASE( -30 ) !== fixed 3D shape read in file ==! 286 295 IF(lwp) WRITE(numout,*) ' ==>>> eddy viscosity = F(i,j,k) read in eddy_viscosity_3D.nc file' 287 296 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 ) 290 299 CALL iom_close( inum ) 291 300 ! … … 294 303 IF(lwp) WRITE(numout,*) ' using a fixed viscous velocity = ', rn_Uv ,' m/s and Ld = Max(e1,e2)' 295 304 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. 298 319 ! 299 320 CASE( 31 ) !== time varying 3D field ==! … … 321 342 ! 322 343 CASE DEFAULT 323 CALL ctl_stop('ldf_dyn_init: wrong choice for nn_ahm_ijk_ t, the type of space-time variation ofahm')344 CALL ctl_stop('ldf_dyn_init: wrong choice for nn_ahm_ijk_vary, the type of space variation of time-varying ahm') 324 345 END SELECT 325 346 ! 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 ) 334 358 ENDIF 335 359 ! … … 365 389 IF( ln_timing ) CALL timing_start('ldf_dyn') 366 390 ! 367 SELECT CASE( nn_ahm_ijk_ t) !== Eddy vicosity coefficients ==!391 SELECT CASE( nn_ahm_ijk_vary ) !== Eddy vicosity coefficients ==! 368 392 ! 369 393 CASE( 31 ) !== time varying 3D field ==! = F( local velocity ) … … 504 528 END SELECT 505 529 ! 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 ! 506 534 CALL iom_put( "ahmt_2d", ahmt(:,:,1) ) ! surface u-eddy diffusivity coeff. 507 535 CALL iom_put( "ahmf_2d", ahmf(:,:,1) ) ! surface v-eddy diffusivity coeff.
Note: See TracChangeset
for help on using the changeset viewer.