Changeset 12953
- Timestamp:
- 2020-05-19T15:59:10+02:00 (4 years ago)
- Location:
- NEMO/branches/MOI/NEMO_4.03_IODRAG
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/MOI/NEMO_4.03_IODRAG/cfgs/SHARED/namelist_ref
r12288 r12953 677 677 ! 678 678 ln_drgimp = .true. ! implicit top/bottom friction flag 679 ln_drgice_imp = .false. ! implicit ice-ocean drag 679 680 / 680 681 !----------------------------------------------------------------------- -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/ICE/iceupdate.F90
r11536 r12953 26 26 USE icectl ! sea-ice: control prints 27 27 USE bdy_oce , ONLY : ln_bdy 28 USE zdfdrg 28 29 ! 29 30 USE in_out_manager ! I/O manager … … 323 324 REAL(wp) :: zat_u, zutau_ice, zu_t, zmodt ! local scalar 324 325 REAL(wp) :: zat_v, zvtau_ice, zv_t, zrhoco ! - - 326 REAL(wp) :: zflagi ! - - 325 327 !!--------------------------------------------------------------------- 326 328 IF( ln_timing ) CALL timing_start('ice_update_tau') … … 355 357 ! 356 358 ! !== every ocean time-step ==! 359 IF ( ln_drgice_imp ) THEN 360 ! Save drag with right sign to update top drag in the ocean implicit 361 ! friction 362 rCdU_ice(:,:) = -r1_rau0 * tmod_io(:,:) * at_i(:,:) * tmask(:,:,1) 363 zflagi = 0._wp 364 ELSE 365 zflagi = 1._wp 366 ENDIF 357 367 ! 358 368 DO jj = 2, jpjm1 !* update the stress WITHOUT an ice-ocean rotation angle … … 364 374 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji ,jj+1,1) ) 365 375 ! ! linearized quadratic drag formulation 366 zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) )367 zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) )376 zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - zflagi * pu_oce(ji,jj) ) 377 zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - zflagi * pv_oce(ji,jj) ) 368 378 ! ! stresses at the ocean surface 369 379 utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/DYN/dynnxt.F90
r12366 r12953 48 48 USE prtctl ! Print control 49 49 USE timing ! Timing 50 USE zdfdrg, ONLY: ln_drgice_imp, rCdU_top 50 51 #if defined key_agrif 51 52 USE agrif_oce_interp … … 99 100 REAL(wp) :: zve3a, zve3n, zve3b, zvf, z1_2dt ! - - 100 101 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve 102 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zutau, zvtau 101 103 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3u_f, ze3v_f, zua, zva 102 104 !!---------------------------------------------------------------------- … … 354 356 ENDIF 355 357 ! 358 IF ( iom_use("utau") ) THEN 359 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 360 ALLOCATE(zutau(jpi,jpj)) 361 DO jj = 2, jpjm1 362 DO ji = 2, jpim1 363 jk = miku(ji,jj) 364 zutau(ji,jj) = utau(ji,jj) & 365 & + 0.5_wp * rau0 * (rCdU_top(ji+1,jj)+rCdU_top(ji,jj)) * ua(ji,jj,jk) 366 END DO 367 END DO 368 CALL lbc_lnk( 'dynnxt' , zutau, 'U', -1.) 369 CALL iom_put( "utau", zutau(:,:) ) 370 DEALLOCATE(zutau) 371 ELSE 372 CALL iom_put( "utau", utau(:,:) ) 373 ENDIF 374 ENDIF 375 ! 376 IF ( iom_use("vtau") ) THEN 377 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 378 ALLOCATE(zvtau(jpi,jpj)) 379 DO jj = 2, jpjm1 380 DO ji = 2, jpim1 381 jk = mikv(ji,jj) 382 zvtau(ji,jj) = vtau(ji,jj) & 383 & + 0.5_wp * rau0 * (rCdU_top(ji,jj+1)+rCdU_top(ji,jj)) * va(ji,jj,jk) 384 END DO 385 END DO 386 CALL lbc_lnk( 'dynnxt' , zvtau, 'V', -1.) 387 CALL iom_put( "vtau", zvtau(:,:) ) 388 DEALLOCATE(zvtau) 389 ELSE 390 CALL iom_put( "vtau", vtau(:,:) ) 391 ENDIF 392 ENDIF 393 ! 356 394 IF(ln_ctl) CALL prt_ctl( tab3d_1=un, clinfo1=' nxt - Un: ', mask1=umask, & 357 395 & tab3d_2=vn, clinfo2=' Vn: ' , mask2=vmask ) -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/DYN/dynspg_ts.F90
r12737 r12953 1465 1465 ! !== Set the barotropic drag coef. ==! 1466 1466 ! 1467 IF( ln_isfcav ) THEN ! top+bottom friction (ocean cavities)1467 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! top+bottom friction (ocean cavities) 1468 1468 1469 1469 DO jj = 2, jpjm1 … … 1528 1528 ! !== TOP stress contribution from baroclinic velocities ==! (no W/D case) 1529 1529 ! 1530 IF( ln_isfcav ) THEN1530 IF( ln_isfcav.OR.ln_drgice_imp ) THEN 1531 1531 ! 1532 1532 IF( ln_bt_fw ) THEN ! FORWARD integration: use NOW top baroclinic velocity -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/DYN/dynzdf.F90
r12292 r12953 141 141 END DO 142 142 END DO 143 IF( ln_isfcav ) THEN ! Ocean cavities (ISF)143 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! Ocean cavities (ISF) 144 144 DO jj = 2, jpjm1 145 145 DO ji = fs_2, fs_jpim1 ! vector opt. … … 258 258 END DO 259 259 END DO 260 IF ( ln_isfcav ) THEN ! top friction (always implicit)260 IF ( ln_isfcav.OR.ln_drgice_imp ) THEN ! top friction (always implicit) 261 261 DO jj = 2, jpjm1 262 262 DO ji = 2, jpim1 … … 423 423 END DO 424 424 END DO 425 IF ( ln_isfcav ) THEN425 IF ( ln_isfcav.OR.ln_drgice_imp ) THEN 426 426 DO jj = 2, jpjm1 427 427 DO ji = 2, jpim1 -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/SBC/sbcmod.F90
r12276 r12953 564 564 ENDIF 565 565 ! 566 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at each time step in sea-ice)567 CALL iom_put( "vtau", vtau ) ! j-wind stress568 !569 566 IF(ln_ctl) THEN ! print mean trends (used for debugging) 570 567 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask ) -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/ZDF/zdfdrg.F90
r11536 r12953 46 46 LOGICAL :: ln_loglayer ! logarithmic drag: Cd = vkarmn/log(z/z0) 47 47 LOGICAL , PUBLIC :: ln_drgimp ! implicit top/bottom friction flag 48 LOGICAL , PUBLIC :: ln_drgice_imp ! implicit ice-ocean drag 48 49 49 50 ! !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * … … 71 72 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rCd0_top, rCd0_bot !: precomputed top/bottom drag coeff. at t-point (>0) 72 73 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rCdU_top, rCdU_bot !: top/bottom drag coeff. at t-point (<0) [m/s] 74 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rCdU_ice !: ice-ocean drag (used if ln_drgice_imp=T) 73 75 74 76 !! * Substitutions … … 231 233 INTEGER :: ios, ioptio ! local integers 232 234 !! 233 NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp 235 NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp, ln_drgice_imp 234 236 !!---------------------------------------------------------------------- 235 237 ! … … 254 256 WRITE(numout,*) ' logarithmic drag: Cd = vkarmn/log(z/z0) ln_loglayer = ', ln_loglayer 255 257 WRITE(numout,*) ' implicit friction ln_drgimp = ', ln_drgimp 258 WRITE(numout,*) ' implicit ice-ocean drag ln_drgice_imp =', ln_drgice_imp 256 259 ENDIF 257 260 ! … … 264 267 IF( ioptio /= 1 ) CALL ctl_stop( 'zdf_drg_init: Choose ONE type of drag coef in namdrg' ) 265 268 ! 269 IF ( ln_drgice_imp.AND.(.NOT.ln_drgimp) ) & 270 & CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires ln_drgimp=T' ) 266 271 ! 267 272 ! !== BOTTOM drag setting ==! (applied at seafloor) … … 274 279 ! !== TOP drag setting ==! (applied at the top of ocean cavities) 275 280 ! 276 IF( ln_isfcav ) THEN ! Ocean cavities: top friction setting 277 ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 281 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! Ocean cavities: top friction setting 282 ALLOCATE( rCdU_top(jpi,jpj) ) 283 rCdU_top(:,:) = 0._wp 284 ENDIF 285 ! 286 IF (ln_drgice_imp) ALLOCATE( rCdU_ice(jpi,jpj) ) 287 ! 288 IF( ln_isfcav ) THEN 289 ALLOCATE( rCd0_top(jpi,jpj)) 278 290 CALL drg_init( 'TOP ' , mikt , & ! <== in 279 291 & r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top ) ! ==> out -
NEMO/branches/MOI/NEMO_4.03_IODRAG/src/OCE/ZDF/zdfphy.F90
r11536 r12953 252 252 ENDIF 253 253 ! 254 IF ( ln_drgice_imp) THEN 255 IF ( ln_isfcav ) THEN 256 rCdU_top(:,:) = rCdU_top(:,:) + ssmask(:,:) * tmask(:,:,1) * rCdU_ice(:,:) 257 ELSE 258 rCdU_top(:,:) = rCdU_ice(:,:) 259 ENDIF 260 ENDIF 261 ! 254 262 ! !== Kz from chosen turbulent closure ==! (avm_k, avt_k) 255 263 !
Note: See TracChangeset
for help on using the changeset viewer.