- Timestamp:
- 2017-09-27T11:11:01+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icevar.F90
r8563 r8564 12 12 !! - t_s (jpi,jpj,jpl) 13 13 !! - e_i (jpi,jpj,nlay_i,jpl) 14 !! - s mv_i(jpi,jpj,jpl)15 !! - oa_i 14 !! - sv_i(jpi,jpj,jpl) 15 !! - oa_i(jpi,jpj,jpl) 16 16 !! VEQV : equivalent variables sometimes used in the model 17 17 !! - h_i(jpi,jpj,jpl) … … 26 26 !! - et_s(jpi,jpj) !total snow heat content 27 27 !! - et_i(jpi,jpj) !total ice thermal content 28 !! - sm t_i(jpi,jpj) !mean ice salinity28 !! - sm_i(jpi,jpj) !mean ice salinity 29 29 !! - tm_i (jpi,jpj) !mean ice temperature 30 30 !!====================================================================== … … 117 117 ! 118 118 ! ! mean ice/snow thickness 119 h tm_i(:,:) = vt_i(:,:) * z1_at_i(:,:)120 h tm_s(:,:) = vt_s(:,:) * z1_at_i(:,:)119 hm_i(:,:) = vt_i(:,:) * z1_at_i(:,:) 120 hm_s(:,:) = vt_s(:,:) * z1_at_i(:,:) 121 121 ! 122 122 ! ! mean temperature (K), salinity and age … … 125 125 om_i (:,:) = SUM( oa_i(:,:,:) , dim=3 ) * z1_at_i(:,:) 126 126 ! 127 tm_i 128 sm t_i(:,:) = 0._wp127 tm_i(:,:) = 0._wp 128 sm_i(:,:) = 0._wp 129 129 DO jl = 1, jpl 130 130 DO jk = 1, nlay_i 131 tm_i (:,:) = tm_i (:,:) + r1_nlay_i * t_i(:,:,jk,jl) * v_i(:,:,jl) * z1_vt_i(:,:) 132 smt_i(:,:) = smt_i(:,:) + r1_nlay_i * s_i(:,:,jk,jl) * v_i(:,:,jl) * z1_vt_i(:,:) 133 END DO 134 END DO 135 ! 136 !!gm QUESTION 1 : why salinity is named smt_i and not just sm_i ? since the 4D field is named s_i. (NB for temp: tm_i, t_i) 131 tm_i(:,:) = tm_i(:,:) + r1_nlay_i * t_i (:,:,jk,jl) * v_i(:,:,jl) * z1_vt_i(:,:) 132 sm_i(:,:) = sm_i(:,:) + r1_nlay_i * sz_i(:,:,jk,jl) * v_i(:,:,jl) * z1_vt_i(:,:) 133 END DO 134 END DO 137 135 ! 138 136 DEALLOCATE( z1_at_i , z1_vt_i ) … … 152 150 REAL(wp) :: ze_i ! local scalars 153 151 REAL(wp) :: ze_s, ztmelts, zbbb, zccc ! - - 154 REAL(wp) :: zhmax, z1_zhmax , zsm_i! - -152 REAL(wp) :: zhmax, z1_zhmax ! - - 155 153 REAL(wp) :: zlay_i, zlay_s ! - - 156 154 REAL(wp), DIMENSION(jpi,jpj,jpl) :: z1_a_i, z1_v_i … … 189 187 190 188 IF( nn_icesal == 2 ) THEN !--- salinity (with a minimum value imposed everywhere) 191 WHERE( v_i(:,:,:) > epsi20 ) ; s m_i(:,:,:) = MAX( rn_simin , MIN( rn_simax, smv_i(:,:,:) * z1_v_i(:,:,:) ) )192 ELSEWHERE ; s m_i(:,:,:) = rn_simin189 WHERE( v_i(:,:,:) > epsi20 ) ; s_i(:,:,:) = MAX( rn_simin , MIN( rn_simax, sv_i(:,:,:) * z1_v_i(:,:,:) ) ) 190 ELSEWHERE ; s_i(:,:,:) = rn_simin 193 191 END WHERE 194 192 ENDIF … … 206 204 IF ( v_i(ji,jj,jl) > epsi20 ) THEN !--- icy area 207 205 ! 208 ze_i = e_i (ji,jj,jk,jl) * z1_v_i(ji,jj,jl) * zlay_i ! Energy of melting e(S,T) [J.m-3]209 ztmelts = - s _i(ji,jj,jk,jl) * tmut ! Ice layer melt temperature [C]206 ze_i = e_i (ji,jj,jk,jl) * z1_v_i(ji,jj,jl) * zlay_i ! Energy of melting e(S,T) [J.m-3] 207 ztmelts = - sz_i(ji,jj,jk,jl) * tmut ! Ice layer melt temperature [C] 210 208 ! Conversion q(S,T) -> T (second order equation) 211 209 zbbb = ( rcp - cpic ) * ztmelts + ze_i * r1_rhoic - lfus … … 253 251 !!------------------------------------------------------------------- 254 252 ! 255 v_i 256 v_s 257 s mv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:)253 v_i (:,:,:) = h_i(:,:,:) * a_i(:,:,:) 254 v_s (:,:,:) = h_s(:,:,:) * a_i(:,:,:) 255 sv_i(:,:,:) = s_i(:,:,:) * v_i(:,:,:) 258 256 ! 259 257 END SUBROUTINE ice_var_eqv2glo … … 290 288 CASE( 1 ) ! constant salinity in time and space ! 291 289 ! !---------------------------------------! 292 s _i(:,:,:,:) = rn_icesal293 s m_i(:,:,:) = rn_icesal290 sz_i(:,:,:,:) = rn_icesal 291 s_i(:,:,:) = rn_icesal 294 292 ! 295 293 ! !---------------------------------------------! … … 301 299 DO jl = 1, jpl 302 300 DO jk = 1, nlay_i 303 s _i(:,:,jk,jl) = sm_i(:,:,jl)301 sz_i(:,:,jk,jl) = s_i(:,:,jl) 304 302 END DO 305 303 END DO 306 304 ! ! Slope of the linear profile 307 WHERE( h_i(:,:,:) > epsi20 ) ; z_slope_s(:,:,:) = 2._wp * s m_i(:,:,:) / h_i(:,:,:)305 WHERE( h_i(:,:,:) > epsi20 ) ; z_slope_s(:,:,:) = 2._wp * s_i(:,:,:) / h_i(:,:,:) 308 306 ELSEWHERE ; z_slope_s(:,:,:) = 0._wp 309 307 END WHERE … … 313 311 DO jj = 1, jpj 314 312 DO ji = 1, jpi 315 zalpha(ji,jj,jl) = MAX( 0._wp , MIN( ( zsi1 - s m_i(ji,jj,jl) ) * z1_dS , 1._wp ) )313 zalpha(ji,jj,jl) = MAX( 0._wp , MIN( ( zsi1 - s_i(ji,jj,jl) ) * z1_dS , 1._wp ) ) 316 314 ! ! force a constant profile when SSS too low (Baltic Sea) 317 IF( 2._wp * s m_i(ji,jj,jl) >= sss_m(ji,jj) ) zalpha(ji,jj,jl) = 0._wp315 IF( 2._wp * s_i(ji,jj,jl) >= sss_m(ji,jj) ) zalpha(ji,jj,jl) = 0._wp 318 316 END DO 319 317 END DO … … 327 325 ! ! linear profile with 0 surface value 328 326 zs0 = z_slope_s(ji,jj,jl) * ( REAL(jk,wp) - 0.5_wp ) * h_i(ji,jj,jl) * r1_nlay_i 329 zs = zalpha(ji,jj,jl) * zs0 + ( 1._wp - zalpha(ji,jj,jl) ) * s m_i(ji,jj,jl) ! weighting the profile330 s _i(ji,jj,jk,jl) = MIN( rn_simax, MAX( zs, rn_simin ) )327 zs = zalpha(ji,jj,jl) * zs0 + ( 1._wp - zalpha(ji,jj,jl) ) * s_i(ji,jj,jl) ! weighting the profile 328 sz_i(ji,jj,jk,jl) = MIN( rn_simax, MAX( zs, rn_simin ) ) 331 329 END DO 332 330 END DO … … 340 338 ! !-------------------------------------------! (mean = 2.30) 341 339 ! 342 s m_i(:,:,:) = 2.30_wp340 s_i(:,:,:) = 2.30_wp 343 341 !!gm Remark: if we keep the case 3, then compute an store one for all time-step 344 342 !! a array S_prof(1:nlay_i) containing the calculation and just do: 345 343 ! DO jk = 1, nlay_i 346 ! s _i(:,:,jk,:) = S_prof(jk)344 ! sz_i(:,:,jk,:) = S_prof(jk) 347 345 ! END DO 348 346 !!gm end … … 351 349 DO jk = 1, nlay_i 352 350 zargtemp = ( REAL(jk,wp) - 0.5_wp ) * r1_nlay_i 353 s _i(:,:,jk,jl) = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) ) )351 sz_i(:,:,jk,jl) = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) ) ) 354 352 END DO 355 353 END DO … … 380 378 CASE( 1 ) ! constant salinity in time and space ! 381 379 ! !---------------------------------------! 382 s _i_1d(1:nidx,:) = rn_icesal380 sz_i_1d(1:nidx,:) = rn_icesal 383 381 ! 384 382 ! !---------------------------------------------! … … 389 387 ! 390 388 ! ! Slope of the linear profile 391 WHERE( h_i_1d(1:nidx) > epsi20 ) ; z_slope_s(1:nidx) = 2._wp * s m_i_1d(1:nidx) / h_i_1d(1:nidx)389 WHERE( h_i_1d(1:nidx) > epsi20 ) ; z_slope_s(1:nidx) = 2._wp * s_i_1d(1:nidx) / h_i_1d(1:nidx) 392 390 ELSEWHERE ; z_slope_s(1:nidx) = 0._wp 393 391 END WHERE … … 395 393 z1_dS = 1._wp / ( zsi1 - zsi0 ) 396 394 DO ji = 1, nidx 397 zalpha(ji) = MAX( 0._wp , MIN( ( zsi1 - s m_i_1d(ji) ) * z1_dS , 1._wp ) )395 zalpha(ji) = MAX( 0._wp , MIN( ( zsi1 - s_i_1d(ji) ) * z1_dS , 1._wp ) ) 398 396 ! ! force a constant profile when SSS too low (Baltic Sea) 399 IF( 2._wp * s m_i_1d(ji) >= sss_1d(ji) ) zalpha(ji) = 0._wp397 IF( 2._wp * s_i_1d(ji) >= sss_1d(ji) ) zalpha(ji) = 0._wp 400 398 END DO 401 399 ! … … 405 403 ! ! linear profile with 0 surface value 406 404 zs0 = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * h_i_1d(ji) * r1_nlay_i 407 zs = zalpha(ji) * zs0 + ( 1._wp - zalpha(ji) ) * s m_i_1d(ji)408 s _i_1d(ji,jk) = MIN( rn_simax , MAX( zs , rn_simin ) )405 zs = zalpha(ji) * zs0 + ( 1._wp - zalpha(ji) ) * s_i_1d(ji) 406 sz_i_1d(ji,jk) = MIN( rn_simax , MAX( zs , rn_simin ) ) 409 407 END DO 410 408 END DO … … 416 414 ! !-------------------------------------------! (mean = 2.30) 417 415 ! 418 s m_i_1d(1:nidx) = 2.30_wp416 s_i_1d(1:nidx) = 2.30_wp 419 417 ! 420 418 !!gm cf remark in ice_var_salprof routine, CASE( 3 ) … … 423 421 zsal = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**( 0.407_wp / ( 0.573_wp + zargtemp ) ) ) ) 424 422 DO ji = 1, nidx 425 s _i_1d(ji,jk) = zsal423 sz_i_1d(ji,jk) = zsal 426 424 END DO 427 425 END DO … … 452 450 ! 453 451 WHERE( a_i(:,:,jl) < epsi10 .OR. v_i(:,:,jl) < epsi10 .OR. h_i(:,:,jl) < epsi10 ) ; zswitch(:,:) = 0._wp 454 ELSEWHERE 452 ELSEWHERE ; zswitch(:,:) = 1._wp 455 453 END WHERE 456 454 … … 469 467 DO ji = 1 , jpi 470 468 ! update exchanges with ocean 471 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * s mv_i(ji,jj,jl) * rhoic * r1_rdtice472 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i 473 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s 474 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s 469 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * sv_i(ji,jj,jl) * rhoic * r1_rdtice 470 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i (ji,jj,jl) * rhoic * r1_rdtice 471 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhosn * r1_rdtice 472 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s (ji,jj,1,jl) * r1_rdtice ! W.m-2 <0 475 473 !----------------------------------------------------------------- 476 474 ! Zap snow energy … … 482 480 ! zap ice and snow volume, add water and salt to ocean 483 481 !----------------------------------------------------------------- 484 ato_i(ji,jj) = a_i 485 a_i (ji,jj,jl) = a_i 486 v_i (ji,jj,jl) = v_i 487 v_s (ji,jj,jl) = v_s 488 t_su (ji,jj,jl) = t_su 489 oa_i (ji,jj,jl) = oa_i 490 s mv_i(ji,jj,jl) = smv_i(ji,jj,jl) * zswitch(ji,jj)482 ato_i(ji,jj) = a_i (ji,jj,jl) * ( 1._wp - zswitch(ji,jj) ) + ato_i(ji,jj) 483 a_i (ji,jj,jl) = a_i (ji,jj,jl) * zswitch(ji,jj) 484 v_i (ji,jj,jl) = v_i (ji,jj,jl) * zswitch(ji,jj) 485 v_s (ji,jj,jl) = v_s (ji,jj,jl) * zswitch(ji,jj) 486 t_su (ji,jj,jl) = t_su(ji,jj,jl) * zswitch(ji,jj) + t_bo(ji,jj) * ( 1._wp - zswitch(ji,jj) ) 487 oa_i (ji,jj,jl) = oa_i(ji,jj,jl) * zswitch(ji,jj) 488 sv_i (ji,jj,jl) = sv_i(ji,jj,jl) * zswitch(ji,jj) 491 489 492 490 h_i (ji,jj,jl) = h_i (ji,jj,jl) * zswitch(ji,jj) … … 685 683 DO jk = 1, nlay_i 686 684 WHERE( t_i(:,:,jk,jl) < rt0 - epsi10 ) 687 bv_i(:,:,jl) = bv_i(:,:,jl) - tmut * s _i(:,:,jk,jl) * r1_nlay_i / ( t_i(:,:,jk,jl) - rt0 )685 bv_i(:,:,jl) = bv_i(:,:,jl) - tmut * sz_i(:,:,jk,jl) * r1_nlay_i / ( t_i(:,:,jk,jl) - rt0 ) 688 686 END WHERE 689 687 END DO
Note: See TracChangeset
for help on using the changeset viewer.