Changeset 13478 for NEMO/branches
- Timestamp:
- 2020-09-16T18:37:46+02:00 (4 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/cfgs/SHARED/namelist_ref
r13454 r13478 678 678 ! 679 679 ln_drgimp = .true. ! implicit top/bottom friction flag 680 ln_drgice_imp = .false. ! implicit ice-ocean drag681 680 / 682 681 !----------------------------------------------------------------------- -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/ICE/iceupdate.F90
r13454 r13478 26 26 USE icectl ! sea-ice: control prints 27 27 USE bdy_oce , ONLY : ln_bdy 28 USE zdfdrg , ONLY: ln_drgice_imp29 28 ! 30 29 USE in_out_manager ! I/O manager … … 324 323 REAL(wp) :: zat_u, zutau_ice, zu_t, zmodt ! local scalar 325 324 REAL(wp) :: zat_v, zvtau_ice, zv_t, zrhoco ! - - 326 REAL(wp) :: zflagi ! - -327 325 !!--------------------------------------------------------------------- 328 326 IF( ln_timing ) CALL timing_start('ice_update_tau') … … 357 355 ! 358 356 ! !== every ocean time-step ==! 359 IF ( ln_drgice_imp ) THEN360 ! Save drag with right sign to update top drag in the ocean implicit361 ! friction362 rCdU_ice(:,:) = -r1_rau0 * tmod_io(:,:) * at_i(:,:) * tmask(:,:,1)363 zflagi = 0._wp364 ELSE365 zflagi = 1._wp366 ENDIF367 357 ! 368 358 DO jj = 2, jpjm1 !* update the stress WITHOUT an ice-ocean rotation angle … … 374 364 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji ,jj+1,1) ) 375 365 ! ! linearized quadratic drag formulation 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) )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) ) 378 368 ! ! stresses at the ocean surface 379 369 utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/DYN/dynnxt.F90
r13454 r13478 48 48 USE prtctl ! Print control 49 49 USE timing ! Timing 50 USE zdfdrg, ONLY: ln_drgice_imp, rCdU_top51 50 #if defined key_agrif 52 51 USE agrif_oce_interp … … 100 99 REAL(wp) :: zve3a, zve3n, zve3b, zvf, z1_2dt ! - - 101 100 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve 102 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zutau, zvtau103 101 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3u_f, ze3v_f, zua, zva 104 102 !!---------------------------------------------------------------------- … … 370 368 ENDIF 371 369 ! 372 IF ( iom_use("utau") ) THEN373 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN374 ALLOCATE(zutau(jpi,jpj))375 DO jj = 2, jpjm1376 DO ji = 2, jpim1377 jk = miku(ji,jj)378 zutau(ji,jj) = utau(ji,jj) &379 & + 0.5_wp * rau0 * (rCdU_top(ji+1,jj)+rCdU_top(ji,jj)) * ua(ji,jj,jk)380 END DO381 END DO382 CALL lbc_lnk( 'dynnxt' , zutau, 'U', -1.)383 CALL iom_put( "utau", zutau(:,:) )384 DEALLOCATE(zutau)385 ELSE386 CALL iom_put( "utau", utau(:,:) )387 ENDIF388 ENDIF389 !390 IF ( iom_use("vtau") ) THEN391 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN392 ALLOCATE(zvtau(jpi,jpj))393 DO jj = 2, jpjm1394 DO ji = 2, jpim1395 jk = mikv(ji,jj)396 zvtau(ji,jj) = vtau(ji,jj) &397 & + 0.5_wp * rau0 * (rCdU_top(ji,jj+1)+rCdU_top(ji,jj)) * va(ji,jj,jk)398 END DO399 END DO400 CALL lbc_lnk( 'dynnxt' , zvtau, 'V', -1.)401 CALL iom_put( "vtau", zvtau(:,:) )402 DEALLOCATE(zvtau)403 ELSE404 CALL iom_put( "vtau", vtau(:,:) )405 ENDIF406 ENDIF407 !408 370 IF(ln_ctl) CALL prt_ctl( tab3d_1=un, clinfo1=' nxt - Un: ', mask1=umask, & 409 371 & tab3d_2=vn, clinfo2=' Vn: ' , mask2=vmask ) -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/DYN/dynspg_ts.F90
r13454 r13478 1469 1469 ! !== Set the barotropic drag coef. ==! 1470 1470 ! 1471 IF( ln_isfcav .OR.ln_drgice_imp) THEN ! top+bottom friction (ocean cavities)1471 IF( ln_isfcav ) THEN ! top+bottom friction (ocean cavities) 1472 1472 1473 1473 DO jj = 2, jpjm1 … … 1532 1532 ! !== TOP stress contribution from baroclinic velocities ==! (no W/D case) 1533 1533 ! 1534 IF( ln_isfcav .OR.ln_drgice_imp) THEN1534 IF( ln_isfcav ) THEN 1535 1535 ! 1536 1536 IF( ln_bt_fw ) THEN ! FORWARD integration: use NOW top baroclinic velocity -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/DYN/dynzdf.F90
r13454 r13478 141 141 END DO 142 142 END DO 143 IF( ln_isfcav .OR.ln_drgice_imp) THEN ! Ocean cavities (ISF)143 IF( ln_isfcav ) 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 .OR.ln_drgice_imp) THEN ! top friction (always implicit)260 IF ( ln_isfcav ) 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 .OR.ln_drgice_imp) THEN425 IF ( ln_isfcav ) THEN 426 426 DO jj = 2, jpjm1 427 427 DO ji = 2, jpim1 -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/SBC/sbc_ice.F90
r13454 r13478 61 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: evap_ice !: sublimation [kg/m2/s] 62 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: devap_ice !: sublimation sensitivity [kg/m2/s/K] 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rCdU_ice !: ice-ocean drag at T-point (<0) [m/s] 63 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns_oce !: non solar heat flux over ocean [W/m2] 64 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_oce !: non solar heat flux over ocean [W/m2] … … 70 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm_ice !: wind speed module at T-point [m/s] 71 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sstfrz !: wind speed module at T-point [m/s] 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rCdU_ice !: ice-ocean drag at T-point (<0) [m/s]73 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tsfc_ice !: sea ice surface skin temperature (on categories) 74 74 #endif … … 129 129 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 130 130 & qml_ice (jpi,jpj,jpl) , qcn_ice (jpi,jpj,jpl) , qtr_ice_top(jpi,jpj,jpl) , & 131 & rCdU_ice(jpi,jpj) , & 131 132 & utau_ice(jpi,jpj) , vtau_ice (jpi,jpj) , wndm_ice (jpi,jpj) , & 132 133 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice (jpi,jpj) , & 133 134 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj) , & 134 135 & qns_oce (jpi,jpj) , qsr_oce (jpi,jpj) , emp_oce (jpi,jpj) , & 135 & emp_ice (jpi,jpj) , tsfc_ice (jpi,jpj,jpl) , sstfrz (jpi,jpj) , & 136 & rCdU_ice (jpi,jpj) , STAT= ierr(2) ) 136 & emp_ice (jpi,jpj) , tsfc_ice (jpi,jpj,jpl) , sstfrz (jpi,jpj) , STAT= ierr(2) ) 137 137 #endif 138 138 -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/SBC/sbcmod.F90
r13454 r13478 554 554 ENDIF 555 555 ! 556 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at each time step in sea-ice) 557 CALL iom_put( "vtau", vtau ) ! j-wind stress 558 ! 556 559 IF(ln_ctl) THEN ! print mean trends (used for debugging) 557 560 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask ) -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/ZDF/zdfdrg.F90
r13454 r13478 32 32 USE lib_mpp ! distributed memory computing 33 33 USE prtctl ! Print control 34 USE sbc_oce, ONLY: nn_ice35 34 36 35 IMPLICIT NONE … … 47 46 LOGICAL :: ln_loglayer ! logarithmic drag: Cd = vkarmn/log(z/z0) 48 47 LOGICAL , PUBLIC :: ln_drgimp ! implicit top/bottom friction flag 49 LOGICAL , PUBLIC :: ln_drgice_imp ! implicit ice-ocean drag50 48 51 49 ! !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * … … 233 231 INTEGER :: ios, ioptio ! local integers 234 232 !! 235 NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp , ln_drgice_imp233 NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp 236 234 !!---------------------------------------------------------------------- 237 235 ! … … 256 254 WRITE(numout,*) ' logarithmic drag: Cd = vkarmn/log(z/z0) ln_loglayer = ', ln_loglayer 257 255 WRITE(numout,*) ' implicit friction ln_drgimp = ', ln_drgimp 258 WRITE(numout,*) ' implicit ice-ocean drag ln_drgice_imp =', ln_drgice_imp259 256 ENDIF 260 257 ! … … 267 264 IF( ioptio /= 1 ) CALL ctl_stop( 'zdf_drg_init: Choose ONE type of drag coef in namdrg' ) 268 265 ! 269 IF ( ln_drgice_imp.AND.(.NOT.ln_drgimp) ) &270 & CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires ln_drgimp=T' )271 !272 IF ( ln_drgice_imp.AND.( nn_ice /=2 ) ) &273 & CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires si3' )274 266 ! 275 267 ! !== BOTTOM drag setting ==! (applied at seafloor) … … 282 274 ! !== TOP drag setting ==! (applied at the top of ocean cavities) 283 275 ! 284 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! Ocean cavities: top friction setting 285 ALLOCATE( rCdU_top(jpi,jpj) ) 286 ENDIF 287 ! 288 IF( ln_isfcav ) THEN 289 ALLOCATE( rCd0_top(jpi,jpj) ) 276 IF( ln_isfcav ) THEN ! Ocean cavities: top friction setting 277 ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 290 278 CALL drg_init( 'TOP ' , mikt , & ! <== in 291 279 & r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top ) ! ==> out -
NEMO/branches/UKMO/NEMO_4.0.1_FKOSM_m11715/src/OCE/ZDF/zdfphy.F90
r13454 r13478 28 28 USE sbc_oce ! surface module (only for nn_isf in the option compatibility test) 29 29 USE sbcrnf ! surface boundary condition: runoff variables 30 USE sbc_ice ! sea ice drag31 32 30 #if defined key_agrif 33 31 USE agrif_oce_interp ! interpavm … … 254 252 ENDIF 255 253 ! 256 IF ( ln_drgice_imp) THEN257 IF ( ln_isfcav ) THEN258 rCdU_top(:,:) = rCdU_top(:,:) + ssmask(:,:) * tmask(:,:,1) * rCdU_ice(:,:)259 ELSE260 rCdU_top(:,:) = rCdU_ice(:,:)261 ENDIF262 ENDIF263 !264 254 ! !== Kz from chosen turbulent closure ==! (avm_k, avt_k) 265 255 !
Note: See TracChangeset
for help on using the changeset viewer.