- Timestamp:
- 2020-03-02T09:10:34+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src
- Files:
-
- 147 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ABL/abl.F90
r11305 r12495 11 11 USE dom_oce, ONLY: e1t, e1u, e1v, e1f ! scale factors for horizontal grid 12 12 USE dom_oce, ONLY: e2t, e2u, e2v, e2f ! 13 USE dom_oce, ONLY: r dt! oceanic time-step13 USE dom_oce, ONLY: rn_Dt ! oceanic time-step 14 14 USE sbc_oce, ONLY: ght_abl, ghw_abl, e3t_abl, e3w_abl, jpka ! scale factors and altitudes of ABL grid points in the vertical 15 15 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ABL/ablmod.F90
r12353 r12495 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 ) … … 436 436 zcff2 = jp_alp3_dyn * zsig**3 + jp_alp2_dyn * zsig**2 & 437 437 & + jp_alp1_dyn * zsig + jp_alp0_dyn 438 zcff = (1._wp-zmsk) + zmsk * zcff2 * r dt ! zcff = 1 for masked points439 ! rdt = rdt_abl / nn_fsbc438 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 439 ! rn_Dt = rDt_abl / nn_fsbc 440 440 zcff = zcff * rest_eq(ji,jj) 441 441 z_cft( ji, jj, jk ) = zcff … … 460 460 zcff2 = jp_alp3_tra * zsig**3 + jp_alp2_tra * zsig**2 & 461 461 & + jp_alp1_tra * zsig + jp_alp0_tra 462 zcff = (1._wp-zmsk) + zmsk * zcff2 * r dt ! zcff = 1 for masked points463 ! rdt = rdt_abl / nn_fsbc462 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 463 ! 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ABL/par_abl.F90
r11858 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ABL/sbcabl.F90
r12353 r12495 202 202 203 203 ! ABL timestep 204 r dt_abl = nn_fsbc * rdt204 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/ice.F90
r11627 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icecor.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icectl.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedia.F90
r12377 r12495 109 109 ! ---------------------------! 110 110 ! they must be kept outside an IF(iom_use) because of the call to dia_rst below 111 z_frc_volbot = r1_r au0 * glob_sum( 'icedia', -( wfx_ice(:,:) + wfx_snw(:,:) + wfx_err_sub(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-ocean112 z_frc_voltop = r1_r au0 * glob_sum( 'icedia', -( wfx_sub(:,:) + wfx_spr(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-atm113 z_frc_sal = r1_r au0 * glob_sum( 'icedia', - sfx(:,:) * e1e2t(:,:) ) * 1.e-9 ! salt fluxes ice/snow-ocean111 z_frc_volbot = r1_rho0 * glob_sum( 'icedia', -( wfx_ice(:,:) + wfx_snw(:,:) + wfx_err_sub(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-ocean 112 z_frc_voltop = r1_rho0 * glob_sum( 'icedia', -( wfx_sub(:,:) + wfx_spr(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-atm 113 z_frc_sal = r1_rho0 * glob_sum( 'icedia', - sfx(:,:) * e1e2t(:,:) ) * 1.e-9 ! salt fluxes ice/snow-ocean 114 114 z_frc_tembot = glob_sum( 'icedia', qt_oce_ai(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat on top of ocean (and below ice) 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) … … 128 128 129 129 IF( iom_use('ibgfrchfxtop') .OR. iom_use('ibgfrchfxbot') ) THEN 130 CALL iom_put( 'ibgfrchfxtop' , frc_temtop * z1_e1e2 * 1.e-20 * kt*r dt ) ! heat on top of ice/snw/ocean (W/m2)131 CALL iom_put( 'ibgfrchfxbot' , frc_tembot * z1_e1e2 * 1.e-20 * kt*r dt ) ! heat on top of ocean(below ice) (W/m2)130 CALL iom_put( 'ibgfrchfxtop' , frc_temtop * z1_e1e2 * 1.e-20 * kt*rn_Dt ) ! heat on top of ice/snw/ocean (W/m2) 131 CALL iom_put( 'ibgfrchfxbot' , frc_tembot * z1_e1e2 * 1.e-20 * kt*rn_Dt ) ! heat on top of ocean(below ice) (W/m2) 132 132 ENDIF 133 133 … … 137 137 IF( iom_use('ibgvolume') .OR. iom_use('ibgsaltco') .OR. iom_use('ibgheatco') .OR. iom_use('ibgheatfx') ) THEN 138 138 139 zdiff_vol = r1_r au0 * glob_sum( 'icedia', ( rhoi*vt_i(:,:) + rhos*vt_s(:,:) - vol_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater trend (km3)140 zdiff_sal = r1_r au0 * glob_sum( 'icedia', ( rhoi*st_i(:,:) - sal_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! salt content trend (km3*pss)139 zdiff_vol = r1_rho0 * glob_sum( 'icedia', ( rhoi*vt_i(:,:) + rhos*vt_s(:,:) - vol_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater trend (km3) 140 zdiff_sal = r1_rho0 * glob_sum( 'icedia', ( rhoi*st_i(:,:) - sal_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! salt content trend (km3*pss) 141 141 zdiff_tem = glob_sum( 'icedia', ( et_i(:,:) + et_s(:,:) - tem_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-20 ! heat content trend (1.e20 J) 142 142 ! + SUM( qevap_ice * a_i_b, dim=3 ) !! clem: I think this term should not be there (but needs a check) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedyn_adv.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedyn_adv_pra.F90
r12377 r12495 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 --- ! … … 687 687 IF ( pv_i(ji,jj,jl) > 0._wp ) THEN 688 688 ! 689 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (r au0-rhoi) * r1_rhos )689 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (rho0-rhoi) * r1_rhos ) 690 690 ! 691 691 IF( zvs_excess > 0._wp ) THEN ! snow-ice interface deplets below the ocean surface -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedyn_adv_umx.F90
r12377 r12495 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 --- ! … … 1505 1505 IF ( pv_i(ji,jj,jl) > 0._wp ) THEN 1506 1506 ! 1507 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (r au0-rhoi) * r1_rhos )1507 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (rho0-rhoi) * r1_rhos ) 1508 1508 ! 1509 1509 IF( zvs_excess > 0._wp ) THEN ! snow-ice interface deplets below the ocean surface -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedyn_rdgrft.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icedyn_rhg_evp.F90
r12377 r12495 116 116 INTEGER :: jter ! local integers 117 117 ! 118 REAL(wp) :: zrhoco ! r au0 * rn_cio118 REAL(wp) :: zrhoco ! rho0 * rn_cio 119 119 REAL(wp) :: zdtevp, z1_dtevp ! time step for subcycling 120 120 REAL(wp) :: ecc2, z1_ecc2 ! square of yield ellipse eccenticity … … 213 213 ! 1) define some variables and initialize arrays 214 214 !------------------------------------------------------------------------------! 215 zrhoco = r au0 * rn_cio215 zrhoco = rho0 * rn_cio 216 216 217 217 ! ecc2: square of yield ellipse eccenticrity … … 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/iceistate.F90
r12399 r12495 374 374 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 375 375 ! 376 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_r au0377 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_r au0376 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 377 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 378 378 ! 379 379 IF( .NOT.ln_linssh ) THEN -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icestp.F90
r12377 r12495 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) * rdt !--- 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*rdt = ', 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd.F90
r12377 r12495 116 116 ELSE ! if no ice dynamics => transmit directly the atmospheric stress to the ocean 117 117 DO_2D_00_00 118 zfric(ji,jj) = r1_r au0 * SQRT( 0.5_wp * &118 zfric(ji,jj) = r1_rho0 * SQRT( 0.5_wp * & 119 119 & ( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 120 120 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) ) * tmask(ji,jj,1) … … 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) ) 141 141 142 142 ! --- Energy needed to bring ocean surface layer until its freezing (mostly<0 but >0 if supercooling, J.m-2) --- ! 143 zqfr = r au0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst)143 zqfr = rho0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst) 144 144 zqfr_neg = MIN( zqfr , 0._wp ) ! only < 0 145 145 146 146 ! --- Sensible ocean-to-ice heat flux (mostly>0 but <0 if supercooling, W/m2) 147 147 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 148 qsb_ice_bot(ji,jj) = rswitch * r au0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2149 150 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_ rdtice / MAX( at_i(ji,jj), epsi10 ) )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 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_da.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_dh.F90
r10786 r12495 76 76 REAL(wp) :: zgrr ! bottom growth rate 77 77 REAL(wp) :: zt_i_new ! bottom formation temperature 78 REAL(wp) :: z1_rho ! 1/(rhos+r au0-rhoi)78 REAL(wp) :: z1_rho ! 1/(rhos+rho0-rhoi) 79 79 80 80 REAL(wp) :: zQm ! enthalpy exchanged with the ocean (J/m2), >0 towards the ocean … … 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) … … 571 571 ! When snow load excesses Archimede's limit, snow-ice interface goes down under sea-level, 572 572 ! flooding of seawater transforms snow into ice dh_snowice is positive for the ice 573 z1_rho = 1._wp / ( rhos+r au0-rhoi )573 z1_rho = 1._wp / ( rhos+rho0-rhoi ) 574 574 DO ji = 1, npti 575 575 ! 576 dh_snowice(ji) = MAX( 0._wp , ( rhos * h_s_1d(ji) + (rhoi-r au0) * h_i_1d(ji) ) * z1_rho )576 dh_snowice(ji) = MAX( 0._wp , ( rhos * h_s_1d(ji) + (rhoi-rho0) * h_i_1d(ji) ) * z1_rho ) 577 577 578 578 h_i_1d(ji) = h_i_1d(ji) + dh_snowice(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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_do.F90
r12377 r12495 141 141 ! Physical constants 142 142 zhicrit = 0.04 ! frazil ice thickness 143 ztwogp = 2. * r au0 / ( grav * 0.3 * ( rau0 - rhoi ) ) ! reduced grav143 ztwogp = 2. * rho0 / ( grav * 0.3 * ( rho0 - rhoi ) ) ! reduced grav 144 144 zsqcd = 1.0 / SQRT( 1.3 * zcai ) ! 1/SQRT(airdensity*drag) 145 145 zgamafr = 0.03 … … 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_ent.F90
r10069 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_pnd.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_sal.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icethd_zdf_bl99.F90
r12396 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/iceupdate.F90
r12377 r12495 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 … … 329 329 ENDIF 330 330 331 zrhoco = r au0 * rn_cio331 zrhoco = rho0 * rn_cio 332 332 ! 333 333 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icevar.F90
r12377 r12495 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) … … 717 717 !! ** Purpose : compute the equivalent ssh in lead when sea ice is embedded 718 718 !! 719 !! ** Method : ssh_lead = ssh + (Mice + Msnow) / r au0719 !! ** Method : ssh_lead = ssh + (Mice + Msnow) / rho0 720 720 !! 721 721 !! ** Reference : Jean-Michel Campin, John Marshall, David Ferreira, … … 747 747 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 748 748 ! 749 zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_r au0749 zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_rho0 750 750 ! 751 751 ELSE … … 937 937 ! In case snow load is in excess that would lead to transformation from snow to ice 938 938 ! Then, transfer the snow excess into the ice (different from icethd_dh) 939 zdh = MAX( 0._wp, ( rhos * ph_s(ji,jl) + ( rhoi - r au0 ) * ph_i(ji,jl) ) * r1_rau0 )939 zdh = MAX( 0._wp, ( rhos * ph_s(ji,jl) + ( rhoi - rho0 ) * ph_i(ji,jl) ) * r1_rho0 ) 940 940 ! recompute h_i, h_s avoiding out of bounds values 941 941 ph_i(ji,jl) = MIN( hi_max(jl), ph_i(ji,jl) + zdh ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/ICE/icewri.F90
r12377 r12495 87 87 ! Standard outputs 88 88 !----------------- 89 zrho1 = ( r au0 - rhoi ) * r1_rau0 ; zrho2 = rhos * r1_rau089 zrho1 = ( rho0 - rhoi ) * r1_rho0 ; zrho2 = rhos * r1_rho0 90 90 ! masks 91 91 CALL iom_put( 'icemask' , zmsk00 ) ! ice mask 0% -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/NST/agrif_oce_sponge.F90
r12377 r12495 439 439 440 440 !* set relaxation time scale 441 IF( neuler == 0 .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt )442 ELSE ; ztrelax = rn_trelax_tra / (2._wp * r dt )441 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rn_Dt ) 442 ELSE ; ztrelax = rn_trelax_tra / (2._wp * rn_Dt ) 443 443 ENDIF 444 444 … … 596 596 #endif 597 597 !* set relaxation time scale 598 IF( neuler == 0 .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt )599 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * r dt )598 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rn_Dt ) 599 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * rn_Dt ) 600 600 ENDIF 601 601 ! … … 772 772 # endif 773 773 !* set relaxation time scale 774 IF( neuler == 0 .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt )775 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * r dt )774 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rn_Dt ) 775 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * rn_Dt ) 776 776 ENDIF 777 777 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/NST/agrif_oce_update.F90
r12377 r12495 256 256 ! 2) BEFORE fields: 257 257 !------------------ 258 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0) )) THEN258 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 259 259 ! 260 260 ! Vertical scale factor interpolations … … 351 351 ENDDO 352 352 353 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN353 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 354 354 ! Add asselin part 355 355 DO jn = 1,jpts … … 361 361 ztnu = tabres_child(ji,jj,jk,jn) * e3t(ji,jj,jk,Kmm_a) 362 362 ztno = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 363 ts(ji,jj,jk,jn,Kbb_a) = ( ztb + atfp * ( ztnu - ztno) ) &363 ts(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) ) & 364 364 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 365 365 ENDIF … … 381 381 END DO 382 382 ! 383 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN383 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 384 384 ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kbb_a) = ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kmm_a) 385 385 ENDIF … … 422 422 ENDDO 423 423 !< jc tmp 424 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN424 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 425 425 ! Add asselin part 426 426 DO jn = 1,jpts … … 432 432 ztnu = tabres(ji,jj,jk,jn) 433 433 ztno = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 434 ts(ji,jj,jk,jn,Kbb_a) = ( ztb + atfp * ( ztnu - ztno) ) &434 ts(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) ) & 435 435 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 436 436 ENDIF … … 452 452 END DO 453 453 ! 454 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN454 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 455 455 ts(i1:i2,j1:j2,k1:k2,1:jpts,Kbb_a) = ts(i1:i2,j1:j2,k1:k2,1:jpts,Kmm_a) 456 456 ENDIF … … 551 551 DO jj=j1,j2 552 552 DO ji=i1,i2 553 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part553 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 554 554 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 555 555 zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) 556 556 zunu = tabres_child(ji,jj,jk) * e3u(ji,jj,jk,Kmm_a) 557 uu(ji,jj,jk,Kbb_a) = ( zub + atfp * ( zunu - zuno) ) &557 uu(ji,jj,jk,Kbb_a) = ( zub + rn_atfp * ( zunu - zuno) ) & 558 558 & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 559 559 ENDIF … … 564 564 END DO 565 565 ! 566 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN566 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 567 567 uu(i1:i2,j1:j2,1:jpkm1,Kbb_a) = uu(i1:i2,j1:j2,1:jpkm1,Kmm_a) 568 568 ENDIF … … 597 597 tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e2u(ji,jj) 598 598 ! 599 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part599 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 600 600 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 601 601 zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) 602 602 zunu = tabres(ji,jj,jk,1) 603 uu(ji,jj,jk,Kbb_a) = ( zub + atfp * ( zunu - zuno) ) &603 uu(ji,jj,jk,Kbb_a) = ( zub + rn_atfp * ( zunu - zuno) ) & 604 604 & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 605 605 ENDIF … … 610 610 END DO 611 611 ! 612 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN612 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 613 613 uu(i1:i2,j1:j2,k1:k2,Kbb_a) = uu(i1:i2,j1:j2,k1:k2,Kmm_a) 614 614 ENDIF … … 751 751 DO jj=j1,j2 752 752 DO ji=i1,i2 753 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part753 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 754 754 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 755 755 zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) 756 756 zvnu = tabres_child(ji,jj,jk) * e3v(ji,jj,jk,Kmm_a) 757 vv(ji,jj,jk,Kbb_a) = ( zvb + atfp * ( zvnu - zvno) ) &757 vv(ji,jj,jk,Kbb_a) = ( zvb + rn_atfp * ( zvnu - zvno) ) & 758 758 & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 759 759 ENDIF … … 764 764 END DO 765 765 ! 766 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN766 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 767 767 vv(i1:i2,j1:j2,1:jpkm1,Kbb_a) = vv(i1:i2,j1:j2,1:jpkm1,Kmm_a) 768 768 ENDIF … … 801 801 tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e1v(ji,jj) 802 802 ! 803 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part803 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 804 804 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 805 805 zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) 806 806 zvnu = tabres(ji,jj,jk,1) 807 vv(ji,jj,jk,Kbb_a) = ( zvb + atfp * ( zvnu - zvno) ) &807 vv(ji,jj,jk,Kbb_a) = ( zvb + rn_atfp * ( zvnu - zvno) ) & 808 808 & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 809 809 ENDIF … … 814 814 END DO 815 815 ! 816 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN816 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 817 817 vv(i1:i2,j1:j2,k1:k2,Kbb_a) = vv(i1:i2,j1:j2,k1:k2,Kmm_a) 818 818 ENDIF … … 907 907 ! Update barotropic velocities: 908 908 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 909 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part909 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 910 910 zcorr = (tabres(ji,jj) - uu_b(ji,jj,Kmm_a) * hu(ji,jj,Krhs_a)) * r1_hu(ji,jj,Kbb_a) 911 uu_b(ji,jj,Kbb_a) = uu_b(ji,jj,Kbb_a) + atfp * zcorr * umask(ji,jj,1)911 uu_b(ji,jj,Kbb_a) = uu_b(ji,jj,Kbb_a) + rn_atfp * zcorr * umask(ji,jj,1) 912 912 END IF 913 913 ENDIF … … 928 928 END DO 929 929 ! 930 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN930 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 931 931 uu_b(i1:i2,j1:j2,Kbb_a) = uu_b(i1:i2,j1:j2,Kmm_a) 932 932 ENDIF … … 973 973 ! Update barotropic velocities: 974 974 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 975 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part975 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 976 976 zcorr = (tabres(ji,jj) - vv_b(ji,jj,Kmm_a) * hv(ji,jj,Krhs_a)) * r1_hv(ji,jj,Kbb_a) 977 vv_b(ji,jj,Kbb_a) = vv_b(ji,jj,Kbb_a) + atfp * zcorr * vmask(ji,jj,1)977 vv_b(ji,jj,Kbb_a) = vv_b(ji,jj,Kbb_a) + rn_atfp * zcorr * vmask(ji,jj,1) 978 978 END IF 979 979 ENDIF … … 994 994 END DO 995 995 ! 996 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN996 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 997 997 vv_b(i1:i2,j1:j2,Kbb_a) = vv_b(i1:i2,j1:j2,Kmm_a) 998 998 ENDIF … … 1021 1021 END DO 1022 1022 ELSE 1023 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN1023 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 1024 1024 DO jj=j1,j2 1025 1025 DO ji=i1,i2 1026 1026 ssh(ji,jj,Kbb_a) = ssh(ji,jj,Kbb_a) & 1027 & + atfp * ( tabres(ji,jj) - ssh(ji,jj,Kmm_a) ) * tmask(ji,jj,1)1027 & + rn_atfp * ( tabres(ji,jj) - ssh(ji,jj,Kmm_a) ) * tmask(ji,jj,1) 1028 1028 END DO 1029 1029 END DO … … 1036 1036 END DO 1037 1037 ! 1038 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN1038 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 1039 1039 ssh(i1:i2,j1:j2,Kbb_a) = ssh(i1:i2,j1:j2,Kmm_a) 1040 1040 ENDIF … … 1117 1117 IF (western_side) THEN 1118 1118 DO jj=j1,j2 1119 zcor = r dt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))1119 zcor = rn_Dt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 1120 1120 ssh(i1 ,jj,Kmm_a) = ssh(i1 ,jj,Kmm_a) + zcor 1121 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) +atfp * zcor1121 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) + rn_atfp * zcor 1122 1122 END DO 1123 1123 ENDIF 1124 1124 IF (eastern_side) THEN 1125 1125 DO jj=j1,j2 1126 zcor = - r dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj))1126 zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 1127 1127 ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 1128 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) +atfp * zcor1128 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + rn_atfp * zcor 1129 1129 END DO 1130 1130 ENDIF … … 1205 1205 IF (southern_side) THEN 1206 1206 DO ji=i1,i2 1207 zcor = r dt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * (vb2_b(ji,j1)-tabres(ji,j1))1207 zcor = rn_Dt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * (vb2_b(ji,j1)-tabres(ji,j1)) 1208 1208 ssh(ji,j1 ,Kmm_a) = ssh(ji,j1 ,Kmm_a) + zcor 1209 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) +atfp * zcor1209 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) + rn_atfp * zcor 1210 1210 END DO 1211 1211 ENDIF 1212 1212 IF (northern_side) THEN 1213 1213 DO ji=i1,i2 1214 zcor = - r dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * (vb2_b(ji,j2)-tabres(ji,j2))1214 zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * (vb2_b(ji,j2)-tabres(ji,j2)) 1215 1215 ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 1216 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) +atfp * zcor1216 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + rn_atfp * zcor 1217 1217 END DO 1218 1218 ENDIF … … 1359 1359 ! hdiv(i1:i2,j1:j2,1:jpkm1) = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 1360 1360 1361 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0) )) THEN1361 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 1362 1362 DO jk = 1, jpkm1 1363 1363 DO jj=j1,j2 1364 1364 DO ji=i1,i2 1365 1365 e3t(ji,jj,jk,Kbb_a) = e3t(ji,jj,jk,Kbb_a) & 1366 & + atfp * ( ptab(ji,jj,jk) - e3t(ji,jj,jk,Kmm_a) )1366 & + rn_atfp * ( ptab(ji,jj,jk) - e3t(ji,jj,jk,Kmm_a) ) 1367 1367 END DO 1368 1368 END DO … … 1422 1422 END DO 1423 1423 ! 1424 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN1424 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 1425 1425 e3t (i1:i2,j1:j2,1:jpk,Kbb_a) = e3t (i1:i2,j1:j2,1:jpk,Kmm_a) 1426 1426 e3w (i1:i2,j1:j2,1:jpk,Kbb_a) = e3w (i1:i2,j1:j2,1:jpk,Kmm_a) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/NST/agrif_top_sponge.F90
r12377 r12495 137 137 138 138 !* set relaxation time scale 139 IF( neuler == 0 .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt )140 ELSE ; ztrelax = rn_trelax_tra / (2._wp * r dt )139 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rn_Dt ) 140 ELSE ; ztrelax = rn_trelax_tra / (2._wp * rn_Dt ) 141 141 ENDIF 142 142 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/NST/agrif_top_update.F90
r12377 r12495 125 125 ENDDO 126 126 ! 127 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN127 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 128 128 ! Add asselin part 129 129 DO jn = 1,jptra … … 135 135 ztnu = tabres_child(ji,jj,jk,jn) * e3t(ji,jj,jk,Kmm_a) 136 136 ztno = tr(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 137 tr(ji,jj,jk,jn,Kbb_a) = ( ztb + atfp * ( ztnu - ztno) ) &137 tr(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) ) & 138 138 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 139 139 ENDIF … … 155 155 END DO 156 156 ! 157 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN157 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 158 158 tr(i1:i2,j1:j2,1:jpkm1,1:jptra,Kbb_a) = tr(i1:i2,j1:j2,1:jpkm1,1:jptra,Kmm_a) 159 159 ENDIF … … 199 199 ENDDO 200 200 !< jc tmp 201 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN201 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 202 202 ! Add asselin part 203 203 DO jn = n1,n2 … … 209 209 ztnu = tabres(ji,jj,jk,jn) 210 210 ztno = tr(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 211 tr(ji,jj,jk,jn,Kbb_a) = ( ztb + atfp * ( ztnu - ztno) ) &211 tr(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) ) & 212 212 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 213 213 ENDIF … … 229 229 END DO 230 230 ! 231 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN231 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 232 232 tr(i1:i2,j1:j2,k1:k2,n1:n2,Kbb_a) = tr(i1:i2,j1:j2,k1:k2,n1:n2,Kmm_a) 233 233 ENDIF -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/NST/agrif_user.F90
r12377 r12495 202 202 203 203 ! Check time steps 204 IF( NINT(Agrif_Rhot()) * NINT(r dt) .NE. Agrif_Parent(rdt) ) THEN205 WRITE(cl_check1,*) NINT(Agrif_Parent(r dt))206 WRITE(cl_check2,*) NINT(r dt)207 WRITE(cl_check3,*) NINT(Agrif_Parent(r dt)/Agrif_Rhot())204 IF( NINT(Agrif_Rhot()) * NINT(rn_Dt) .NE. Agrif_Parent(rn_Dt) ) THEN 205 WRITE(cl_check1,*) NINT(Agrif_Parent(rn_Dt)) 206 WRITE(cl_check2,*) NINT(rn_Dt) 207 WRITE(cl_check3,*) NINT(Agrif_Parent(rn_Dt)/Agrif_Rhot()) 208 208 CALL ctl_stop( 'Incompatible time step between ocean grids', & 209 209 & 'parent grid value : '//cl_check1 , & … … 613 613 IF( check_namelist ) THEN 614 614 ! Check time steps 615 IF( NINT(Agrif_Rhot()) * NINT(r dt) .NE. Agrif_Parent(rdt) ) THEN616 WRITE(cl_check1,*) Agrif_Parent(r dt)617 WRITE(cl_check2,*) r dt618 WRITE(cl_check3,*) r dt*Agrif_Rhot()615 IF( NINT(Agrif_Rhot()) * NINT(rn_Dt) .NE. Agrif_Parent(rn_Dt) ) THEN 616 WRITE(cl_check1,*) Agrif_Parent(rn_Dt) 617 WRITE(cl_check2,*) rn_Dt 618 WRITE(cl_check3,*) rn_Dt*Agrif_Rhot() 619 619 CALL ctl_stop( 'incompatible time step between grids', & 620 620 & 'parent grid value : '//cl_check1 , & -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ASM/asminc.F90
r12377 r12495 487 487 ENDIF 488 488 ! 489 IF(lwp) WRITE(numout,*) ' ==>>> Euler time step switch is ', neuler489 IF(lwp) WRITE(numout,*) ' ==>>> Euler time step switch is ', l_1st_euler 490 490 ! 491 491 IF( lk_asminc ) THEN !== data assimilation ==! … … 534 534 ! 535 535 it = kt - nit000 + 1 536 zincwgt = wgtiau(it) / r dt ! IAU weight for the current time step536 zincwgt = wgtiau(it) / rn_Dt ! IAU weight for the current time step 537 537 ! 538 538 IF(lwp) THEN … … 577 577 IF ( kt == nitdin_r ) THEN 578 578 ! 579 neuler = 0! Force Euler forward step579 l_1st_euler = .TRUE. ! Force Euler forward step 580 580 ! 581 581 ! Initialize the now fields with the background + increment … … 651 651 ! 652 652 it = kt - nit000 + 1 653 zincwgt = wgtiau(it) / r dt ! IAU weight for the current time step653 zincwgt = wgtiau(it) / rn_Dt ! IAU weight for the current time step 654 654 ! 655 655 IF(lwp) THEN … … 677 677 IF ( kt == nitdin_r ) THEN 678 678 ! 679 neuler = 0! Force Euler forward step679 l_1st_euler = .TRUE. ! Force Euler forward step 680 680 ! 681 681 ! Initialize the now fields with the background + increment … … 722 722 ! 723 723 it = kt - nit000 + 1 724 zincwgt = wgtiau(it) / r dt ! IAU weight for the current time step724 zincwgt = wgtiau(it) / rn_Dt ! IAU weight for the current time step 725 725 ! 726 726 IF(lwp) THEN … … 753 753 IF ( kt == nitdin_r ) THEN 754 754 ! 755 neuler = 0! Force Euler forward step755 l_1st_euler = .TRUE. ! Force Euler forward step 756 756 ! 757 757 ssh(:,:,Kmm) = ssh_bkg(:,:) + ssh_bkginc(:,:) ! Initialize the now fields the background + increment … … 841 841 it = kt - nit000 + 1 842 842 zincwgt = wgtiau(it) ! IAU weight for the current time step 843 ! note this is not a tendency so should not be divided by r dt (as with the tracer and other increments)843 ! note this is not a tendency so should not be divided by rn_Dt (as with the tracer and other increments) 844 844 ! 845 845 IF(lwp) THEN … … 876 876 #if defined key_cice && defined key_asminc 877 877 ! Sea-ice : CICE case. Pass ice increment tendency into CICE 878 ndaice_da(:,:) = seaice_bkginc(:,:) * zincwgt / r dt878 ndaice_da(:,:) = seaice_bkginc(:,:) * zincwgt / rn_Dt 879 879 #endif 880 880 ! … … 896 896 IF ( kt == nitdin_r ) THEN 897 897 ! 898 neuler = 0! Force Euler forward step898 l_1st_euler = 0 ! Force Euler forward step 899 899 ! 900 900 ! Sea-ice : SI3 case … … 926 926 #if defined key_cice && defined key_asminc 927 927 ! Sea-ice : CICE case. Pass ice increment tendency into CICE 928 ndaice_da(:,:) = seaice_bkginc(:,:) / r dt928 ndaice_da(:,:) = seaice_bkginc(:,:) / rn_Dt 929 929 #endif 930 930 IF ( .NOT. PRESENT(kindic) ) THEN … … 959 959 ! ! fwf : ice formation and melting 960 960 ! 961 ! zfons = ( -nfresh_da(ji,jj)*soce + nfsalt_da(ji,jj) )*r dt961 ! zfons = ( -nfresh_da(ji,jj)*soce + nfsalt_da(ji,jj) )*rn_Dt 962 962 ! 963 963 ! ! change salinity down to mixed layer depth … … 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/BDY/bdyice.F90
r11536 r12495 179 179 180 180 ! Then, a) transfer the snow excess into the ice (different from icethd_dh) 181 zdh = MAX( 0._wp, ( rhos * h_s(ji,jj,jl) + ( rhoi - r au0 ) * h_i(ji,jj,jl) ) * r1_rau0 )181 zdh = MAX( 0._wp, ( rhos * h_s(ji,jj,jl) + ( rhoi - rho0 ) * h_i(ji,jj,jl) ) * r1_rho0 ) 182 182 ! Or, b) transfer all the snow into ice (if incoming ice is likely to melt as it comes into a warmer environment) 183 183 !zdh = MAX( 0._wp, h_s(ji,jj,jl) * rhos / rhoi ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/BDY/bdylib.F90
r12377 r12495 240 240 ! Centred derivative is calculated as average of "left" and "right" derivatives for 241 241 ! this reason. 242 ! Note no r dt factor in expression for zdt because it cancels in the expressions for242 ! Note no rn_Dt factor in expression for zdt because it cancels in the expressions for 243 243 ! zrx and zry. 244 244 zdt = phia(iibm1 ,ijbm1 ) - phib(iibm1 ,ijbm1 ) … … 259 259 zout = sign( 1., zrx ) 260 260 zout = 0.5*( zout + abs(zout) ) 261 zwgt = 2.*r dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) )261 zwgt = 2.*rn_Dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 262 262 ! only apply radiation on outflow points 263 263 if( ll_npo ) then !! NPO version !! … … 425 425 zout = sign( 1., zrx ) 426 426 zout = 0.5*( zout + abs(zout) ) 427 zwgt = 2.*r dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) )427 zwgt = 2.*rn_Dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 428 428 ! only apply radiation on outflow points 429 429 if( ll_npo ) then !! NPO version !! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/BDY/bdytides.F90
r12377 r12495 297 297 ! Absolute time from model initialization: 298 298 IF( PRESENT(kit) ) THEN 299 z_arg = ( REAL(kt, wp) + ( REAL(kit, wp) + zt_offset - 1. ) / REAL(nn_ baro, wp) ) * rdt299 z_arg = ( REAL(kt, wp) + ( REAL(kit, wp) + zt_offset - 1. ) / REAL(nn_e, wp) ) * rn_Dt 300 300 ELSE 301 z_arg = ( REAL(kt, wp) + zt_offset ) * r dt301 z_arg = ( REAL(kt, wp) + zt_offset ) * rn_Dt 302 302 ENDIF 303 303 304 304 ! Linear ramp on tidal component at open boundaries 305 305 zramp = 1. 306 IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg - REAL(nit000,wp)*r dt)/(rn_tide_ramp_dt*rday),0.),1.)306 IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg - REAL(nit000,wp)*rn_Dt)/(rn_tide_ramp_dt*rday),0.),1.) 307 307 308 308 DO ib_bdy = 1,nb_bdy … … 319 319 ! We refresh nodal factors every day below 320 320 ! This should be done somewhere else 321 IF ( ( nsec_day == NINT(0.5_wp * r dt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN322 ! 323 kt_tide = kt - NINT((REAL(nsec_day,wp) - 0.5_wp * r dt)/rdt)321 IF ( ( nsec_day == NINT(0.5_wp * rn_Dt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN 322 ! 323 kt_tide = kt - NINT((REAL(nsec_day,wp) - 0.5_wp * rn_Dt)/rn_Dt) 324 324 ! 325 325 IF(lwp) THEN … … 333 333 ! 334 334 ENDIF 335 zoff = REAL(-kt_tide,wp) * r dt ! time offset relative to nodal factor computation time335 zoff = REAL(-kt_tide,wp) * rn_Dt ! time offset relative to nodal factor computation time 336 336 ! 337 337 ! If time splitting, initialize arrays from slow varying open boundary data: -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/BDY/bdyvol.F90
r12377 r12495 77 77 ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 78 78 ! ----------------------------------------------------------------------- 79 IF ( kc == 1 ) z_cflxemp = glob_sum( 'bdyvol', ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / r au079 IF ( kc == 1 ) z_cflxemp = glob_sum( 'bdyvol', ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rho0 80 80 81 81 ! Compute bdy surface each cycle if non linear free surface -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/dia25h.F90
r12377 r12495 140 140 ! ----------------- 141 141 ! Define frequency of summing to create 25 h mean 142 IF( MOD( 3600,NINT(r dt) ) == 0 ) THEN143 i_steps = 3600/NINT(r dt)142 IF( MOD( 3600,NINT(rn_Dt) ) == 0 ) THEN 143 i_steps = 3600/NINT(rn_Dt) 144 144 ELSE 145 CALL ctl_stop('STOP', 'dia_wri_tide: timestep must give MOD(3600,r dt) = 0 otherwise no hourly values are possible')145 CALL ctl_stop('STOP', 'dia_wri_tide: timestep must give MOD(3600,rn_Dt) = 0 otherwise no hourly values are possible') 146 146 ENDIF 147 147 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diaar5.F90
r12377 r12495 103 103 END DO 104 104 CALL iom_put( 'volcello' , zrhd(:,:,:) ) ! WARNING not consistent with CMIP DR where volcello is at ca. 2000 105 CALL iom_put( 'masscello' , r au0 * e3t(:,:,:,Kmm) * tmask(:,:,:) ) ! ocean mass105 CALL iom_put( 'masscello' , rho0 * e3t(:,:,:,Kmm) * tmask(:,:,:) ) ! ocean mass 106 106 ENDIF 107 107 ! … … 181 181 CALL iom_put( 'sshsteric', zssh_steric ) 182 182 ! ! ocean bottom pressure 183 zztmp = r au0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa183 zztmp = rho0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 184 184 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh(:,:,Kmm) + thick0(:,:) ) 185 185 CALL iom_put( 'botpres', zbotpres ) … … 213 213 ztemp = glob_sum( 'diaar5', ztsn(:,:,1,jp_tem) ) 214 214 zsal = glob_sum( 'diaar5', ztsn(:,:,1,jp_sal) ) 215 zmass = r au0 * ( zarho + zvol )215 zmass = rho0 * ( zarho + zvol ) 216 216 ! 217 217 CALL iom_put( 'masstot', zmass ) … … 251 251 z2d(:,:) = 0._wp 252 252 DO_3D_11_11( 1, jpkm1 ) 253 z2d(ji,jj) = z2d(ji,jj) + r au0 * e3t(ji,jj,jk,Kmm) * ztpot(ji,jj,jk)253 z2d(ji,jj) = z2d(ji,jj) + rho0 * e3t(ji,jj,jk,Kmm) * ztpot(ji,jj,jk) 254 254 END_3D 255 255 CALL iom_put( 'tosmint_pot', z2d ) … … 285 285 ELSE 286 286 DO_3D_11_11( 1, jpk ) 287 zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * r au0 * e3w(ji,jj,jk,Kmm)287 zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * rho0 * e3w(ji,jj,jk,Kmm) 288 288 END_3D 289 289 ENDIF … … 325 325 CALL lbc_lnk( 'diaar5', z2d, 'U', -1. ) 326 326 IF( cptr == 'adv' ) THEN 327 IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , r au0_rcp * z2d ) ! advective heat transport in i-direction328 IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , r au0 * z2d ) ! advective salt transport in i-direction327 IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , rho0_rcp * z2d ) ! advective heat transport in i-direction 328 IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , rho0 * z2d ) ! advective salt transport in i-direction 329 329 ENDIF 330 330 IF( cptr == 'ldf' ) THEN 331 IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , r au0_rcp * z2d ) ! diffusive heat transport in i-direction332 IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , r au0 * z2d ) ! diffusive salt transport in i-direction331 IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in i-direction 332 IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , rho0 * z2d ) ! diffusive salt transport in i-direction 333 333 ENDIF 334 334 ! … … 339 339 CALL lbc_lnk( 'diaar5', z2d, 'V', -1. ) 340 340 IF( cptr == 'adv' ) THEN 341 IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , r au0_rcp * z2d ) ! advective heat transport in j-direction342 IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , r au0 * z2d ) ! advective salt transport in j-direction341 IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , rho0_rcp * z2d ) ! advective heat transport in j-direction 342 IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , rho0 * z2d ) ! advective salt transport in j-direction 343 343 ENDIF 344 344 IF( cptr == 'ldf' ) THEN 345 IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , r au0_rcp * z2d ) ! diffusive heat transport in j-direction346 IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , r au0 * z2d ) ! diffusive salt transport in j-direction345 IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in j-direction 346 IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , rho0 * z2d ) ! diffusive salt transport in j-direction 347 347 ENDIF 348 348 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diacfl.F90
r12377 r12495 52 52 ! 53 53 INTEGER :: ji, jj, jk ! dummy loop indices 54 REAL(wp) :: z 2dt, zCu_max, zCv_max, zCw_max! local scalars54 REAL(wp) :: zCu_max, zCv_max, zCw_max ! local scalars 55 55 INTEGER , DIMENSION(3) :: iloc_u , iloc_v , iloc_w , iloc ! workspace 56 56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zCu_cfl, zCv_cfl, zCw_cfl ! workspace … … 59 59 IF( ln_timing ) CALL timing_start('dia_cfl') 60 60 ! 61 ! ! setup timestep multiplier to account for initial Eulerian timestep62 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt63 ELSE ; z2dt = rdt * 2._wp64 ENDIF65 !66 !67 61 DO_3D_11_11( 1, jpk ) 68 zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * z2dt / e1u (ji,jj) ! for i-direction69 zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * z2dt / e2v (ji,jj) ! for j-direction70 zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * z2dt / e3w(ji,jj,jk,Kmm) ! for k-direction62 zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * rDt / e1u (ji,jj) ! for i-direction 63 zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * rDt / e2v (ji,jj) ! for j-direction 64 zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * rDt / e3w(ji,jj,jk,Kmm) ! for k-direction 71 65 END_3D 72 66 ! … … 118 112 WRITE(numcfl,*) '******************************************' 119 113 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cu', rCu_max, nCu_loc(1), nCu_loc(2), nCu_loc(3) 120 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCu_max114 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCu_max 121 115 WRITE(numcfl,*) '******************************************' 122 116 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cv', rCv_max, nCv_loc(1), nCv_loc(2), nCv_loc(3) 123 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCv_max117 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCv_max 124 118 WRITE(numcfl,*) '******************************************' 125 119 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cw', rCw_max, nCw_loc(1), nCw_loc(2), nCw_loc(3) 126 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCw_max120 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCw_max 127 121 CLOSE( numcfl ) 128 122 ! … … 131 125 WRITE(numout,*) 'dia_cfl : Maximum Courant number information for the run ' 132 126 WRITE(numout,*) '~~~~~~~' 133 WRITE(numout,*) ' Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', z2dt/rCu_max134 WRITE(numout,*) ' Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', z2dt/rCv_max135 WRITE(numout,*) ' Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', z2dt/rCw_max127 WRITE(numout,*) ' Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', rDt/rCu_max 128 WRITE(numout,*) ' Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', rDt/rCv_max 129 WRITE(numout,*) ' Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', rDt/rCw_max 136 130 ENDIF 137 131 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diadct.F90
r12377 r12495 676 676 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 677 677 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 678 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*r au0+rau0)678 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0) 679 679 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm) ) * vmask(k%I,k%J,1) 680 680 CASE(2,3) … … 682 682 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 683 683 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 684 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*r au0+rau0)684 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0) 685 685 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 686 686 END SELECT … … 849 849 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 850 850 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 851 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*r au0+rau0)851 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0) 852 852 853 853 CASE(2,3) … … 855 855 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 856 856 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 857 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*r au0+rau0)857 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0) 858 858 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 859 859 END SELECT -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diadetide.F90
r12377 r12495 9 9 USE in_out_manager , ONLY : lwp, numout 10 10 USE iom , ONLY : iom_put 11 USE dom_oce , ONLY : r dt, nsec_day11 USE dom_oce , ONLY : rn_Dt, nsec_day 12 12 USE phycst , ONLY : rpi 13 13 USE tide_mod … … 100 100 zwght = 0.0_wp 101 101 DO jn = 1, ndiadetide 102 ztmp = ( tdiadetide(jn) - REAL( nsec_day, KIND=wp ) ) / r dt102 ztmp = ( tdiadetide(jn) - REAL( nsec_day, KIND=wp ) ) / rn_Dt 103 103 IF ( ( ztmp < 0.5_wp ).AND.( ztmp >= -0.5_wp ) ) THEN 104 104 zwght = zwght + 1.0_wp / REAL( ndiadetide, KIND=wp ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diahsb.F90
r12377 r12495 91 91 ! 1 - Trends due to forcing ! 92 92 ! ------------------------- ! 93 z_frc_trd_v = r1_r au0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) ) ! volume fluxes93 z_frc_trd_v = r1_rho0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) ) ! volume fluxes 94 94 z_frc_trd_t = glob_sum( 'diahsb', sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 95 95 z_frc_trd_s = glob_sum( 'diahsb', sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes … … 101 101 & + glob_sum( 'diahsb', ( risf_cav_tsc(:,:,jp_tem) + risf_par_tsc(:,:,jp_tem) ) * surf(:,:) ) 102 102 ! ! Add penetrative solar radiation 103 IF( ln_traqsr ) z_frc_trd_t = z_frc_trd_t + r1_r au0_rcp * glob_sum( 'diahsb', qsr (:,:) * surf(:,:) )103 IF( ln_traqsr ) z_frc_trd_t = z_frc_trd_t + r1_rho0_rcp * glob_sum( 'diahsb', qsr (:,:) * surf(:,:) ) 104 104 ! ! Add geothermal heat flux 105 105 IF( ln_trabbc ) z_frc_trd_t = z_frc_trd_t + glob_sum( 'diahsb', qgh_trd0(:,:) * surf(:,:) ) … … 121 121 ENDIF 122 122 123 frc_v = frc_v + z_frc_trd_v * r dt124 frc_t = frc_t + z_frc_trd_t * r dt125 frc_s = frc_s + z_frc_trd_s * r dt123 frc_v = frc_v + z_frc_trd_v * rn_Dt 124 frc_t = frc_t + z_frc_trd_t * rn_Dt 125 frc_s = frc_s + z_frc_trd_s * rn_Dt 126 126 ! ! Advection flux through fixed surface (z=0) 127 127 IF( ln_linssh ) THEN 128 frc_wn_t = frc_wn_t + z_wn_trd_t * r dt129 frc_wn_s = frc_wn_s + z_wn_trd_s * r dt128 frc_wn_t = frc_wn_t + z_wn_trd_t * rn_Dt 129 frc_wn_s = frc_wn_s + z_wn_trd_s * rn_Dt 130 130 ENDIF 131 131 … … 197 197 198 198 CALL iom_put( 'bgfrcvol' , frc_v * 1.e-9 ) ! vol - surface forcing (km3) 199 CALL iom_put( 'bgfrctem' , frc_t * r au0 * rcp * 1.e-20 ) ! hc - surface forcing (1.e20 J)200 CALL iom_put( 'bgfrchfx' , frc_t * r au0 * rcp / & ! hc - surface forcing (W/m2)201 & ( surf_tot * kt * r dt ) )199 CALL iom_put( 'bgfrctem' , frc_t * rho0 * rcp * 1.e-20 ) ! hc - surface forcing (1.e20 J) 200 CALL iom_put( 'bgfrchfx' , frc_t * rho0 * rcp / & ! hc - surface forcing (W/m2) 201 & ( surf_tot * kt * rn_Dt ) ) 202 202 CALL iom_put( 'bgfrcsal' , frc_s * 1.e-9 ) ! sc - surface forcing (psu*km3) 203 203 … … 205 205 CALL iom_put( 'bgtemper' , zdiff_hc / zvol_tot ) ! Temperature drift (C) 206 206 CALL iom_put( 'bgsaline' , zdiff_sc / zvol_tot ) ! Salinity drift (PSU) 207 CALL iom_put( 'bgheatco' , zdiff_hc * 1.e-20 * r au0 * rcp ) ! Heat content drift (1.e20 J)208 CALL iom_put( 'bgheatfx' , zdiff_hc * r au0 * rcp / & ! Heat flux drift (W/m2)209 & ( surf_tot * kt * r dt ) )207 CALL iom_put( 'bgheatco' , zdiff_hc * 1.e-20 * rho0 * rcp ) ! Heat content drift (1.e20 J) 208 CALL iom_put( 'bgheatfx' , zdiff_hc * rho0 * rcp / & ! Heat flux drift (W/m2) 209 & ( surf_tot * kt * rn_Dt ) ) 210 210 CALL iom_put( 'bgsaltco' , zdiff_sc * 1.e-9 ) ! Salt content drift (psu*km3) 211 211 CALL iom_put( 'bgvolssh' , zdiff_v1 * 1.e-9 ) ! volume ssh drift (km3) … … 225 225 CALL iom_put( 'bgtemper' , zdiff_hc1 / zvol_tot) ! Heat content drift (C) 226 226 CALL iom_put( 'bgsaline' , zdiff_sc1 / zvol_tot) ! Salt content drift (PSU) 227 CALL iom_put( 'bgheatco' , zdiff_hc1 * 1.e-20 * r au0 * rcp ) ! Heat content drift (1.e20 J)228 CALL iom_put( 'bgheatfx' , zdiff_hc1 * r au0 * rcp / & ! Heat flux drift (W/m2)229 & ( surf_tot * kt * r dt ) )227 CALL iom_put( 'bgheatco' , zdiff_hc1 * 1.e-20 * rho0 * rcp ) ! Heat content drift (1.e20 J) 228 CALL iom_put( 'bgheatfx' , zdiff_hc1 * rho0 * rcp / & ! Heat flux drift (W/m2) 229 & ( surf_tot * kt * rn_Dt ) ) 230 230 CALL iom_put( 'bgsaltco' , zdiff_sc1 * 1.e-9 ) ! Salt content drift (psu*km3) 231 231 CALL iom_put( 'bgvolssh' , zdiff_v1 * 1.e-9 ) ! volume ssh drift (km3) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diahth.F90
r12377 r12495 261 261 zzdep = 300. 262 262 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 ) 263 CALL iom_put( 'hc300', r au0_rcp * htc3 ) ! vertically integrated heat content (J/m2)263 CALL iom_put( 'hc300', rho0_rcp * htc3 ) ! vertically integrated heat content (J/m2) 264 264 ENDIF 265 265 ! … … 270 270 zzdep = 700. 271 271 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 ) 272 CALL iom_put( 'hc700', r au0_rcp * htc7 ) ! vertically integrated heat content (J/m2)272 CALL iom_put( 'hc700', rho0_rcp * htc7 ) ! vertically integrated heat content (J/m2) 273 273 274 274 ENDIF … … 280 280 zzdep = 2000. 281 281 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 ) 282 CALL iom_put( 'hc2000', r au0_rcp * htc20 ) ! vertically integrated heat content (J/m2)282 CALL iom_put( 'hc2000', rho0_rcp * htc20 ) ! vertically integrated heat content (J/m2) 283 283 ENDIF 284 284 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/dianam.F90
r10068 r12495 72 72 73 73 IF( llfsec .OR. kfreq < 0 ) THEN ; inbsec = kfreq ! output frequency already in seconds 74 ELSE ; inbsec = kfreq * NINT( r dt ) ! from time-step to seconds74 ELSE ; inbsec = kfreq * NINT( rn_Dt ) ! from time-step to seconds 75 75 ENDIF 76 76 iddss = NINT( rday ) ! number of seconds in 1 day … … 116 116 ! date of the beginning and the end of the run 117 117 118 zdrun = r dt / rday * REAL( nitend - nit000, wp ) ! length of the run in days119 zjul = fjulday - r dt / rday118 zdrun = rn_Dt / rday * REAL( nitend - nit000, wp ) ! length of the run in days 119 zjul = fjulday - rn_Dt / rday 120 120 CALL ju2ymds( zjul , iyear1, imonth1, iday1, zsec1 ) ! year/month/day of the beginning of run 121 121 CALL ju2ymds( zjul + zdrun, iyear2, imonth2, iday2, zsec2 ) ! year/month/day of the end of run -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diaptr.F90
r12377 r12495 50 50 51 51 REAL(wp) :: rc_sv = 1.e-6_wp ! conversion from m3/s to Sverdrup 52 REAL(wp) :: rc_pwatt = 1.e-15_wp ! conversion from W to PW (further x r au0 x Cp)53 REAL(wp) :: rc_ggram = 1.e-9_wp ! conversion from g to Gg (further x r au0)52 REAL(wp) :: rc_pwatt = 1.e-15_wp ! conversion from W to PW (further x rho0 x Cp) 53 REAL(wp) :: rc_ggram = 1.e-9_wp ! conversion from g to Gg (further x rho0) 54 54 55 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk ! T-point basin interior masks … … 346 346 IF( dia_ptr_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dia_ptr_init : unable to allocate arrays' ) 347 347 348 rc_pwatt = rc_pwatt * r au0_rcp ! conversion from K.s-1 to PetaWatt349 rc_ggram = rc_ggram * r au0 ! conversion from m3/s to Gg/s348 rc_pwatt = rc_pwatt * rho0_rcp ! conversion from K.s-1 to PetaWatt 349 rc_ggram = rc_ggram * rho0 ! conversion from m3/s to Gg/s 350 350 351 351 IF( lk_mpp ) CALL mpp_ini_znl( numout ) ! Define MPI communicator for zonal sum -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIA/diawri.F90
r12377 r12495 173 173 174 174 IF ( iom_use("taubot") ) THEN ! bottom stress 175 zztmp = r au0 * 0.25175 zztmp = rho0 * 0.25 176 176 z2d(:,:) = 0._wp 177 177 DO_2D_00_00 … … 212 212 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 213 213 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 214 z2d(:,:) = r au0 * e1e2t(:,:)214 z2d(:,:) = rho0 * e1e2t(:,:) 215 215 DO jk = 1, jpk 216 216 z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) … … 249 249 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) * tmask(ji,jj,jk) 250 250 END_3D 251 CALL iom_put( "heatc", r au0_rcp * z2d ) ! vertically integrated heat content (J/m2)251 CALL iom_put( "heatc", rho0_rcp * z2d ) ! vertically integrated heat content (J/m2) 252 252 ENDIF 253 253 … … 257 257 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) * tmask(ji,jj,jk) 258 258 END_3D 259 CALL iom_put( "saltc", r au0 * z2d ) ! vertically integrated salt content (PSU*kg/m2)259 CALL iom_put( "saltc", rho0 * z2d ) ! vertically integrated salt content (PSU*kg/m2) 260 260 ENDIF 261 261 ! … … 279 279 z2d(:,:) = 0.e0 280 280 DO jk = 1, jpkm1 281 z3d(:,:,jk) = r au0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk)281 z3d(:,:,jk) = rho0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 282 282 z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 283 283 END DO … … 308 308 z3d(:,:,jpk) = 0.e0 309 309 DO jk = 1, jpkm1 310 z3d(:,:,jk) = r au0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk)310 z3d(:,:,jk) = rho0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 311 311 END DO 312 312 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction … … 337 337 END_3D 338 338 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 339 CALL iom_put( "tosmint", r au0 * z2d ) ! Vertical integral of temperature339 CALL iom_put( "tosmint", rho0 * z2d ) ! Vertical integral of temperature 340 340 ENDIF 341 341 IF( iom_use("somint") ) THEN … … 345 345 END_3D 346 346 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 347 CALL iom_put( "somint", r au0 * z2d ) ! Vertical integral of salinity347 CALL iom_put( "somint", rho0 * z2d ) ! Vertical integral of salinity 348 348 ENDIF 349 349 … … 366 366 INTEGER, DIMENSION(2) :: ierr 367 367 !!---------------------------------------------------------------------- 368 ierr = 0 369 ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) , & 370 & ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) , & 371 & ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) ) 368 IF( nn_write == -1 ) THEN 369 dia_wri_alloc = 0 370 ELSE 371 ierr = 0 372 ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) , & 373 & ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) , & 374 & ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) ) 372 375 ! 373 dia_wri_alloc = MAXVAL(ierr) 374 CALL mpp_sum( 'diawri', dia_wri_alloc ) 376 dia_wri_alloc = MAXVAL(ierr) 377 CALL mpp_sum( 'diawri', dia_wri_alloc ) 378 ! 379 ENDIF 375 380 ! 376 381 END FUNCTION dia_wri_alloc … … 432 437 clop = "x" ! no use of the mask value (require less cpu time and otherwise the model crashes) 433 438 #if defined key_diainstant 434 zsto = nn_write * r dt439 zsto = nn_write * rn_Dt 435 440 clop = "inst("//TRIM(clop)//")" 436 441 #else 437 zsto=r dt442 zsto=rn_Dt 438 443 clop = "ave("//TRIM(clop)//")" 439 444 #endif 440 zout = nn_write * r dt441 zmax = ( nitend - nit000 + 1 ) * r dt445 zout = nn_write * rn_Dt 446 zmax = ( nitend - nit000 + 1 ) * rn_Dt 442 447 443 448 ! Define indices of the horizontal output zoom and vertical limit storage … … 460 465 461 466 ! Compute julian date from starting date of the run 462 CALL ymds2ju( nyear, nmonth, nday, r dt, zjulian )467 CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 463 468 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 464 469 IF(lwp)WRITE(numout,*) … … 482 487 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 483 488 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 484 & nit000-1, zjulian, r dt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set )489 & nit000-1, zjulian, rn_Dt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set ) 485 490 CALL histvert( nid_T, "deptht", "Vertical T levels", & ! Vertical grid: gdept 486 491 & "m", ipk, gdept_1d, nz_T, "down" ) … … 518 523 CALL histbeg( clhstnam, jpi, glamu, jpj, gphiu, & ! Horizontal grid: glamu and gphiu 519 524 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 520 & nit000-1, zjulian, r dt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set )525 & nit000-1, zjulian, rn_Dt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set ) 521 526 CALL histvert( nid_U, "depthu", "Vertical U levels", & ! Vertical grid: gdept 522 527 & "m", ipk, gdept_1d, nz_U, "down" ) … … 531 536 CALL histbeg( clhstnam, jpi, glamv, jpj, gphiv, & ! Horizontal grid: glamv and gphiv 532 537 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 533 & nit000-1, zjulian, r dt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set )538 & nit000-1, zjulian, rn_Dt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set ) 534 539 CALL histvert( nid_V, "depthv", "Vertical V levels", & ! Vertical grid : gdept 535 540 & "m", ipk, gdept_1d, nz_V, "down" ) … … 544 549 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 545 550 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 546 & nit000-1, zjulian, r dt, nh_W, nid_W, domain_id=nidom, snc4chunks=snc4set )551 & nit000-1, zjulian, rn_Dt, nh_W, nid_W, domain_id=nidom, snc4chunks=snc4set ) 547 552 CALL histvert( nid_W, "depthw", "Vertical W levels", & ! Vertical grid: gdepw 548 553 & "m", ipk, gdepw_1d, nz_W, "down" ) … … 554 559 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 555 560 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 556 & nit000-1, zjulian, r dt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set )561 & nit000-1, zjulian, rn_Dt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set ) 557 562 CALL histvert( nid_A, "ght_abl", "Vertical T levels", & ! Vertical grid: gdept 558 563 & "m", ipka, ght_abl(2:jpka), nz_A, "up" ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIU/diu_coolskin.F90
r12377 r12495 67 67 68 68 69 SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, rdt)69 SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, pDt) 70 70 !!---------------------------------------------------------------------- 71 71 !! *** ROUTINE diurnal_sst_takaya_step *** … … 81 81 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: pstauflux ! Wind stress (kg/ m s^2) 82 82 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psrho ! Water density (kg/m^3) 83 REAL(wp), INTENT(IN) :: rdt ! Time-step83 REAL(wp), INTENT(IN) :: pDt ! Time-step 84 84 85 85 ! Local variables -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DIU/diu_layers.F90
r12377 r12495 39 39 ! Cool skin 40 40 41 CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), r dt)41 CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), rn_Dt) 42 42 43 43 CALL iom_put( "sst_wl" , x_dsst ) ! warm layer (write out before update below). … … 45 45 46 46 ! Diurnal warm layer model 47 CALL diurnal_sst_takaya_step( kstp, qsr, qns, taum, rhop(:,:,1), r dt)47 CALL diurnal_sst_takaya_step( kstp, qsr, qns, taum, rhop(:,:,1), rn_Dt) 48 48 49 49 END SUBROUTINE diurnal_layers -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/daymod.F90
r12377 r12495 20 20 !! ------------------------------- 21 21 !! sbcmod assume that the time step is dividing the number of second of 22 !! in a day, i.e. ===> MOD( rday, r dt ) == 022 !! in a day, i.e. ===> MOD( rday, rn_Dt ) == 0 23 23 !! except when user defined forcing is used (see sbcmod.F90) 24 24 !!---------------------------------------------------------------------- … … 73 73 ! 74 74 ! max number of seconds between each restart 75 IF( REAL( nitend - nit000 + 1 ) * r dt > REAL( HUGE( nsec1jan000 ) ) ) THEN75 IF( REAL( nitend - nit000 + 1 ) * rn_Dt > REAL( HUGE( nsec1jan000 ) ) ) THEN 76 76 CALL ctl_stop( 'The number of seconds between each restart exceeds the integer 4 max value: 2^31-1. ', & 77 77 & 'You must do a restart at higher frequency (or remove this stop and recompile the code in I8)' ) … … 79 79 nsecd = NINT( rday ) 80 80 nsecd05 = NINT( 0.5 * rday ) 81 ndt = NINT( r dt )82 ndt05 = NINT( 0.5 * r dt )81 ndt = NINT( rn_Dt ) 82 ndt05 = NINT( 0.5 * rn_Dt ) 83 83 84 84 IF( .NOT. l_offline ) CALL day_rst( nit000, 'READ' ) … … 239 239 nsec_monday = nsec_monday + ndt 240 240 nsec_day = nsec_day + ndt 241 adatrj = adatrj + r dt / rday242 fjulday = fjulday + r dt / rday241 adatrj = adatrj + rn_Dt / rday 242 fjulday = fjulday + rn_Dt / rday 243 243 IF( ABS(fjulday - REAL(NINT(fjulday),wp)) < zprec ) fjulday = REAL(NINT(fjulday),wp) ! avoid truncation error 244 244 IF( ABS(adatrj - REAL(NINT(adatrj ),wp)) < zprec ) adatrj = REAL(NINT(adatrj ),wp) ! avoid truncation error … … 309 309 !! In both those options, the exact duration of the experiment 310 310 !! since the beginning (cumulated duration of all previous restart runs) 311 !! is not stored in the restart and is assumed to be (nit000-1)*r dt.311 !! is not stored in the restart and is assumed to be (nit000-1)*rn_Dt. 312 312 !! This is valid is the time step has remained constant. 313 313 !! … … 379 379 isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss) 380 380 IF( isecond - ndt05 .lt. 0 ) ndastp = ndastp - 1 ! Start hour is specified in the namelist (default 0) 381 adatrj = ( REAL( nit000-1, wp ) * r dt ) / rday381 adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 382 382 ! note this is wrong if time step has changed during run 383 383 ENDIF … … 389 389 isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss) 390 390 IF( isecond - ndt05 .LT. 0 ) ndastp = ndastp - 1 ! Start hour is specified in the namelist (default 0) 391 adatrj = ( REAL( nit000-1, wp ) * r dt ) / rday391 adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 392 392 ENDIF 393 393 IF( ABS(adatrj - REAL(NINT(adatrj),wp)) < 0.1 / rday ) adatrj = REAL(NINT(adatrj),wp) ! avoid truncation error -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/dom_oce.F90
r12377 r12495 33 33 LOGICAL , PUBLIC :: ln_linssh !: =T linear free surface ==>> model level are fixed in time 34 34 LOGICAL , PUBLIC :: ln_meshmask !: =T create a mesh-mask file (mesh_mask.nc) 35 REAL(wp), PUBLIC :: rn_ rdt!: time step for the dynamics and tracer35 REAL(wp), PUBLIC :: rn_Dt !: time step for the dynamics and tracer 36 36 REAL(wp), PUBLIC :: rn_atfp !: asselin time filter parameter 37 INTEGER , PUBLIC :: nn_euler !: =0 start with forward time step or not (=1)37 LOGICAL , PUBLIC :: ln_1st_euler !: =T start with forward time step or not (=F) 38 38 LOGICAL , PUBLIC :: ln_crs !: Apply grid coarsening to dynamical model output or online passive tracers 39 39 … … 49 49 LOGICAL, PUBLIC :: ln_bt_auto !: Set number of barotropic iterations automatically 50 50 INTEGER, PUBLIC :: nn_bt_flt !: Filter choice 51 INTEGER, PUBLIC :: nn_ baro !: Number of barotropic iterations during one baroclinic step (rdt)51 INTEGER, PUBLIC :: nn_e !: Number of barotropic iterations during one baroclinic step (rn_Dt) 52 52 REAL(wp), PUBLIC :: rn_bt_cmax !: Maximum allowed courant number (used if ln_bt_auto=T) 53 53 REAL(wp), PUBLIC :: rn_bt_alpha !: Time stepping diffusion parameter 54 54 55 55 56 ! !! old non-DOCTOR names still used in the model57 REAL(wp), PUBLIC :: atfp !: asselin time filter parameter58 REAL(wp), PUBLIC :: rdt !: time step for the dynamics and tracer59 60 56 ! !!! associated variables 61 INTEGER , PUBLIC :: neuler !: restart euler forward option (0=Euler) 62 REAL(wp), PUBLIC :: r2dt !: = 2*rdt except at nit000 (=rdt) if neuler=0 57 LOGICAL , PUBLIC :: l_1st_euler !: Euler 1st time-step flag (=T if ln_restart=F or ln_1st_euler=T) 58 REAL(wp), PUBLIC :: rDt, r1_Dt !: Current model timestep and reciprocal 59 !: rDt = 2 * rn_Dt if leapfrog and l_1st_euler = F 60 !: = rn_Dt if leapfrog and l_1st_euler = T 61 !: = rn_Dt if RK3 63 62 64 63 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/domain.F90
r12377 r12495 287 287 & nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl , & 288 288 & nn_it000, nn_itend , nn_date0 , nn_time0 , nn_leapy , nn_istate , & 289 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, nn_euler ,&289 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, ln_1st_euler , & 290 290 & ln_cfmeta, ln_xios_read, nn_wxios 291 NAMELIST/namdom/ ln_linssh, rn_ rdt, rn_atfp, ln_crs, ln_meshmask291 NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_meshmask 292 292 #if defined key_netcdf4 293 293 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 317 317 WRITE(numout,*) ' restart output directory cn_ocerst_outdir= ', TRIM( cn_ocerst_outdir ) 318 318 WRITE(numout,*) ' restart logical ln_rstart = ', ln_rstart 319 WRITE(numout,*) ' start with forward time step nn_euler = ', nn_euler319 WRITE(numout,*) ' start with forward time step ln_1st_euler = ', ln_1st_euler 320 320 WRITE(numout,*) ' control of time step nn_rstctl = ', nn_rstctl 321 321 WRITE(numout,*) ' number of the first time step nn_it000 = ', nn_it000 … … 353 353 nleapy = nn_leapy 354 354 ninist = nn_istate 355 neuler = nn_euler356 IF( neuler == 1.AND. .NOT. ln_rstart ) THEN355 l_1st_euler = ln_1st_euler 356 IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 357 357 IF(lwp) WRITE(numout,*) 358 358 IF(lwp) WRITE(numout,*)' ==>>> Start from rest (ln_rstart=F)' 359 IF(lwp) WRITE(numout,*)' an Euler initial time step is used : nn_euler is forced to 0'360 neuler = 0359 IF(lwp) WRITE(numout,*)' an Euler initial time step is used : l_1st_euler is forced to .true. ' 360 l_1st_euler = .true. 361 361 ENDIF 362 362 ! ! control of output frequency … … 408 408 WRITE(numout,*) ' linear free surface (=T) ln_linssh = ', ln_linssh 409 409 WRITE(numout,*) ' create mesh/mask file ln_meshmask = ', ln_meshmask 410 WRITE(numout,*) ' ocean time step rn_ rdt = ', rn_rdt410 WRITE(numout,*) ' ocean time step rn_Dt = ', rn_Dt 411 411 WRITE(numout,*) ' asselin time filter parameter rn_atfp = ', rn_atfp 412 412 WRITE(numout,*) ' online coarsening of dynamical fields ln_crs = ', ln_crs 413 413 ENDIF 414 414 ! 415 ! ! conversion DOCTOR names into model names (this should disappear soon)416 atfp = rn_atfp417 r dt = rn_rdt415 !! Initialise current model timestep rDt = 2*rn_Dt if MLF or rDt = rn_Dt if RK3 416 rDt = 2._wp * rn_Dt 417 r1_Dt = 1._wp / rDt 418 418 419 419 IF( TRIM(Agrif_CFixed()) == '0' ) THEN -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/domvvl.F90
r12377 r12495 235 235 IF( ln_vvl_ztilde_as_zstar ) THEN ! z-star emulation using z-tile 236 236 frq_rst_e3t(:,:) = 0._wp !Ignore namelist settings 237 frq_rst_hdv(:,:) = 1._wp / r dt237 frq_rst_hdv(:,:) = 1._wp / rn_Dt 238 238 ENDIF 239 239 IF ( ln_vvl_zstar_at_eqtor ) THEN ! use z-star in vicinity of the Equator … … 247 247 ! values inside the equatorial band (ztilde as zstar) 248 248 frq_rst_e3t(ji,jj) = 0.0_wp 249 frq_rst_hdv(ji,jj) = 1.0_wp / r dt249 frq_rst_hdv(ji,jj) = 1.0_wp / rn_Dt 250 250 ELSE ! transition band (2.5 to 6 degrees N/S) 251 251 ! ! (linearly transition from z-tilde to z-star) … … 253 253 & * ( 1.0_wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp) & 254 254 & * 180._wp / 3.5_wp ) ) 255 frq_rst_hdv(ji,jj) = (1.0_wp / r dt) &256 & + ( frq_rst_hdv(ji,jj)-(1.e0_wp / r dt) )*0.5_wp &255 frq_rst_hdv(ji,jj) = (1.0_wp / rn_Dt) & 256 & + ( frq_rst_hdv(ji,jj)-(1.e0_wp / rn_Dt) )*0.5_wp & 257 257 & * ( 1._wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp) & 258 258 & * 180._wp / 3.5_wp ) ) … … 264 264 ij0 = 128 ; ij1 = 135 ; 265 265 frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.0_wp 266 frq_rst_hdv( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0_wp / r dt266 frq_rst_hdv( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0_wp / rn_Dt 267 267 ENDIF 268 268 ENDIF … … 319 319 INTEGER :: ji, jj, jk ! dummy loop indices 320 320 INTEGER , DIMENSION(3) :: ijk_max, ijk_min ! temporary integers 321 REAL(wp) :: z 2dt, z_tmin, z_tmax! local scalars321 REAL(wp) :: z_tmin, z_tmax ! local scalars 322 322 LOGICAL :: ll_do_bclinic ! local logical 323 323 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv … … 373 373 IF( kt > nit000 ) THEN 374 374 DO jk = 1, jpkm1 375 hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - r dt * frq_rst_hdv(:,:) &375 hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - rn_Dt * frq_rst_hdv(:,:) & 376 376 & * ( hdiv_lf(:,:,jk) - e3t(:,:,jk,Kmm) * ( hdiv(:,:,jk) - zhdiv(:,:) ) ) 377 377 END DO … … 430 430 ! 4 - Time stepping of baroclinic scale factors 431 431 ! --------------------------------------------- 432 ! Leapfrog time stepping433 ! ~~~~~~~~~~~~~~~~~~~~~~434 IF( neuler == 0 .AND. kt == nit000 ) THEN435 z2dt = rdt436 ELSE437 z2dt = 2.0_wp * rdt438 ENDIF439 432 CALL lbc_lnk( 'domvvl', tilde_e3t_a(:,:,:), 'T', 1._wp ) 440 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:)433 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + rDt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 441 434 442 435 ! Maximum deformation control … … 624 617 ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 625 618 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 626 IF( neuler == 0 .AND. kt == nit000) THEN619 IF( l_1st_euler ) THEN 627 620 tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 628 621 ELSE 629 622 tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) & 630 & + atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) )623 & + rn_atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 631 624 ENDIF 632 625 tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) … … 821 814 e3t(:,:,:,Kbb) = e3t_0(:,:,:) 822 815 END WHERE 823 IF( neuler == 0) THEN816 IF( l_1st_euler ) THEN 824 817 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 825 818 ENDIF … … 827 820 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 828 821 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 829 IF(lwp) write(numout,*) ' neuler is forced to 0'822 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 830 823 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 831 824 e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 832 neuler = 0825 l_1st_euler = .true. 833 826 ELSE IF( id2 > 0 ) THEN 834 827 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 835 828 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 836 IF(lwp) write(numout,*) ' neuler is forced to 0'829 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 837 830 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 838 831 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 839 neuler = 0832 l_1st_euler = .true. 840 833 ELSE 841 834 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 842 835 IF(lwp) write(numout,*) 'Compute scale factor from sshn' 843 IF(lwp) write(numout,*) ' neuler is forced to 0'836 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 844 837 DO jk = 1, jpk 845 838 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & … … 848 841 END DO 849 842 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 850 neuler = 0843 l_1st_euler = .true. 851 844 ENDIF 852 845 ! ! ----------- ! … … 1008 1001 WRITE(numout,*) ' rn_rst_e3t = 0.e0' 1009 1002 WRITE(numout,*) ' hard-wired : z-tilde cutoff frequency of low-pass filter (days)' 1010 WRITE(numout,*) ' rn_lf_cutoff = 1.0/r dt'1003 WRITE(numout,*) ' rn_lf_cutoff = 1.0/rn_Dt' 1011 1004 ELSE 1012 1005 WRITE(numout,*) ' z-tilde to zstar restoration timescale (days) rn_rst_e3t = ', rn_rst_e3t -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/istate.F90
r12377 r12495 92 92 ! ! --------------- 93 93 numror = 0 ! define numror = 0 -> no restart file to read 94 neuler = 0! Set time-step indicator at nit000 (euler forward)94 l_1st_euler = .true. ! Set time-step indicator at nit000 (euler forward) 95 95 CALL day_init ! model calendar (using both namelist and restart infos) 96 96 ! ! Initialization of ocean to zero -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DOM/phycst.F90
r10068 r12495 39 39 REAL(wp), PUBLIC :: rt0 = 273.15_wp !: freezing point of fresh water [Kelvin] 40 40 41 REAL(wp), PUBLIC :: r au0 !: volumic mass of reference [kg/m3]42 REAL(wp), PUBLIC :: r1_r au0 !: = 1. / rau0 [m3/kg]41 REAL(wp), PUBLIC :: rho0 !: volumic mass of reference [kg/m3] 42 REAL(wp), PUBLIC :: r1_rho0 !: = 1. / rho0 [m3/kg] 43 43 REAL(wp), PUBLIC :: rcp !: ocean specific heat [J/Kelvin] 44 44 REAL(wp), PUBLIC :: r1_rcp !: = 1. / rcp [Kelvin/J] 45 REAL(wp), PUBLIC :: r au0_rcp !: = rau0 * rcp46 REAL(wp), PUBLIC :: r1_r au0_rcp !: = 1. / ( rau0 * rcp )45 REAL(wp), PUBLIC :: rho0_rcp !: = rho0 * rcp 46 REAL(wp), PUBLIC :: r1_rho0_rcp !: = 1. / ( rho0 * rcp ) 47 47 48 48 REAL(wp), PUBLIC :: emic = 0.97_wp !: emissivity of snow or ice (not used?) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/dynatf.F90
r12377 r12495 87 87 !! arrays to start the next time step: 88 88 !! (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 89 !! + atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ]89 !! + rn_atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ] 90 90 !! Note that with flux form advection and non linear free surface, 91 91 !! the time filter is applied on thickness weighted velocity. … … 157 157 ! 158 158 IF( l_trddyn ) THEN ! prepare the atf trend computation + some diagnostics 159 z1_2dt = 1._wp / (2. * rdt) ! Euler or leap-frog time step160 IF( neuler == 0 .AND. kt == nit000 ) z1_2dt = 1._wp / rdt161 159 ! 162 160 ! ! Kinetic energy and Conversion … … 164 162 ! 165 163 IF( ln_dyn_trd ) THEN ! 3D output: total momentum trends 166 zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * z1_2dt167 zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * z1_2dt164 zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * r1_Dt 165 zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * r1_Dt 168 166 CALL iom_put( "utrd_tot", zua ) ! total momentum trends, except the asselin time filter 169 167 CALL iom_put( "vtrd_tot", zva ) … … 178 176 ! ------------------------------------------ 179 177 180 IF( .NOT. ( neuler == 0 .AND. kt == nit000 )) THEN !* Leap-Frog : Asselin time filter178 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 181 179 ! ! =============! 182 180 IF( ln_linssh ) THEN ! Fixed volume ! 183 181 ! ! =============! 184 182 DO_3D_11_11( 1, jpkm1 ) 185 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) )186 pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) )183 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 184 pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 187 185 END_3D 188 186 ! ! ================! … … 193 191 ALLOCATE( ze3t_f(jpi,jpj,jpk), zwfld(jpi,jpj) ) 194 192 DO jk = 1, jpkm1 195 ze3t_f(:,:,jk) = pe3t(:,:,jk,Kmm) + atfp * ( pe3t(:,:,jk,Kbb) - 2._wp * pe3t(:,:,jk,Kmm) + pe3t(:,:,jk,Kaa) )193 ze3t_f(:,:,jk) = pe3t(:,:,jk,Kmm) + rn_atfp * ( pe3t(:,:,jk,Kbb) - 2._wp * pe3t(:,:,jk,Kmm) + pe3t(:,:,jk,Kaa) ) 196 194 END DO 197 195 ! Add volume filter correction: compatibility with tracer advection scheme 198 196 ! => time filter + conservation correction 199 zcoef = atfp * rdt * r1_rau0197 zcoef = rn_atfp * rn_Dt * r1_rho0 200 198 zwfld(:,:) = emp_b(:,:) - emp(:,:) 201 199 IF ( ln_rnf ) zwfld(:,:) = zwfld(:,:) - ( rnf_b(:,:) - rnf(:,:) ) … … 209 207 ! to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 210 208 ! ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 211 IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, atfp * rdt )209 IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, rn_atfp * rn_Dt ) 212 210 ! 213 211 pe3t(:,:,1:jpkm1,Kmm) = ze3t_f(:,:,1:jpkm1) ! filtered scale factor at T-points … … 218 216 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3v(:,:,:,Kmm), 'V' ) 219 217 DO_3D_11_11( 1, jpkm1 ) 220 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) )221 pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) )218 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 219 pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 222 220 END_3D 223 221 ! … … 236 234 zve3b = pe3v(ji,jj,jk,Kbb) * pvv(ji,jj,jk,Kbb) 237 235 ! 238 puu(ji,jj,jk,Kmm) = ( zue3n + atfp * ( zue3b - 2._wp * zue3n + zue3a ) ) / ze3u_f(ji,jj,jk)239 pvv(ji,jj,jk,Kmm) = ( zve3n + atfp * ( zve3b - 2._wp * zve3n + zve3a ) ) / ze3v_f(ji,jj,jk)236 puu(ji,jj,jk,Kmm) = ( zue3n + rn_atfp * ( zue3b - 2._wp * zue3n + zue3a ) ) / ze3u_f(ji,jj,jk) 237 pvv(ji,jj,jk,Kmm) = ( zve3n + rn_atfp * ( zve3b - 2._wp * zve3n + zve3a ) ) / ze3v_f(ji,jj,jk) 240 238 END_3D 241 239 pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) … … 263 261 ENDIF 264 262 ! 265 ENDIF ! neuler /= 0263 ENDIF ! .NOT. l_1st_euler 266 264 ! 267 265 ! Set "now" and "before" barotropic velocities for next time step: -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/dynspg.F90
r12377 r12495 67 67 !! ln_apr_dyn=T : the atmospheric pressure forcing is applied 68 68 !! as the gradient of the inverse barometer ssh: 69 !! apgu = - 1/r au0 di[apr] = 0.5*grav di[ssh_ib+ssh_ibb]70 !! apgv = - 1/r au0 dj[apr] = 0.5*grav dj[ssh_ib+ssh_ibb]71 !! Note that as all external forcing a time averaging over a two r dt69 !! apgu = - 1/rho0 di[apr] = 0.5*grav di[ssh_ib+ssh_ibb] 70 !! apgv = - 1/rho0 dj[apr] = 0.5*grav dj[ssh_ib+ssh_ibb] 71 !! Note that as all external forcing a time averaging over a two rn_Dt 72 72 !! period is used to prevent the divergence of odd and even time step. 73 73 !!---------------------------------------------------------------------- … … 78 78 ! 79 79 INTEGER :: ji, jj, jk ! dummy loop indices 80 REAL(wp) :: z2dt, zg_2, zintp, zgr au0r, zld ! local scalars80 REAL(wp) :: z2dt, zg_2, zintp, zgrho0r, zld ! local scalars 81 81 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zpice 82 82 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv … … 114 114 ! 115 115 ! Update tide potential at the beginning of current time step 116 zt0step = REAL(nsec_day, wp)-0.5_wp*r dt116 zt0step = REAL(nsec_day, wp)-0.5_wp*rn_Dt 117 117 CALL upd_tide(zt0step, Kmm) 118 118 ! … … 134 134 ALLOCATE( zpice(jpi,jpj) ) 135 135 zintp = REAL( MOD( kt-1, nn_fsbc ) ) / REAL( nn_fsbc ) 136 zgr au0r = - grav * r1_rau0137 zpice(:,:) = ( zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:) ) * zgr au0r136 zgrho0r = - grav * r1_rho0 137 zpice(:,:) = ( zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:) ) * zgrho0r 138 138 DO_2D_00_00 139 139 spgu(ji,jj) = spgu(ji,jj) + ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj) … … 183 183 NAMELIST/namdyn_spg/ ln_dynspg_exp , ln_dynspg_ts, & 184 184 & ln_bt_fw, ln_bt_av , ln_bt_auto , & 185 & nn_ baro, rn_bt_cmax, nn_bt_flt, rn_bt_alpha185 & nn_e , rn_bt_cmax, nn_bt_flt, rn_bt_alpha 186 186 !!---------------------------------------------------------------------- 187 187 ! … … 222 222 ! 223 223 IF( nspg == np_TS ) THEN ! split-explicit scheme initialisation 224 CALL dyn_spg_ts_init ! do it first: set nn_ baroused to allocate some arrays later on224 CALL dyn_spg_ts_init ! do it first: set nn_e used to allocate some arrays later on 225 225 ENDIF 226 226 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/dynspg_exp.F90
r12377 r12495 49 49 !! momentum trend the surface pressure gradient : 50 50 !! (uu(rhs),vv(rhs)) = (uu(rhs),vv(rhs)) + (spgu,spgv) 51 !! where spgu = -1/r au0 d/dx(ps) = -g/e1u di( ssh(now) )52 !! spgv = -1/r au0 d/dy(ps) = -g/e2v dj( ssh(now) )51 !! where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh(now) ) 52 !! spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh(now) ) 53 53 !! 54 54 !! ** Action : (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) trend of horizontal velocity increased by -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/dynspg_ts.F90
r12377 r12495 72 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_adv , vn_adv !: Advection vel. at "now" barocl. step 73 73 ! 74 INTEGER, SAVE :: icycle ! Number of barotropic sub-steps for each internal step nn_ baro <= 2.5 nn_baro75 REAL(wp),SAVE :: r dtbt! Barotropic time step74 INTEGER, SAVE :: icycle ! Number of barotropic sub-steps for each internal step nn_e <= 2.5 nn_e 75 REAL(wp),SAVE :: rDt_e ! Barotropic time step 76 76 ! 77 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: wgtbtp1, wgtbtp2 ! 1st & 2nd weights used in time filtering of barotropic fields … … 102 102 ierr(:) = 0 103 103 ! 104 ALLOCATE( wgtbtp1(3*nn_ baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT=ierr(1) )104 ALLOCATE( wgtbtp1(3*nn_e), wgtbtp2(3*nn_e), zwz(jpi,jpj), STAT=ierr(1) ) 105 105 IF( ln_dynvor_een .OR. ln_dynvor_eeT ) & 106 106 & ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , ftsw(jpi,jpj) , ftse(jpi,jpj), STAT=ierr(2) ) … … 150 150 LOGICAL :: ll_init ! =T : special startup of 2d equations 151 151 INTEGER :: noffset ! local integers : time offset for bdy update 152 REAL(wp) :: r1_ 2dt_b, z1_hu, z1_hv ! local scalars152 REAL(wp) :: r1_Dt_b, z1_hu, z1_hv ! local scalars 153 153 REAL(wp) :: za0, za1, za2, za3 ! - - 154 154 REAL(wp) :: zztmp, zldg ! - - … … 180 180 ! zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp 181 181 ! ! inverse of baroclinic time step 182 IF( kt == nit000 .AND. neuler == 0 ) THEN ; r1_2dt_b = 1._wp / ( rdt ) 183 ELSE ; r1_2dt_b = 1._wp / ( 2._wp * rdt ) 184 ENDIF 182 r1_Dt_b = 1._wp / rDt 185 183 ! 186 184 ll_init = ln_bt_av ! if no time averaging, then no specific restart 187 185 ll_fw_start = .FALSE. 188 186 ! ! time offset in steps for bdy data update 189 IF( .NOT.ln_bt_fw ) THEN ; noffset = - nn_ baro187 IF( .NOT.ln_bt_fw ) THEN ; noffset = - nn_e 190 188 ELSE ; noffset = 0 191 189 ENDIF … … 198 196 IF(lwp) WRITE(numout,*) 199 197 ! 200 IF( neuler == 0) ll_init=.TRUE.201 ! 202 IF( ln_bt_fw .OR. neuler == 0) THEN198 IF( l_1st_euler ) ll_init=.TRUE. 199 ! 200 IF( ln_bt_fw .OR. l_1st_euler ) THEN 203 201 ll_fw_start =.TRUE. 204 202 noffset = 0 … … 209 207 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 210 208 ! 211 ENDIF 212 ! 213 ! If forward start at previous time step, and centered integration, 214 ! then update averaging weights: 215 IF (.NOT.ln_bt_fw .AND.( neuler==0 .AND. kt==nit000+1 ) ) THEN 216 ll_fw_start=.FALSE. 217 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 218 ENDIF 219 ! 220 209 ELSEIF( kt == nit000 + 1 ) THEN !* initialisation 2nd time-step 210 ! 211 IF( .NOT.ln_bt_fw ) THEN 212 ! If we did an Euler timestep on the first timestep we need to reset ll_fw_start 213 ! and the averaging weights. We don't have an easy way of telling whether we did 214 ! an Euler timestep on the first timestep (because l_1st_euler is reset to .false. 215 ! at the end of the first timestep) so just do this in all cases. 216 ll_fw_start = .FALSE. 217 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 218 ENDIF 219 ! 220 ENDIF 221 ! 221 222 ! ----------------------------------------------------------------------------- 222 223 ! Phase 1 : Coupling between general trend and barotropic estimates (1st step) … … 302 303 IF( ln_bt_fw ) THEN ! Add wind forcing 303 304 DO_2D_00_00 304 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_r au0 * utau(ji,jj) * r1_hu(ji,jj,Kmm)305 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_r au0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm)305 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_rho0 * utau(ji,jj) * r1_hu(ji,jj,Kmm) 306 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_rho0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm) 306 307 END_2D 307 308 ELSE 308 zztmp = r1_r au0 * r1_2309 zztmp = r1_rho0 * r1_2 309 310 DO_2D_00_00 310 311 zu_frc(ji,jj) = zu_frc(ji,jj) + zztmp * ( utau_b(ji,jj) + utau(ji,jj) ) * r1_hu(ji,jj,Kmm) … … 319 320 ! ! --------------------------------------------------- ! 320 321 IF (ln_bt_fw) THEN ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 321 zssh_frc(:,:) = r1_r au0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) )322 zssh_frc(:,:) = r1_rho0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) 322 323 ELSE ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 323 zztmp = r1_r au0 * r1_2324 zztmp = r1_rho0 * r1_2 324 325 zssh_frc(:,:) = zztmp * ( emp(:,:) + emp_b(:,:) & 325 326 & - rnf(:,:) - rnf_b(:,:) & … … 428 429 ! Update tide potential at the beginning of current time substep 429 430 IF( ln_tide_pot .AND. ln_tide ) THEN 430 zt0substep = REAL(nsec_day, wp) - 0.5_wp*r dt + (jn + noffset - 1) * rdt / REAL(nn_baro, wp)431 zt0substep = REAL(nsec_day, wp) - 0.5_wp*rn_Dt + (jn + noffset - 1) * rn_Dt / REAL(nn_e, wp) 431 432 CALL upd_tide(zt0substep, Kmm) 432 433 END IF … … 494 495 IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) CALL agrif_dyn_ts_flux( jn, zhU, zhV ) 495 496 #endif 496 IF( ln_wd_il ) CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, r dtbt) !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV497 IF( ln_wd_il ) CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, rDt_e) !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV 497 498 498 499 IF( ln_wd_dl ) THEN ! un_e and vn_e are set to zero at faces where … … 509 510 DO_2D_00_00 510 511 zhdiv = ( zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1) ) * r1_e1e2t(ji,jj) 511 ssha_e(ji,jj) = ( sshn_e(ji,jj) - r dtbt* ( zssh_frc(ji,jj) + zhdiv ) ) * ssmask(ji,jj)512 ssha_e(ji,jj) = ( sshn_e(ji,jj) - rDt_e * ( zssh_frc(ji,jj) + zhdiv ) ) * ssmask(ji,jj) 512 513 END_2D 513 514 ! … … 599 600 DO_2D_00_00 600 601 ua_e(ji,jj) = ( un_e(ji,jj) & 601 & + r dtbt* ( zu_spg(ji,jj) &602 & + rDt_e * ( zu_spg(ji,jj) & 602 603 & + zu_trd(ji,jj) & 603 604 & + zu_frc(ji,jj) ) & … … 605 606 606 607 va_e(ji,jj) = ( vn_e(ji,jj) & 607 & + r dtbt* ( zv_spg(ji,jj) &608 & + rDt_e * ( zv_spg(ji,jj) & 608 609 & + zv_trd(ji,jj) & 609 610 & + zv_frc(ji,jj) ) & … … 624 625 ! 625 626 ua_e(ji,jj) = ( hu_e (ji,jj) * un_e (ji,jj) & 626 & + r dtbt* ( zhu_bck * zu_spg (ji,jj) & !627 & + rDt_e * ( zhu_bck * zu_spg (ji,jj) & ! 627 628 & + zhup2_e(ji,jj) * zu_trd (ji,jj) & ! 628 629 & + hu(ji,jj,Kmm) * zu_frc (ji,jj) ) ) * z1_hu 629 630 ! 630 631 va_e(ji,jj) = ( hv_e (ji,jj) * vn_e (ji,jj) & 631 & + r dtbt* ( zhv_bck * zv_spg (ji,jj) & !632 & + rDt_e * ( zhv_bck * zv_spg (ji,jj) & ! 632 633 & + zhvp2_e(ji,jj) * zv_trd (ji,jj) & ! 633 634 & + hv(ji,jj,Kmm) * zv_frc (ji,jj) ) ) * z1_hv … … 637 638 IF ( ll_wd ) THEN ! revert to explicit for bit comparison tests in non wad runs 638 639 DO_2D_00_00 639 ua_e(ji,jj) = ua_e(ji,jj) /(1.0 - r dtbt* zCdU_u(ji,jj) * hur_e(ji,jj))640 va_e(ji,jj) = va_e(ji,jj) /(1.0 - r dtbt* zCdU_v(ji,jj) * hvr_e(ji,jj))640 ua_e(ji,jj) = ua_e(ji,jj) /(1.0 - rDt_e * zCdU_u(ji,jj) * hur_e(ji,jj)) 641 va_e(ji,jj) = va_e(ji,jj) /(1.0 - rDt_e * zCdU_v(ji,jj) * hvr_e(ji,jj)) 641 642 END_2D 642 643 ENDIF … … 701 702 ! Set advection velocity correction: 702 703 IF (ln_bt_fw) THEN 703 IF( .NOT.( kt == nit000 .AND. neuler==0) ) THEN704 IF( .NOT.( kt == nit000 .AND. l_1st_euler ) ) THEN 704 705 DO_2D_11_11 705 706 zun_save = un_adv(ji,jj) 706 707 zvn_save = vn_adv(ji,jj) 707 708 ! ! apply the previously computed correction 708 un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - atfp * un_bf(ji,jj) )709 vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - atfp * vn_bf(ji,jj) )709 un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - rn_atfp * un_bf(ji,jj) ) 710 vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - rn_atfp * vn_bf(ji,jj) ) 710 711 ! ! Update corrective fluxes for next time step 711 un_bf(ji,jj) = atfp * un_bf(ji,jj) + ( zun_save - ub2_b(ji,jj) )712 vn_bf(ji,jj) = atfp * vn_bf(ji,jj) + ( zvn_save - vb2_b(ji,jj) )712 un_bf(ji,jj) = rn_atfp * un_bf(ji,jj) + ( zun_save - ub2_b(ji,jj) ) 713 vn_bf(ji,jj) = rn_atfp * vn_bf(ji,jj) + ( zvn_save - vb2_b(ji,jj) ) 713 714 ! ! Save integrated transport for next computation 714 715 ub2_b(ji,jj) = zun_save … … 728 729 IF( ln_dynadv_vec .OR. ln_linssh ) THEN 729 730 DO jk=1,jpkm1 730 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) ) * r1_ 2dt_b731 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) ) * r1_ 2dt_b731 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) ) * r1_Dt_b 732 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) ) * r1_Dt_b 732 733 END DO 733 734 ELSE … … 744 745 ! 745 746 DO jk=1,jpkm1 746 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu(:,:,Kmm) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu(:,:,Kbb) ) * r1_ 2dt_b747 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv(:,:,Kmm) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv(:,:,Kbb) ) * r1_ 2dt_b747 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu(:,:,Kmm) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu(:,:,Kbb) ) * r1_Dt_b 748 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv(:,:,Kmm) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv(:,:,Kbb) ) * r1_Dt_b 748 749 END DO 749 750 ! Save barotropic velocities not transport: … … 808 809 LOGICAL, INTENT(in) :: ll_fw ! forward time splitting =.true. 809 810 INTEGER, INTENT(inout) :: jpit ! cycle length 810 REAL(wp), DIMENSION(3*nn_ baro), INTENT(inout) :: zwgt1, & ! Primary weights811 REAL(wp), DIMENSION(3*nn_e), INTENT(inout) :: zwgt1, & ! Primary weights 811 812 zwgt2 ! Secondary weights 812 813 … … 820 821 ! Set time index when averaged value is requested 821 822 IF (ll_fw) THEN 822 jic = nn_ baro823 jic = nn_e 823 824 ELSE 824 jic = 2 * nn_ baro825 jic = 2 * nn_e 825 826 ENDIF 826 827 … … 828 829 IF (ll_av) THEN 829 830 ! Define simple boxcar window for primary weights 830 ! (width = nn_ baro, centered around jic)831 ! (width = nn_e, centered around jic) 831 832 SELECT CASE ( nn_bt_flt ) 832 833 CASE( 0 ) ! No averaging … … 834 835 jpit = jic 835 836 836 CASE( 1 ) ! Boxcar, width = nn_ baro837 DO jn = 1, 3*nn_ baro838 za1 = ABS(float(jn-jic))/float(nn_ baro)837 CASE( 1 ) ! Boxcar, width = nn_e 838 DO jn = 1, 3*nn_e 839 za1 = ABS(float(jn-jic))/float(nn_e) 839 840 IF (za1 < 0.5_wp) THEN 840 841 zwgt1(jn) = 1._wp … … 843 844 ENDDO 844 845 845 CASE( 2 ) ! Boxcar, width = 2 * nn_ baro846 DO jn = 1, 3*nn_ baro847 za1 = ABS(float(jn-jic))/float(nn_ baro)846 CASE( 2 ) ! Boxcar, width = 2 * nn_e 847 DO jn = 1, 3*nn_e 848 za1 = ABS(float(jn-jic))/float(nn_e) 848 849 IF (za1 < 1._wp) THEN 849 850 zwgt1(jn) = 1._wp … … 889 890 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 890 891 ! ! --------------- 891 IF( ln_rstart .AND. ln_bt_fw .AND. ( neuler/=0) ) THEN !* Read the restart file892 IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN !* Read the restart file 892 893 CALL iom_get( numror, jpdom_autoglo, 'ub2_b' , ub2_b (:,:), ldxios = lrxios ) 893 894 CALL iom_get( numror, jpdom_autoglo, 'vb2_b' , vb2_b (:,:), ldxios = lrxios ) … … 975 976 976 977 ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 977 IF( ln_bt_auto ) nn_ baro = CEILING( rdt / rn_bt_cmax * zcmax)978 IF( ln_bt_auto ) nn_e = CEILING( rn_Dt / rn_bt_cmax * zcmax) 978 979 979 r dtbt = rdt / REAL( nn_baro, wp )980 zcmax = zcmax * r dtbt980 rDt_e = rn_Dt / REAL( nn_e , wp ) 981 zcmax = zcmax * rDt_e 981 982 ! Print results 982 983 IF(lwp) WRITE(numout,*) … … 984 985 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~' 985 986 IF( ln_bt_auto ) THEN 986 IF(lwp) WRITE(numout,*) ' ln_ts_auto =.true. Automatically set nn_ baro'987 IF(lwp) WRITE(numout,*) ' ln_ts_auto =.true. Automatically set nn_e ' 987 988 IF(lwp) WRITE(numout,*) ' Max. courant number allowed: ', rn_bt_cmax 988 989 ELSE 989 IF(lwp) WRITE(numout,*) ' ln_ts_auto=.false.: Use nn_ baro in namelist nn_baro = ', nn_baro990 IF(lwp) WRITE(numout,*) ' ln_ts_auto=.false.: Use nn_e in namelist nn_e = ', nn_e 990 991 ENDIF 991 992 992 993 IF(ln_bt_av) THEN 993 IF(lwp) WRITE(numout,*) ' ln_bt_av =.true. ==> Time averaging over nn_ barotime steps is on '994 IF(lwp) WRITE(numout,*) ' ln_bt_av =.true. ==> Time averaging over nn_e time steps is on ' 994 995 ELSE 995 996 IF(lwp) WRITE(numout,*) ' ln_bt_av =.false. => No time averaging of barotropic variables ' … … 1011 1012 SELECT CASE ( nn_bt_flt ) 1012 1013 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' Dirac' 1013 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = nn_ baro'1014 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = 2*nn_ baro'1014 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = nn_e' 1015 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = 2*nn_e' 1015 1016 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1, or 2' ) 1016 1017 END SELECT 1017 1018 ! 1018 1019 IF(lwp) WRITE(numout,*) ' ' 1019 IF(lwp) WRITE(numout,*) ' nn_ baro = ', nn_baro1020 IF(lwp) WRITE(numout,*) ' Barotropic time step [s] is :', r dtbt1020 IF(lwp) WRITE(numout,*) ' nn_e = ', nn_e 1021 IF(lwp) WRITE(numout,*) ' Barotropic time step [s] is :', rDt_e 1021 1022 IF(lwp) WRITE(numout,*) ' Maximum Courant number is :', zcmax 1022 1023 ! … … 1030 1031 ENDIF 1031 1032 IF( zcmax>0.9_wp ) THEN 1032 CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_ baro!' )1033 CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_e !' ) 1033 1034 ENDIF 1034 1035 ! … … 1429 1430 ! 1430 1431 IF( ln_wd_il ) THEN ! W/D : use the "clipped" bottom friction !!gm explain WHY, please ! 1431 zztmp = -1._wp / r dtbt1432 zztmp = -1._wp / rDt_e 1432 1433 DO_2D_00_00 1433 1434 pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) * wdrampu(ji,jj) * MAX( & -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/dynzdf.F90
r12377 r12495 92 92 ENDIF 93 93 ENDIF 94 ! !* set time step95 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! = rdt (restart with Euler time stepping)96 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2. * rdt ! = 2 rdt (leapfrog)97 ENDIF98 !99 94 ! !* explicit top/bottom drag case 100 95 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa)) … … 112 107 IF( ln_dynadv_vec .OR. ln_linssh ) THEN ! applied on velocity 113 108 DO jk = 1, jpkm1 114 puu(:,:,jk,Kaa) = ( puu(:,:,jk,Kbb) + r 2dt * puu(:,:,jk,Krhs) ) * umask(:,:,jk)115 pvv(:,:,jk,Kaa) = ( pvv(:,:,jk,Kbb) + r 2dt * pvv(:,:,jk,Krhs) ) * vmask(:,:,jk)109 puu(:,:,jk,Kaa) = ( puu(:,:,jk,Kbb) + rDt * puu(:,:,jk,Krhs) ) * umask(:,:,jk) 110 pvv(:,:,jk,Kaa) = ( pvv(:,:,jk,Kbb) + rDt * pvv(:,:,jk,Krhs) ) * vmask(:,:,jk) 116 111 END DO 117 112 ELSE ! applied on thickness weighted velocity 118 113 DO jk = 1, jpkm1 119 114 puu(:,:,jk,Kaa) = ( e3u(:,:,jk,Kbb) * puu(:,:,jk,Kbb) & 120 & + r 2dt * e3u(:,:,jk,Kmm) * puu(:,:,jk,Krhs) ) / e3u(:,:,jk,Kaa) * umask(:,:,jk)115 & + rDt * e3u(:,:,jk,Kmm) * puu(:,:,jk,Krhs) ) / e3u(:,:,jk,Kaa) * umask(:,:,jk) 121 116 pvv(:,:,jk,Kaa) = ( e3v(:,:,jk,Kbb) * pvv(:,:,jk,Kbb) & 122 & + r 2dt * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Krhs) ) / e3v(:,:,jk,Kaa) * vmask(:,:,jk)117 & + rDt * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Krhs) ) / e3v(:,:,jk,Kaa) * vmask(:,:,jk) 123 118 END DO 124 119 ENDIF … … 138 133 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm) + r_vvl * e3u(ji,jj,iku,Kaa) 139 134 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) + r_vvl * e3v(ji,jj,ikv,Kaa) 140 puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + r 2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua141 pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + r 2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va135 puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + rDt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 136 pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 142 137 END_2D 143 138 IF( ln_isfcav ) THEN ! Ocean cavities (ISF) … … 147 142 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm) + r_vvl * e3u(ji,jj,iku,Kaa) 148 143 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) + r_vvl * e3v(ji,jj,ikv,Kaa) 149 puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + r 2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua150 pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + r 2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va144 puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + rDt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 145 pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 151 146 END_2D 152 147 END IF … … 156 151 ! 157 152 ! !* Matrix construction 158 zdt = r 2dt * 0.5153 zdt = rDt * 0.5 159 154 IF( ln_zad_Aimp ) THEN !! 160 155 SELECT CASE( nldf_dyn ) … … 232 227 iku = mbku(ji,jj) ! ocean bottom level at u- and v-points 233 228 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm) + r_vvl * e3u(ji,jj,iku,Kaa) ! after scale factor at T-point 234 zwd(ji,jj,iku) = zwd(ji,jj,iku) - r 2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / ze3ua229 zwd(ji,jj,iku) = zwd(ji,jj,iku) - rDt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / ze3ua 235 230 END_2D 236 231 IF ( ln_isfcav ) THEN ! top friction (always implicit) … … 239 234 iku = miku(ji,jj) ! ocean top level at u- and v-points 240 235 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm) + r_vvl * e3u(ji,jj,iku,Kaa) ! after scale factor at T-point 241 zwd(ji,jj,iku) = zwd(ji,jj,iku) - r 2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / ze3ua236 zwd(ji,jj,iku) = zwd(ji,jj,iku) - rDt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / ze3ua 242 237 END_2D 243 238 END IF … … 265 260 DO_2D_00_00 266 261 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,1,Kmm) + r_vvl * e3u(ji,jj,1,Kaa) 267 puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + r 2dt * 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) ) &268 & / ( ze3ua * r au0 ) * umask(ji,jj,1)262 puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + rDt * 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) ) & 263 & / ( ze3ua * rho0 ) * umask(ji,jj,1) 269 264 END_2D 270 265 DO_3D_00_00( 2, jpkm1 ) … … 282 277 ! 283 278 ! !* Matrix construction 284 zdt = r 2dt * 0.5279 zdt = rDt * 0.5 285 280 IF( ln_zad_Aimp ) THEN !! 286 281 SELECT CASE( nldf_dyn ) … … 357 352 ikv = mbkv(ji,jj) ! (deepest ocean u- and v-points) 358 353 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) + r_vvl * e3v(ji,jj,ikv,Kaa) ! after scale factor at T-point 359 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r 2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / ze3va354 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / ze3va 360 355 END_2D 361 356 IF ( ln_isfcav ) THEN … … 363 358 ikv = mikv(ji,jj) ! (first wet ocean u- and v-points) 364 359 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) + r_vvl * e3v(ji,jj,ikv,Kaa) ! after scale factor at T-point 365 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r 2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va360 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - rDt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va 366 361 END_2D 367 362 ENDIF … … 389 384 DO_2D_00_00 390 385 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,1,Kmm) + r_vvl * e3v(ji,jj,1,Kaa) 391 pvv(ji,jj,1,Kaa) = pvv(ji,jj,1,Kaa) + r 2dt * 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) ) &392 & / ( ze3va * r au0 ) * vmask(ji,jj,1)386 pvv(ji,jj,1,Kaa) = pvv(ji,jj,1,Kaa) + rDt * 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) ) & 387 & / ( ze3va * rho0 ) * vmask(ji,jj,1) 393 388 END_2D 394 389 DO_3D_00_00( 2, jpkm1 ) … … 404 399 ! 405 400 IF( l_trddyn ) THEN ! save the vertical diffusive trends for further diagnostics 406 ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) / r 2dt - ztrdu(:,:,:)407 ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) / r 2dt - ztrdv(:,:,:)401 ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) / rDt - ztrdu(:,:,:) 402 ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) / rDt - ztrdv(:,:,:) 408 403 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt, Kmm ) 409 404 DEALLOCATE( ztrdu, ztrdv ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/sshwzv.F90
r12377 r12495 75 75 REAL(wp), DIMENSION(jpi,jpj,jpt), INTENT(inout) :: pssh ! sea-surface height 76 76 ! 77 INTEGER :: jk ! dummy loop indice78 REAL(wp) :: z 2dt, zcoef ! local scalars77 INTEGER :: jk ! dummy loop index 78 REAL(wp) :: zcoef ! local scalar 79 79 REAL(wp), DIMENSION(jpi,jpj) :: zhdiv ! 2D workspace 80 80 !!---------------------------------------------------------------------- … … 88 88 ENDIF 89 89 ! 90 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog) 91 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 92 zcoef = 0.5_wp * r1_rau0 90 zcoef = 0.5_wp * r1_rho0 93 91 94 92 ! !------------------------------! … … 96 94 ! !------------------------------! 97 95 IF(ln_wd_il) THEN 98 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), z2dt, Kmm, uu, vv )96 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), rDt, Kmm, uu, vv ) 99 97 ENDIF 100 98 … … 109 107 ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 110 108 ! 111 pssh(:,:,Kaa) = ( pssh(:,:,Kbb) - z2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:)109 pssh(:,:,Kaa) = ( pssh(:,:,Kbb) - rDt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 112 110 ! 113 111 #if defined key_agrif … … 152 150 ! 153 151 INTEGER :: ji, jj, jk ! dummy loop indices 154 REAL(wp) :: z1_2dt ! local scalars155 152 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zhdiv 156 153 !!---------------------------------------------------------------------- … … 168 165 ! ! Now Vertical Velocity ! 169 166 ! !------------------------------! 170 z1_2dt = 1. / ( 2. * rdt ) ! set time step size (Euler/Leapfrog)171 IF( neuler == 0 .AND. kt == nit000 ) z1_2dt = 1. / rdt172 167 ! 173 168 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde and layer cases … … 187 182 ! computation of w 188 183 pww(:,:,jk) = pww(:,:,jk+1) - ( e3t(:,:,jk,Kmm) * hdiv(:,:,jk) + zhdiv(:,:,jk) & 189 & + z1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk)184 & + r1_Dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk) 190 185 END DO 191 186 ! IF( ln_vvl_layer ) pww(:,:,:) = 0.e0 … … 195 190 ! computation of w 196 191 pww(:,:,jk) = pww(:,:,jk+1) - ( e3t(:,:,jk,Kmm) * hdiv(:,:,jk) & 197 & + z1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk)192 & + r1_Dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk) 198 193 END DO 199 194 ENDIF … … 227 222 !! ** Method : - apply Asselin time fiter to now ssh (excluding the forcing 228 223 !! from the filter, see Leclair and Madec 2010) and swap : 229 !! pssh(:,:,Kmm) = pssh(:,:,Kaa) + atfp * ( pssh(:,:,Kbb) -2 pssh(:,:,Kmm) + pssh(:,:,Kaa) )230 !! - atfp * rdt * ( emp_b - emp ) / rau0224 !! pssh(:,:,Kmm) = pssh(:,:,Kaa) + rn_atfp * ( pssh(:,:,Kbb) -2 pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 225 !! - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0 231 226 !! 232 227 !! ** action : - pssh(:,:,Kmm) time filtered … … 249 244 ENDIF 250 245 ! !== Euler time-stepping: no filter, just swap ==! 251 IF ( .NOT.( neuler == 0 .AND. kt == nit000) ) THEN ! Only do time filtering for leapfrog timesteps246 IF ( .NOT.( l_1st_euler ) ) THEN ! Only do time filtering for leapfrog timesteps 252 247 ! ! filtered "now" field 253 pssh(:,:,Kmm) = pssh(:,:,Kmm) + atfp * ( pssh(:,:,Kbb) - 2 * pssh(:,:,Kmm) + pssh(:,:,Kaa) )248 pssh(:,:,Kmm) = pssh(:,:,Kmm) + rn_atfp * ( pssh(:,:,Kbb) - 2 * pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 254 249 IF( .NOT.ln_linssh ) THEN ! "now" <-- with forcing removed 255 zcoef = atfp * rdt * r1_rau0250 zcoef = rn_atfp * rn_Dt * r1_rho0 256 251 pssh(:,:,Kmm) = pssh(:,:,Kmm) - zcoef * ( emp_b(:,:) - emp (:,:) & 257 252 & - rnf_b(:,:) + rnf (:,:) & … … 260 255 261 256 ! ice sheet coupling 262 IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) pssh(:,:,Kbb) = pssh(:,:,Kbb) - atfp * rdt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:)257 IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) pssh(:,:,Kbb) = pssh(:,:,Kbb) - rn_atfp * rn_Dt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:) 263 258 264 259 ENDIF … … 311 306 DO_3D_00_00( 1, jpkm1 ) 312 307 z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) 313 ! 2*r dt and not r2dt (for restartability)314 Cu_adv(ji,jj,jk) = 2._wp * r dt * ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) ) &308 ! 2*rn_Dt and not rDt (for restartability) 309 Cu_adv(ji,jj,jk) = 2._wp * rn_Dt * ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) ) & 315 310 & + ( MAX( e2u(ji ,jj)*e3u(ji ,jj,jk,Kmm)*uu(ji ,jj,jk,Kmm) + un_td(ji ,jj,jk), 0._wp ) - & 316 311 & MIN( e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kmm)*uu(ji-1,jj,jk,Kmm) + un_td(ji-1,jj,jk), 0._wp ) ) & … … 324 319 DO_3D_00_00( 1, jpkm1 ) 325 320 z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) 326 ! 2*r dt and not r2dt (for restartability)327 Cu_adv(ji,jj,jk) = 2._wp * r dt * ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) ) &321 ! 2*rn_Dt and not rDt (for restartability) 322 Cu_adv(ji,jj,jk) = 2._wp * rn_Dt * ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) ) & 328 323 & + ( MAX( e2u(ji ,jj)*e3u(ji ,jj,jk,Kmm)*uu(ji ,jj,jk,Kmm), 0._wp ) - & 329 324 & MIN( e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kmm)*uu(ji-1,jj,jk,Kmm), 0._wp ) ) & -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/DYN/wet_dry.F90
r12377 r12495 270 270 271 271 272 SUBROUTINE wad_lmt_bt( zflxu, zflxv, sshn_e, zssh_frc, r dtbt)272 SUBROUTINE wad_lmt_bt( zflxu, zflxv, sshn_e, zssh_frc, rDt_e ) 273 273 !!---------------------------------------------------------------------- 274 274 !! *** ROUTINE wad_lmt *** … … 280 280 !! ** Action : - calculate flux limiter and W/D flag 281 281 !!---------------------------------------------------------------------- 282 REAL(wp) , INTENT(in ) :: r dtbt! ocean time-step index282 REAL(wp) , INTENT(in ) :: rDt_e ! ocean time-step index 283 283 REAL(wp), DIMENSION(:,:), INTENT(inout) :: zflxu, zflxv, sshn_e, zssh_frc 284 284 ! … … 299 299 zdepwd = 50._wp ! maximum depth that ocean cells can have W/D processes 300 300 ! 301 z2dt = r dtbt301 z2dt = rDt_e 302 302 ! 303 303 zflxp(:,:) = 0._wp -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/FLO/flo4rk.F90
r12377 r12495 130 130 ! computation of Runge-Kutta factor 131 131 DO jfl = 1, jpnfl 132 zrkxfl(jfl,jind) = r dt*zufl(jfl)133 zrkyfl(jfl,jind) = r dt*zvfl(jfl)134 zrkzfl(jfl,jind) = r dt*zwfl(jfl)132 zrkxfl(jfl,jind) = rn_Dt*zufl(jfl) 133 zrkyfl(jfl,jind) = rn_Dt*zvfl(jfl) 134 zrkzfl(jfl,jind) = rn_Dt*zwfl(jfl) 135 135 END DO 136 136 IF( jind /= 4 ) THEN -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/FLO/floblk.F90
r12377 r12495 233 233 ! test to know if the "age" of the float is not bigger than the 234 234 ! time step 235 IF( zagenewfl(jfl) > r dt ) THEN236 zttfl(jfl) = (r dt-zagefl(jfl)) / zvol237 zagenewfl(jfl) = r dt235 IF( zagenewfl(jfl) > rn_Dt ) THEN 236 zttfl(jfl) = (rn_Dt-zagefl(jfl)) / zvol 237 zagenewfl(jfl) = rn_Dt 238 238 ENDIF 239 239 … … 340 340 ifin = 1 341 341 DO jfl = 1, jpnfl 342 IF( zagefl(jfl) < r dt ) ifin = 0342 IF( zagefl(jfl) < rn_Dt ) ifin = 0 343 343 tpifl(jfl) = zgifl(jfl) + 0.5 344 344 tpjfl(jfl) = zgjfl(jfl) + 0.5 … … 347 347 ifin = 1 348 348 DO jfl = 1, jpnfl 349 IF( zagefl(jfl) < r dt ) ifin = 0349 IF( zagefl(jfl) < rn_Dt ) ifin = 0 350 350 tpifl(jfl) = zgifl(jfl) + 0.5 351 351 tpjfl(jfl) = zgjfl(jfl) + 0.5 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/FLO/flowri.F90
r12377 r12495 122 122 ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 123 123 zsal (jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 124 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*r au0124 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 125 125 126 126 ENDIF … … 142 142 ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 143 143 zsal(jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 144 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*r au0144 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 145 145 146 146 ENDIF … … 245 245 !------------------------------- 246 246 irec = INT( (kt-nn_it000+1)/nn_writefl ) +1 247 ztime = ( kt-nn_it000 + 1 ) * r dt247 ztime = ( kt-nn_it000 + 1 ) * rn_Dt 248 248 249 249 CALL flioputv( numflo , 'time_counter', ztime , start=(/irec/) ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ICB/icbini.F90
r12472 r12495 60 60 !! - setup either test icebergs or calving file 61 61 !!---------------------------------------------------------------------- 62 REAL(wp), INTENT(in) :: pdt ! iceberg time-step (r dt*nn_fsbc)62 REAL(wp), INTENT(in) :: pdt ! iceberg time-step (rn_Dt*nn_fsbc) 63 63 INTEGER , INTENT(in) :: kt ! time step number 64 64 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ICB/icbtrj.F90
r10068 r12495 74 74 75 75 ! compute end time step date 76 zfjulday = fjulday + r dt / rday * REAL( nitend - nit000 + 1 , wp)76 zfjulday = fjulday + rn_Dt / rday * REAL( nitend - nit000 + 1 , wp) 77 77 IF( ABS(zfjulday - REAL(NINT(zfjulday),wp)) < 0.1 / rday ) zfjulday = REAL(NINT(zfjulday),wp) ! avoid truncation error 78 78 CALL ju2ymds( zfjulday, iyear, imonth, iday, zsec ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/IOM/iom.F90
r12377 r12495 274 274 ! 275 275 ! set time step length 276 dtime%second = r dt276 dtime%second = rn_Dt 277 277 CALL xios_set_timestep( dtime ) 278 278 ! … … 410 410 IF(cdmdl == "OPA") THEN 411 411 !from restart.F90 412 CALL iom_set_rstw_var_active("r dt")412 CALL iom_set_rstw_var_active("rn_Dt") 413 413 IF ( .NOT. ln_diurnal_only ) THEN 414 414 CALL iom_set_rstw_var_active('ub' ) … … 448 448 449 449 i = 0 450 i = i + 1; fields(i)%vname="r dt"; fields(i)%grid="grid_scalar"450 i = i + 1; fields(i)%vname="rn_Dt"; fields(i)%grid="grid_scalar" 451 451 i = i + 1; fields(i)%vname="un"; fields(i)%grid="grid_N_3D" 452 452 i = i + 1; fields(i)%vname="ub"; fields(i)%grid="grid_N_3D" … … 2358 2358 idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') 2359 2359 DO WHILE ( idx /= 0 ) 2360 cldate = iom_sdate( fjulday - r dt / rday )2360 cldate = iom_sdate( fjulday - rn_Dt / rday ) 2361 2361 clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+11:LEN_TRIM(clname)) 2362 2362 idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') … … 2365 2365 idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') 2366 2366 DO WHILE ( idx /= 0 ) 2367 cldate = iom_sdate( fjulday - r dt / rday, ldfull = .TRUE. )2367 cldate = iom_sdate( fjulday - rn_Dt / rday, ldfull = .TRUE. ) 2368 2368 clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+15:LEN_TRIM(clname)) 2369 2369 idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') … … 2372 2372 idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') 2373 2373 DO WHILE ( idx /= 0 ) 2374 cldate = iom_sdate( fjulday + r dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE. )2374 cldate = iom_sdate( fjulday + rn_Dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE. ) 2375 2375 clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+9:LEN_TRIM(clname)) 2376 2376 idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') … … 2379 2379 idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') 2380 2380 DO WHILE ( idx /= 0 ) 2381 cldate = iom_sdate( fjulday + r dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE., ldfull = .TRUE. )2381 cldate = iom_sdate( fjulday + rn_Dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE., ldfull = .TRUE. ) 2382 2382 clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+13:LEN_TRIM(clname)) 2383 2383 idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/IOM/restart.F90
r12377 r12495 144 144 !!---------------------------------------------------------------------- 145 145 IF(lwxios) CALL iom_swap( cwxios_context ) 146 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , r dt , ldxios = lwxios) ! dynamics time step146 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rn_Dt , ldxios = lwxios) ! dynamics time step 147 147 CALL iom_delay_rst( 'WRITE', 'OCE', numrow ) ! save only ocean delayed global communication variables 148 148 … … 247 247 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN 248 248 CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 249 IF( zrdt /= rdt ) neuler = 0 249 IF( zrdt /= rn_Dt ) THEN 250 IF(lwp) WRITE( numout,*) 251 IF(lwp) WRITE( numout,*) 'rst_read: rdt not equal to the read one' 252 IF(lwp) WRITE( numout,*) 253 IF(lwp) WRITE( numout,*) ' ==>>> forced euler first time-step' 254 l_1st_euler = .TRUE. 255 ENDIF 250 256 ENDIF 251 257 … … 256 262 IF ( ln_diurnal_only ) THEN 257 263 IF(lwp) WRITE( numout, * ) & 258 & "rst_read:- ln_diurnal_only set, setting rhop=r au0"259 rhop = r au0264 & "rst_read:- ln_diurnal_only set, setting rhop=rho0" 265 rhop = rho0 260 266 CALL iom_get( numror, jpdom_autoglo, 'tn' , w3d, ldxios = lrxios ) 261 267 ts(:,:,1,jp_tem,Kmm) = w3d(:,:,1) … … 270 276 CALL iom_get( numror, jpdom_autoglo, 'sshb' ,ssh(:,: ,Kbb), ldxios = lrxios ) 271 277 ELSE 272 neuler = 0278 l_1st_euler = .TRUE. ! before field not found, forced euler 1st time-step 273 279 ENDIF 274 280 ! … … 284 290 ENDIF 285 291 ! 286 IF( neuler == 0 ) THEN ! Euler restart (neuler=0)292 IF( l_1st_euler ) THEN ! Euler restart 287 293 ts (:,:,:,:,Kbb) = ts (:,:,:,:,Kmm) ! all before fields set to now values 288 294 uu (:,:,: ,Kbb) = uu (:,:,: ,Kmm) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfcav.F90
r12343 r12495 24 24 USE oce , ONLY: ts ! ocean tracers 25 25 USE par_oce , ONLY: jpi,jpj ! ocean space and time domain 26 USE phycst , ONLY: grav,r au0,rau0_rcp,r1_rau0_rcp ! physical constants26 USE phycst , ONLY: grav,rho0,rho0_rcp,r1_rho0_rcp ! physical constants 27 27 USE eosbn2 , ONLY: ln_teos10 ! use ln_teos10 or not 28 28 ! … … 85 85 ! 86 86 ! initialisation 87 IF (TRIM(cn_gammablk) == 'vel_stab' ) zqoce_b (:,:) = ptsc(:,:,jp_tem) * r au0_rcp ! last time step total heat fluxes (to speed up convergence)87 IF (TRIM(cn_gammablk) == 'vel_stab' ) zqoce_b (:,:) = ptsc(:,:,jp_tem) * rho0_rcp ! last time step total heat fluxes (to speed up convergence) 88 88 ! 89 89 ! compute ice shelf melting … … 142 142 ! 143 143 ! set temperature content 144 ptsc(:,:,jp_tem) = - zqh(:,:) * r1_r au0_rcp144 ptsc(:,:,jp_tem) = - zqh(:,:) * r1_rho0_rcp 145 145 ! 146 146 ! write restart variables (qoceisf, qhcisf, fwfisf for now and before) … … 215 215 risf_lamb1 =-0.0564_wp 216 216 risf_lamb2 = 0.0773_wp 217 risf_lamb3 =-7.8633e-8 * grav * r au0217 risf_lamb3 =-7.8633e-8 * grav * rho0 218 218 ELSE ! linearisation from table 4 (Asay-Davis et al., 2015) 219 219 risf_lamb1 =-0.0573_wp 220 220 risf_lamb2 = 0.0832_wp 221 risf_lamb3 =-7.5300e-8 * grav * r au0221 risf_lamb3 =-7.5300e-8 * grav * rho0 222 222 ENDIF 223 223 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfcavmlt.F90
r12340 r12495 17 17 18 18 USE dom_oce ! ocean space and time domain 19 USE phycst , ONLY: rcp, r au0, rau0_rcp ! physical constants19 USE phycst , ONLY: rcp, rho0, rho0_rcp ! physical constants 20 20 USE eosbn2 , ONLY: eos_fzp ! equation of state 21 21 … … 161 161 ! 162 162 ! compute ocean-ice heat flux and then derive fwf assuming that ocean heat flux equal latent heat 163 pqfwf(:,:) = - pgt(:,:) * r au0_rcp * zthd(:,:) / rLfusisf ! fresh water flux ( > 0 out )163 pqfwf(:,:) = - pgt(:,:) * rho0_rcp * zthd(:,:) / rLfusisf ! fresh water flux ( > 0 out ) 164 164 pqoce(:,:) = - pqfwf(:,:) * rLfusisf ! ocea-ice flux ( > 0 out ) 165 165 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux ( > 0 out ) … … 213 213 ! 214 214 ! compute coeficient to solve the 2nd order equation 215 zeps1 = r au0_rcp * pgt(ji,jj)216 zeps2 = rLfusisf * r au0 * pgs(ji,jj)215 zeps1 = rho0_rcp * pgt(ji,jj) 216 zeps2 = rLfusisf * rho0 * pgs(ji,jj) 217 217 zeps3 = rhoisf * rcpisf * rkappa / MAX(risfdep(ji,jj),zeps) 218 218 zeps4 = risf_lamb2 + risf_lamb3 * risfdep(ji,jj) … … 238 238 ! 239 239 ! compute the upward water and heat flux (eq. 24 and eq. 26) 240 pqfwf(ji,jj) = r au0 * pgs(ji,jj) * ( zsfrz - pstbl(ji,jj) ) / MAX(zsfrz,zeps) ! fresh water flux (> 0 out)241 pqoce(ji,jj) = r au0_rcp * pgt(ji,jj) * zthd (ji,jj) ! ocean-ice heat flux (> 0 out)240 pqfwf(ji,jj) = rho0 * pgs(ji,jj) * ( zsfrz - pstbl(ji,jj) ) / MAX(zsfrz,zeps) ! fresh water flux (> 0 out) 241 pqoce(ji,jj) = rho0_rcp * pgt(ji,jj) * zthd (ji,jj) ! ocean-ice heat flux (> 0 out) 242 242 pqhc (ji,jj) = rcp * pqfwf(ji,jj) * ztfrz(ji,jj) ! heat content flux (> 0 out) 243 243 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfcpl.F90
r12353 r12495 68 68 ! 69 69 ! start on an euler time step 70 neuler = 070 l_1st_euler = .TRUE. 71 71 ! 72 72 ! allocation and initialisation to 0 … … 502 502 ! compute run length 503 503 nstp_iscpl = nitend - nit000 + 1 504 rdt_iscpl = nstp_iscpl * rn_ rdt504 rdt_iscpl = nstp_iscpl * rn_Dt 505 505 z1_rdtiscpl = 1._wp / rdt_iscpl 506 506 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfdynatf.F90
r12372 r12495 13 13 USE isf_oce 14 14 15 USE phycst , ONLY: r1_r au0 ! physical constant15 USE phycst , ONLY: r1_rho0 ! physical constant 16 16 USE dom_oce, ONLY: tmask, ssmask, ht, e3t, r1_e1e2t ! time and space domain 17 17 … … 39 39 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time filtered scale factor to be corrected 40 40 ! 41 REAL(wp) , INTENT(in ) :: pcoef ! atfp * rdt * r1_rau041 REAL(wp) , INTENT(in ) :: pcoef ! rn_atfp * rn_Dt * r1_rho0 42 42 !!-------------------------------------------------------------------- 43 43 INTEGER :: jk ! loop index … … 70 70 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfrac, phtbl ! fraction of bottom cell included in tbl, tbl thickness 71 71 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfwf , pfwf_b ! now/before fwf 72 REAL(wp), INTENT(in ) :: pcoef ! atfp * rdt * r1_rau072 REAL(wp), INTENT(in ) :: pcoef ! rn_atfp * rn_Dt * r1_rho0 73 73 !!---------------------------------------------------------------------- 74 74 INTEGER :: ji,jj,jk … … 77 77 ! 78 78 ! compute fwf conservation correction 79 zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_r au079 zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_rho0 80 80 ! 81 81 ! add the increment -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfhdiv.F90
r12340 r12495 16 16 17 17 USE dom_oce ! time and space domain 18 USE phycst , ONLY: r1_r au0 ! physical constant18 USE phycst , ONLY: r1_rho0 ! physical constant 19 19 USE in_out_manager ! 20 20 … … 96 96 ! 97 97 ! compute integrated divergence correction 98 zhdiv(:,:) = 0.5_wp * ( pfwf(:,:) + pfwf_b(:,:) ) * r1_r au0 / phtbl(:,:)98 zhdiv(:,:) = 0.5_wp * ( pfwf(:,:) + pfwf_b(:,:) ) * r1_rho0 / phtbl(:,:) 99 99 ! 100 100 ! update divergence at each level affected by ice shelf top boundary layer -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfpar.F90
r12077 r12495 24 24 USE dom_oce , ONLY: bathy ! ocean space and time domain 25 25 USE par_oce , ONLY: jpi,jpj ! ocean space and time domain 26 USE phycst , ONLY: r1_r au0_rcp ! physical constants26 USE phycst , ONLY: r1_rho0_rcp ! physical constants 27 27 ! 28 28 USE in_out_manager ! I/O manager … … 88 88 ! 89 89 ! set temperature content 90 ptsc(:,:,jp_tem) = zqh(:,:) * r1_r au0_rcp90 ptsc(:,:,jp_tem) = zqh(:,:) * r1_rho0_rcp 91 91 ! 92 92 ! write restart variables (qoceisf, qhcisf, fwfisf for now and before) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ISF/isfparmlt.F90
r12077 r12495 13 13 USE dom_oce ! ocean space and time domain 14 14 USE oce , ONLY: ts ! ocean dynamics and tracers 15 USE phycst , ONLY: rcp, r au0 ! physical constants15 USE phycst , ONLY: rcp, rho0 ! physical constants 16 16 USE eosbn2 , ONLY: eos_fzp ! equation of state 17 17 … … 148 148 ! 149 149 ! 2. ------------Net heat flux and fresh water flux due to the ice shelf 150 pqoce(:,:) = r au0 * rcp * rn_gammat0 * risfLeff(:,:) * e1t(:,:) * ( ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:)150 pqoce(:,:) = rho0 * rcp * rn_gammat0 * risfLeff(:,:) * e1t(:,:) * ( ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:) 151 151 pqfwf(:,:) = - pqoce(:,:) / rLfusisf ! derived from the latent heat flux 152 152 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/LDF/ldfdyn.F90
r12377 r12495 407 407 zcmsmag = (rn_csmc/rpi)**2 ! (C_smag/pi)^2 408 408 zstabf_lo = rn_minfac * rn_minfac / ( 2._wp * 12._wp * 12._wp * zcmsmag ) ! lower limit stability factor scaling 409 zstabf_up = rn_maxfac / ( 4._wp * zcmsmag * 2._wp * r dt ) ! upper limit stability factor scaling409 zstabf_up = rn_maxfac / ( 4._wp * zcmsmag * 2._wp * rn_Dt ) ! upper limit stability factor scaling 410 410 IF( ln_dynldf_blp ) zstabf_lo = ( 16._wp / 9._wp ) * zstabf_lo ! provide |U|L^3/12 lower limit instead 411 411 ! ! of |U|L^3/16 in blp case -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/LDF/ldftra.F90
r12377 r12495 820 820 ! 821 821 IF( iom_use('weiv_masstr') ) THEN ! vertical mass transport & its square value 822 zw2d(:,:) = r au0 * e1e2t(:,:)822 zw2d(:,:) = rho0 * e1e2t(:,:) 823 823 DO jk = 1, jpk 824 824 zw3d(:,:,jk) = zw3d(:,:,jk) * zw2d(:,:) … … 830 830 zw3d(:,:,:) = 0.e0 831 831 DO jk = 1, jpkm1 832 zw3d(:,:,jk) = r au0 * ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) )832 zw3d(:,:,jk) = rho0 * ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) 833 833 END DO 834 834 CALL iom_put( "ueiv_masstr", zw3d ) ! mass transport in i-direction 835 835 ENDIF 836 836 ! 837 zztmp = 0.5_wp * r au0 * rcp837 zztmp = 0.5_wp * rho0 * rcp 838 838 IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 839 839 zw2d(:,:) = 0._wp … … 853 853 zw3d(:,:,:) = 0.e0 854 854 DO jk = 1, jpkm1 855 zw3d(:,:,jk) = r au0 * ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) )855 zw3d(:,:,jk) = rho0 * ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) 856 856 END DO 857 857 CALL iom_put( "veiv_masstr", zw3d ) ! mass transport in i-direction -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/OBS/diaobs.F90
r12377 r12495 539 539 ENDIF 540 540 541 idaystp = NINT( rday / r dt )541 idaystp = NINT( rday / rn_Dt ) 542 542 543 543 !----------------------------------------------------------------------- … … 774 774 & rday 775 775 USE dom_oce, ONLY : & ! Ocean space and time domain variables 776 & r dt776 & rn_Dt 777 777 778 778 IMPLICIT NONE … … 805 805 !! Compute number of days + number of hours + min since initial time 806 806 !!---------------------------------------------------------------------- 807 zdayfrc = kstp * r dt / rday807 zdayfrc = kstp * rn_Dt / rday 808 808 zdayfrc = zdayfrc - aint(zdayfrc) 809 809 imin = imin + int( zdayfrc * 24 * 60 ) … … 816 816 iday=iday+1 817 817 END DO 818 iday = iday + kstp * r dt / rday818 iday = iday + kstp * rn_Dt / rday 819 819 820 820 !----------------------------------------------------------------------- -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/OBS/obs_prep.F90
r12377 r12495 613 613 !! * Modules used 614 614 USE dom_oce, ONLY : & ! Geographical information 615 & r dt615 & rn_Dt 616 616 USE phycst, ONLY : & ! Physical constants 617 617 & rday, & … … 662 662 663 663 ! Intialize the number of time steps per day 664 idaystp = NINT( rday / r dt )664 idaystp = NINT( rday / rn_Dt ) 665 665 666 666 !--------------------------------------------------------------------- … … 732 732 733 733 ! Add in the number of time steps to the observation minute 734 zminstp = rmmss / r dt734 zminstp = rmmss / rn_Dt 735 735 zhoustp = rhhmm * zminstp 736 736 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/fldread.F90
r12377 r12495 172 172 ! Note that all varibles starting by nsec_* are shifted time by +1/2 time step to be centrered 173 173 IF( PRESENT(kit) ) THEN ! ignore kn_fsbc in this case 174 isecsbc = nsec_year + nsec1jan000 + NINT( ( REAL( kit,wp) + zt_offset ) * r dt / REAL(nn_baro,wp) )174 isecsbc = nsec_year + nsec1jan000 + NINT( ( REAL( kit,wp) + zt_offset ) * rn_Dt / REAL(nn_e,wp) ) 175 175 ELSE ! middle of sbc time step 176 176 ! note: we use kn_fsbc-1 because nsec_year is defined at the middle of the current time step 177 isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * r dt )177 isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * rn_Dt ) 178 178 ENDIF 179 179 imf = SIZE( sd ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcapr.F90
r12377 r12495 36 36 37 37 REAL(wp) :: tarea ! whole domain mean masked ocean surface 38 REAL(wp) :: r1_grau ! = 1.e0 / (grav * r au0)38 REAL(wp) :: r1_grau ! = 1.e0 / (grav * rho0) 39 39 40 40 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_apr ! structure of input fields (file informations, fields read) … … 98 98 ENDIF 99 99 ! 100 r1_grau = 1.e0 / (grav * r au0) !* constant for optimization100 r1_grau = 1.e0 / (grav * rho0) !* constant for optimization 101 101 ! 102 102 ! !* control check -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcblk.F90
r12459 r12495 278 278 ENDIF 279 279 ! 280 IF( sf(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * sf(jfpr)%freqh), nn_fsbc * NINT(r dt) ) /= 0 ) &281 & CALL ctl_warn( 'sbc_blk_init: sbcmod timestep r dt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.', &282 & ' This is not ideal. You should consider changing either r dt or nn_fsbc value...' )280 IF( sf(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * sf(jfpr)%freqh), nn_fsbc * NINT(rn_Dt) ) /= 0 ) & 281 & CALL ctl_warn( 'sbc_blk_init: sbcmod timestep rn_Dt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.', & 282 & ' This is not ideal. You should consider changing either rn_Dt or nn_fsbc value...' ) 283 283 ENDIF 284 284 END DO -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcblk_skin_coare.F90
r12377 r12495 199 199 ! Okay test on updated absorbed flux: 200 200 !#LB: remove??? has a strong influence !!! 201 IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*r dt <= 0._wp) ) THEN201 IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*rn_Dt <= 0._wp) ) THEN 202 202 l_exit = .TRUE. 203 203 l_destroy_wl = .TRUE. … … 211 211 ! 2/ Regardless of WL formed (dT==0 or dT>0), we are in the process to initiate one or warm further it ! 212 212 213 ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*r dt ! updated momentum integral213 ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rn_Dt ! updated momentum integral 214 214 !PRINT *, '#LBD: updated value for Tac=', REAL(ztac,4) 215 215 … … 218 218 DO jl = 1, 5 219 219 zQabs = frac_solar_abs(zHwl)*pQsw(ji,jj) + pQnsol(ji,jj) 220 zqac = Qnt_ac(ji,jj) + zQabs*r dt ! updated heat absorbed220 zqac = Qnt_ac(ji,jj) + zQabs*rn_Dt ! updated heat absorbed 221 221 IF( zqac <= 0._wp ) EXIT 222 222 zHwl = MAX( MIN( Hwl_max , zcd1*ztac/SQRT(zqac)) , 0.1_wp ) ! Warm-layer depth -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcblk_skin_ecmwf.F90
r12377 r12495 214 214 zcst2 = zcst1 / ( 5._wp*zHwl*zusw2 ) !OR: zcst2 = zcst1*rNuwl0 / ( 5._wp*zHwl*zusw2 ) ??? 215 215 216 zcst0 = r dt * (rNuwl0 + 1._wp) / zHwl216 zcst0 = rn_Dt * (rNuwl0 + 1._wp) / zHwl 217 217 218 218 ZA = zcst0 * zQabs / ( rNuwl0 * zRhoCp_w ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbccpl.F90
r12377 r12495 193 193 194 194 REAL(wp) :: rpref = 101000._wp ! reference atmospheric pressure[N/m2] 195 REAL(wp) :: r1_grau ! = 1.e0 / (grav * r au0)195 REAL(wp) :: r1_grau ! = 1.e0 / (grav * rho0) 196 196 197 197 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: nrcvinfo ! OASIS info argument … … 1123 1123 ! ! Receive all the atmos. fields (including ice information) 1124 1124 ! ! ======================================================= ! 1125 isec = ( kt - nit000 ) * NINT( r dt ) ! date of exchanges1125 isec = ( kt - nit000 ) * NINT( rn_Dt ) ! date of exchanges 1126 1126 DO jn = 1, jprcv ! received fields sent by the atmosphere 1127 1127 IF( srcv(jn)%laction ) CALL cpl_rcv( jn, isec, frcv(jn)%z3, xcplmask(:,:,1:nn_cplmodel), nrcvinfo(jn) ) … … 1250 1250 IF( kt /= nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) !* Swap of ssh_ib fields 1251 1251 1252 r1_grau = 1.e0 / (grav * r au0) !* constant for optimization1252 r1_grau = 1.e0 / (grav * rho0) !* constant for optimization 1253 1253 ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau ! equivalent ssh (inverse barometer) 1254 1254 apr (:,:) = frcv(jpr_mslp)%z3(:,:,1) !atmospheric pressure … … 2100 2100 !!---------------------------------------------------------------------- 2101 2101 ! 2102 isec = ( kt - nit000 ) * NINT( r dt ) ! date of exchanges2102 isec = ( kt - nit000 ) * NINT( rn_Dt ) ! date of exchanges 2103 2103 2104 2104 zfr_l(:,:) = 1.- fr_i(:,:) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcdcy.F90
r12377 r12495 86 86 ! -------------- 87 87 ! When are we during the day (from 0 to 1) 88 zlo = ( REAL(nsec_day, wp) - 0.5_wp * r dt ) / rday89 zup = zlo + ( REAL(nn_fsbc, wp) * r dt ) / rday88 zlo = ( REAL(nsec_day, wp) - 0.5_wp * rn_Dt ) / rday 89 zup = zlo + ( REAL(nn_fsbc, wp) * rn_Dt ) / rday 90 90 ! 91 91 IF( nday_qsr == -1 ) THEN ! first time step only … … 251 251 END_2D 252 252 ! 253 ztmp = rday / ( r dt * REAL(nn_fsbc, wp) )253 ztmp = rday / ( rn_Dt * REAL(nn_fsbc, wp) ) 254 254 rscal(:,:) = rscal(:,:) * ztmp 255 255 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcfwb.F90
r12377 r12495 126 126 ENDIF 127 127 ! ! Update fwfold if new year start 128 ikty = 365 * 86400 / r dt !!bug use of 365 days leap year or 360d year !!!!!!!128 ikty = 365 * 86400 / rn_Dt !!bug use of 365 days leap year or 360d year !!!!!!! 129 129 IF( MOD( kt, ikty ) == 0 ) THEN 130 130 a_fwb_b = a_fwb ! mean sea level taking into account the ice+snow 131 131 ! sum over the global domain 132 a_fwb = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_r au0 ) )132 a_fwb = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rho0 ) ) 133 133 a_fwb = a_fwb * 1.e+3 / ( area * rday * 365. ) ! convert in Kg/m3/s = mm/s 134 134 !!gm ! !!bug 365d year -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcice_cice.F90
r12377 r12495 13 13 USE dom_oce ! ocean space and time domain 14 14 USE domvvl 15 USE phycst, only : rcp, r au0, r1_rau0, rhos, rhoi15 USE phycst, only : rcp, rho0, r1_rho0, rhos, rhoi 16 16 USE in_out_manager ! I/O manager 17 17 USE iom, ONLY : iom_put,iom_use ! I/O manager library !!Joakim edit … … 228 228 IF( .NOT.ln_rstart ) THEN 229 229 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 230 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_r au0231 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_r au0230 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 231 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 232 232 233 233 !!gm This should be put elsewhere.... (same remark for limsbc) … … 417 417 ! Freezing/melting potential 418 418 ! Calculated over NEMO leapfrog timestep (hence 2*dt) 419 nfrzmlt(:,:) = r au0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt )419 nfrzmlt(:,:) = rho0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 420 420 421 421 ztmp(:,:) = nfrzmlt(:,:) … … 450 450 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 451 451 ! 452 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_r au0452 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rho0 453 453 ! 454 454 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcmod.F90
r12377 r12495 187 187 ! 188 188 IF( .NOT.ln_usr ) THEN ! the model calendar needs some specificities (except in user defined case) 189 IF( MOD( rday , r dt ) /= 0. ) CALL ctl_stop( 'the time step must devide the number of second of in a day' )189 IF( MOD( rday , rn_Dt ) /= 0. ) CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 190 190 IF( MOD( rday , 2. ) /= 0. ) CALL ctl_stop( 'the number of second of in a day must be an even number' ) 191 IF( MOD( r dt , 2. ) /= 0. ) CALL ctl_stop( 'the time step (in second) must be an even number' )191 IF( MOD( rn_Dt , 2. ) /= 0. ) CALL ctl_stop( 'the time step (in second) must be an even number' ) 192 192 ENDIF 193 193 ! !** check option consistency … … 309 309 ! SAS time-step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 310 310 IF( nn_components /= jp_iam_nemo ) THEN 311 IF( nn_components == jp_iam_opa ) nn_fsbc = cpl_freq('O_SFLX') / NINT(r dt)312 IF( nn_components == jp_iam_sas ) nn_fsbc = cpl_freq('I_SFLX') / NINT(r dt)311 IF( nn_components == jp_iam_opa ) nn_fsbc = cpl_freq('O_SFLX') / NINT(rn_Dt) 312 IF( nn_components == jp_iam_sas ) nn_fsbc = cpl_freq('I_SFLX') / NINT(rn_Dt) 313 313 ! 314 314 IF(lwp)THEN … … 331 331 ENDIF 332 332 ! 333 IF( MOD( rday, REAL(nn_fsbc, wp) * r dt ) /= 0 ) &333 IF( MOD( rday, REAL(nn_fsbc, wp) * rn_Dt ) /= 0 ) & 334 334 & CALL ctl_warn( 'sbc_init : nn_fsbc is NOT a multiple of the number of time steps in a day' ) 335 335 ! 336 IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(r dt) ) < 8 ) &336 IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rn_Dt) ) < 8 ) & 337 337 & CALL ctl_warn( 'sbc_init : diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 338 338 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/SBC/sbcrnf.F90
r12377 r12495 137 137 ! ! set temperature & salinity content of runoffs 138 138 IF( ln_rnf_tem ) THEN ! use runoffs temperature data 139 rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_r au0139 rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 140 140 CALL eos_fzp( sss_m(:,:), ztfrz(:,:) ) 141 141 WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999._wp ) ! if missing data value use SST as runoffs temperature 142 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_r au0142 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rho0 143 143 END WHERE 144 144 ELSE ! use SST as runoffs temperature 145 145 !CEOD River is fresh water so must at least be 0 unless we consider ice 146 rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_r au0146 rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_rho0 147 147 ENDIF 148 148 ! ! use runoffs salinity data 149 IF( ln_rnf_sal ) rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_r au0149 IF( ln_rnf_sal ) rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 150 150 ! ! else use S=0 for runoffs (done one for all in the init) 151 151 CALL iom_put( 'runoffs' , rnf(:,:) ) ! output runoff mass flux 152 IF( iom_use('hflx_rnf_cea') ) CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * r au0 * rcp ) ! output runoff sensible heat (W/m2)152 IF( iom_use('hflx_rnf_cea') ) CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rho0 * rcp ) ! output runoff sensible heat (W/m2) 153 153 ENDIF 154 154 ! … … 210 210 DO_2D_11_11 211 211 DO jk = 1, nk_rnf(ji,jj) 212 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_r au0 / h_rnf(ji,jj)212 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 213 213 END DO 214 214 END_2D … … 221 221 ! ! apply the runoff input flow 222 222 DO jk = 1, nk_rnf(ji,jj) 223 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_r au0 / h_rnf(ji,jj)223 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 224 224 END DO 225 225 END_2D … … 227 227 ELSE !== runoff put only at the surface ==! 228 228 h_rnf (:,:) = e3t (:,:,1,Kmm) ! update h_rnf to be depth of top box 229 phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_r au0 / e3t(:,:,1,Kmm)229 phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rho0 / e3t(:,:,1,Kmm) 230 230 ENDIF 231 231 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TDE/tide_mod.F90
r12343 r12495 171 171 IF( ln_scal_load.AND.ln_read_load ) & 172 172 & CALL ctl_stop('Choose between ln_scal_load and ln_read_load') 173 IF( ln_tide_ramp.AND.((nitend-nit000+1)*r dt/rday < rn_tide_ramp_dt) ) &173 IF( ln_tide_ramp.AND.((nitend-nit000+1)*rn_Dt/rday < rn_tide_ramp_dt) ) & 174 174 & CALL ctl_stop('rn_tide_ramp_dt must be lower than run duration') 175 175 IF( ln_tide_ramp.AND.(rn_tide_ramp_dt<0.) ) & … … 424 424 !!---------------------------------------------------------------------- 425 425 426 IF( nsec_day == NINT(0.5_wp * r dt) .OR. kt == nit000 ) THEN ! start a new day426 IF( nsec_day == NINT(0.5_wp * rn_Dt) .OR. kt == nit000 ) THEN ! start a new day 427 427 ! 428 428 CALL tide_harmo(tide_components, tide_harmonics, ndt05) ! Update oscillation parameters of tidal components for start of current day … … 441 441 IF( ln_tide_pot ) CALL tide_init_potential 442 442 ! 443 rn_tide_ramp_t = (kt - nit000)*r dt ! Elapsed time in seconds443 rn_tide_ramp_t = (kt - nit000)*rn_Dt ! Elapsed time in seconds 444 444 ENDIF 445 445 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/eosbn2.F90
r12377 r12495 191 191 !! *** ROUTINE eos_insitu *** 192 192 !! 193 !! ** Purpose : Compute the in situ density (ratio rho/r au0) from193 !! ** Purpose : Compute the in situ density (ratio rho/rho0) from 194 194 !! potential temperature and salinity using an equation of state 195 195 !! selected in the nameos namelist 196 196 !! 197 !! ** Method : prd(t,s,z) = ( rho(t,s,z) - r au0 ) / rau0197 !! ** Method : prd(t,s,z) = ( rho(t,s,z) - rho0 ) / rho0 198 198 !! with prd in situ density anomaly no units 199 199 !! t TEOS10: CT or EOS80: PT Celsius … … 201 201 !! z depth meters 202 202 !! rho in situ density kg/m^3 203 !! r au0 reference density kg/m^3203 !! rho0 reference density kg/m^3 204 204 !! 205 205 !! ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). … … 210 210 !! 211 211 !! ln_seos : simplified equation of state 212 !! prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / r au0212 !! prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rho0 213 213 !! linear case function of T only: rn_alpha<>0, other coefficients = 0 214 214 !! linear eos function of T and S: rn_alpha and rn_beta<>0, other coefficients=0 … … 267 267 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 268 268 ! 269 prd(ji,jj,jk) = ( zn * r1_r au0 - 1._wp ) * ztm ! density anomaly (masked)269 prd(ji,jj,jk) = ( zn * r1_rho0 - 1._wp ) * ztm ! density anomaly (masked) 270 270 ! 271 271 END_3D … … 283 283 & - rn_nu * zt * zs 284 284 ! 285 prd(ji,jj,jk) = zn * r1_r au0 * ztm ! density anomaly (masked)285 prd(ji,jj,jk) = zn * r1_rho0 * ztm ! density anomaly (masked) 286 286 END_3D 287 287 ! … … 299 299 !! *** ROUTINE eos_insitu_pot *** 300 300 !! 301 !! ** Purpose : Compute the in situ density (ratio rho/r au0) and the301 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 302 302 !! potential volumic mass (Kg/m3) from potential temperature and 303 303 !! salinity fields using an equation of state selected in the … … 379 379 prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp) ! potential density referenced at the surface 380 380 ! 381 prd(ji,jj,jk) = prd(ji,jj,jk) + ( zn_sto(jsmp) * r1_r au0 - 1._wp ) ! density anomaly (masked)381 prd(ji,jj,jk) = prd(ji,jj,jk) + ( zn_sto(jsmp) * r1_rho0 - 1._wp ) ! density anomaly (masked) 382 382 END DO 383 383 prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos … … 419 419 prhop(ji,jj,jk) = zn0 * ztm ! potential density referenced at the surface 420 420 ! 421 prd(ji,jj,jk) = ( zn * r1_r au0 - 1._wp ) * ztm ! density anomaly (masked)421 prd(ji,jj,jk) = ( zn * r1_rho0 - 1._wp ) * ztm ! density anomaly (masked) 422 422 END_3D 423 423 ENDIF … … 434 434 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 435 435 & - rn_nu * zt * zs 436 prhop(ji,jj,jk) = ( r au0 + zn ) * ztm436 prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 437 437 ! ! density anomaly (masked) 438 438 zn = zn - ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zh 439 prd(ji,jj,jk) = zn * r1_r au0 * ztm439 prd(ji,jj,jk) = zn * r1_rho0 * ztm 440 440 ! 441 441 END_3D … … 454 454 !! *** ROUTINE eos_insitu_2d *** 455 455 !! 456 !! ** Purpose : Compute the in situ density (ratio rho/r au0) from456 !! ** Purpose : Compute the in situ density (ratio rho/rho0) from 457 457 !! potential temperature and salinity using an equation of state 458 458 !! selected in the nameos namelist. * 2D field case … … 508 508 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 509 509 ! 510 prd(ji,jj) = zn * r1_r au0 - 1._wp ! unmasked in situ density anomaly510 prd(ji,jj) = zn * r1_rho0 - 1._wp ! unmasked in situ density anomaly 511 511 ! 512 512 END_2D … … 524 524 & - rn_nu * zt * zs 525 525 ! 526 prd(ji,jj) = zn * r1_r au0 ! unmasked in situ density anomaly526 prd(ji,jj) = zn * r1_rho0 ! unmasked in situ density anomaly 527 527 ! 528 528 END_2D … … 588 588 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 589 589 ! 590 pab(ji,jj,jk,jp_tem) = zn * r1_r au0 * ztm590 pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm 591 591 ! 592 592 ! beta … … 609 609 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 610 610 ! 611 pab(ji,jj,jk,jp_sal) = zn / zs * r1_r au0 * ztm611 pab(ji,jj,jk,jp_sal) = zn / zs * r1_rho0 * ztm 612 612 ! 613 613 END_3D … … 622 622 ! 623 623 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 624 pab(ji,jj,jk,jp_tem) = zn * r1_r au0 * ztm ! alpha624 pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm ! alpha 625 625 ! 626 626 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 627 pab(ji,jj,jk,jp_sal) = zn * r1_r au0 * ztm ! beta627 pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm ! beta 628 628 ! 629 629 END_3D … … 694 694 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 695 695 ! 696 pab(ji,jj,jp_tem) = zn * r1_r au0696 pab(ji,jj,jp_tem) = zn * r1_rho0 697 697 ! 698 698 ! beta … … 715 715 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 716 716 ! 717 pab(ji,jj,jp_sal) = zn / zs * r1_r au0717 pab(ji,jj,jp_sal) = zn / zs * r1_rho0 718 718 ! 719 719 ! … … 729 729 ! 730 730 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 731 pab(ji,jj,jp_tem) = zn * r1_r au0 ! alpha731 pab(ji,jj,jp_tem) = zn * r1_rho0 ! alpha 732 732 ! 733 733 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 734 pab(ji,jj,jp_sal) = zn * r1_r au0 ! beta734 pab(ji,jj,jp_sal) = zn * r1_rho0 ! beta 735 735 ! 736 736 END_2D … … 799 799 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 800 800 ! 801 pab(jp_tem) = zn * r1_r au0801 pab(jp_tem) = zn * r1_rho0 802 802 ! 803 803 ! beta … … 820 820 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 821 821 ! 822 pab(jp_sal) = zn / zs * r1_r au0822 pab(jp_sal) = zn / zs * r1_rho0 823 823 ! 824 824 ! … … 831 831 ! 832 832 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 833 pab(jp_tem) = zn * r1_r au0 ! alpha833 pab(jp_tem) = zn * r1_rho0 ! alpha 834 834 ! 835 835 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 836 pab(jp_sal) = zn * r1_r au0 ! beta836 pab(jp_sal) = zn * r1_rho0 ! beta 837 837 ! 838 838 CASE DEFAULT … … 1052 1052 !! ** Method : PE is defined analytically as the vertical 1053 1053 !! primitive of EOS times -g integrated between 0 and z>0. 1054 !! pen is the nonlinear bsq-PE anomaly: pen = ( PE - r au0 gz ) / rau0 gz - rd1054 !! pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 1055 1055 !! = 1/z * /int_0^z rd dz - rd 1056 1056 !! where rd is the density anomaly (see eos_rhd function) 1057 1057 !! ab_pe are partial derivatives of PE anomaly with respect to T and S: 1058 !! ab_pe(1) = - 1/(r au0 gz) * dPE/dT + drd/dT = - d(pen)/dT1059 !! ab_pe(2) = 1/(r au0 gz) * dPE/dS + drd/dS = d(pen)/dS1058 !! ab_pe(1) = - 1/(rho0 gz) * dPE/dT + drd/dT = - d(pen)/dT 1059 !! ab_pe(2) = 1/(rho0 gz) * dPE/dS + drd/dS = d(pen)/dS 1060 1060 !! 1061 1061 !! ** Action : - pen : PE anomaly given at T-points … … 1103 1103 zn = ( zn2 * zh + zn1 ) * zh + zn0 1104 1104 ! 1105 ppen(ji,jj,jk) = zn * zh * r1_r au0 * ztm1105 ppen(ji,jj,jk) = zn * zh * r1_rho0 * ztm 1106 1106 ! 1107 1107 ! alphaPE non-linear anomaly … … 1118 1118 zn = ( zn2 * zh + zn1 ) * zh + zn0 1119 1119 ! 1120 pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_r au0 * ztm1120 pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 1121 1121 ! 1122 1122 ! betaPE non-linear anomaly … … 1133 1133 zn = ( zn2 * zh + zn1 ) * zh + zn0 1134 1134 ! 1135 pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_r au0 * ztm1135 pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 1136 1136 ! 1137 1137 END_3D … … 1144 1144 zh = gdept(ji,jj,jk,Kmm) ! depth in meters at t-point 1145 1145 ztm = tmask(ji,jj,jk) ! tmask 1146 zn = 0.5_wp * zh * r1_r au0 * ztm1146 zn = 0.5_wp * zh * r1_rho0 * ztm 1147 1147 ! ! Potential Energy 1148 1148 ppen(ji,jj,jk) = ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zn … … 1186 1186 IF(lwm) WRITE( numond, nameos ) 1187 1187 ! 1188 r au0 = 1026._wp !: volumic mass of reference [kg/m3]1188 rho0 = 1026._wp !: volumic mass of reference [kg/m3] 1189 1189 rcp = 3991.86795711963_wp !: heat capacity [J/K] 1190 1190 ! … … 1598 1598 WRITE(numout,*) ' ==>>> use of simplified eos: ' 1599 1599 WRITE(numout,*) ' rhd(dT=T-10,dS=S-35,Z) = [-a0*(1+lambda1/2*dT+mu1*Z)*dT ' 1600 WRITE(numout,*) ' + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / r au0'1600 WRITE(numout,*) ' + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rho0' 1601 1601 WRITE(numout,*) ' with the following coefficients :' 1602 1602 WRITE(numout,*) ' thermal exp. coef. rn_a0 = ', rn_a0 … … 1617 1617 END SELECT 1618 1618 ! 1619 r au0_rcp = rau0 * rcp1620 r1_r au0 = 1._wp / rau01619 rho0_rcp = rho0 * rcp 1620 r1_rho0 = 1._wp / rho0 1621 1621 r1_rcp = 1._wp / rcp 1622 r1_r au0_rcp = 1._wp / rau0_rcp1622 r1_rho0_rcp = 1._wp / rho0_rcp 1623 1623 ! 1624 1624 IF(lwp) THEN … … 1635 1635 IF(lwp) WRITE(numout,*) 1636 1636 IF(lwp) WRITE(numout,*) ' Associated physical constant' 1637 IF(lwp) WRITE(numout,*) ' volumic mass of reference r au0 = ', rau0 , ' kg/m^3'1638 IF(lwp) WRITE(numout,*) ' 1. / r au0 r1_rau0 = ', r1_rau0, ' m^3/kg'1637 IF(lwp) WRITE(numout,*) ' volumic mass of reference rho0 = ', rho0 , ' kg/m^3' 1638 IF(lwp) WRITE(numout,*) ' 1. / rho0 r1_rho0 = ', r1_rho0, ' m^3/kg' 1639 1639 IF(lwp) WRITE(numout,*) ' ocean specific heat rcp = ', rcp , ' J/Kelvin' 1640 IF(lwp) WRITE(numout,*) ' r au0 * rcp rau0_rcp = ', rau0_rcp1641 IF(lwp) WRITE(numout,*) ' 1. / ( r au0 * rcp ) r1_rau0_rcp = ', r1_rau0_rcp1640 IF(lwp) WRITE(numout,*) ' rho0 * rcp rho0_rcp = ', rho0_rcp 1641 IF(lwp) WRITE(numout,*) ' 1. / ( rho0 * rcp ) r1_rho0_rcp = ', r1_rho0_rcp 1642 1642 ! 1643 1643 END SUBROUTINE eos_init -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traadv.F90
r12377 r12495 92 92 IF( ln_timing ) CALL timing_start('tra_adv') 93 93 ! 94 ! ! set time step95 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler)96 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp * rdt ! at nit000 or nit000+1 (Leapfrog)97 ENDIF98 !99 94 ! !== effective transport ==! 100 95 zuu(:,:,jpk) = 0._wp … … 149 144 CALL tra_adv_cen ( kt, nit000, 'TRA', zuu, zvv, zww, Kmm, pts, jpts, Krhs, nn_cen_h, nn_cen_v ) 150 145 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order 151 CALL tra_adv_fct ( kt, nit000, 'TRA', r 2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v )146 CALL tra_adv_fct ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v ) 152 147 CASE ( np_MUS ) ! MUSCL 153 CALL tra_adv_mus ( kt, nit000, 'TRA', r 2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups )148 CALL tra_adv_mus ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups ) 154 149 CASE ( np_UBS ) ! UBS 155 CALL tra_adv_ubs ( kt, nit000, 'TRA', r 2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_ubs_v )150 CALL tra_adv_ubs ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_ubs_v ) 156 151 CASE ( np_QCK ) ! QUICKEST 157 CALL tra_adv_qck ( kt, nit000, 'TRA', r 2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs )152 CALL tra_adv_qck ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs ) 158 153 ! 159 154 END SELECT -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traadv_fct.F90
r12377 r12495 20 20 USE diaptr ! poleward transport diagnostics 21 21 USE diaar5 ! AR5 diagnostics 22 USE phycst , ONLY : r au0_rcp22 USE phycst , ONLY : rho0_rcp 23 23 USE zdf_oce , ONLY : ln_zad_Aimp 24 24 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traatf.F90
r12377 r12495 113 113 IF( ln_bdy ) CALL bdy_tra( kt, Kbb, pts, Kaa ) ! BDY open boundaries 114 114 115 ! set time step size (Euler/Leapfrog)116 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler)117 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp* rdt ! at nit000 or nit000+1 (Leapfrog)118 ENDIF119 120 115 ! trends computation initialisation 121 116 IF( l_trdtra ) THEN … … 128 123 ENDIF 129 124 ! total trend for the non-time-filtered variables. 130 zfact = 1.0 / r dt125 zfact = 1.0 / rn_Dt 131 126 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from pts(Kmm) terms 132 127 DO jk = 1, jpkm1 … … 144 139 ENDIF 145 140 146 IF( neuler == 0 .AND. kt == nit000) THEN ! Euler time-stepping141 IF( l_1st_euler ) THEN ! Euler time-stepping 147 142 ! 148 143 IF (l_trdtra .AND. .NOT. ln_linssh ) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl … … 156 151 ELSE ! Leap-Frog + Asselin filter time stepping 157 152 ! 158 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000, 'TRA', pts, jpts ) ! linear free surface159 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, r dt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface153 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000, 'TRA', pts, jpts ) ! linear free surface 154 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, rn_Dt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface 160 155 ENDIF 161 156 ! … … 167 162 ! 168 163 IF( l_trdtra .AND. ln_linssh ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 169 zfact = 1._wp / r 2dt164 zfact = 1._wp / rDt 170 165 DO jk = 1, jpkm1 171 166 ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * zfact … … 219 214 ztd = pt(ji,jj,jk,jn,Kaa) - 2._wp * ztn + pt(ji,jj,jk,jn,Kbb) ! time laplacian on tracers 220 215 ! 221 pt(ji,jj,jk,jn,Kmm) = ztn + atfp * ztd ! pt <-- filtered pt216 pt(ji,jj,jk,jn,Kmm) = ztn + rn_atfp * ztd ! pt <-- filtered pt 222 217 END_3D 223 218 ! … … 234 229 !! 235 230 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 236 !! pt(Kmm) = ( e3t(Kmm)*pt(Kmm) + atfp*[ e3t(Kbb)*pt(Kbb) - 2 e3t(Kmm)*pt(Kmm) + e3t_a*pt(Kaa) ] )237 !! /( e3t(Kmm) + atfp*[ e3t(Kbb) - 2 e3t(Kmm) + e3t(Kaa) ] )231 !! pt(Kmm) = ( e3t(Kmm)*pt(Kmm) + rn_atfp*[ e3t(Kbb)*pt(Kbb) - 2 e3t(Kmm)*pt(Kmm) + e3t_a*pt(Kaa) ] ) 232 !! /( e3t(Kmm) + rn_atfp*[ e3t(Kbb) - 2 e3t(Kmm) + e3t(Kaa) ] ) 238 233 !! 239 234 !! ** Action : - pt(Kmm) ready for the next time step … … 277 272 ENDIF 278 273 zfact = 1._wp / p2dt 279 zfact1 = atfp * p2dt280 zfact2 = zfact1 * r1_r au0274 zfact1 = rn_atfp * p2dt 275 zfact2 = zfact1 * r1_rho0 281 276 DO jn = 1, kjpt 282 277 DO_3D_00_00( 1, jpkm1 ) … … 292 287 ztc_d = ztc_a - 2. * ztc_n + ztc_b 293 288 ! 294 ze3t_f = ze3t_n + atfp * ze3t_d295 ztc_f = ztc_n + atfp * ztc_d289 ze3t_f = ze3t_n + rn_atfp * ze3t_d 290 ztc_f = ztc_n + rn_atfp * ztc_d 296 291 ! 297 292 ! Add asselin correction on scale factors: -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/trabbc.F90
r12377 r12495 66 66 !! ocean bottom can be computed once and is added to the temperature 67 67 !! trend juste above the bottom at each time step: 68 !! ta = ta + Qsf / (r au0 rcp e3T) for k= mbkt68 !! ta = ta + Qsf / (rho0 rcp e3T) for k= mbkt 69 69 !! Where Qsf is the geothermal heat flux. 70 70 !! … … 102 102 ENDIF 103 103 ! 104 CALL iom_put ( "hfgeou" , r au0_rcp * qgh_trd0(:,:) )104 CALL iom_put ( "hfgeou" , rho0_rcp * qgh_trd0(:,:) ) 105 105 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' bbc - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 106 106 ! … … 162 162 CASE ( 1 ) !* constant flux 163 163 IF(lwp) WRITE(numout,*) ' ==>>> constant heat flux = ', rn_geoflx_cst 164 qgh_trd0(:,:) = r1_r au0_rcp * rn_geoflx_cst164 qgh_trd0(:,:) = r1_rho0_rcp * rn_geoflx_cst 165 165 ! 166 166 CASE ( 2 ) !* variable geothermal heat flux : read the geothermal fluxes in mW/m2 … … 179 179 180 180 CALL fld_read( nit000, 1, sf_qgh ) ! Read qgh data 181 qgh_trd0(:,:) = r1_r au0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2181 qgh_trd0(:,:) = r1_rho0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 182 182 ! 183 183 CASE DEFAULT -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traldf_iso.F90
r12377 r12495 109 109 REAL(wp) :: zmsku, zahu_w, zabe1, zcof1, zcoef3 ! local scalars 110 110 REAL(wp) :: zmskv, zahv_w, zabe2, zcof2, zcoef4 ! - - 111 REAL(wp) :: zcoef0, ze3w_2, zsign , z2dt, z1_2dt! - -111 REAL(wp) :: zcoef0, ze3w_2, zsign ! - - 112 112 REAL(wp), DIMENSION(jpi,jpj) :: zdkt, zdk1t, z2d 113 113 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, zftu, zftv, ztfw … … 129 129 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 130 130 ! 131 ! ! set time step size (Euler/Leapfrog)132 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt ! at nit000 (Euler)133 ELSE ; z2dt = 2.* rdt ! (Leapfrog)134 ENDIF135 z1_2dt = 1._wp / z2dt136 131 ! 137 132 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 178 173 DO_3D_10_10( 2, jpkm1 ) 179 174 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 180 zcoef0 = z2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 )181 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt175 zcoef0 = rDt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) 176 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 182 177 END_3D 183 178 ENDIF -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traldf_triad.F90
r12377 r12495 86 86 INTEGER :: ip,jp,kp ! dummy loop indices 87 87 INTEGER :: ierr ! local integer 88 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 89 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 90 REAL(wp) :: zcoef0, ze3w_2, zsign , z2dt, z1_2dt! - -88 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 ! local scalars 89 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 90 REAL(wp) :: zcoef0, ze3w_2, zsign ! - - 91 91 ! 92 92 REAL(wp) :: zslope_skew, zslope_iso, zslope2, zbu, zbv … … 111 111 l_hst = .FALSE. 112 112 l_ptr = .FALSE. 113 IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) ) l_ptr = .TRUE. 114 IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 115 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 116 ! 117 ! ! set time step size (Euler/Leapfrog) 118 IF( neuler == 0 .AND. kt == kit000 ) THEN ; z2dt = rdt ! at nit000 (Euler) 119 ELSE ; z2dt = 2.* rdt ! (Leapfrog) 113 IF( cdtype == 'TRA' ) THEN 114 IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf') ) l_ptr = .TRUE. 115 IF( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 116 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) l_hst = .TRUE. 120 117 ENDIF 121 z1_2dt = 1._wp / z2dt122 118 ! 123 119 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 189 185 DO_3D_10_10( 2, jpkm1 ) 190 186 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 191 zcoef0 = z2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 )192 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt187 zcoef0 = rDt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) 188 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 193 189 END_3D 194 190 ENDIF -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/tramle.F90
r12377 r12495 41 41 42 42 REAL(wp) :: r5_21 = 5.e0 / 21.e0 ! factor used in mle streamfunction computation 43 REAL(wp) :: rb_c ! ML buoyancy criteria = g rho_c /r au0 where rho_c is defined in zdfmld43 REAL(wp) :: rb_c ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld 44 44 REAL(wp) :: rc_f ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_mle=1 case 45 45 … … 112 112 zc = e3t(ji,jj,jk,Kmm) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1 ) ) ! zc being 0 outside the ML t-points 113 113 zmld(ji,jj) = zmld(ji,jj) + zc 114 zbm (ji,jj) = zbm (ji,jj) + zc * (r au0 - rhop(ji,jj,jk) ) * r1_rau0114 zbm (ji,jj) = zbm (ji,jj) + zc * (rho0 - rhop(ji,jj,jk) ) * r1_rho0 115 115 zn2 (ji,jj) = zn2 (ji,jj) + zc * (rn2(ji,jj,jk)+rn2(ji,jj,jk+1))*0.5_wp 116 116 END_3D … … 273 273 IF( ln_mle ) THEN ! MLE initialisation 274 274 ! 275 rb_c = grav * rn_rho_c_mle /r au0 ! Mixed Layer buoyancy criteria275 rb_c = grav * rn_rho_c_mle /rho0 ! Mixed Layer buoyancy criteria 276 276 IF(lwp) WRITE(numout,*) 277 277 IF(lwp) WRITE(numout,*) ' ML buoyancy criteria = ', rb_c, ' m/s2 ' -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/tranpc.F90
r12377 r12495 67 67 LOGICAL :: l_bottom_reached, l_column_treated 68 68 REAL(wp) :: zta, zalfa, zsum_temp, zsum_alfa, zaw, zdz, zsum_z 69 REAL(wp) :: zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_r 2dt69 REAL(wp) :: zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_rDt 70 70 REAL(wp), PARAMETER :: zn2_zero = 1.e-14_wp ! acceptance criteria for neutrality (N2==0) 71 71 REAL(wp), DIMENSION( jpk ) :: zvn2 ! vertical profile of N2 at 1 given point... … … 301 301 ! 302 302 IF( l_trdtra ) THEN ! send the Non penetrative mixing trends for diagnostic 303 z1_r 2dt = 1._wp / (2._wp * rdt)304 ztrdt(:,:,:) = ( pts(:,:,:,jp_tem,Kaa) - ztrdt(:,:,:) ) * z1_r 2dt305 ztrds(:,:,:) = ( pts(:,:,:,jp_sal,Kaa) - ztrds(:,:,:) ) * z1_r 2dt303 z1_rDt = 1._wp / (2._wp * rn_Dt) 304 ztrdt(:,:,:) = ( pts(:,:,:,jp_tem,Kaa) - ztrdt(:,:,:) ) * z1_rDt 305 ztrds(:,:,:) = ( pts(:,:,:,jp_sal,Kaa) - ztrds(:,:,:) ) * z1_rDt 306 306 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_npc, ztrdt ) 307 307 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_npc, ztrds ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/traqsr.F90
r12377 r12495 87 87 !! I(k) = Qsr*( rn_abs*EXP(z(k)/rn_si0) + (1.-rn_abs)*EXP(z(k)/rn_si1) ) 88 88 !! The temperature trend associated with the solar radiation penetration 89 !! is given by : zta = 1/e3t dk[ I ] / (r au0*Cp)89 !! is given by : zta = 1/e3t dk[ I ] / (rho0*Cp) 90 90 !! At the bottom, boudary condition for the radiation is no flux : 91 91 !! all heat which has not been absorbed in the above levels is put … … 135 135 ! !-----------------------------------! 136 136 IF( kt == nit000 ) THEN !== 1st time step ==! 137 !!gm case neuler not taken into account.... 138 IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN ! read in restart 137 IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 .AND. .NOT.l_1st_euler ) THEN ! read in restart 139 138 IF(lwp) WRITE(numout,*) ' nit000-1 qsr tracer content forcing field read in the restart file' 140 139 z1_2 = 0.5_wp … … 156 155 ! 157 156 DO jk = 1, nksr 158 qsr_hc(:,:,jk) = r1_r au0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) )157 qsr_hc(:,:,jk) = r1_rho0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 159 158 END DO 160 159 ! … … 228 227 ! 229 228 DO_3D_00_00( 1, nksr ) 230 qsr_hc(ji,jj,jk) = r1_r au0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) )229 qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 231 230 END_3D 232 231 ! … … 235 234 CASE( np_2BD ) !== 2-bands fluxes ==! 236 235 ! 237 zz0 = rn_abs * r1_r au0_rcp ! surface equi-partition in 2-bands238 zz1 = ( 1. - rn_abs ) * r1_r au0_rcp236 zz0 = rn_abs * r1_rho0_rcp ! surface equi-partition in 2-bands 237 zz1 = ( 1. - rn_abs ) * r1_rho0_rcp 239 238 DO_3D_00_00( 1, nksr ) 240 239 zc0 = zz0 * EXP( -gdepw(ji,jj,jk ,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk ,Kmm)*xsi1r ) … … 253 252 ! sea-ice: store the 1st ocean level attenuation coefficient 254 253 DO_2D_00_00 255 IF( qsr(ji,jj) /= 0._wp ) THEN ; fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_r au0_rcp * qsr(ji,jj) )254 IF( qsr(ji,jj) /= 0._wp ) THEN ; fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rho0_rcp * qsr(ji,jj) ) 256 255 ELSE ; fraqsr_1lev(ji,jj) = 1._wp 257 256 ENDIF … … 263 262 zetot(:,:,nksr+1:jpk) = 0._wp ! below ~400m set to zero 264 263 DO jk = nksr, 1, -1 265 zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * r au0_rcp264 zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rho0_rcp 266 265 END DO 267 266 CALL iom_put( 'qsr3d', zetot ) ! 3D distribution of shortwave Radiation -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/trasbc.F90
r12377 r12495 124 124 ! !== Now sbc tracer content fields ==! 125 125 DO_2D_01_00 126 sbc_tsc(ji,jj,jp_tem) = r1_r au0_rcp * qns(ji,jj) ! non solar heat flux127 sbc_tsc(ji,jj,jp_sal) = r1_r au0 * sfx(ji,jj) ! salt flux due to freezing/melting126 sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) ! non solar heat flux 127 sbc_tsc(ji,jj,jp_sal) = r1_rho0 * sfx(ji,jj) ! salt flux due to freezing/melting 128 128 END_2D 129 129 IF( ln_linssh ) THEN !* linear free surface 130 130 DO_2D_01_00 131 sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_r au0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm)132 sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_r au0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm)131 sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 132 sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm) 133 133 END_2D 134 134 IF( iom_use('emp_x_sst') ) CALL iom_put( "emp_x_sst", emp (:,:) * pts(:,:,1,jp_tem,Kmm) ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRA/trazdf.F90
r12377 r12495 66 66 ENDIF 67 67 ! 68 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000, = rdt (restarting with Euler time stepping)69 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2. * rdt ! otherwise, = 2 rdt (leapfrog)70 ENDIF71 !72 68 IF( l_trdtra ) THEN !* Save ta and sa trends 73 69 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) … … 77 73 ! 78 74 ! !* compute lateral mixing trend and add it to the general trend 79 CALL tra_zdf_imp( kt, nit000, 'TRA', r 2dt, Kbb, Kmm, Krhs, pts, Kaa, jpts )75 CALL tra_zdf_imp( kt, nit000, 'TRA', rDt, Kbb, Kmm, Krhs, pts, Kaa, jpts ) 80 76 81 77 !!gm WHY here ! and I don't like that ! … … 89 85 DO jk = 1, jpkm1 90 86 ztrdt(:,:,jk) = ( ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa) - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb) ) & 91 & / (e3t(:,:,jk,Kmm)*r 2dt) ) - ztrdt(:,:,jk)87 & / (e3t(:,:,jk,Kmm)*rDt) ) - ztrdt(:,:,jk) 92 88 ztrds(:,:,jk) = ( ( pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa) - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb) ) & 93 & / (e3t(:,:,jk,Kmm)*r 2dt) ) - ztrds(:,:,jk)89 & / (e3t(:,:,jk,Kmm)*rDt) ) - ztrds(:,:,jk) 94 90 END DO 95 91 !!gm this should be moved in trdtra.F90 and done on all trends -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRD/trddyn.F90
r12377 r12495 140 140 ! ! wind stress trends 141 141 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 142 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * r au0 )143 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * r au0 )142 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rho0 ) 143 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rho0 ) 144 144 CALL iom_put( "utrd_tau", z2dx ) 145 145 CALL iom_put( "vtrd_tau", z2dy ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRD/trdglo.F90
r12377 r12495 76 76 INTEGER :: ji, jj, jk ! dummy loop indices 77 77 INTEGER :: ikbu, ikbv ! local integers 78 REAL(wp):: zvm, zvt, zvs, z1_2r au0 ! local scalars78 REAL(wp):: zvm, zvt, zvs, z1_2rho0 ! local scalars 79 79 REAL(wp), DIMENSION(jpi,jpj) :: ztswu, ztswv, z2dx, z2dy ! 2D workspace 80 80 !!---------------------------------------------------------------------- … … 125 125 ! 126 126 IF( ktrd == jpdyn_zdf ) THEN ! zdf trend: compute separately the surface forcing trend 127 z1_2r au0 = 0.5_wp / rau0127 z1_2rho0 = 0.5_wp / rho0 128 128 DO_2D_10_10 129 129 zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk) & 130 & * z1_2r au0 * e1e2u(ji,jj)130 & * z1_2rho0 * e1e2u(ji,jj) 131 131 zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) & 132 & * z1_2r au0 * e1e2v(ji,jj)132 & * z1_2rho0 * e1e2v(ji,jj) 133 133 umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 134 134 vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs … … 141 141 ! ! 142 142 ! IF( ln_drgimp ) THEN ! implicit drag case: compute separately the bottom friction 143 ! z1_2r au0 = 0.5_wp / rau0143 ! z1_2rho0 = 0.5_wp / rho0 144 144 ! DO jj = 1, jpjm1 145 145 ! DO ji = 1, jpim1 … … 203 203 CALL eos( ts(:,:,:,:,Kmm), rhd, rhop ) ! now potential density 204 204 205 zcof = 0.5_wp / r au0 ! Density flux at w-point205 zcof = 0.5_wp / rho0 ! Density flux at w-point 206 206 zkz(:,:,1) = 0._wp 207 207 DO jk = 2, jpk … … 209 209 END DO 210 210 211 zcof = 0.5_wp / r au0 ! Density flux at u and v-points211 zcof = 0.5_wp / rho0 ! Density flux at u and v-points 212 212 DO_3D_10_10( 1, jpkm1 ) 213 213 zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) * uu(ji,jj,jk,Kmm) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) … … 347 347 9546 FORMAT(' 0 < horizontal diffusion : ', e20.13) 348 348 9547 FORMAT(' 0 < vertical diffusion : ', e20.13) 349 9548 FORMAT(' pressure gradient u2 = - 1/r au0 u.dz(rhop) : ', e20.13, ' u.dz(rhop) =', e20.13)349 9548 FORMAT(' pressure gradient u2 = - 1/rho0 u.dz(rhop) : ', e20.13, ' u.dz(rhop) =', e20.13) 350 350 ! 351 351 ! Save potential to kinetic energy conversion for next time step -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRD/trdken.F90
r12377 r12495 102 102 zke(:,1, : ) = 0._wp 103 103 DO_3D_01_01( 1, jpkm1 ) 104 zke(ji,jj,jk) = 0.5_wp * r au0 *( uu(ji ,jj,jk,Kmm) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) &104 zke(ji,jj,jk) = 0.5_wp * rho0 *( uu(ji ,jj,jk,Kmm) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) & 105 105 & + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk) & 106 106 & + vv(ji,jj ,jk,Kmm) * pvtrd(ji,jj ,jk) * bv(ji,jj ,jk) & … … 123 123 zke2d(1,:) = 0._wp ; zke2d(:,1) = 0._wp 124 124 DO_2D_01_01 125 zke2d(ji,jj) = r1_r au0 * 0.5_wp * ( z2dx(ji,jj) + z2dx(ji-1,jj) &125 zke2d(ji,jj) = r1_rho0 * 0.5_wp * ( z2dx(ji,jj) + z2dx(ji-1,jj) & 126 126 & + z2dy(ji,jj) + z2dy(ji,jj-1) ) * r1_bt(ji,jj,1) 127 127 END_2D … … 207 207 ! 208 208 ! Local constant initialization 209 zcoef = - r au0 * grav * 0.5_wp209 zcoef = - rho0 * grav * 0.5_wp 210 210 211 211 ! Surface value (also valid in partial step case) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRD/trdtra.F90
r12377 r12495 237 237 !!---------------------------------------------------------------------- 238 238 239 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! = rdt (restart with Euler time stepping)240 ELSEIF( kt <= nit000 + 1) THEN ; r2dt = 2. * rdt ! = 2 rdt (leapfrog)241 ENDIF242 243 239 ! ! 3D output of tracers trends using IOM interface 244 240 IF( ln_tra_trd ) CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt, Kmm ) … … 248 244 249 245 ! ! Potential ENergy trends 250 IF( ln_PE_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r 2dt, Kmm )246 IF( ln_PE_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, rDt, Kmm ) 251 247 252 248 ! ! Mixed layer trends for active tracers … … 281 277 CASE ( jptra_atf ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_atf, '3D' ) ! asselin time filter (last trend) 282 278 ! 283 CALL trd_mxl( kt, r 2dt ) ! trends: Mixed-layer (output)279 CALL trd_mxl( kt, rDt ) ! trends: Mixed-layer (output) 284 280 END SELECT 285 281 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/TRD/trdvor.F90
r12377 r12495 105 105 ztswu(:,:) = 0.e0 ; ztswv(:,:) = 0.e0 106 106 DO_2D_00_00 107 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * r au0 )108 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * r au0 )107 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rho0 ) 108 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rho0 ) 109 109 END_2D 110 110 ! … … 385 385 ! III.1 compute total trend 386 386 ! ------------------------ 387 zmean = 1._wp / ( REAL( nmoydpvor, wp ) * 2._wp * r dt )387 zmean = 1._wp / ( REAL( nmoydpvor, wp ) * 2._wp * rn_Dt ) 388 388 vor_avrtot(:,:) = ( vor_avr(:,:) - vor_avrbn(:,:) + vor_avrb(:,:) - vor_avrbb(:,:) ) * zmean 389 389 … … 504 504 ENDIF 505 505 #if defined key_diainstant 506 zsto = nn_write*r dt506 zsto = nn_write*rn_Dt 507 507 clop = "inst("//TRIM(clop)//")" 508 508 #else 509 zsto = r dt509 zsto = rn_Dt 510 510 clop = "ave("//TRIM(clop)//")" 511 511 #endif 512 zout = nn_trd*r dt512 zout = nn_trd*rn_Dt 513 513 514 514 IF(lwp) WRITE(numout,*) ' netCDF initialization' … … 516 516 ! II.2 Compute julian date from starting date of the run 517 517 ! ------------------------ 518 CALL ymds2ju( nyear, nmonth, nday, r dt, zjulian )518 CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 519 519 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 520 520 IF(lwp) WRITE(numout,*)' ' … … 528 528 IF(lwp) WRITE(numout,*) ' Name of NETCDF file ', clhstnam 529 529 CALL histbeg( clhstnam, jpi, glamf, jpj, gphif,1, jpi, & ! Horizontal grid : glamt and gphit 530 & 1, jpj, nit000-1, zjulian, r dt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set )530 & 1, jpj, nit000-1, zjulian, rn_Dt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set ) 531 531 CALL wheneq( jpi*jpj, fmask, 1, 1., ndexvor1, ndimvor1 ) ! surface 532 532 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/USR/usrdef_hgr.F90
r12377 r12495 107 107 IF( ln_bench ) THEN ! benchmark: forced the resolution to be 106 km 108 108 ze1 = 106000._wp ! but keep (lat,lon) at the right nn_GYRE resolution 109 CALL ctl_warn( ' GYRE used as Benchmark: e1=e2=106km, no need to adjust r dt, ahm,aht ' )109 CALL ctl_warn( ' GYRE used as Benchmark: e1=e2=106km, no need to adjust rn_Dt, ahm,aht ' ) 110 110 ENDIF 111 111 IF( nprint==1 .AND. lwp ) THEN -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/USR/usrdef_sbc.F90
r12377 r12495 89 89 90 90 ! current day (in hours) since january the 1st of the current year 91 ztime = REAL( kt ) * r dt / (rmmss * rhhmm) & ! total incrementation (in hours)91 ztime = REAL( kt ) * rn_Dt / (rmmss * rhhmm) & ! total incrementation (in hours) 92 92 & - (nyear - 1) * rjjhh * zyydd ! minus years since beginning of experiment (in hours) 93 93 … … 154 154 !accumulates days of previous months of this year 155 155 ! day (in hours) since january the 1st 156 ztime = FLOAT( kt ) * r dt / (rmmss * rhhmm) & ! incrementation in hour156 ztime = FLOAT( kt ) * rn_Dt / (rmmss * rhhmm) & ! incrementation in hour 157 157 & - (nyear - 1) * rjjhh * zyydd ! - nber of hours the precedent years 158 158 ztimemax = ((5.*30.)+21.)* 24. ! 21th june in hours -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfdrg.F90
r12377 r12495 165 165 !!--------------------------------------------------------------------- 166 166 ! 167 !!gm bug : time step is only r dt (not 2 rdt if euler start !)168 zm1_2dt = - 1._wp / ( 2._wp * r dt )167 !!gm bug : time step is only rn_Dt (not 2 rn_Dt if euler start !) 168 zm1_2dt = - 1._wp / ( 2._wp * rn_Dt ) 169 169 170 170 IF( l_trddyn ) THEN ! trends: store the input trends -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfgls.F90
r12377 r12495 170 170 ! 171 171 ! surface friction 172 ustar2_surf(ji,jj) = r1_r au0 * taum(ji,jj) * tmask(ji,jj,1)172 ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1) 173 173 ! 174 174 !!gm Rq we may add here r_ke0(_top/_bot) ? ==>> think about that... … … 267 267 zd_up(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk ) ) / ( e3t(ji,jj,jk ,Kmm) * e3w(ji,jj,jk,Kmm) ) 268 268 ! ! diagonal 269 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + r dt * zdiss * wmask(ji,jj,jk)269 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rn_Dt * zdiss * wmask(ji,jj,jk) 270 270 ! ! right hand side in en 271 en(ji,jj,jk) = en(ji,jj,jk) + r dt * zesh2 * wmask(ji,jj,jk)271 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 272 272 END_3D 273 273 ! … … 477 477 zd_up(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk ) ) / ( e3t(ji,jj,jk ,Kmm) * e3w(ji,jj,jk,Kmm) ) 478 478 ! ! diagonal 479 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + r dt * zdiss * wmask(ji,jj,jk)479 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rn_Dt * zdiss * wmask(ji,jj,jk) 480 480 ! ! right hand side in psi 481 psi(ji,jj,jk) = psi(ji,jj,jk) + r dt * zesh2 * wmask(ji,jj,jk)481 psi(ji,jj,jk) = psi(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 482 482 END_3D 483 483 ! … … 1007 1007 rc04 = rc03 * rc0 1008 1008 rsbc_tke1 = -3._wp/2._wp*rn_crban*ra_sf*rl_sf ! Dirichlet + Wave breaking 1009 rsbc_tke2 = r dt * rn_crban / rl_sf ! Neumann + Wave breaking1009 rsbc_tke2 = rn_Dt * rn_crban / rl_sf ! Neumann + Wave breaking 1010 1010 zcr = MAX(rsmall, rsbc_tke1**(1./(-ra_sf*3._wp/2._wp))-1._wp ) 1011 1011 rtrans = 0.2_wp / zcr ! Ad. inverse transition length between log and wave layer 1012 1012 rsbc_zs1 = rn_charn/grav ! Charnock formula for surface roughness 1013 1013 rsbc_zs2 = rn_frac_hs / 0.85_wp / grav * 665._wp ! Rascle formula for surface roughness 1014 rsbc_psi1 = -0.5_wp * r dt * rc0**(rpp-2._wp*rmm) / rsc_psi1015 rsbc_psi2 = -0.5_wp * r dt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking1016 ! 1017 rfact_tke = -0.5_wp / rsc_tke * r dt ! Cst used for the Diffusion term of tke1018 rfact_psi = -0.5_wp / rsc_psi * r dt ! Cst used for the Diffusion term of tke1014 rsbc_psi1 = -0.5_wp * rn_Dt * rc0**(rpp-2._wp*rmm) / rsc_psi 1015 rsbc_psi2 = -0.5_wp * rn_Dt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking 1016 ! 1017 rfact_tke = -0.5_wp / rsc_tke * rn_Dt ! Cst used for the Diffusion term of tke 1018 rfact_psi = -0.5_wp / rsc_psi * rn_Dt ! Cst used for the Diffusion term of tke 1019 1019 ! 1020 1020 ! !* Wall proximity function -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfiwm.F90
r12377 r12495 87 87 !! This is divided into three components: 88 88 !! 1. Bottom-intensified low-mode dissipation at critical slopes 89 !! zemx_iwm(z) = ( ecri_iwm / r au0 ) * EXP( -(H-z)/hcri_iwm )89 !! zemx_iwm(z) = ( ecri_iwm / rho0 ) * EXP( -(H-z)/hcri_iwm ) 90 90 !! / ( 1. - EXP( - H/hcri_iwm ) ) * hcri_iwm 91 91 !! where hcri_iwm is the characteristic length scale of the bottom 92 92 !! intensification, ecri_iwm a map of available power, and H the ocean depth. 93 93 !! 2. Pycnocline-intensified low-mode dissipation 94 !! zemx_iwm(z) = ( epyc_iwm / r au0 ) * ( sqrt(rn2(z))^nn_zpyc )94 !! zemx_iwm(z) = ( epyc_iwm / rho0 ) * ( sqrt(rn2(z))^nn_zpyc ) 95 95 !! / SUM( sqrt(rn2(z))^nn_zpyc * e3w(z) ) 96 96 !! where epyc_iwm is a map of available power, and nn_zpyc … … 98 98 !! energy dissipation. 99 99 !! 3. WKB-height dependent high mode dissipation 100 !! zemx_iwm(z) = ( ebot_iwm / r au0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm)100 !! zemx_iwm(z) = ( ebot_iwm / rho0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 101 101 !! / SUM( rn2(z) * EXP(-z_wkb(z)/hbot_iwm) * e3w(z) ) 102 102 !! where hbot_iwm is the characteristic length scale of the WKB bottom … … 151 151 DO_2D_11_11 152 152 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean 153 zfact(ji,jj) = r au0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) )153 zfact(ji,jj) = rho0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) ) 154 154 IF( zfact(ji,jj) /= 0._wp ) zfact(ji,jj) = ecri_iwm(ji,jj) / zfact(ji,jj) 155 155 END_2D … … 181 181 ! 182 182 DO_2D_11_11 183 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )183 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 184 184 END_2D 185 185 ! … … 196 196 ! 197 197 DO_2D_11_11 198 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )198 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 199 199 END_2D 200 200 ! … … 243 243 ! 244 244 DO_2D_11_11 245 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )245 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 246 246 END_2D 247 247 ! … … 255 255 ! Calculate molecular kinematic viscosity 256 256 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts(:,:,:,jp_tem,Kmm) + 0.00694_wp * ts(:,:,:,jp_tem,Kmm) * ts(:,:,:,jp_tem,Kmm) & 257 & + 0.02305_wp * ts(:,:,:,jp_sal,Kmm) ) * tmask(:,:,:) * r1_r au0257 & + 0.02305_wp * ts(:,:,:,jp_sal,Kmm) ) * tmask(:,:,:) * r1_rho0 258 258 DO jk = 2, jpkm1 259 259 znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) … … 293 293 END_3D 294 294 CALL mpp_sum( 'zdfiwm', zztmp ) 295 zztmp = r au0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing295 zztmp = rho0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing 296 296 ! 297 297 IF(lwp) THEN … … 337 337 !* output useful diagnostics: Kz*N^2 , 338 338 !!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 339 ! vertical integral of r au0 * Kz * N^2 , energy density (zemx_iwm)339 ! vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 340 340 IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 341 341 ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) … … 345 345 z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 346 346 END DO 347 z2d(:,:) = r au0 * z2d(:,:)347 z2d(:,:) = rho0 * z2d(:,:) 348 348 CALL iom_put( "bflx_iwm", z3d ) 349 349 CALL iom_put( "pcmap_iwm", z2d ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfmxl.F90
r12377 r12495 97 97 nmln(:,:) = nlb10 ! Initialization to the number of w ocean point 98 98 hmlp(:,:) = 0._wp ! here hmlp used as a dummy variable, integrating vertically N^2 99 zN2_c = grav * rho_c * r1_r au0 ! convert density criteria into N^2 criteria99 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 100 100 DO_3D_11_11( nlb10, jpkm1 ) 101 101 ikt = mbkt(ji,jj) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfosm.F90
r12377 r12495 300 300 DO_2D_00_00 301 301 ! Surface downward irradiance (so always +ve) 302 zrad0(ji,jj) = qsr(ji,jj) * r1_r au0_rcp302 zrad0(ji,jj) = qsr(ji,jj) * r1_rho0_rcp 303 303 ! Downwards irradiance at base of boundary layer 304 304 zradh(ji,jj) = zrad0(ji,jj) * ( zz0 * EXP( -hbl(ji,jj)/rn_si0 ) + zz1 * EXP( -hbl(ji,jj)/rn_si1) ) … … 312 312 zbeta = rab_n(ji,jj,1,jp_sal) 313 313 ! Upwards surface Temperature flux for non-local term 314 zwth0(ji,jj) = - qns(ji,jj) * r1_r au0_rcp * tmask(ji,jj,1)314 zwth0(ji,jj) = - qns(ji,jj) * r1_rho0_rcp * tmask(ji,jj,1) 315 315 ! Upwards surface salinity flux for non-local term 316 zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * ts(ji,jj,1,jp_sal,Kmm) + sfx(ji,jj) ) * r1_r au0 * tmask(ji,jj,1)316 zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * ts(ji,jj,1,jp_sal,Kmm) + sfx(ji,jj) ) * r1_rho0 * tmask(ji,jj,1) 317 317 ! Non radiative upwards surface buoyancy flux 318 318 zwb0(ji,jj) = grav * zthermal * zwth0(ji,jj) - grav * zbeta * zws0(ji,jj) … … 324 324 zwbav(ji,jj) = grav * zthermal * zwthav(ji,jj) - grav * zbeta * zwsav(ji,jj) 325 325 ! Surface upward velocity fluxes 326 zuw0(ji,jj) = -utau(ji,jj) * r1_r au0 * tmask(ji,jj,1)327 zvw0(ji,jj) = -vtau(ji,jj) * r1_r au0 * tmask(ji,jj,1)326 zuw0(ji,jj) = -utau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 327 zvw0(ji,jj) = -vtau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 328 328 ! Friction velocity (zustar), at T-point : LMD94 eq. 2 329 329 zustar(ji,jj) = MAX( SQRT( SQRT( zuw0(ji,jj) * zuw0(ji,jj) + zvw0(ji,jj) * zvw0(ji,jj) ) ), 1.0e-8 ) … … 441 441 & + 0.135 * zla(ji,jj) * zwstrl(ji,jj)**3/hbl(ji,jj) ) 442 442 443 zvel_max = - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / hbl(ji,jj) ) &443 zvel_max = - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 444 444 & * zwb_ent(ji,jj) / ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 445 445 ! Entrainment including component due to shear turbulence. Modified Langmuir component, but gives same result for La=0.3 For testing uncomment. … … 447 447 ! & + ( 0.15 * ( 1.0 - EXP( -0.5 * zla(ji,jj) ) ) + 0.03 / zla(ji,jj)**2 ) * zustar(ji,jj)**3/hbl(ji,jj) ) 448 448 449 ! zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / &449 ! zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / & 450 450 ! & ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 451 451 zzdhdt = - zwb_ent(ji,jj) / ( zvel_max + MAX(zdb_bl(ji,jj),0.0) ) … … 458 458 IF ( zzdhdt < 0._wp ) THEN 459 459 ! For long timsteps factor in brackets slows the rapid collapse of the OSBL 460 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_ rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj)460 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) 461 461 ELSE 462 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_ rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) &462 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) & 463 463 & + MAX( zdb_bl(ji,jj), 0.0 ) 464 464 ENDIF … … 472 472 ibld(:,:) = 3 473 473 474 zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - ww(ji,jj,ibld(ji,jj)))* rn_ rdt ! certainly need wb here, so subtract it474 zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - ww(ji,jj,ibld(ji,jj)))* rn_Dt ! certainly need wb here, so subtract it 475 475 zhbl_t(:,:) = MIN(zhbl_t(:,:), ht(:,:)) 476 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_ rdt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom476 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_Dt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 477 477 478 478 DO_3D_00_00( 4, jpkm1 ) … … 496 496 IF ( lconv(ji,jj) ) THEN 497 497 !unstable 498 zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / hbl(ji,jj) ) &498 zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 499 499 & * zwb_ent(ji,jj) / ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 500 500 … … 503 503 & - zbeta * ( zs_bl(ji,jj) - ts(ji,jj,jm,jp_sal,Kmm) ) ), 0.0 ) + zvel_max 504 504 505 zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_ rdt / FLOAT(ibld(ji,jj)-imld(ji,jj) ), e3w(ji,jj,jk,Kmm) )505 zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_Dt / FLOAT(ibld(ji,jj)-imld(ji,jj) ), e3w(ji,jj,jk,Kmm) ) 506 506 zhbl_s = MIN(zhbl_s, ht(ji,jj)) 507 507 … … 1250 1250 IF ( iom_use("us_x") ) CALL iom_put( "us_x", tmask(:,:,1)*zustke*zcos_wind ) ! x surface Stokes drift 1251 1251 IF ( iom_use("us_y") ) CALL iom_put( "us_y", tmask(:,:,1)*zustke*zsin_wind ) ! y surface Stokes drift 1252 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*r au0*tmask(:,:,1)*zustar**2*zustke )1252 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 1253 1253 ! Stokes drift read in from sbcwave (=2). 1254 1254 CASE(2) 1255 1255 IF ( iom_use("us_x") ) CALL iom_put( "us_x", ut0sd ) ! x surface Stokes drift 1256 1256 IF ( iom_use("us_y") ) CALL iom_put( "us_y", vt0sd ) ! y surface Stokes drift 1257 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*r au0*tmask(:,:,1)*zustar**2* &1257 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2* & 1258 1258 & SQRT(ut0sd**2 + vt0sd**2 ) ) 1259 1259 END SELECT … … 1271 1271 IF ( iom_use("zwstrl") ) CALL iom_put( "zwstrl", tmask(:,:,1)*zwstrl ) ! Langmuir velocity scale 1272 1272 IF ( iom_use("zustar") ) CALL iom_put( "zustar", tmask(:,:,1)*zustar ) ! friction velocity scale 1273 IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*r au0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine1274 IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*r au0*tmask(:,:,1)*zustar**2*zustke )1273 IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*rho0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine 1274 IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 1275 1275 IF ( iom_use("zhbl") ) CALL iom_put( "zhbl", tmask(:,:,1)*zhbl ) ! BL depth internal to zdf_osm routine 1276 1276 IF ( iom_use("zhml") ) CALL iom_put( "zhml", tmask(:,:,1)*zhml ) ! ML depth internal to zdf_osm routine … … 1500 1500 imld_rst(:,:) = nlb10 ! Initialization to the number of w ocean point 1501 1501 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 1502 zN2_c = grav * rho_c * r1_r au0 ! convert density criteria into N^2 criteria1502 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 1503 1503 ! 1504 1504 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdfric.F90
r12377 r12495 174 174 ! 175 175 DO_2D_00_00 176 zustar = SQRT( taum(ji,jj) * r1_r au0 )176 zustar = SQRT( taum(ji,jj) * r1_rho0 ) 177 177 zhek = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall ) ! Ekman depth 178 178 zh_ekm(ji,jj) = MAX( rn_mldmin , MIN( zhek , rn_mldmax ) ) ! set allowed range -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/ZDF/zdftke.F90
r12377 r12495 206 206 !!-------------------------------------------------------------------- 207 207 ! 208 zbbrau = rn_ebb / r au0 ! Local constant initialisation209 zfact1 = -.5_wp * r dt210 zfact2 = 1.5_wp * r dt * rn_ediss208 zbbrau = rn_ebb / rho0 ! Local constant initialisation 209 zfact1 = -.5_wp * rn_Dt 210 zfact2 = 1.5_wp * rn_Dt * rn_ediss 211 211 zfact3 = 0.5_wp * rn_ediss 212 212 ! … … 228 228 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 229 229 ! 230 ! en(bot) = (ebb0/r au0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin)230 ! en(bot) = (ebb0/rho0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 231 231 ! where ebb0 does not includes surface wave enhancement (i.e. ebb0=3.75) 232 232 ! Note that stress averaged is done using an wet-only calculation of u and v at t-point like in zdfsh2 … … 237 237 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 238 238 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 239 ! ! where 0.001875 = (rn_ebb0/r au0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0)239 ! ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 240 240 zebot = - 0.001875_wp * rCdU_bot(ji,jj) * SQRT( ( zmsku*( uu(ji,jj,mbkt(ji,jj),Kbb)+uu(ji-1,jj,mbkt(ji,jj),Kbb) ) )**2 & 241 241 & + ( zmskv*( vv(ji,jj,mbkt(ji,jj),Kbb)+vv(ji,jj-1,mbkt(ji,jj),Kbb) ) )**2 ) … … 246 246 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 247 247 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 248 ! ! where 0.001875 = (rn_ebb0/r au0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0)248 ! ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 249 249 zetop = - 0.001875_wp * rCdU_top(ji,jj) * SQRT( ( zmsku*( uu(ji,jj,mikt(ji,jj),Kbb)+uu(ji-1,jj,mikt(ji,jj),Kbb) ) )**2 & 250 250 & + ( zmskv*( vv(ji,jj,mikt(ji,jj),Kbb)+vv(ji,jj-1,mikt(ji,jj),Kbb) ) )**2 ) … … 288 288 zwlc = rn_lc * SIN( rpi * gdepw(ji,jj,jk,Kmm) / zhlc(ji,jj) ) ! warning: optimization: zus^3 is in zfr_i 289 289 ! ! TKE Langmuir circulation source term 290 en(ji,jj,jk) = en(ji,jj,jk) + r dt * zfr_i(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj)290 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zfr_i(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) 291 291 ENDIF 292 292 ENDIF … … 325 325 ! 326 326 ! ! right hand side in en 327 en(ji,jj,jk) = en(ji,jj,jk) + r dt * ( p_sh2(ji,jj,jk)& ! shear327 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * ( p_sh2(ji,jj,jk) & ! shear 328 328 & - p_avt(ji,jj,jk) * rn2(ji,jj,jk) & ! stratification 329 329 & + zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk) & ! dissipation … … 439 439 zmxld(:,:,:) = rmxl_min 440 440 ! 441 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(r au0*g)442 zraug = vkarmn * 2.e5_wp / ( r au0 * grav )441 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rho0*g) 442 zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 443 443 DO_2D_00_00 444 444 zmxlm(ji,jj,1) = MAX( rn_mxl0, zraug * taum(ji,jj) * tmask(ji,jj,1) ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/nemogcm.F90
r12377 r12495 160 160 ! !== time stepping ==! 161 161 ! !-----------------------! 162 ! 163 ! !== set the model time-step ==! 164 ! 162 165 istp = nit000 163 166 ! … … 479 482 480 483 ! ! Icebergs 481 CALL icb_init( r dt, nit000) ! initialise icebergs instance484 CALL icb_init( rn_Dt, nit000) ! initialise icebergs instance 482 485 483 486 ! ice shelf -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/oce.F90
r12377 r12495 28 28 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rn2b , rn2 !: brunt-vaisala frequency**2 [s-2] 29 29 ! 30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhd !: in situ density anomalie rhd=(rho-r au0)/rau0 [no units]30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhd !: in situ density anomalie rhd=(rho-rho0)/rho0 [no units] 31 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop !: potential volumic mass [kg/m3] 32 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: Cu_adv !: vertical Courant number (adaptive-implicit) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/step.F90
r12377 r12495 102 102 ! 103 103 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 104 ! model timestep 105 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 106 ! 107 IF( l_1st_euler ) THEN 108 ! start or restart with Euler 1st time-step 109 rDt = rn_Dt 110 r1_Dt = 1._wp / rDt 111 ENDIF 112 ! 113 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 104 114 ! update I/O and calendar 105 115 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 335 345 #endif 336 346 ! 347 IF( l_1st_euler ) THEN ! recover Leap-frog timestep 348 rDt = 2._wp * rn_Dt 349 r1_Dt = 1._wp / rDt 350 l_1st_euler = .FALSE. 351 ENDIF 352 ! 337 353 IF( ln_timing ) CALL timing_stop('stp') 338 354 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OCE/timing.F90
r11536 r12495 390 390 WRITE(numtime,'(A28,F11.6,A2, F4.1,A3,A25,I8)') 'Waiting global time : ',timing_glob(4*ji-1) & 391 391 & , ' (', zperc,' %)', ' on MPI rank : ', ji 392 zsypd = rn_ rdt * REAL(nitend-nit000-1, wp) / (timing_glob(4*ji) * 365.)392 zsypd = rn_Dt * REAL(nitend-nit000-1, wp) / (timing_glob(4*ji) * 365.) 393 393 WRITE(numtime,'(A28,F11.6,A7,F10.3,A2,A15,I8)') 'Total time : ',timing_glob(4*ji ) & 394 394 & , ' (SYPD: ', zsypd, ')', ' on MPI rank : ', ji -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/OFF/dtadyn.F90
r12377 r12495 546 546 ENDIF 547 547 548 ssh(:,:,Kmm) = ssh(:,:,Kmm) + atfp * ( ssh(:,:,Kbb) - 2 * ssh(:,:,Kmm) + ssh(:,:,Kaa))548 ssh(:,:,Kmm) = ssh(:,:,Kmm) + rn_atfp * ( ssh(:,:,Kbb) - 2 * ssh(:,:,Kmm) + ssh(:,:,Kaa)) 549 549 550 550 !! Do we also need to time filter e3t?? … … 622 622 !!---------------------------------------------------------------------- 623 623 ! 624 z2dt = 2._wp * r dt624 z2dt = 2._wp * rn_Dt 625 625 ! 626 626 zhdiv(:,:) = 0._wp … … 629 629 END DO 630 630 ! ! Sea surface elevation time-stepping 631 pssha(:,:) = ( psshb(:,:) - z2dt * ( r1_r au0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:)631 pssha(:,:) = ( psshb(:,:) - z2dt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 632 632 ! ! 633 633 ! ! After acale factors at t-points ( z_star coordinate ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/SAS/diawri.F90
r12377 r12495 174 174 ENDIF 175 175 #if defined key_diainstant 176 zsto = nn_write * r dt176 zsto = nn_write * rn_Dt 177 177 clop = "inst("//TRIM(clop)//")" 178 178 #else 179 zsto=r dt179 zsto=rn_Dt 180 180 clop = "ave("//TRIM(clop)//")" 181 181 #endif 182 zout = nn_write * r dt183 zmax = ( nitend - nit000 + 1 ) * r dt182 zout = nn_write * rn_Dt 183 zmax = ( nitend - nit000 + 1 ) * rn_Dt 184 184 185 185 ! Define indices of the horizontal output zoom and vertical limit storage … … 202 202 203 203 ! Compute julian date from starting date of the run 204 CALL ymds2ju( nyear, nmonth, nday, r dt, zjulian )204 CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 205 205 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 206 206 IF(lwp)WRITE(numout,*) … … 224 224 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 225 225 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 226 & nit000-1, zjulian, r dt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set )226 & nit000-1, zjulian, rn_Dt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set ) 227 227 CALL histvert( nid_T, "deptht", "Vertical T levels", & ! Vertical grid: gdept 228 228 & "m", ipk, gdept_1d, nz_T, "down" ) … … 236 236 CALL histbeg( clhstnam, jpi, glamu, jpj, gphiu, & ! Horizontal grid: glamu and gphiu 237 237 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 238 & nit000-1, zjulian, r dt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set )238 & nit000-1, zjulian, rn_Dt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set ) 239 239 CALL histvert( nid_U, "depthu", "Vertical U levels", & ! Vertical grid: gdept 240 240 & "m", ipk, gdept_1d, nz_U, "down" ) … … 248 248 CALL histbeg( clhstnam, jpi, glamv, jpj, gphiv, & ! Horizontal grid: glamv and gphiv 249 249 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 250 & nit000-1, zjulian, r dt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set )250 & nit000-1, zjulian, rn_Dt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set ) 251 251 CALL histvert( nid_V, "depthv", "Vertical V levels", & ! Vertical grid : gdept 252 252 & "m", ipk, gdept_1d, nz_V, "down" ) … … 261 261 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 262 262 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 263 & nit000-1, zjulian, r dt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set )263 & nit000-1, zjulian, rn_Dt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set ) 264 264 CALL histvert( nid_A, "ght_abl", "Vertical T levels", & ! Vertical grid: gdept 265 265 & "m", ipka, ght_abl(2:jpka), nz_A, "up" ) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/SAS/nemogcm.F90
r12377 r12495 378 378 CALL bdy_init 379 379 ! ==> 380 CALL icb_init( r dt, nit000) ! initialise icebergs instance380 CALL icb_init( rn_Dt, nit000) ! initialise icebergs instance 381 381 ! 382 382 IF(lwp) WRITE(numout,cform_aaa) ! Flag AAAAAAA -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/C14/trcatm_c14.F90
r12377 r12495 223 223 IF(kc14typ >= 1) THEN ! Transient C14 & CO2 224 224 ! 225 tyrc14_now = tyrc14_now + ( r dt / ( rday * nyear_len(1)) ) ! current time step in yr relative to tyrc14_beg225 tyrc14_now = tyrc14_now + ( rn_Dt / ( rday * nyear_len(1)) ) ! current time step in yr relative to tyrc14_beg 226 226 ! 227 227 ! CO2 -------------------------------------------------------- -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/C14/trcsms_c14.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/CFC/trcsms_cfc.F90
r12377 r12495 166 166 167 167 ! cumulation of surface flux at each time step 168 qint_cfc(ji,jj,jl) = qint_cfc(ji,jj,jl) + qtr_cfc(ji,jj,jl) * r dt168 qint_cfc(ji,jj,jl) = qint_cfc(ji,jj,jl) + qtr_cfc(ji,jj,jl) * rn_Dt 169 169 ! !----------------! 170 170 END_2D -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/P2Z/p2zexp.F90
r12377 r12495 98 98 zwork = vsed * tr(ji,jj,ikt,jpdet,Kmm) 99 99 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 100 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * r dt100 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rn_Dt 101 101 zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj) 102 102 END_2D … … 114 114 ! Time filter and swap of arrays 115 115 ! ------------------------------ 116 IF( neuler == 0 .AND. kt == nittrc000) THEN ! Euler time-stepping at first time-step117 ! 116 IF( l_1st_euler ) THEN ! Euler time-stepping at first time-step 117 ! ! (only swap) 118 118 sedpocn(:,:) = zsedpoca(:,:) 119 119 ! … … 122 122 DO_2D_11_11 123 123 zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj) ! time laplacian on tracers 124 sedpocb(ji,jj) = sedpocn(ji,jj) + atfp * zsedpocd ! sedpocb <-- filtered sedpocn124 sedpocb(ji,jj) = sedpocn(ji,jj) + rn_atfp * zsedpocd ! sedpocb <-- filtered sedpocn 125 125 sedpocn(ji,jj) = zsedpoca(ji,jj) ! sedpocn <-- sedpoca 126 126 END_2D -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/P4Z/p4zsms.F90
r12377 r12495 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 … … 106 106 xfact = 1.e+3 * rfact2r 107 107 IF(lwp) WRITE(numout,*) 108 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' r dt = ', rdt108 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rn_Dt = ', rn_Dt 109 109 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 110 110 IF(lwp) WRITE(numout,*) 111 111 ENDIF 112 112 113 IF( ( neuler == 0 .AND. kt == nittrc000 ).OR. ln_top_euler ) THEN113 IF( l_1st_euler .OR. ln_top_euler ) THEN 114 114 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 115 115 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/oce_sed.F90
r12377 r12495 18 18 USE dom_oce , ONLY : mbkt => mbkt !: vertical index of the bottom last T- ocean level 19 19 USE dom_oce , ONLY : tmask => tmask !: land/ocean mask at t-points 20 USE dom_oce , ONLY : r dt => rdt!: time step for the dynamics20 USE dom_oce , ONLY : rn_Dt => rn_Dt !: time step for the dynamics 21 21 USE dom_oce , ONLY : nyear => nyear !: Current year 22 22 USE dom_oce , ONLY : ndastp => ndastp !: time step date in year/month/day aammjj … … 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/seddta.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/sedini.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/sedrst.F90
r12377 r12495 330 330 !! In both those options, the exact duration of the experiment 331 331 !! since the beginning (cumulated duration of all previous restart runs) 332 !! is not stored in the restart and is assumed to be (nittrc000-1)*r dt.332 !! is not stored in the restart and is assumed to be (nittrc000-1)*rn_Dt. 333 333 !! This is valid is the time step has remained constant. 334 334 !! … … 381 381 ELSE 382 382 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam 383 adatrj = ( REAL( nittrc000-1, wp ) * r dt ) / rday383 adatrj = ( REAL( nittrc000-1, wp ) * rn_Dt ) / rday 384 384 ! note this is wrong if time step has changed during run 385 385 ENDIF -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/sedstp.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/PISCES/SED/sedwri.F90
r10222 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trcadv.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trcatf.F90
r12377 r12495 71 71 !! the divergence of two consecutive time-steps and tr arrays 72 72 !! to prepare the next time_step: 73 !! (tr(Kmm)) = (tr(Kmm)) + atfp [ (tr(Kbb)) + (tr(Kaa)) - 2 (tr(Kmm)) ]73 !! (tr(Kmm)) = (tr(Kmm)) + rn_atfp [ (tr(Kbb)) + (tr(Kaa)) - 2 (tr(Kmm)) ] 74 74 !! 75 75 !! … … 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 … … 139 139 ENDIF 140 140 ! ! Leap-Frog + Asselin filter time stepping 141 IF( (neuler == 0 .AND. kt == nittrc000).OR. ln_top_euler ) THEN ! Euler time-stepping141 IF( l_1st_euler .OR. ln_top_euler ) THEN ! Euler time-stepping 142 142 ! 143 143 IF (l_trdtrc .AND. .NOT. ln_linssh ) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl … … 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 … … 200 200 !! /( e3t(:,:,:,Kmm) + rbcp*[ e3t(:,:,:,Kbb) - 2 e3t(:,:,:,Kmm) + e3t(:,:,:,Kaa) ] ) 201 201 !! ztm = 0 otherwise 202 !! tb = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )203 !! /( e3t(:,:,:,Kmm) + atfp*[ e3t(:,:,:,Kbb) - 2 e3t(:,:,:,Kmm) + e3t(:,:,:,Kaa) ] )202 !! tb = ( e3t_n*tn + rn_atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 203 !! /( e3t(:,:,:,Kmm) + rn_atfp*[ e3t(:,:,:,Kbb) - 2 e3t(:,:,:,Kmm) + e3t(:,:,:,Kaa) ] ) 204 204 !! tn = ta 205 205 !! ta = zt (NB: reset to 0 after eos_bn2 call) … … 222 222 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 223 223 IF( .NOT. ln_linssh ) THEN 224 rfact1 = atfp * rdttrc225 rfact2 = rfact1 / r au0224 rfact1 = rn_atfp * rn_Dt 225 rfact2 = rfact1 / rho0 226 226 ENDIF 227 227 ! … … 241 241 ztc_d = ztc_a - 2. * ztc_n + ztc_b 242 242 ! 243 ze3t_f = ze3t_n + atfp * ze3t_d244 ztc_f = ztc_n + atfp * ztc_d243 ze3t_f = ze3t_n + rn_atfp * ze3t_d 244 ztc_f = ztc_n + rn_atfp * ztc_d 245 245 ! 246 246 IF( .NOT. ln_linssh .AND. jk == mikt(ji,jj) ) THEN ! first level -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trcrad.F90
r12377 r12495 147 147 ! 148 148 IF( l_trdtrc ) ALLOCATE( ztrtrd(jpi,jpj,jpk) ) 149 zs2rdt = 1. / ( 2. * r dt )149 zs2rdt = 1. / ( 2. * rn_Dt ) 150 150 ! 151 151 DO jt = 1,2 ! Loop over time indices since exactly the same fix is applied to "now" and "after" fields -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trcsbc.F90
r12377 r12495 121 121 DO jn = 1, jptra 122 122 DO_2D_01_00 123 sbc_trc(ji,jj,jn) = zsfx(ji,jj) * r1_r au0 * ptr(ji,jj,1,jn,Kmm)123 sbc_trc(ji,jj,jn) = zsfx(ji,jj) * r1_rho0 * ptr(ji,jj,1,jn,Kmm) 124 124 END_2D 125 125 END DO … … 129 129 DO jn = 1, jptra 130 130 DO_2D_01_00 131 sbc_trc(ji,jj,jn) = ( zsfx(ji,jj) + fmmflx(ji,jj) ) * r1_r au0 * ptr(ji,jj,1,jn,Kmm)131 sbc_trc(ji,jj,jn) = ( zsfx(ji,jj) + fmmflx(ji,jj) ) * r1_rho0 * ptr(ji,jj,1,jn,Kmm) 132 132 END_2D 133 133 END DO … … 145 145 ztfx = zftra ! net tracer flux 146 146 ! 147 zdtra = r1_r au0 * ( ztfx + ( zsfx(ji,jj) + fmmflx(ji,jj) ) * ptr(ji,jj,1,jn,Kmm) )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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trczdf.F90
r12377 r12495 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/TRP/trdmxl_trc.F90
r12377 r12495 401 401 DO jn = 1, jptra 402 402 IF( ln_trdtrc(jn) ) THEN 403 !-- Compute total trends (use rdttrc instead of rdt ???)403 !-- Compute total trends 404 404 IF ( ln_trcadv_muscl .OR. ln_trcadv_muscl2 ) THEN ! EULER-FORWARD schemes 405 ztmltot(:,:,jn) = ( tml_trc(:,:,jn) - tmlbn_trc(:,:,jn) )/r dt405 ztmltot(:,:,jn) = ( tml_trc(:,:,jn) - tmlbn_trc(:,:,jn) )/rn_Dt 406 406 ELSE ! LEAP-FROG schemes 407 ztmltot(:,:,jn) = ( tml_trc(:,:,jn) - tmlbn_trc(:,:,jn) + tmlb_trc(:,:,jn) - tmlbb_trc(:,:,jn))/(2.*r dt)407 ztmltot(:,:,jn) = ( tml_trc(:,:,jn) - tmlbn_trc(:,:,jn) + tmlb_trc(:,:,jn) - tmlbb_trc(:,:,jn))/(2.*rn_Dt) 408 408 ENDIF 409 409 … … 439 439 IF( ln_trdtrc(jn) ) THEN 440 440 tml_sum_trc(:,:,jn) = tmlbn_trc(:,:,jn) + 2 * ( tml_sum_trc(:,:,jn) - tml_trc(:,:,jn) ) + tml_trc(:,:,jn) 441 ztmltot2 (:,:,jn) = ( tml_sum_trc(:,:,jn) - tml_sumb_trc(:,:,jn) ) / ( 2.*r dt ) ! now tracer unit is /sec441 ztmltot2 (:,:,jn) = ( tml_sum_trc(:,:,jn) - tml_sumb_trc(:,:,jn) ) / ( 2.*rn_Dt ) ! now tracer unit is /sec 442 442 ENDIF 443 443 END DO … … 852 852 CALL ctl_stop( 'STOP', 'trd_mxl_trc : this was never checked. Comment this line to proceed...' ) 853 853 ENDIF 854 zsto = nn_trd_trc * r dt854 zsto = nn_trd_trc * rn_Dt 855 855 clop = "inst("//TRIM(clop)//")" 856 856 # else 857 857 IF( ln_trdmxl_trc_instant ) THEN 858 zsto = r dt ! inst. diags : we use IOIPSL time averaging858 zsto = rn_Dt ! inst. diags : we use IOIPSL time averaging 859 859 ELSE 860 zsto = nn_trd_trc * r dt ! mean diags : we DO NOT use any IOIPSL time averaging860 zsto = nn_trd_trc * rn_Dt ! mean diags : we DO NOT use any IOIPSL time averaging 861 861 ENDIF 862 862 clop = "ave("//TRIM(clop)//")" 863 863 # endif 864 zout = nn_trd_trc * r dt864 zout = nn_trd_trc * rn_Dt 865 865 iiter = nittrc000 - 1 866 866 … … 869 869 ! II.2 Compute julian date from starting date of the run 870 870 ! ------------------------------------------------------ 871 CALL ymds2ju( nyear, nmonth, nday, r dt, zjulian )871 CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 872 872 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 873 873 IF(lwp) WRITE(numout,*)' ' … … 901 901 CALL dia_nam( clhstnam, nn_trd_trc, csuff ) 902 902 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 903 & 1, jpi, 1, jpj, iiter, zjulian, r dt, nh_t(jn), nidtrd(jn), domain_id=nidom, snc4chunks=snc4set )903 & 1, jpi, 1, jpj, iiter, zjulian, rn_Dt, nh_t(jn), nidtrd(jn), domain_id=nidom, snc4chunks=snc4set ) 904 904 905 905 !-- Define the ML depth variable … … 938 938 CALL histdef(nidtrd(jn), trim(clvar)//trim(ctrd_trc(jl,2)), clmxl//" "//clvar//ctrd_trc(jl,1), & 939 939 & cltrcu, jpi, jpj, nh_t(jn), 1 , 1, 1 , -99 , 32, clop, zsto, zout ) ! IOIPSL: time mean 940 END DO ! if zsto=r dt above940 END DO ! if zsto=rn_Dt above 941 941 942 942 CALL histdef(nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmxl_trc_radb,2)), clmxl//" "//clvar//ctrd_trc(jpmxl_trc_radb,1), & -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/oce_trc.F90
r12377 r12495 39 39 USE oce , ONLY : ts => ts !: 4D array contaning ( tn, sn ) 40 40 USE oce , ONLY : rhop => rhop !: potential volumic mass (kg m-3) 41 USE oce , ONLY : rhd => rhd !: in situ density anomalie rhd=(rho-r au0)/rau0 (no units)41 USE oce , ONLY : rhd => rhd !: in situ density anomalie rhd=(rho-rho0)/rho0 (no units) 42 42 USE oce , ONLY : hdiv => hdiv !: horizontal divergence (1/s) 43 43 USE oce , ONLY : ssh => ssh !: sea surface height at t-point [m] -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/trc.F90
r12377 r12495 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 neuler=0 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/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/trcbc.F90
r12377 r12495 416 416 DO_2D_01_00 417 417 DO jk = 1, nk_rnf(ji,jj) 418 zrnf = (rnf(ji,jj) + rnf_b(ji,jj)) * 0.5_wp * r1_r au0 / h_rnf(ji,jj)418 zrnf = (rnf(ji,jj) + rnf_b(ji,jj)) * 0.5_wp * r1_rho0 / h_rnf(ji,jj) 419 419 ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + (ptr(ji,jj,jk,jn,Kmm) * zrnf) 420 420 END DO -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/trcnam.F90
r12377 r12495 76 76 ENDIF 77 77 ! 78 rdttrc = rdt ! passive tracer time-step79 !80 78 IF(lwp) THEN ! control print 81 79 WRITE(numout,*) 82 WRITE(numout,*) ' ==>>> Passive Tracer time step rdttrc = rdt = ', rdttrc80 WRITE(numout,*) ' ==>>> Passive Tracer time step = rn_Dt = ', rn_Dt 83 81 ENDIF 84 82 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/trcrst.F90
r12377 r12495 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 ! -------------------- … … 183 183 !! In both those options, the exact duration of the experiment 184 184 !! since the beginning (cumulated duration of all previous restart runs) 185 !! is not stored in the restart and is assumed to be (nittrc000-1)*r dt.185 !! is not stored in the restart and is assumed to be (nittrc000-1)*rn_Dt. 186 186 !! This is valid is the time step has remained constant. 187 187 !! … … 263 263 nminute = ( nn_time0 - nhour * 100 ) 264 264 IF( nhour*3600+nminute*60-ndt05 .lt. 0 ) ndastp=ndastp-1 ! Start hour is specified in the namelist (default 0) 265 adatrj = ( REAL( nit000-1, wp ) * r dt ) / rday265 adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 266 266 ! note this is wrong if time step has changed during run 267 267 ENDIF … … 276 276 ENDIF 277 277 ! 278 IF( ln_rsttr ) THEN ; neuler = 1279 ELSE ; neuler = 0278 IF( ln_rsttr ) THEN ; l_1st_euler = .false. 279 ELSE ; l_1st_euler = .true. 280 280 ENDIF 281 281 ! -
NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/src/TOP/trcstp.F90
r12377 r12495 64 64 IF( ln_timing ) CALL timing_start('trc_stp') 65 65 ! 66 IF( ( neuler == 0 .AND. kt == nittrc000 ).OR. ln_top_euler ) THEN ! at nittrc00067 r 2dttrc = rdttrc ! = rdttrc(use or restarting with Euler time stepping)66 IF( l_1st_euler .OR. ln_top_euler ) THEN ! at nittrc000 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.