Changeset 12468
- Timestamp:
- 2020-02-26T11:02:35+01:00 (3 years ago)
- Location:
- NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2
- Files:
-
- 44 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/cfgs/SHARED/namelist_ref
r12443 r12468 651 651 rn_tide_gamma = 0.7 ! Tidal tilt factor 652 652 ln_scal_load = .false. ! Use scalar approximation for 653 rn_ load = 0.094 ! load potential653 rn_scal_load = 0.094 ! load potential 654 654 ln_read_load = .false. ! Or read load potential from file 655 655 cn_tide_load = 'tide_LOAD_grid_T.nc' ! filename for load potential -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ABL/ablmod.F90
r12406 r12468 152 152 DO jk = 3, jpkam1 153 153 DO ji = 1, jpi ! vector opt. 154 z_elem_a( ji, jk ) = - r dt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal155 z_elem_c( ji, jk ) = - r dt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal154 z_elem_a( ji, jk ) = - rDt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 155 z_elem_c( ji, jk ) = - rDt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 156 156 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 157 157 END DO … … 161 161 ! Neumann at the bottom 162 162 z_elem_a( ji, 2 ) = 0._wp 163 z_elem_c( ji, 2 ) = - r dt_abl * Avt_abl( ji, jj, 2 ) / e3w_abl( 2 )163 z_elem_c( ji, 2 ) = - rDt_abl * Avt_abl( ji, jj, 2 ) / e3w_abl( 2 ) 164 164 ! Homogeneous Neumann at the top 165 z_elem_a( ji, jpka ) = - r dt_abl * Avt_abl( ji, jj, jpka ) / e3w_abl( jpka )165 z_elem_a( ji, jpka ) = - rDt_abl * Avt_abl( ji, jj, jpka ) / e3w_abl( jpka ) 166 166 z_elem_c( ji, jpka ) = 0._wp 167 167 z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 184 184 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * psen_ice(ji,jj) * ptm_su(ji,jj) 185 185 #endif 186 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1187 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + r dt_abl * zztmp2186 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 187 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rDt_abl * zztmp2 188 188 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 189 189 END DO … … 196 196 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pevp_ice(ji, jj) * pssq_ice(ji, jj) 197 197 #endif 198 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1199 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + r dt_abl * zztmp2198 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 199 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rDt_abl * zztmp2 200 200 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 201 201 END DO … … 242 242 ! Advance u_abl & v_abl to time n+1 243 243 DO_2D_11_11 244 zcff = ( fft_abl(ji,jj) * r dt_abl )*( fft_abl(ji,jj) * rdt_abl ) ! (f dt)**2244 zcff = ( fft_abl(ji,jj) * rDt_abl )*( fft_abl(ji,jj) * rDt_abl ) ! (f dt)**2 245 245 246 246 u_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 247 247 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*u_abl( ji, jj, jk, nt_n ) & 248 & + r dt_abl * fft_abl(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) &248 & + rDt_abl * fft_abl(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) & 249 249 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 250 250 251 251 v_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 252 252 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*v_abl( ji, jj, jk, nt_n ) & 253 & - r dt_abl * fft_abl(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) &253 & - rDt_abl * fft_abl(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) & 254 254 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 255 255 END_2D … … 264 264 DO ji = 1, jpi 265 265 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) & 266 & - r dt_abl * e3t_abl(jk) * fft_abl(ji , jj) * pgv_dta(ji ,jj ,jk)266 & - rDt_abl * e3t_abl(jk) * fft_abl(ji , jj) * pgv_dta(ji ,jj ,jk) 267 267 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) & 268 & + r dt_abl * e3t_abl(jk) * fft_abl(ji, jj ) * pgu_dta(ji ,jj ,jk)268 & + rDt_abl * e3t_abl(jk) * fft_abl(ji, jj ) * pgu_dta(ji ,jj ,jk) 269 269 END DO 270 270 END DO … … 277 277 DO jk = 1, jpka 278 278 DO ji = 1, jpi 279 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) - r dt_abl * e3t_abl(jk) * pgu_dta(ji,jj,jk)280 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) - r dt_abl * e3t_abl(jk) * pgv_dta(ji,jj,jk)279 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) - rDt_abl * e3t_abl(jk) * pgu_dta(ji,jj,jk) 280 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) - rDt_abl * e3t_abl(jk) * pgv_dta(ji,jj,jk) 281 281 ENDDO 282 282 ENDDO … … 295 295 DO jk = 3, jpkam1 296 296 DO ji = 1, jpi 297 z_elem_a( ji, jk ) = - r dt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal298 z_elem_c( ji, jk ) = - r dt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal297 z_elem_a( ji, jk ) = - rDt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 298 z_elem_c( ji, jk ) = - rDt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 299 299 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 300 300 END DO … … 304 304 !++ Surface boundary condition 305 305 z_elem_a( ji, 2 ) = 0._wp 306 z_elem_c( ji, 2 ) = - r dt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 )306 z_elem_c( ji, 2 ) = - rDt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 ) 307 307 ! 308 308 zztmp1 = pcd_du(ji, jj) … … 313 313 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 314 314 #endif 315 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1316 u_abl( ji, jj, 2, nt_a ) = u_abl( ji, jj, 2, nt_a ) + r dt_abl * zztmp2315 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 316 u_abl( ji, jj, 2, nt_a ) = u_abl( ji, jj, 2, nt_a ) + rDt_abl * zztmp2 317 317 318 318 !++ Top Neumann B.C. 319 !z_elem_a( ji, jpka ) = - 0.5_wp * r dt_abl * ( Avm_abl( ji, jj, jpka )+ Avm_abl( ji+1, jj, jpka ) ) / e3w_abl( jpka )319 !z_elem_a( ji, jpka ) = - 0.5_wp * rDt_abl * ( Avm_abl( ji, jj, jpka )+ Avm_abl( ji+1, jj, jpka ) ) / e3w_abl( jpka ) 320 320 !z_elem_c( ji, jpka ) = 0._wp 321 321 !z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 362 362 DO jk = 3, jpkam1 363 363 DO ji = 1, jpi 364 z_elem_a( ji, jk ) = -r dt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal365 z_elem_c( ji, jk ) = -r dt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal364 z_elem_a( ji, jk ) = -rDt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 365 z_elem_c( ji, jk ) = -rDt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 366 366 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 367 367 END DO … … 371 371 !++ Surface boundary condition 372 372 z_elem_a( ji, 2 ) = 0._wp 373 z_elem_c( ji, 2 ) = - r dt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 )373 z_elem_c( ji, 2 ) = - rDt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 ) 374 374 ! 375 375 zztmp1 = pcd_du(ji, jj) … … 380 380 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 381 381 #endif 382 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1383 v_abl( ji, jj, 2, nt_a ) = v_abl( ji, jj, 2, nt_a ) + r dt_abl * zztmp2382 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 383 v_abl( ji, jj, 2, nt_a ) = v_abl( ji, jj, 2, nt_a ) + rDt_abl * zztmp2 384 384 !++ Top Neumann B.C. 385 !z_elem_a( ji, jpka ) = -r dt_abl * Avm_abl( ji, jj, jpka ) / e3w_abl( jpka )385 !z_elem_a( ji, jpka ) = -rDt_abl * Avm_abl( ji, jj, jpka ) / e3w_abl( jpka ) 386 386 !z_elem_c( ji, jpka ) = 0._wp 387 387 !z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 437 437 & + jp_alp1_dyn * zsig + jp_alp0_dyn 438 438 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 439 ! rn_Dt = r dt_abl / nn_fsbc439 ! rn_Dt = rDt_abl / nn_fsbc 440 440 zcff = zcff * rest_eq(ji,jj) 441 441 z_cft( ji, jj, jk ) = zcff … … 461 461 & + jp_alp1_tra * zsig + jp_alp0_tra 462 462 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 463 ! rn_Dt = r dt_abl / nn_fsbc463 ! rn_Dt = rDt_abl / nn_fsbc 464 464 !z_cft( ji, jj, jk ) = zcff 465 465 tq_abl( ji, jj, jk, nt_a, jp_ta ) = (1._wp - zcff ) * tq_abl( ji, jj, jk, nt_a, jp_ta ) & … … 688 688 zbuoy = - Avt_abl( ji, jj, jk ) * zbn2( ji, jj, jk ) 689 689 690 z_elem_a( ji, jk ) = - 0.5_wp * r dt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk-1 ) ) / e3t_abl( jk ) ! lower-diagonal691 z_elem_c( ji, jk ) = - 0.5_wp * r dt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk+1 ) ) / e3t_abl( jk+1 ) ! upper-diagonal690 z_elem_a( ji, jk ) = - 0.5_wp * rDt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk-1 ) ) / e3t_abl( jk ) ! lower-diagonal 691 z_elem_c( ji, jk ) = - 0.5_wp * rDt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk+1 ) ) / e3t_abl( jk+1 ) ! upper-diagonal 692 692 IF( (zbuoy + zshear) .gt. 0.) THEN ! Patankar trick to avoid negative values of TKE 693 693 z_elem_b( ji, jk ) = e3w_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) & 694 & + e3w_abl(jk) * r dt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) ! diagonal695 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + r dt_abl * ( zbuoy + zshear ) ) ! right-hand-side694 & + e3w_abl(jk) * rDt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) ! diagonal 695 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + rDt_abl * ( zbuoy + zshear ) ) ! right-hand-side 696 696 ELSE 697 697 z_elem_b( ji, jk ) = e3w_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) & 698 & + e3w_abl(jk) * r dt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) & ! diagonal699 & - e3w_abl(jk) * r dt_abl * zbuoy700 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + r dt_abl * zshear ) ! right-hand-side698 & + e3w_abl(jk) * rDt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) & ! diagonal 699 & - e3w_abl(jk) * rDt_abl * zbuoy 700 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + rDt_abl * zshear ) ! right-hand-side 701 701 END IF 702 702 END DO -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ABL/par_abl.F90
r11858 r12468 76 76 REAL(wp), PUBLIC, PARAMETER :: gamma_Cor = 0.55_wp 77 77 ! ABL timestep 78 REAL(wp), PUBLIC :: r dt_abl78 REAL(wp), PUBLIC :: rDt_abl 79 79 80 80 !!--------------------------------------------------------------------- -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ABL/sbcabl.F90
r12406 r12468 202 202 203 203 ! ABL timestep 204 r dt_abl = nn_fsbc * rn_Dt204 rDt_abl = nn_fsbc * rn_Dt 205 205 206 206 ! Check parameters for dynamics 207 207 zcff = ( jp_alp3_dyn * jp_bmin**3 + jp_alp2_dyn * jp_bmin**2 & 208 & + jp_alp1_dyn * jp_bmin + jp_alp0_dyn ) * r dt_abl208 & + jp_alp1_dyn * jp_bmin + jp_alp0_dyn ) * rDt_abl 209 209 zcff1 = ( jp_alp3_dyn * jp_bmax**3 + jp_alp2_dyn * jp_bmax**2 & 210 & + jp_alp1_dyn * jp_bmax + jp_alp0_dyn ) * r dt_abl210 & + jp_alp1_dyn * jp_bmax + jp_alp0_dyn ) * rDt_abl 211 211 IF(lwp) THEN 212 212 IF(nn_dyn_restore > 0) THEN … … 225 225 ! Check parameters for active tracers 226 226 zcff = ( jp_alp3_tra * jp_bmin**3 + jp_alp2_tra * jp_bmin**2 & 227 & + jp_alp1_tra * jp_bmin + jp_alp0_tra ) * r dt_abl227 & + jp_alp1_tra * jp_bmin + jp_alp0_tra ) * rDt_abl 228 228 zcff1 = ( jp_alp3_tra * jp_bmax**3 + jp_alp2_tra * jp_bmax**2 & 229 & + jp_alp1_tra * jp_bmax + jp_alp0_tra ) * r dt_abl229 & + jp_alp1_tra * jp_bmax + jp_alp0_tra ) * rDt_abl 230 230 IF(lwp) THEN 231 231 WRITE(numout,*) ' ABL Minimum value for tracers restoring = ',zcff -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/ice.F90
r11627 r12468 150 150 REAL(wp), PUBLIC :: rn_ecc !: eccentricity of the elliptical yield curve 151 151 INTEGER , PUBLIC :: nn_nevp !: number of iterations for subcycling 152 REAL(wp), PUBLIC :: rn_relast !: ratio => telast/r dt_ice (1/3 or 1/9 depending on nb of subcycling nevp)152 REAL(wp), PUBLIC :: rn_relast !: ratio => telast/rDt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 153 153 ! 154 154 ! !!** ice-advection namelist (namdyn_adv) ** … … 207 207 ! !!** some other parameters 208 208 INTEGER , PUBLIC :: kt_ice !: iteration number 209 REAL(wp), PUBLIC :: r dt_ice !: ice time step210 REAL(wp), PUBLIC :: r1_ rdtice !: = 1. / rdt_ice209 REAL(wp), PUBLIC :: rDt_ice !: ice time step 210 REAL(wp), PUBLIC :: r1_Dt_ice !: = 1. / rDt_ice 211 211 REAL(wp), PUBLIC :: r1_nlay_i !: 1 / nlay_i 212 212 REAL(wp), PUBLIC :: r1_nlay_s !: 1 / nlay_s -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icecor.F90
r12377 r12468 86 86 IF ( nn_icesal == 2 ) THEN ! salinity must stay in bounds [Simin,Simax] ! 87 87 ! !----------------------------------------------------- 88 zzc = rhoi * r1_ rdtice88 zzc = rhoi * r1_Dt_ice 89 89 DO jl = 1, jpl 90 90 DO_2D_11_11 … … 123 123 ! 124 124 IF( ln_icediachk .OR. iom_use('hfxdhc') ) THEN 125 diag_heat(:,:) = - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice & ! W.m-2126 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice127 diag_sice(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice * rhoi128 diag_vice(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice * rhoi129 diag_vsnw(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice * rhos125 diag_heat(:,:) = - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice & ! W.m-2 126 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 127 diag_sice(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 128 diag_vice(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 129 diag_vsnw(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhos 130 130 ENDIF 131 131 ! ! concentration tendency (dynamics) 132 132 IF( iom_use('afxdyn') .OR. iom_use('afxthd') .OR. iom_use('afxtot') ) THEN 133 zafx(:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice133 zafx(:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice 134 134 CALL iom_put( 'afxdyn' , zafx ) 135 135 ENDIF … … 137 137 CASE( 2 ) !--- thermo trend diagnostics & ice aging 138 138 ! 139 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * r dt_ice ! ice natural aging incrementation139 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * rDt_ice ! ice natural aging incrementation 140 140 ! 141 141 IF( ln_icediachk .OR. iom_use('hfxdhc') ) THEN 142 142 diag_heat(:,:) = diag_heat(:,:) & 143 & - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice &144 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice143 & - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice & 144 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 145 145 diag_sice(:,:) = diag_sice(:,:) & 146 & + SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice * rhoi146 & + SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 147 147 diag_vice(:,:) = diag_vice(:,:) & 148 & + SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice * rhoi148 & + SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 149 149 diag_vsnw(:,:) = diag_vsnw(:,:) & 150 & + SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice * rhos150 & + SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhos 151 151 CALL iom_put ( 'hfxdhc' , diag_heat ) 152 152 ENDIF 153 153 ! ! concentration tendency (total + thermo) 154 154 IF( iom_use('afxdyn') .OR. iom_use('afxthd') .OR. iom_use('afxtot') ) THEN 155 zafx(:,:) = zafx(:,:) + SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice156 CALL iom_put( 'afxthd' , SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice )155 zafx(:,:) = zafx(:,:) + SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice 156 CALL iom_put( 'afxthd' , SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice ) 157 157 CALL iom_put( 'afxtot' , zafx ) 158 158 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icectl.F90
r12377 r12468 104 104 105 105 ! -- mass diag -- ! 106 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos, dim=3 ) * e1e2t ) - pdiag_v ) * r1_ rdtice &106 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos, dim=3 ) * e1e2t ) - pdiag_v ) * r1_Dt_ice & 107 107 & + glob_sum( 'icectl', ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + & 108 108 & wfx_lam + wfx_pnd + wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + & … … 111 111 ! 112 112 ! -- salt diag -- ! 113 zdiag_salt = ( glob_sum( 'icectl', SUM( sv_i * rhoi , dim=3 ) * e1e2t ) - pdiag_s ) * r1_ rdtice &113 zdiag_salt = ( glob_sum( 'icectl', SUM( sv_i * rhoi , dim=3 ) * e1e2t ) - pdiag_s ) * r1_Dt_ice & 114 114 & + glob_sum( 'icectl', ( sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + & 115 115 & sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam ) * e1e2t ) & … … 118 118 ! -- heat diag -- ! 119 119 zdiag_heat = ( glob_sum( 'icectl', ( SUM(SUM(e_i, dim=4), dim=3) + SUM(SUM(e_s, dim=4), dim=3) ) * e1e2t ) - pdiag_t & 120 & ) * r1_ rdtice &120 & ) * r1_Dt_ice & 121 121 & + glob_sum( 'icectl', ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 122 122 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr ) * e1e2t ) & … … 141 141 ! check conservation issues 142 142 IF( ABS(zdiag_mass) > zchk_m * rn_icechk_glo * zarea ) & 143 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * r dt_ice143 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * rDt_ice 144 144 IF( ABS(zdiag_salt) > zchk_s * rn_icechk_glo * zarea ) & 145 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * r dt_ice145 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * rDt_ice 146 146 IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) & 147 & WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * r dt_ice147 & WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * rDt_ice 148 148 ! check negative values 149 149 IF( zdiag_vmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_i < 0 = ',zdiag_vmin … … 160 160 ! it does not mean UM is not conservative (it is checked with above prints) => update (09/2019): same for Prather now 161 161 !IF( ln_adv_Pra .AND. ABS(zvtrp) > zchk_m * rn_icechk_glo * zarea .AND. cd_routine == 'icedyn_adv' ) & 162 ! & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * r dt_ice162 ! & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * rDt_ice 163 163 ENDIF 164 164 ! … … 201 201 IF( lwp ) THEN 202 202 IF( ABS(zdiag_mass) > zchk_m * rn_icechk_glo * zarea ) & 203 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * r dt_ice203 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * rDt_ice 204 204 IF( ABS(zdiag_salt) > zchk_s * rn_icechk_glo * zarea ) & 205 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * r dt_ice206 !!IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * r dt_ice205 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * rDt_ice 206 !!IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * rDt_ice 207 207 ENDIF 208 208 ! … … 250 250 251 251 ! -- mass diag -- ! 252 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos, dim=3 ) - pdiag_v ) * r1_ rdtice &252 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos, dim=3 ) - pdiag_v ) * r1_Dt_ice & 253 253 & + ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + wfx_lam + wfx_pnd + & 254 254 & wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + wfx_ice_sub + wfx_spr ) & … … 257 257 ! 258 258 ! -- salt diag -- ! 259 zdiag_salt = ( SUM( sv_i * rhoi , dim=3 ) - pdiag_s ) * r1_ rdtice &259 zdiag_salt = ( SUM( sv_i * rhoi , dim=3 ) - pdiag_s ) * r1_Dt_ice & 260 260 & + ( sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam ) & 261 261 & - pdiag_fs … … 263 263 ! 264 264 ! -- heat diag -- ! 265 zdiag_heat = ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) - pdiag_t ) * r1_ rdtice &265 zdiag_heat = ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) - pdiag_t ) * r1_Dt_ice & 266 266 & + ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 267 267 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr ) & … … 455 455 DO jl = 1, jpl 456 456 DO_2D_11_11 457 IF ( ( ( ABS( o_i(ji,jj,jl) ) > r dt_ice ) .OR. &457 IF ( ( ( ABS( o_i(ji,jj,jl) ) > rDt_ice ) .OR. & 458 458 ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 459 459 ( a_i(ji,jj,jl) > 0._wp ) ) THEN … … 651 651 WRITE(numout,*) ' hfx_res : ', hfx_res(ji,jj) 652 652 WRITE(numout,*) ' qsb_ice_bot : ', qsb_ice_bot(ji,jj) 653 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_ rdtice653 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_Dt_ice 654 654 WRITE(numout,*) 655 655 WRITE(numout,*) ' - Salt fluxes at bottom interface ***' -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedia.F90
r12443 r12468 115 115 z_frc_temtop = glob_sum( 'icedia', qt_atm_oi(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat on top of ice-coean 116 116 ! 117 frc_voltop = frc_voltop + z_frc_voltop * r dt_ice ! km3118 frc_volbot = frc_volbot + z_frc_volbot * r dt_ice ! km3119 frc_sal = frc_sal + z_frc_sal * r dt_ice ! km3*pss120 frc_temtop = frc_temtop + z_frc_temtop * r dt_ice ! 1.e20 J121 frc_tembot = frc_tembot + z_frc_tembot * r dt_ice ! 1.e20 J117 frc_voltop = frc_voltop + z_frc_voltop * rDt_ice ! km3 118 frc_volbot = frc_volbot + z_frc_volbot * rDt_ice ! km3 119 frc_sal = frc_sal + z_frc_sal * rDt_ice ! km3*pss 120 frc_temtop = frc_temtop + z_frc_temtop * rDt_ice ! 1.e20 J 121 frc_tembot = frc_tembot + z_frc_tembot * rDt_ice ! 1.e20 J 122 122 123 123 CALL iom_put( 'ibgfrcvoltop' , frc_voltop ) ! vol forcing ice/snw-atm (km3 equivalent ocean water) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedyn_adv.F90
r12377 r12468 93 93 ! diagnostics 94 94 !------------ 95 diag_trp_ei(:,:) = SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice96 diag_trp_es(:,:) = SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice97 diag_trp_sv(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice98 diag_trp_vi(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice99 diag_trp_vs(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice95 diag_trp_ei(:,:) = SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice 96 diag_trp_es(:,:) = SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 97 diag_trp_sv(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice 98 diag_trp_vi(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice 99 diag_trp_vs(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice 100 100 IF( iom_use('icemtrp') ) CALL iom_put( 'icemtrp' , diag_trp_vi * rhoi ) ! ice mass transport 101 101 IF( iom_use('snwmtrp') ) CALL iom_put( 'snwmtrp' , diag_trp_vs * rhos ) ! snw mass transport -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedyn_adv_pra.F90
r12443 r12468 122 122 ! Note: the advection split is applied at the next time-step in order to avoid blocking global comm. 123 123 ! this should not affect too much the stability 124 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * r dt_ice * r1_e1u(:,:) )125 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * r dt_ice * r1_e2v(:,:) ) )124 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 125 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 126 126 127 127 ! non-blocking global communication send zcflnow and receive zcflprv … … 131 131 ELSE ; icycle = 1 132 132 ENDIF 133 zdt = r dt_ice / REAL(icycle)133 zdt = rDt_ice / REAL(icycle) 134 134 135 135 ! --- transport --- ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedyn_adv_umx.F90
r12443 r12468 128 128 ! Note: the advection split is applied at the next time-step in order to avoid blocking global comm. 129 129 ! this should not affect too much the stability 130 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * r dt_ice * r1_e1u(:,:) )131 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * r dt_ice * r1_e2v(:,:) ) )130 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 131 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 132 132 133 133 ! non-blocking global communication send zcflnow and receive zcflprv … … 137 137 ELSE ; icycle = 1 138 138 ENDIF 139 zdt = r dt_ice / REAL(icycle)139 zdt = rDt_ice / REAL(icycle) 140 140 141 141 ! --- transport --- ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedyn_rdgrft.F90
r12377 r12468 250 250 ELSE 251 251 iterate_ridging = 1 252 zdivu (ji) = zfac * r1_ rdtice252 zdivu (ji) = zfac * r1_Dt_ice 253 253 closing_net(ji) = MAX( 0._wp, -zdivu(ji) ) 254 254 opning (ji) = MAX( 0._wp, zdivu(ji) ) … … 455 455 DO jl = 1, jpl 456 456 DO ji = 1, npti 457 zfac = apartf(ji,jl) * closing_gross(ji) * r dt_ice457 zfac = apartf(ji,jl) * closing_gross(ji) * rDt_ice 458 458 IF( zfac > pa_i(ji,jl) .AND. apartf(ji,jl) /= 0._wp ) THEN 459 closing_gross(ji) = pa_i(ji,jl) / apartf(ji,jl) * r1_ rdtice459 closing_gross(ji) = pa_i(ji,jl) / apartf(ji,jl) * r1_Dt_ice 460 460 ENDIF 461 461 END DO … … 467 467 ! Reduce the opening rate in proportion 468 468 DO ji = 1, npti 469 zfac = pato_i(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * r dt_ice469 zfac = pato_i(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * rDt_ice 470 470 IF( zfac < 0._wp ) THEN ! would lead to negative ato_i 471 opning(ji) = apartf(ji,0) * closing_gross(ji) - pato_i(ji) * r1_ rdtice471 opning(ji) = apartf(ji,0) * closing_gross(ji) - pato_i(ji) * r1_Dt_ice 472 472 ELSEIF( zfac > zasum(ji) ) THEN ! would lead to ato_i > asum 473 opning(ji) = apartf(ji,0) * closing_gross(ji) + ( zasum(ji) - pato_i(ji) ) * r1_ rdtice473 opning(ji) = apartf(ji,0) * closing_gross(ji) + ( zasum(ji) - pato_i(ji) ) * r1_Dt_ice 474 474 ENDIF 475 475 END DO … … 515 515 !-------------------------------------------------------- 516 516 DO ji = 1, npti 517 ato_i_1d(ji) = MAX( 0._wp, ato_i_1d(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * r dt_ice )517 ato_i_1d(ji) = MAX( 0._wp, ato_i_1d(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * rDt_ice ) 518 518 END DO 519 519 … … 533 533 534 534 ! area of ridging / rafting ice (airdg1) and of new ridge (airdg2) 535 airdg1 = aridge(ji,jl1) * closing_gross(ji) * r dt_ice536 airft1 = araft (ji,jl1) * closing_gross(ji) * r dt_ice535 airdg1 = aridge(ji,jl1) * closing_gross(ji) * rDt_ice 536 airft1 = araft (ji,jl1) * closing_gross(ji) * rDt_ice 537 537 538 538 airdg2(ji) = airdg1 * hi_hrdg(ji,jl1) … … 575 575 576 576 ! Ice-ocean exchanges associated with ice porosity 577 wfx_dyn_1d(ji) = wfx_dyn_1d(ji) - vsw * rhoi * r1_ rdtice ! increase in ice volume due to seawater frozen in voids578 sfx_dyn_1d(ji) = sfx_dyn_1d(ji) - vsw * sss_1d(ji) * rhoi * r1_ rdtice579 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ersw(ji) * r1_ rdtice ! > 0 [W.m-2]577 wfx_dyn_1d(ji) = wfx_dyn_1d(ji) - vsw * rhoi * r1_Dt_ice ! increase in ice volume due to seawater frozen in voids 578 sfx_dyn_1d(ji) = sfx_dyn_1d(ji) - vsw * sss_1d(ji) * rhoi * r1_Dt_ice 579 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ersw(ji) * r1_Dt_ice ! > 0 [W.m-2] 580 580 581 581 ! Put the snow lost by ridging into the ocean 582 582 ! Note that esrdg > 0; the ocean must cool to melt snow. If the ocean temp = Tf already, new ice must grow. 583 583 wfx_snw_dyn_1d(ji) = wfx_snw_dyn_1d(ji) + ( rhos * vsrdg(ji) * ( 1._wp - rn_fsnwrdg ) & ! fresh water source for ocean 584 & + rhos * vsrft(ji) * ( 1._wp - rn_fsnwrft ) ) * r1_ rdtice584 & + rhos * vsrft(ji) * ( 1._wp - rn_fsnwrft ) ) * r1_Dt_ice 585 585 586 586 ! virtual salt flux to keep salinity constant 587 587 IF( nn_icesal /= 2 ) THEN 588 588 sirdg2(ji) = sirdg2(ji) - vsw * ( sss_1d(ji) - s_i_1d(ji) ) ! ridge salinity = s_i 589 sfx_bri_1d(ji) = sfx_bri_1d(ji) + sss_1d(ji) * vsw * rhoi * r1_ rdtice & ! put back sss_m into the ocean590 & - s_i_1d(ji) * vsw * rhoi * r1_ rdtice ! and get s_i from the ocean589 sfx_bri_1d(ji) = sfx_bri_1d(ji) + sss_1d(ji) * vsw * rhoi * r1_Dt_ice & ! put back sss_m into the ocean 590 & - s_i_1d(ji) * vsw * rhoi * r1_Dt_ice ! and get s_i from the ocean 591 591 ENDIF 592 592 … … 611 611 IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 612 612 ! Compute ridging /rafting fractions 613 afrdg = aridge(ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)614 afrft = araft (ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)613 afrdg = aridge(ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 614 afrft = araft (ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 615 615 ! Compute ridging /rafting ice and new ridges for es 616 616 esrdg(ji,jk) = ze_s_2d (ji,jk,jl1) * afrdg … … 618 618 ! Put the snow lost by ridging into the ocean 619 619 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ( - esrdg(ji,jk) * ( 1._wp - rn_fsnwrdg ) & ! heat sink for ocean (<0, W.m-2) 620 & - esrft(ji,jk) * ( 1._wp - rn_fsnwrft ) ) * r1_ rdtice620 & - esrft(ji,jk) * ( 1._wp - rn_fsnwrft ) ) * r1_Dt_ice 621 621 ! 622 622 ! Remove energy of new ridge to each category jl1 … … 632 632 IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 633 633 ! Compute ridging /rafting fractions 634 afrdg = aridge(ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)635 afrft = araft (ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)634 afrdg = aridge(ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 635 afrft = araft (ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 636 636 ! Compute ridging ice and new ridges for ei 637 637 eirdg(ji,jk) = ze_i_2d (ji,jk,jl1) * afrdg + ersw(ji) * r1_nlay_i -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icedyn_rhg_evp.F90
r12443 r12468 220 220 221 221 ! Time step for subcycling 222 zdtevp = r dt_ice / REAL( nn_nevp )222 zdtevp = rDt_ice / REAL( nn_nevp ) 223 223 z1_dtevp = 1._wp / zdtevp 224 224 225 225 ! alpha parameters (Bouillon 2009) 226 226 IF( .NOT. ln_aEVP ) THEN 227 zalph1 = ( 2._wp * rn_relast * r dt_ice ) * z1_dtevp227 zalph1 = ( 2._wp * rn_relast * rDt_ice ) * z1_dtevp 228 228 zalph2 = zalph1 * z1_ecc2 229 229 -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icestp.F90
r12406 r12468 338 338 IF( ln_bdy .AND. ln_icediachk ) CALL ctl_warn('par_init: online conservation check does not work with BDY') 339 339 ! 340 r dt_ice = REAL(nn_fsbc) * rn_Dt !--- sea-ice timestep and its inverse341 r1_ rdtice = 1._wp / rdt_ice340 rDt_ice = REAL(nn_fsbc) * rn_Dt !--- sea-ice timestep and its inverse 341 r1_Dt_ice = 1._wp / rDt_ice 342 342 IF(lwp) WRITE(numout,*) 343 IF(lwp) WRITE(numout,*) ' ice timestep r dt_ice = nn_fsbc*rn_Dt = ', rdt_ice343 IF(lwp) WRITE(numout,*) ' ice timestep rDt_ice = nn_fsbc*rn_Dt = ', rDt_ice 344 344 ! 345 345 r1_nlay_i = 1._wp / REAL( nlay_i, wp ) !--- inverse of nlay_i and nlay_s -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd.F90
r12443 r12468 136 136 ! 137 137 ! --- Energy received in the lead from atm-oce exchanges, zqld is defined everywhere (J.m-2) --- ! 138 zqld = tmask(ji,jj,1) * r dt_ice * &138 zqld = tmask(ji,jj,1) * rDt_ice * & 139 139 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 140 140 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) … … 148 148 qsb_ice_bot(ji,jj) = rswitch * rho0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 149 149 150 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_ rdtice / MAX( at_i(ji,jj), epsi10 ) )150 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_Dt_ice / MAX( at_i(ji,jj), epsi10 ) ) 151 151 ! upper bound for qsb_ice_bot: the heat retrieved from the ocean must be smaller than the heat necessary to reach 152 152 ! the freezing point, so that we do not have SST < T_freeze … … 154 154 155 155 !-- Energy Budget of the leads (J.m-2), source of ice growth in open water. Must be < 0 to form ice 156 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * r dt_ice ) - zqfr )156 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rDt_ice ) - zqfr ) 157 157 158 158 ! If there is ice and leads are warming => transfer energy from the lead budget and use it for bottom melting 159 159 ! If the grid cell is fully covered by ice (no leads) => transfer energy from the lead budget to the ice bottom budget 160 160 IF( ( zqld >= 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. at_i(ji,jj) >= (1._wp - epsi10) ) THEN 161 fhld (ji,jj) = rswitch * zqld * r1_ rdtice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90161 fhld (ji,jj) = rswitch * zqld * r1_Dt_ice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 162 162 qlead(ji,jj) = 0._wp 163 163 ELSE … … 185 185 ! Third step in iceupdate.F90 : heat from ice-ocean mass exchange (zf_mass) + solar 186 186 qt_oce_ai(:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + qemp_oce(:,:) & ! Non solar heat flux received by the ocean 187 & - qlead(:,:) * r1_ rdtice & ! heat flux taken from the ocean where there is open water ice formation187 & - qlead(:,:) * r1_Dt_ice & ! heat flux taken from the ocean where there is open water ice formation 188 188 & - at_i (:,:) * qsb_ice_bot(:,:) & ! heat flux taken by sensible flux 189 189 & - at_i (:,:) * fhld (:,:) ! heat flux taken during bottom growth/melt -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_da.F90
r12377 r12468 128 128 zwlat = zm1 * ( MAX( 0._wp, sst_1d(ji) - ( t_bo_1d(ji) - rt0 ) ) )**zm2 ! Melt speed rate [m/s] 129 129 ! 130 zda_tot(ji) = MIN( zwlat * zperi * r dt_ice, at_i_1d(ji) ) ! sea ice concentration decrease (>0)130 zda_tot(ji) = MIN( zwlat * zperi * rDt_ice, at_i_1d(ji) ) ! sea ice concentration decrease (>0) 131 131 132 132 ! --- Distribute reduction among ice categories and calculate associated ice-ocean fluxes --- ! … … 137 137 138 138 ! Contribution to salt flux 139 sfx_lam_1d(ji) = sfx_lam_1d(ji) + rhoi * h_i_1d(ji) * zda * s_i_1d(ji) * r1_ rdtice139 sfx_lam_1d(ji) = sfx_lam_1d(ji) + rhoi * h_i_1d(ji) * zda * s_i_1d(ji) * r1_Dt_ice 140 140 141 141 ! Contribution to heat flux into the ocean [W.m-2], (<0) 142 hfx_thd_1d(ji) = hfx_thd_1d(ji) - zda * r1_ rdtice * ( h_i_1d(ji) * r1_nlay_i * SUM( e_i_1d(ji,1:nlay_i) ) &142 hfx_thd_1d(ji) = hfx_thd_1d(ji) - zda * r1_Dt_ice * ( h_i_1d(ji) * r1_nlay_i * SUM( e_i_1d(ji,1:nlay_i) ) & 143 143 + h_s_1d(ji) * r1_nlay_s * SUM( e_s_1d(ji,1:nlay_s) ) ) 144 144 145 145 ! Contribution to mass flux 146 wfx_lam_1d(ji) = wfx_lam_1d(ji) + zda * r1_ rdtice * ( rhoi * h_i_1d(ji) + rhos * h_s_1d(ji) )146 wfx_lam_1d(ji) = wfx_lam_1d(ji) + zda * r1_Dt_ice * ( rhoi * h_i_1d(ji) + rhos * h_s_1d(ji) ) 147 147 148 148 ! new concentration -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_dh.F90
r12443 r12468 130 130 ! 131 131 DO ji = 1, npti 132 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * r dt_ice )132 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rDt_ice ) 133 133 END DO 134 134 ! … … 138 138 zdum = qns_ice_1d(ji) + qsr_ice_1d(ji) - qtr_ice_top_1d(ji) - qcn_ice_top_1d(ji) 139 139 qml_ice_1d(ji) = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 140 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * r dt_ice )140 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rDt_ice ) 141 141 END DO 142 142 ! … … 145 145 DO ji = 1, npti 146 146 zf_tt(ji) = qcn_ice_bot_1d(ji) + qsb_ice_bot_1d(ji) + fhld_1d(ji) 147 zq_bot(ji) = MAX( 0._wp, zf_tt(ji) * r dt_ice )147 zq_bot(ji) = MAX( 0._wp, zf_tt(ji) * rDt_ice ) 148 148 END DO 149 149 … … 172 172 DO ji = 1, npti 173 173 IF( t_s_1d(ji,jk) > rt0 ) THEN 174 hfx_res_1d (ji) = hfx_res_1d (ji) + e_s_1d(ji,jk) * zh_s(ji,jk) * a_i_1d(ji) * r1_ rdtice ! heat flux to the ocean [W.m-2], < 0175 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhos * zh_s(ji,jk) * a_i_1d(ji) * r1_ rdtice ! mass flux174 hfx_res_1d (ji) = hfx_res_1d (ji) + e_s_1d(ji,jk) * zh_s(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! heat flux to the ocean [W.m-2], < 0 175 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhos * zh_s(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! mass flux 176 176 ! updates 177 177 dh_s_mlt(ji) = dh_s_mlt(ji) - zh_s(ji,jk) … … 193 193 ! 194 194 ! --- precipitation --- 195 zdh_s_pre (ji) = zsnw(ji) * sprecip_1d(ji) * r dt_ice * r1_rhos / at_i_1d(ji) ! thickness change195 zdh_s_pre (ji) = zsnw(ji) * sprecip_1d(ji) * rDt_ice * r1_rhos / at_i_1d(ji) ! thickness change 196 196 zqprec (ji) = - qprec_ice_1d(ji) ! enthalpy of the precip (>0, J.m-3) 197 197 ! 198 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_ rdtice ! heat flux from snow precip (>0, W.m-2)199 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhos * a_i_1d(ji) * zdh_s_pre(ji) * r1_ rdtice ! mass flux, <0198 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_Dt_ice ! heat flux from snow precip (>0, W.m-2) 199 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhos * a_i_1d(ji) * zdh_s_pre(ji) * r1_Dt_ice ! mass flux, <0 200 200 201 201 ! --- melt of falling snow --- … … 203 203 zdeltah (ji,1) = - rswitch * zq_top(ji) / MAX( zqprec(ji) , epsi20 ) ! thickness change 204 204 zdeltah (ji,1) = MAX( - zdh_s_pre(ji), zdeltah(ji,1) ) ! bound melting 205 hfx_snw_1d (ji) = hfx_snw_1d (ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_ rdtice ! heat used to melt snow (W.m-2, >0)206 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_ rdtice ! snow melting only = water into the ocean (then without snow precip), >0205 hfx_snw_1d (ji) = hfx_snw_1d (ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_Dt_ice ! heat used to melt snow (W.m-2, >0) 206 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_Dt_ice ! snow melting only = water into the ocean (then without snow precip), >0 207 207 208 208 ! updates available heat + precipitations after melting … … 243 243 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 244 244 245 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d (ji,jk) * r1_ rdtice ! heat used to melt snow(W.m-2, >0)246 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! snow melting only = water into the ocean (then without snow precip)245 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d (ji,jk) * r1_Dt_ice ! heat used to melt snow(W.m-2, >0) 246 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! snow melting only = water into the ocean (then without snow precip) 247 247 248 248 ! updates available heat + thickness … … 264 264 IF( evap_ice_1d(ji) > 0._wp ) THEN 265 265 ! 266 zdh_s_sub (ji) = MAX( - h_s_1d(ji) , - evap_ice_1d(ji) * r1_rhos * r dt_ice )267 zevap_rema(ji) = evap_ice_1d(ji) * r dt_ice + zdh_s_sub(ji) * rhos ! remaining evap in kg.m-2 (used for ice melting later on)266 zdh_s_sub (ji) = MAX( - h_s_1d(ji) , - evap_ice_1d(ji) * r1_rhos * rDt_ice ) 267 zevap_rema(ji) = evap_ice_1d(ji) * rDt_ice + zdh_s_sub(ji) * rhos ! remaining evap in kg.m-2 (used for ice melting later on) 268 268 zdeltah (ji,1) = MAX( zdh_s_sub(ji), - zdh_s_pre(ji) ) 269 269 270 270 hfx_sub_1d (ji) = hfx_sub_1d(ji) + & ! Heat flux by sublimation [W.m-2], < 0 (sublimate snow that had fallen, then pre-existing snow) 271 271 & ( zdeltah(ji,1) * zqprec(ji) + ( zdh_s_sub(ji) - zdeltah(ji,1) ) * e_s_1d(ji,1) ) & 272 & * a_i_1d(ji) * r1_ rdtice273 wfx_snw_sub_1d(ji) = wfx_snw_sub_1d(ji) - rhos * a_i_1d(ji) * zdh_s_sub(ji) * r1_ rdtice ! Mass flux by sublimation272 & * a_i_1d(ji) * r1_Dt_ice 273 wfx_snw_sub_1d(ji) = wfx_snw_sub_1d(ji) - rhos * a_i_1d(ji) * zdh_s_sub(ji) * r1_Dt_ice ! Mass flux by sublimation 274 274 275 275 ! new snow thickness … … 328 328 zfmdt = - rhoi * zdeltah(ji,jk) ! Recompute mass flux [kg/m2, >0] 329 329 330 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0330 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 331 331 ! ice enthalpy zEi is "sent" to the ocean 332 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux332 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 333 333 ! using s_i_1d and not sz_i_1d(jk) is ok 334 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux334 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 335 335 336 336 ELSE !-- Surface melting … … 354 354 zQm = zfmdt * zEw ! Energy of the melt water sent to the ocean [J/m2, <0] 355 355 356 sfx_sum_1d(ji) = sfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux >0356 sfx_sum_1d(ji) = sfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux >0 357 357 ! using s_i_1d and not sz_i_1d(jk) is ok) 358 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux [W.m-2], < 0359 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat flux used in this process [W.m-2], > 0358 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux [W.m-2], < 0 359 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat flux used in this process [W.m-2], > 0 360 360 ! 361 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux361 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 362 362 363 363 END IF … … 369 369 dh_i_sub(ji) = dh_i_sub(ji) + zdum 370 370 371 sfx_sub_1d(ji) = sfx_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * s_i_1d(ji) * r1_ rdtice ! Salt flux >0371 sfx_sub_1d(ji) = sfx_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * s_i_1d(ji) * r1_Dt_ice ! Salt flux >0 372 372 ! clem: flux is sent to the ocean for simplicity 373 373 ! but salt should remain in the ice except 374 374 ! if all ice is melted. => must be corrected 375 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * e_i_1d(ji,jk) * a_i_1d(ji) * r1_ rdtice ! Heat flux [W.m-2], < 0376 377 wfx_ice_sub_1d(ji) = wfx_ice_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * r1_ rdtice ! Mass flux > 0375 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * e_i_1d(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! Heat flux [W.m-2], < 0 376 377 wfx_ice_sub_1d(ji) = wfx_ice_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * r1_Dt_ice ! Mass flux > 0 378 378 379 379 ! update remaining mass flux … … 400 400 ! remaining "potential" evap is sent to ocean 401 401 DO ji = 1, npti 402 wfx_err_sub_1d(ji) = wfx_err_sub_1d(ji) - zevap_rema(ji) * a_i_1d(ji) * r1_ rdtice ! <=0 (net evap for the ocean in kg.m-2.s-1)402 wfx_err_sub_1d(ji) = wfx_err_sub_1d(ji) - zevap_rema(ji) * a_i_1d(ji) * r1_Dt_ice ! <=0 (net evap for the ocean in kg.m-2.s-1) 403 403 END DO 404 404 … … 428 428 !--- zswi12 if 2.0e-8 < dh/dt < 3.6e-7 429 429 !--- zswi2 if dh/dt > 3.6e-7 430 zgrr = MIN( 1.0e-3, MAX ( dh_i_bog(ji) * r1_ rdtice , epsi10 ) )430 zgrr = MIN( 1.0e-3, MAX ( dh_i_bog(ji) * r1_Dt_ice , epsi10 ) ) 431 431 zswi2 = MAX( 0._wp , SIGN( 1._wp , zgrr - 3.6e-7 ) ) 432 432 zswi12 = MAX( 0._wp , SIGN( 1._wp , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) … … 448 448 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 449 449 450 dh_i_bog(ji) = r dt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoi ) )450 dh_i_bog(ji) = rDt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoi ) ) 451 451 452 452 END DO … … 454 454 zfmdt = - rhoi * dh_i_bog(ji) ! Mass flux x time step (kg/m2, < 0) 455 455 456 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux to the ocean [W.m-2], >0457 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat flux used in this process [W.m-2], <0458 459 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * s_i_new(ji) * r1_ rdtice ! Salt flux, <0460 461 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * r1_ rdtice ! Mass flux, <0456 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux to the ocean [W.m-2], >0 457 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat flux used in this process [W.m-2], <0 458 459 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * s_i_new(ji) * r1_Dt_ice ! Salt flux, <0 460 461 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * r1_Dt_ice ! Mass flux, <0 462 462 463 463 ! update heat content (J.m-2) and layer thickness … … 490 490 zfmdt = - zdeltah(ji,jk) * rhoi ! Mass flux x time step > 0 491 491 492 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0492 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 493 493 ! ice enthalpy zEi is "sent" to the ocean 494 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux494 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 495 495 ! using s_i_1d and not sz_i_1d(jk) is ok 496 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux496 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 497 497 498 498 ! update heat content (J.m-2) and layer thickness … … 520 520 zQm = zfmdt * zEw ! Heat exchanged with ocean 521 521 522 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0523 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat used in this process [W.m-2], >0524 525 sfx_bom_1d(ji) = sfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux522 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 523 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat used in this process [W.m-2], >0 524 525 sfx_bom_1d(ji) = sfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 526 526 ! using s_i_1d and not sz_i_1d(jk) is ok 527 527 528 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux528 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 529 529 530 530 ! update heat content (J.m-2) and layer thickness … … 556 556 557 557 zq_rema(ji) = zq_rema(ji) + zdeltah(ji,1) * e_s_1d(ji,1) ! update available heat (J.m-2) 558 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_ rdtice ! Heat used to melt snow, W.m-2 (>0)559 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_ rdtice ! Mass flux558 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_Dt_ice ! Heat used to melt snow, W.m-2 (>0) 559 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_Dt_ice ! Mass flux 560 560 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,1) 561 561 ! 562 562 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 563 qt_oce_ai_1d(ji) = qt_oce_ai_1d(ji) + ( zq_rema(ji) * a_i_1d(ji) ) * r1_ rdtice563 qt_oce_ai_1d(ji) = qt_oce_ai_1d(ji) + ( zq_rema(ji) * a_i_1d(ji) ) * r1_Dt_ice 564 564 565 565 IF( ln_icectl .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) … … 584 584 zQm = zfmdt * zEw 585 585 586 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux587 588 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_1d(ji) * a_i_1d(ji) * zfmdt * r1_ rdtice ! Salt flux586 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux 587 588 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_1d(ji) * a_i_1d(ji) * zfmdt * r1_Dt_ice ! Salt flux 589 589 590 590 ! Case constant salinity in time: virtual salt flux to keep salinity constant 591 591 IF( nn_icesal /= 2 ) THEN 592 sfx_bri_1d(ji) = sfx_bri_1d(ji) - sss_1d (ji) * a_i_1d(ji) * zfmdt * r1_ rdtice & ! put back sss_m into the ocean593 & - s_i_1d(ji) * a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_ rdtice ! and get rn_icesal from the ocean592 sfx_bri_1d(ji) = sfx_bri_1d(ji) - sss_1d (ji) * a_i_1d(ji) * zfmdt * r1_Dt_ice & ! put back sss_m into the ocean 593 & - s_i_1d(ji) * a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_Dt_ice ! and get rn_icesal from the ocean 594 594 ENDIF 595 595 596 596 ! Mass flux: All snow is thrown in the ocean, and seawater is taken to replace the volume 597 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_ rdtice598 wfx_snw_sni_1d(ji) = wfx_snw_sni_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhos * r1_ rdtice597 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_Dt_ice 598 wfx_snw_sni_1d(ji) = wfx_snw_sni_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhos * r1_Dt_ice 599 599 600 600 ! update heat content (J.m-2) and layer thickness … … 618 618 ! mass & energy loss to the ocean 619 619 hfx_res_1d(ji) = hfx_res_1d(ji) + ( 1._wp - rswitch ) * & 620 & ( e_s_1d(ji,jk) * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_ rdtice ) ! heat flux to the ocean [W.m-2], < 0620 & ( e_s_1d(ji,jk) * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_Dt_ice ) ! heat flux to the ocean [W.m-2], < 0 621 621 wfx_res_1d(ji) = wfx_res_1d(ji) + ( 1._wp - rswitch ) * & 622 & ( rhos * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_ rdtice ) ! mass flux622 & ( rhos * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_Dt_ice ) ! mass flux 623 623 ! update energy (mass is updated in the next loop) 624 624 e_s_1d(ji,jk) = rswitch * e_s_1d(ji,jk) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_do.F90
r12443 r12468 289 289 290 290 ! Contribution to heat flux to the ocean [W.m-2], >0 291 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * zEw * r1_ rdtice291 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * zEw * r1_Dt_ice 292 292 ! Total heat flux used in this process [W.m-2] 293 hfx_opw_1d(ji) = hfx_opw_1d(ji) - zfmdt * zdE * r1_ rdtice293 hfx_opw_1d(ji) = hfx_opw_1d(ji) - zfmdt * zdE * r1_Dt_ice 294 294 ! mass flux 295 wfx_opw_1d(ji) = wfx_opw_1d(ji) - zv_newice(ji) * rhoi * r1_ rdtice295 wfx_opw_1d(ji) = wfx_opw_1d(ji) - zv_newice(ji) * rhoi * r1_Dt_ice 296 296 ! salt flux 297 sfx_opw_1d(ji) = sfx_opw_1d(ji) - zv_newice(ji) * rhoi * zs_newice(ji) * r1_ rdtice297 sfx_opw_1d(ji) = sfx_opw_1d(ji) - zv_newice(ji) * rhoi * zs_newice(ji) * r1_Dt_ice 298 298 END DO 299 299 -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_ent.F90
r10069 r12468 129 129 ! then we should not (* a_i) again but not important since this is just to check that remap error is ~0 130 130 DO ji = 1, npti 131 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_ rdtice * &131 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_Dt_ice * & 132 132 & ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( eh_i_old(ji,0:nlay_i+1) ) ) 133 133 END DO -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_pnd.F90
r12377 r12468 165 165 ! melt pond mass flux (<0) 166 166 IF( zdv_mlt > 0._wp ) THEN 167 zfac = zfr_mlt * zdv_mlt * rhow * r1_ rdtice167 zfac = zfr_mlt * zdv_mlt * rhow * r1_Dt_ice 168 168 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 169 169 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_sal.F90
r12377 r12468 68 68 CASE( 2 ) ! time varying salinity with linear profile ! 69 69 ! !---------------------------------------------! 70 z1_time_gd = 1._wp / rn_time_gd * r dt_ice71 z1_time_fl = 1._wp / rn_time_fl * r dt_ice70 z1_time_gd = 1._wp / rn_time_gd * rDt_ice 71 z1_time_fl = 1._wp / rn_time_fl * rDt_ice 72 72 ! 73 73 DO ji = 1, npti … … 98 98 99 99 ! Salt flux 100 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoi * a_i_1d(ji) * h_i_1d(ji) * ( zs_i_fl + zs_i_gd ) * r1_ rdtice100 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoi * a_i_1d(ji) * h_i_1d(ji) * ( zs_i_fl + zs_i_gd ) * r1_Dt_ice 101 101 ENDIF 102 102 END DO -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icethd_zdf_bl99.F90
r12447 r12468 320 320 DO ji = 1, npti 321 321 zcpi = rcpi + zgamma * sz_i_1d(ji,jk) / MAX( ( t_i_1d(ji,jk) - rt0 ) * ( ztiold(ji,jk) - rt0 ), epsi10 ) 322 zeta_i(ji,jk) = r dt_ice * r1_rhoi * z1_h_i(ji) / MAX( epsi10, zcpi )322 zeta_i(ji,jk) = rDt_ice * r1_rhoi * z1_h_i(ji) / MAX( epsi10, zcpi ) 323 323 END DO 324 324 END DO … … 326 326 DO jk = 1, nlay_s 327 327 DO ji = 1, npti 328 zeta_s(ji,jk) = r dt_ice * r1_rhos * r1_rcpi * z1_h_s(ji)328 zeta_s(ji,jk) = rDt_ice * r1_rhos * r1_rcpi * z1_h_s(ji) 329 329 END DO 330 330 END DO … … 826 826 IF( t_su_1d(ji) < rt0 ) THEN ! case T_su < 0degC 827 827 zhfx_err = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 828 & + zdq * r1_ rdtice ) * a_i_1d(ji)828 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 829 829 ELSE ! case T_su = 0degC 830 830 zhfx_err = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 831 & + zdq * r1_ rdtice ) * a_i_1d(ji)831 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 832 832 ENDIF 833 833 … … 835 835 836 836 zhfx_err = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 837 & + zdq * r1_ rdtice ) * a_i_1d(ji)837 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 838 838 839 839 ENDIF … … 843 843 ! 844 844 ! hfx_dif = Heat flux diagnostic of sensible heat used to warm/cool ice in W.m-2 845 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_ rdtice * a_i_1d(ji)845 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_Dt_ice * a_i_1d(ji) 846 846 ! 847 847 END DO -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/iceupdate.F90
r12443 r12468 171 171 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhos * vt_s(ji,jj) + rhoi * vt_i(ji,jj) ) 172 172 ! ! time evolution of snow+ice mass 173 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_ rdtice173 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_Dt_ice 174 174 175 175 END_2D -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/ICE/icevar.F90
r12443 r12468 488 488 DO_3D_11_11( 1, nlay_i ) 489 489 ! update exchanges with ocean 490 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_i(ji,jj,jk,jl) * r1_ rdtice ! W.m-2 <0490 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_i(ji,jj,jk,jl) * r1_Dt_ice ! W.m-2 <0 491 491 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * zswitch(ji,jj) 492 492 t_i(ji,jj,jk,jl) = t_i(ji,jj,jk,jl) * zswitch(ji,jj) + rt0 * ( 1._wp - zswitch(ji,jj) ) … … 495 495 DO_3D_11_11( 1, nlay_s ) 496 496 ! update exchanges with ocean 497 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s(ji,jj,jk,jl) * r1_ rdtice ! W.m-2 <0497 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s(ji,jj,jk,jl) * r1_Dt_ice ! W.m-2 <0 498 498 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * zswitch(ji,jj) 499 499 t_s(ji,jj,jk,jl) = t_s(ji,jj,jk,jl) * zswitch(ji,jj) + rt0 * ( 1._wp - zswitch(ji,jj) ) … … 505 505 DO_2D_11_11 506 506 ! update exchanges with ocean 507 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * sv_i(ji,jj,jl) * rhoi * r1_ rdtice508 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i (ji,jj,jl) * rhoi * r1_ rdtice509 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhos * r1_ rdtice507 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * sv_i(ji,jj,jl) * rhoi * r1_Dt_ice 508 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i (ji,jj,jl) * rhoi * r1_Dt_ice 509 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhos * r1_Dt_ice 510 510 ! 511 511 a_i (ji,jj,jl) = a_i (ji,jj,jl) * zswitch(ji,jj) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/ASM/asminc.F90
r12406 r12468 1000 1000 ! 1001 1001 ! ! ! salt exchanges at the ice/ocean interface 1002 ! ! zpmess = zfons / r dt_ice ! rdt_ice is ice timestep1002 ! ! zpmess = zfons / rDt_ice ! rDt_ice is ice timestep 1003 1003 ! ! 1004 1004 ! !! Adjust fsalt. A +ve fsalt means adding salt to ocean -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/dynspg.F90
r12443 r12468 123 123 ! 124 124 IF (ln_scal_load) THEN 125 zld = rn_ load * grav125 zld = rn_scal_load * grav 126 126 DO_2D_00_00 127 127 spgu(ji,jj) = spgu(ji,jj) + zld * ( pssh(ji+1,jj,Kmm) - pssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/dynspg_ts.F90
r12443 r12468 552 552 ! 553 553 ! ! Surface pressure gradient 554 zldg = ( 1._wp - rn_ load ) * grav ! local factor554 zldg = ( 1._wp - rn_scal_load ) * grav ! local factor 555 555 DO_2D_00_00 556 556 zu_spg(ji,jj) = - zldg * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TDE/tide_mod.F90
r12443 r12468 64 64 INTEGER , PUBLIC :: nb_harmo !: Number of active tidal components 65 65 REAL(wp), PUBLIC :: rn_tide_ramp_dt !: 66 REAL(wp), PUBLIC :: rn_ load !:66 REAL(wp), PUBLIC :: rn_scal_load !: 67 67 CHARACTER(lc), PUBLIC :: cn_tide_load !: 68 68 REAL(wp) :: rn_tide_gamma ! Tidal tilt factor … … 124 124 NAMELIST/nam_tide/ln_tide, nn_tide_var, ln_tide_dia, ln_tide_pot, rn_tide_gamma, & 125 125 & ln_scal_load, ln_read_load, cn_tide_load, & 126 & ln_tide_ramp, rn_ load, rn_tide_ramp_dt, &126 & ln_tide_ramp, rn_scal_load, rn_tide_ramp_dt, & 127 127 & sn_tide_cnames 128 128 !!---------------------------------------------------------------------- … … 153 153 WRITE(numout,*) ' Read load potential from file ln_read_load = ', ln_read_load 154 154 WRITE(numout,*) ' Apply ramp on tides at startup ln_tide_ramp = ', ln_tide_ramp 155 WRITE(numout,*) ' Fraction of SSH used in scal. approx. rn_ load = ', rn_load155 WRITE(numout,*) ' Fraction of SSH used in scal. approx. rn_scal_load = ', rn_scal_load 156 156 WRITE(numout,*) ' Duration (days) of ramp rn_tide_ramp_dt = ', rn_tide_ramp_dt 157 157 ENDIF 158 158 ELSE 159 rn_ load = 0._wp159 rn_scal_load = 0._wp 160 160 161 161 IF(lwp) WRITE(numout,*) … … 193 193 IF( nb_harmo == 0 ) CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' ) 194 194 ! 195 IF (.NOT.ln_scal_load ) rn_ load = 0._wp195 IF (.NOT.ln_scal_load ) rn_scal_load = 0._wp 196 196 ! 197 197 ALLOCATE( amp_pot(jpi,jpj,nb_harmo), & … … 754 754 ! 755 755 IF( ln_tide_dia ) THEN ! Output total tidal potential (incl. load potential) 756 IF ( iom_use( "tide_pot" ) ) CALL iom_put( "tide_pot", pot_astro(:,:) + rn_ load * ssh(:,:,Kmm) )756 IF ( iom_use( "tide_pot" ) ) CALL iom_put( "tide_pot", pot_astro(:,:) + rn_scal_load * ssh(:,:,Kmm) ) 757 757 END IF 758 758 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/C14/trcsms_c14.F90
r12377 r12468 124 124 125 125 ! cumulation of air-to-sea flux at each time step 126 qint_c14(:,:) = qint_c14(:,:) + qtr_c14(:,:) * r dttrc126 qint_c14(:,:) = qint_c14(:,:) + qtr_c14(:,:) * rn_Dt 127 127 ! 128 128 ! Add the surface flux to the trend of jp_c14 -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/P4Z/p4zsms.F90
r12406 r12468 90 90 IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt, Kbb, Kmm ) ! Relaxation of some tracers 91 91 ! 92 rfact = r 2dttrc92 rfact = rDt_trc 93 93 ! 94 94 ! trends computation initialisation -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/SED/oce_sed.F90
r12406 r12468 50 50 USE p4zche, ONLY : sio3eq => sio3eq !: Chemical constants 51 51 USE p4zbc, ONLY : dust => dust 52 USE trc , ONLY : r 2dttrc => r2dttrc52 USE trc , ONLY : rDt_trc => rDt_trc 53 53 54 54 END MODULE oce_sed -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/SED/seddta.F90
r12377 r12468 75 75 IF( kt == nitsed000 ) THEN 76 76 IF (lwp) WRITE(numsed,*) ' sed_dta : Sediment fields' 77 dtsed = r 2dttrc77 dtsed = rDt_trc 78 78 rsecday = 60.* 60. * 24. 79 79 ! conv2 = 1.0e+3 / ( 1.0e+4 * rsecday * 30. ) … … 103 103 DO_2D_11_11 104 104 ikt = mbkt(ji,jj) 105 zdep = e3t(ji,jj,ikt,Kmm) / r 2dttrc105 zdep = e3t(ji,jj,ikt,Kmm) / rDt_trc 106 106 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) / rday ) 107 107 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) / rday ) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/SED/sedini.F90
r12377 r12468 488 488 489 489 jpksedm1 = jpksed - 1 490 dtsed = r 2dttrc490 dtsed = rDt_trc 491 491 492 492 READ ( numnamsed_ref, nam_trased, IOSTAT = ios, ERR = 905) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/SED/sedstp.F90
r12377 r12468 55 55 IF(ln_sediment_offline) CALL trc_dmp_sed ( kt, Kbb, Kmm, Krhs ) 56 56 57 dtsed = r 2dttrc57 dtsed = rDt_trc 58 58 ! dtsed2 = dtsed 59 59 IF (kt /= nitsed000) THEN -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/SED/sedwri.F90
r10222 r12468 94 94 DO ji = 1, jpoce 95 95 zflx(ji,jw) = ( pwcp(ji,1,jw) - pwcp_dta(ji,jw) ) & 96 & * 1.e3 / 1.e2 * dzkbot(ji) / r 2dttrc96 & * 1.e3 / 1.e2 * dzkbot(ji) / rDt_trc 97 97 ENDDO 98 98 ENDDO … … 100 100 ! Calculation of accumulation rate per dt 101 101 DO js = 1, jpsol 102 zrate = 1.0 / ( denssol * por1(jpksed) ) / r 2dttrc102 zrate = 1.0 / ( denssol * por1(jpksed) ) / rDt_trc 103 103 DO ji = 1, jpoce 104 104 zflx(ji,jpwatp1) = zflx(ji,jpwatp1) + ( tosed(ji,js) - fromsed(ji,js) ) * zrate -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trcadv.F90
r12377 r12468 125 125 CALL tra_adv_cen( kt, nittrc000,'TRC', zuu, zvv, zww, Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 126 126 CASE ( np_FCT ) ! FCT : 2nd / 4th order 127 CALL tra_adv_fct( kt, nittrc000,'TRC', r 2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v )127 CALL tra_adv_fct( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) 128 128 CASE ( np_MUS ) ! MUSCL 129 CALL tra_adv_mus( kt, nittrc000,'TRC', r 2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups )129 CALL tra_adv_mus( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups ) 130 130 CASE ( np_UBS ) ! UBS 131 CALL tra_adv_ubs( kt, nittrc000,'TRC', r 2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v )131 CALL tra_adv_ubs( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v ) 132 132 CASE ( np_QCK ) ! QUICKEST 133 CALL tra_adv_qck( kt, nittrc000,'TRC', r 2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs )133 CALL tra_adv_qck( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs ) 134 134 ! 135 135 END SELECT -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trcatf.F90
r12443 r12468 111 111 112 112 ! total trend for the non-time-filtered variables. 113 zfact = 1.0 / r dttrc113 zfact = 1.0 / rn_Dt 114 114 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from ts(Kmm) terms 115 115 IF( ln_linssh ) THEN ! linear sea surface height only … … 152 152 IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 153 153 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nittrc000, 'TRC', ptr, jptra ) ! linear ssh 154 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, r dttrc, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh154 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 155 155 ENDIF 156 156 ELSE … … 164 164 DO jn = 1, jptra 165 165 DO jk = 1, jpkm1 166 zfact = 1._wp / r 2dttrc166 zfact = 1._wp / rDt_trc 167 167 ztrdt(:,:,jk,jn) = ( ptr(:,:,jk,jn,Kbb) - ztrdt(:,:,jk,jn) ) * zfact 168 168 END DO … … 222 222 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 223 223 IF( .NOT. ln_linssh ) THEN 224 rfact1 = rn_atfp * r dttrc224 rfact1 = rn_atfp * rn_Dt 225 225 rfact2 = rfact1 / rho0 226 226 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trcsbc.F90
r12443 r12468 147 147 zdtra = r1_rho0 * ( ztfx + ( zsfx(ji,jj) + fmmflx(ji,jj) ) * ptr(ji,jj,1,jn,Kmm) ) 148 148 IF ( zdtra < 0. ) THEN 149 zdtra = MAX(zdtra, -ptr(ji,jj,1,jn,Kmm) * e3t(ji,jj,1,Kmm) / r 2dttrc ) ! avoid negative concentrations to arise149 zdtra = MAX(zdtra, -ptr(ji,jj,1,jn,Kmm) * e3t(ji,jj,1,Kmm) / rDt_trc ) ! avoid negative concentrations to arise 150 150 ENDIF 151 151 sbc_trc(ji,jj,jn) = zdtra -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trczdf.F90
r12377 r12468 56 56 IF( l_trdtrc ) ztrtrd(:,:,:,:) = ptr(:,:,:,:,Krhs) 57 57 ! 58 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r 2dttrc, Kbb, Kmm, Krhs, ptr, Kaa, jptra ) ! implicit scheme58 CALL tra_zdf_imp( kt, nittrc000, 'TRC', rDt_trc, Kbb, Kmm, Krhs, ptr, Kaa, jptra ) ! implicit scheme 59 59 ! 60 60 IF( l_trdtrc ) THEN ! save the vertical diffusive trends for further diagnostics 61 61 DO jn = 1, jptra 62 62 DO jk = 1, jpkm1 63 ztrtrd(:,:,jk,jn) = ( ( ptr(:,:,jk,jn,Kaa) - ptr(:,:,jk,jn,Kbb) ) / r 2dttrc ) - ztrtrd(:,:,jk,jn)63 ztrtrd(:,:,jk,jn) = ( ( ptr(:,:,jk,jn,Kaa) - ptr(:,:,jk,jn,Kbb) ) / rDt_trc ) - ztrtrd(:,:,jk,jn) 64 64 END DO 65 65 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trdmxl_trc.F90
r12406 r12468 401 401 DO jn = 1, jptra 402 402 IF( ln_trdtrc(jn) ) THEN 403 !-- Compute total trends (use rdttrc instead of rn_Dt ???)403 !-- Compute total trends 404 404 IF ( ln_trcadv_muscl .OR. ln_trcadv_muscl2 ) THEN ! EULER-FORWARD schemes 405 405 ztmltot(:,:,jn) = ( tml_trc(:,:,jn) - tmlbn_trc(:,:,jn) )/rn_Dt -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trc.F90
r12397 r12468 61 61 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 62 62 CHARACTER(len = 256), PUBLIC :: cn_trcrst_outdir !: restart output directory 63 REAL(wp) , PUBLIC :: rdttrc !: passive tracer time step 64 REAL(wp) , PUBLIC :: r2dttrc !: = 2*rdttrc except at nit000 (=rdttrc) if l_1st_euler=.true. 63 REAL(wp) , PUBLIC :: rDt_trc !: = 2*rn_Dt except at nit000 (=rn_Dt) if l_1st_euler=.true. 65 64 LOGICAL , PUBLIC :: ln_top_euler !: boolean term for euler integration 66 65 LOGICAL , PUBLIC :: ln_trcdta !: Read inputs data from files -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trcnam.F90
r12406 r12468 76 76 ENDIF 77 77 ! 78 rdttrc = rn_Dt ! passive tracer time-step79 !80 78 IF(lwp) THEN ! control print 81 79 WRITE(numout,*) 82 WRITE(numout,*) ' ==>>> Passive Tracer time step rdttrc = rn_Dt = ', rdttrc80 WRITE(numout,*) ' ==>>> Passive Tracer time step = rn_Dt = ', rn_Dt 83 81 ENDIF 84 82 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trcrst.F90
r12406 r12468 136 136 !!---------------------------------------------------------------------- 137 137 ! 138 CALL iom_rstput( kt, nitrst, numrtw, 'rdttrc1', r dttrc ) ! passive tracer time step138 CALL iom_rstput( kt, nitrst, numrtw, 'rdttrc1', rn_Dt ) ! passive tracer time step (= ocean time step) 139 139 ! prognostic variables 140 140 ! -------------------- -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trcstp.F90
r12397 r12468 65 65 ! 66 66 IF( l_1st_euler .OR. ln_top_euler ) THEN ! at nittrc000 67 r 2dttrc = rdttrc ! = rdttrc(use or restarting with Euler time stepping)67 rDt_trc = rn_Dt ! = rn_Dt (use or restarting with Euler time stepping) 68 68 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 69 r 2dttrc = 2. * rdttrc ! = 2 rdttrc(leapfrog)69 rDt_trc = 2. * rn_Dt ! = 2 rn_Dt (leapfrog) 70 70 ENDIF 71 71 ! … … 177 177 nb_rec_per_day = ncpl_qsr_freq 178 178 ELSE 179 rdt_sampl = MAX( 3600., r dttrc)179 rdt_sampl = MAX( 3600., rn_Dt ) 180 180 nb_rec_per_day = INT( rday / rdt_sampl ) 181 181 ENDIF … … 196 196 197 197 CALL iom_get( numrtr, 'ktdcy', zkt ) 198 rsecfst = INT( zkt ) * r dttrc198 rsecfst = INT( zkt ) * rn_Dt 199 199 IF(lwp) WRITE(numout,*) 'trc_qsr_mean: qsr_mean read in the restart file at time-step rsecfst =', rsecfst, ' s ' 200 200 CALL iom_get( numrtr, jpdom_autoglo, 'qsr_mean', qsr_mean ) ! A mean of qsr … … 217 217 ELSE !* no restart: set from nit000 values 218 218 IF(lwp) WRITE(numout,*) 'trc_qsr_mean: qsr_mean set to nit000 values' 219 rsecfst = kt * r dttrc219 rsecfst = kt * rn_Dt 220 220 ! 221 221 qsr_mean(:,:) = qsr(:,:) … … 227 227 ENDIF 228 228 ! 229 rseclast = kt * r dttrc229 rseclast = kt * rn_Dt 230 230 ! 231 231 llnew = ( rseclast - rsecfst ) .ge. rdt_sampl ! new shortwave to store
Note: See TracChangeset
for help on using the changeset viewer.