Changeset 9750
- Timestamp:
- 2018-06-06T14:49:34+02:00 (7 years ago)
- Location:
- NEMO/trunk/src/ICE
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/ice1d.F90
r9604 r9750 112 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_bo_i !: Bottom Conduction flux 113 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_s_tot !: Snow accretion/ablation [m] 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_surf !: Ice surface accretion/ablation [m] 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_sum !: Ice surface ablation [m] 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_itm !: Ice internal ablation [m] 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bom !: Ice bottom ablation [m] 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bog !: Ice bottom accretion [m] 115 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_sub !: Ice surface sublimation [m] 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bott !: Ice bottom accretion/ablation [m]117 119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_s_mlt !: Snow melt [m] 118 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_snowice !: Snow ice formation [m of ice] … … 203 205 ! 204 206 ii = ii + 1 205 ALLOCATE( t_su_1d (jpij) , t_si_1d (jpij) , a_i_1d (jpij) , a_ib_1d(jpij) ,&206 & h_i_1d (jpij) , h_ib_1d (jpij) , h_s_1d (jpij) , fc_su (jpij) , fc_bo_i(jpij) , &207 & dh_s_tot (jpij) , dh_i_surf(jpij) , dh_i_sub (jpij) ,&208 & dh_i_ bott(jpij) , dh_s_mlt (jpij) , dh_snowice(jpij) , s_i_1d (jpij) , s_i_new(jpij) , &209 & a_ip_1d (jpij) , v_ip_1d (jpij) , v_i_1d (jpij) , v_s_1d (jpij) ,&210 & h_ip_1d (jpij) , a_ip_frac_1d(jpij) ,&211 & sv_i_1d (jpij) , oa_i_1d(jpij) , STAT=ierr(ii) )207 ALLOCATE( t_su_1d (jpij) , t_si_1d (jpij) , a_i_1d (jpij) , a_ib_1d (jpij) , & 208 & h_i_1d (jpij) , h_ib_1d (jpij) , h_s_1d (jpij) , fc_su (jpij) , fc_bo_i (jpij) , & 209 & dh_s_tot(jpij) , dh_i_sum(jpij) , dh_i_itm (jpij) , dh_i_bom(jpij) , dh_i_bog(jpij) , & 210 & dh_i_sub(jpij) , dh_s_mlt(jpij) , dh_snowice(jpij) , s_i_1d (jpij) , s_i_new (jpij) , & 211 & a_ip_1d (jpij) , v_ip_1d (jpij) , v_i_1d (jpij) , v_s_1d (jpij) , & 212 & h_ip_1d (jpij) , a_ip_frac_1d(jpij) , & 213 & sv_i_1d (jpij) , oa_i_1d (jpij) , STAT=ierr(ii) ) 212 214 ! 213 215 ii = ii + 1 -
NEMO/trunk/src/ICE/icethd.F90
r9656 r9750 77 77 !! - call ice_thd_sal for ice desalination 78 78 !! - call ice_thd_temp to retrieve temperature from ice enthalpy 79 !! - call ice_thd_ lamfor extra lateral ice melt if active virtual thickness distribution79 !! - call ice_thd_mono for extra lateral ice melt if active virtual thickness distribution 80 80 !! - call ice_thd_da for lateral ice melt 81 81 !! - back to the geographic grid … … 224 224 ! ! --- & Change units of e_i, e_s from J/m2 to J/m3 --- ! 225 225 ! 226 s_i_new (1:npti) = 0._wp ; dh_s_tot (1:npti) = 0._wp ! --- some init --- ! (important to have them here) 227 dh_i_surf (1:npti) = 0._wp ; dh_i_bott(1:npti) = 0._wp 228 dh_snowice(1:npti) = 0._wp ; dh_i_sub (1:npti) = 0._wp ; dh_s_mlt(1:npti) = 0._wp 226 s_i_new (1:npti) = 0._wp ; dh_s_tot(1:npti) = 0._wp ! --- some init --- ! (important to have them here) 227 dh_i_sum (1:npti) = 0._wp ; dh_i_bom(1:npti) = 0._wp ; dh_i_itm (1:npti) = 0._wp 228 dh_i_sub (1:npti) = 0._wp ; dh_i_bog(1:npti) = 0._wp 229 dh_snowice(1:npti) = 0._wp ; dh_s_mlt(1:npti) = 0._wp 229 230 ! 230 231 IF( ln_icedH ) THEN ! --- growing/melting --- ! … … 239 240 CALL ice_thd_temp ! --- temperature update --- ! 240 241 ! 241 !!gm please create a new logical (l_thd_ lamor a better explicit name) set one for all in icestp.F90 module242 !!gm l_thd_ lam= ln_icedH .AND. ( ( nn_virtual_itd == 1 .OR. nn_virtual_itd == 4 ) .AND. jpl == 1 )242 !!gm please create a new logical (l_thd_mono or a better explicit name) set one for all in icestp.F90 module 243 !!gm l_thd_mono = ln_icedH .AND. ( ( nn_virtual_itd == 1 .OR. nn_virtual_itd == 4 ) .AND. jpl == 1 ) 243 244 !!gm by the way, the different options associated with nn_virtual_itd =1 to 4 are quite impossible to identify 244 245 !!gm more comment to add when ready the namelist, with an explicit print in the ocean.output 245 246 IF( ln_icedH ) THEN 246 247 IF ( ( nn_virtual_itd == 1 .OR. nn_virtual_itd == 3 ) .AND. jpl == 1 ) THEN 247 CALL ice_thd_ lam! --- extra lateral melting if virtual_itd --- !248 CALL ice_thd_mono ! --- extra lateral melting if virtual_itd --- ! 248 249 END IF 249 250 END IF … … 307 308 308 309 309 SUBROUTINE ice_thd_ lam310 !!----------------------------------------------------------------------- 311 !! *** ROUTINE ice_thd_ lam***310 SUBROUTINE ice_thd_mono 311 !!----------------------------------------------------------------------- 312 !! *** ROUTINE ice_thd_mono *** 312 313 !! 313 314 !! ** Purpose : Lateral melting in case virtual_itd … … 321 322 ! 322 323 DO ji = 1, npti 323 zdh_mel = MIN( 0._wp, dh_i_ surf(ji) + dh_i_bott(ji) + dh_snowice(ji) + dh_i_sub(ji) )324 zdh_mel = MIN( 0._wp, dh_i_itm(ji) + dh_i_sum(ji) + dh_i_bom(ji) + dh_snowice(ji) + dh_i_sub(ji) ) 324 325 IF( zdh_mel < 0._wp .AND. a_i_1d(ji) > 0._wp ) THEN 325 326 zvi = a_i_1d(ji) * h_i_1d(ji) … … 338 339 END DO 339 340 ! 340 END SUBROUTINE ice_thd_ lam341 END SUBROUTINE ice_thd_mono 341 342 342 343 -
NEMO/trunk/src/ICE/icethd_dh.F90
r9604 r9750 333 333 zfmdt = - zdeltah(ji,jk) * rhoic ! Mass flux x time step > 0 334 334 335 dh_i_ surf(ji) = dh_i_surf(ji) + zdeltah(ji,jk) ! Cumulate surface melt335 dh_i_itm(ji) = dh_i_itm(ji) + zdeltah(ji,jk) ! Cumulate internal melting 336 336 337 337 zfmdt = - rhoic * zdeltah(ji,jk) ! Recompute mass flux [kg/m2, >0] … … 357 357 zq_su(ji) = MAX( 0._wp , zq_su(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat 358 358 359 dh_i_su rf(ji) = dh_i_surf(ji) + zdeltah(ji,jk)! Cumulate surface melt359 dh_i_sum(ji) = dh_i_sum(ji) + zdeltah(ji,jk) ! Cumulate surface melt 360 360 361 361 zfmdt = - rhoic * zdeltah(ji,jk) ! Recompute mass flux [kg/m2, >0] … … 404 404 ! update ice thickness 405 405 DO ji = 1, npti 406 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_su rf(ji) + dh_i_sub(ji) )406 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_sum(ji) + dh_i_itm(ji) + dh_i_sub(ji) ) 407 407 END DO 408 408 … … 422 422 ! If salinity varies in time, an iterative procedure is required, because 423 423 ! the involved quantities are inter-dependent. 424 ! Basal growth (dh_i_bo tt) depends upon new ice specific enthalpy (zEi),425 ! which depends on forming ice salinity (s_i_new), which depends on dh/dt (dh_i_bo tt)424 ! Basal growth (dh_i_bog) depends upon new ice specific enthalpy (zEi), 425 ! which depends on forming ice salinity (s_i_new), which depends on dh/dt (dh_i_bog) 426 426 ! -> need for an iterative procedure, which converges quickly 427 427 … … 437 437 !--- zswi12 if 2.0e-8 < dh/dt < 3.6e-7 438 438 !--- zswi2 if dh/dt > 3.6e-7 439 zgrr = MIN( 1.0e-3, MAX ( dh_i_bo tt(ji) * r1_rdtice , epsi10 ) )439 zgrr = MIN( 1.0e-3, MAX ( dh_i_bog(ji) * r1_rdtice , epsi10 ) ) 440 440 zswi2 = MAX( 0._wp , SIGN( 1._wp , zgrr - 3.6e-7 ) ) 441 441 zswi12 = MAX( 0._wp , SIGN( 1._wp , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) … … 457 457 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 458 458 459 dh_i_bo tt(ji)= rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) )459 dh_i_bog(ji) = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 460 460 461 461 END DO 462 462 ! Contribution to Energy and Salt Fluxes 463 zfmdt = - rhoic * dh_i_bo tt(ji)! Mass flux x time step (kg/m2, < 0)463 zfmdt = - rhoic * dh_i_bog(ji) ! Mass flux x time step (kg/m2, < 0) 464 464 465 465 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice ! Heat flux to the ocean [W.m-2], >0 466 466 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], <0 467 467 468 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bo tt(ji) * s_i_new(ji) * r1_rdtice! Salt flux, <0469 470 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bo tt(ji) * r1_rdtice! Mass flux, <0468 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bog(ji) * s_i_new(ji) * r1_rdtice ! Salt flux, <0 469 470 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bog(ji) * r1_rdtice ! Mass flux, <0 471 471 472 472 ! update heat content (J.m-2) and layer thickness 473 eh_i_old(ji,nlay_i+1) = eh_i_old(ji,nlay_i+1) + dh_i_bo tt(ji) * (-zEi * rhoic)474 h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bo tt(ji)473 eh_i_old(ji,nlay_i+1) = eh_i_old(ji,nlay_i+1) + dh_i_bog(ji) * (-zEi * rhoic) 474 h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bog(ji) 475 475 476 476 ENDIF … … 495 495 ! this should normally not happen, but sometimes, heat diffusion leads to this 496 496 497 dh_i_ bott (ji) = dh_i_bott(ji) + zdeltah(ji,jk)497 dh_i_itm (ji) = dh_i_itm(ji) + zdeltah(ji,jk) 498 498 499 499 zfmdt = - zdeltah(ji,jk) * rhoic ! Mass flux x time step > 0 … … 523 523 zq_bo(ji) = MAX( 0._wp , zq_bo(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat. MAX is necessary for roundup errors 524 524 525 dh_i_bo tt(ji) = dh_i_bott(ji) + zdeltah(ji,jk) ! Update basal melt525 dh_i_bom(ji) = dh_i_bom(ji) + zdeltah(ji,jk) ! Update basal melt 526 526 527 527 zfmdt = - zdeltah(ji,jk) * rhoic ! Mass flux x time step > 0 … … 549 549 ! -------------------------- 550 550 DO ji = 1, npti 551 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_bo tt(ji) )551 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_bog(ji) + dh_i_bom(ji) ) 552 552 END DO 553 553 -
NEMO/trunk/src/ICE/icethd_pnd.F90
r9656 r9750 157 157 ! 158 158 ! available meltwater for melt ponding [m, >0] and fraction 159 zdv_mlt = -( dh_i_su rf(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji)159 zdv_mlt = -( dh_i_sum(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji) 160 160 zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji) ! from CICE doc 161 161 !zfr_mlt = zrmin + zrmax * a_i_1d(ji) ! from Holland paper -
NEMO/trunk/src/ICE/icethd_sal.F90
r9656 r9750 77 77 !--------------------------------------------------------- 78 78 IF( h_i_1d(ji) > 0._wp ) THEN 79 zs_sni = sss_1d(ji) * ( rhoic - rhosn ) * r1_rhoic 80 zs_i_si = ( zs_sni - s_i_1d(ji) ) * dh_snowice(ji)/ h_i_1d(ji) ! snow-ice81 zs_i_bg = ( s_i_new(ji) - s_i_1d(ji) ) * MAX( 0._wp, dh_i_bott(ji)) / h_i_1d(ji) ! bottom growth79 zs_sni = sss_1d(ji) * ( rhoic - rhosn ) * r1_rhoic ! Salinity of snow ice 80 zs_i_si = ( zs_sni - s_i_1d(ji) ) * dh_snowice(ji) / h_i_1d(ji) ! snow-ice 81 zs_i_bg = ( s_i_new(ji) - s_i_1d(ji) ) * dh_i_bog (ji) / h_i_1d(ji) ! bottom growth 82 82 ! Update salinity (nb: salt flux already included in icethd_dh) 83 83 s_i_1d(ji) = s_i_1d(ji) + zs_i_bg + zs_i_si -
NEMO/trunk/src/ICE/iceupdate.F90
r9604 r9750 263 263 IF( iom_use('hfxbog' ) ) CALL iom_put ("hfxbog" , hfx_bog ) ! heat flux used for ice bottom growth 264 264 IF( iom_use('hfxbom' ) ) CALL iom_put ("hfxbom" , hfx_bom ) ! heat flux used for ice bottom melt 265 IF( iom_use('hfxsum' ) ) CALL iom_put ("hfxsum" , hfx_sum ) ! heat flux used for ice surface growth265 IF( iom_use('hfxsum' ) ) CALL iom_put ("hfxsum" , hfx_sum ) ! heat flux used for ice surface melt 266 266 IF( iom_use('hfxopw' ) ) CALL iom_put ("hfxopw" , hfx_opw ) ! heat flux used for ice formation in open water 267 267 IF( iom_use('hfxdif' ) ) CALL iom_put ("hfxdif" , hfx_dif ) ! heat flux used for ice temperature change
Note: See TracChangeset
for help on using the changeset viewer.