Changeset 10456
- Timestamp:
- 2019-01-06T17:17:13+01:00 (6 years ago)
- Location:
- NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/cfgs/SHARED/namelist_ref
r10428 r10456 116 116 ln_wd_dl = .false. ! T/F activation of directional limiter 117 117 ln_wd_dl_bc = .false. ! T/F Directional limiteer Baroclinic option 118 ln_wd_dl_rmp = .false. 118 ln_wd_dl_rmp = .false. ! T/F Turn on directional limiter ramp 119 119 rn_wdmin0 = 0.30 ! depth at which WaD starts 120 120 rn_wdmin1 = 0.2 ! Minimum wet depth on dried cells … … 122 122 rn_wdld = 2.5 ! Land elevation below which WaD is allowed 123 123 nn_wdit = 20 ! Max iterations for WaD limiter 124 rn_wd_sbcdep = 5.0 ! Depth at which to taper sbc fluxes 125 rn_wd_sbcfra = 0.999 ! Fraction of SBC fluxes at taper depth (Must be <1) 126 124 127 / 125 128 !----------------------------------------------------------------------- -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/DIA/dia25h.F90
r10069 r10456 13 13 USE in_out_manager ! I/O units 14 14 USE iom ! I/0 library 15 USE wet_dry 15 16 16 17 IMPLICIT NONE … … 211 212 CALL iom_put( "salin25h", zw3d ) ! salinity 212 213 zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 213 CALL iom_put( "ssh25h", zw2d ) ! sea surface 214 IF( ll_wd ) THEN 215 CALL iom_put( "ssh25h", zw2d+ssh_ref ) ! sea surface 216 ELSE 217 CALL iom_put( "ssh25h", zw2d ) ! sea surface 218 ENDIF 214 219 ! Write velocities (instantaneous) 215 220 zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/DIA/diatmb.F90
r10069 r10456 12 12 USE in_out_manager ! I/O units 13 13 USE iom ! I/0 library 14 USE wet_dry 14 15 15 16 IMPLICIT NONE … … 108 109 CALL dia_calctmb( tsn(:,:,:,jp_tem), zwtmb ) 109 110 !ssh already output but here we output it masked 110 CALL iom_put( "sshnmasked", sshn(:,:)*tmask(:,:,1) + zmdi*(1.0 - tmask(:,:,1)) ) 111 IF( ll_wd ) THEN 112 CALL iom_put( "sshnmasked", (sshn(:,:)+ssh_ref)*tmask(:,:,1) + zmdi*(1.0 - tmask(:,:,1)) ) 113 ELSE 114 CALL iom_put( "sshnmasked", sshn(:,:)*tmask(:,:,1) + zmdi*(1.0 - tmask(:,:,1)) ) 115 ENDIF 116 111 117 CALL iom_put( "top_temp" , zwtmb(:,:,1) ) ! tmb Temperature 112 118 CALL iom_put( "mid_temp" , zwtmb(:,:,2) ) ! tmb Temperature -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/DOM/istate.F90
r10068 r10456 100 100 ! 101 101 sshb(:,:) = 0._wp ! set the ocean at rest 102 IF(ll_wd) then 103 sshb(:,:) = -ssh_ref ! Added in 30 here for bathy that adds 30 as Iterative test CEOD 104 ! 105 ! Apply minimum wetdepth criterion 106 ! 107 DO jj = 1,jpj 108 DO ji = 1,jpi 109 IF( ht_0(ji,jj) + sshb(ji,jj) < rn_wdmin1 ) THEN 110 sshb(ji,jj) = tmask(ji,jj,1)*( rn_wdmin1 - (ht_0(ji,jj)) ) 111 ENDIF 112 END DO 113 END DO 114 ENDIF 102 115 ub (:,:,:) = 0._wp 103 116 vb (:,:,:) = 0._wp -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/DYN/wet_dry.F90
r10425 r10456 45 45 REAL(wp), PUBLIC :: r_rn_wdmin1 !: 1/minimum water depth on dried cells 46 46 REAL(wp), PUBLIC :: rn_wdmin2 !: tolerance of minimum water depth on dried cells 47 REAL(wp), PUBLIC :: rn_wd_sbcdep !: Depth at which to taper sbc fluxes 48 REAL(wp), PUBLIC :: rn_wd_sbcfra !: Fraction of SBC at taper depth 47 49 REAL(wp), PUBLIC :: rn_wdld !: land elevation below which wetting/drying will be considered 48 50 INTEGER , PUBLIC :: nn_wdit !: maximum number of iteration for W/D limiter … … 74 76 !! 75 77 NAMELIST/namwad/ ln_wd_il, ln_wd_dl , rn_wdmin0, rn_wdmin1, rn_wdmin2, rn_wdld, & 76 & nn_wdit , ln_wd_dl_bc, ln_wd_dl_rmp 78 & nn_wdit , ln_wd_dl_bc, ln_wd_dl_rmp, rn_wd_sbcdep,rn_wd_sbcfra 77 79 !!---------------------------------------------------------------------- 78 80 ! … … 85 87 IF(lwm) WRITE ( numond, namwad ) 86 88 ! 89 IF( rn_wd_sbcfra>=1 ) CALL ctl_stop( 'STOP', 'rn_wd_sbcfra >=1 : must be < 1' ) 87 90 IF(lwp) THEN ! control print 88 91 WRITE(numout,*) … … 99 102 WRITE(numout,*) ' T => baroclinic u,v=0 at dry pts: ln_wd_dl_bc = ', ln_wd_dl_bc 100 103 WRITE(numout,*) ' use a ramp for rwd limiter: ln_wd_dl_rwd_rmp = ', ln_wd_dl_rmp 104 WRITE(numout,*) ' cut off depth sbc for wd rn_wd_sbcdep = ', rn_wd_sbcdep 105 WRITE(numout,*) ' fraction to start sbc wgt rn_wd_sbcfra = ', rn_wd_sbcfra 101 106 ENDIF 102 107 IF( .NOT. ln_read_cfg ) THEN -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/SBC/sbcmod.F90
r10425 r10456 58 58 USE lib_mpp ! MPP library 59 59 USE timing ! Timing 60 USE wet_dry 60 61 USE diurnal_bulk, ONLY: ln_diurnal_only ! diurnal SST diagnostic 61 62 … … 377 378 ! 378 379 LOGICAL :: ll_sas, ll_opa ! local logical 380 ! 381 REAL(wp) :: zthscl ! wd tanh scale 382 REAL(wp), DIMENSION(jpi,jpj) :: zwdht, zwght ! wd dep over wd limit, wgt 383 379 384 !!--------------------------------------------------------------------- 380 385 ! … … 461 466 !!$!clem: it looks like it is necessary for the north fold (in certain circumstances). Don't know why. 462 467 !!$ CALL lbc_lnk( 'sbcmod', emp, 'T', 1. ) 468 IF ( ll_wd ) THEN ! If near WAD point limit the flux for now 469 zthscl = atanh(rn_wd_sbcfra) ! taper frac default is .999 470 zwdht(:,:) = sshn(:,:) + ht_0(:,:) - rn_wdmin1 ! do this calc of water 471 ! depth above wd limit once 472 WHERE( zwdht(:,:) <= 0.0 ) 473 taum(:,:) = 0.0 474 utau(:,:) = 0.0 475 vtau(:,:) = 0.0 476 qns (:,:) = 0.0 477 qsr (:,:) = 0.0 478 emp (:,:) = min(emp(:,:),0.0) !can allow puddles to grow but not shrink 479 sfx (:,:) = 0.0 480 END WHERE 481 zwght(:,:) = tanh(zthscl*zwdht(:,:)) 482 WHERE( zwdht(:,:) > 0.0 .and. zwdht(:,:) < rn_wd_sbcdep ) ! 5 m hard limit here is arbitrary 483 qsr (:,:) = qsr(:,:) * zwght(:,:) 484 qns (:,:) = qns(:,:) * zwght(:,:) 485 taum (:,:) = taum(:,:) * zwght(:,:) 486 utau (:,:) = utau(:,:) * zwght(:,:) 487 vtau (:,:) = vtau(:,:) * zwght(:,:) 488 sfx (:,:) = sfx(:,:) * zwght(:,:) 489 emp (:,:) = emp(:,:) * zwght(:,:) 490 END WHERE 491 ENDIF 463 492 ! 464 493 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! -
NEMO/branches/UKMO/dev_10448_WAD_SBC_BUGFIX/src/OCE/TRA/trasbc.F90
r10068 r10456 27 27 USE trd_oce ! trends: ocean variables 28 28 USE trdtra ! trends manager: tracers 29 USE wet_dry, ONLY : ll_wd, rn_wdmin1, r_rn_wdmin1 ! Wetting and drying30 29 #if defined key_asminc 31 30 USE asminc ! Assimilation increment … … 125 124 DO jj = 2, jpj 126 125 DO ji = fs_2, fs_jpim1 ! vector opt. 127 IF ( ll_wd ) THEN ! If near WAD point limit the flux for now 128 IF ( sshn(ji,jj) + ht_0(ji,jj) > 2._wp * rn_wdmin1 ) THEN 129 sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj) ! non solar heat flux 130 ELSE IF ( sshn(ji,jj) + ht_0(ji,jj) > rn_wdmin1 ) THEN 131 sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj) & 132 & * tanh ( 5._wp * ( ( sshn(ji,jj) + ht_0(ji,jj) - rn_wdmin1 ) * r_rn_wdmin1 ) ) 133 ELSE 134 sbc_tsc(ji,jj,jp_tem) = 0._wp 135 ENDIF 136 ELSE 137 sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj) ! non solar heat flux 138 ENDIF 139 126 sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj) ! non solar heat flux 140 127 sbc_tsc(ji,jj,jp_sal) = r1_rau0 * sfx(ji,jj) ! salt flux due to freezing/melting 141 128 END DO
Note: See TracChangeset
for help on using the changeset viewer.