Changeset 9913
- Timestamp:
- 2018-07-10T15:02:00+02:00 (5 years ago)
- Location:
- NEMO/trunk/src/ICE
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/ice.F90
r9912 r9913 210 210 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_bo !: Sea-Ice bottom temperature [Kelvin] 211 211 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qlead !: heat balance of the lead (or of the open ocean) 212 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhtur!: net downward heat flux from the ice to the ocean212 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsb_ice_bot !: net downward heat flux from the ice to the ocean 213 213 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhld !: heat flux from the lead used for bottom melting 214 214 … … 360 360 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: t_si !: Temperature at Snow-ice interface (K) 361 361 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tm_si !: mean temperature at the snow-ice interface (K) 362 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_fc_bo !: Bottomconduction flux (W/m2)363 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_fc_su!: Surface conduction flux (W/m2)362 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qcn_ice_bot !: Bottom conduction flux (W/m2) 363 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qcn_ice_top !: Surface conduction flux (W/m2) 364 364 365 365 ! … … 387 387 388 388 ii = ii + 1 389 ALLOCATE( t_bo (jpi,jpj) , wfx_snw_sni(jpi,jpj) , &390 & wfx_snw (jpi,jpj) , wfx_snw_dyn(jpi,jpj) , wfx_snw_sum(jpi,jpj) , wfx_snw_sub(jpi,jpj) , &391 & wfx_ice (jpi,jpj) , wfx_sub (jpi,jpj) , wfx_ice_sub(jpi,jpj) , wfx_lam (jpi,jpj) , &392 & wfx_pnd (jpi,jpj) , &393 & wfx_bog (jpi,jpj) , wfx_dyn (jpi,jpj) , wfx_bom(jpi,jpj) , wfx_sum(jpi,jpj) , &394 & wfx_res (jpi,jpj) , wfx_sni (jpi,jpj) , wfx_opw(jpi,jpj) , wfx_spr(jpi,jpj) , &395 & afx_tot (jpi,jpj) , rn_amax_2d(jpi,jpj), &396 & fhtur(jpi,jpj) , qlead (jpi,jpj) , &397 & sfx_res (jpi,jpj) , sfx_bri (jpi,jpj) , sfx_dyn(jpi,jpj) , sfx_sub(jpi,jpj) , sfx_lam(jpi,jpj) , &398 & sfx_bog (jpi,jpj) , sfx_bom (jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) , &399 & hfx_res (jpi,jpj) , hfx_snw (jpi,jpj) , hfx_sub(jpi,jpj) , &400 & qt_atm_oi (jpi,jpj) , qt_oce_ai (jpi,jpj) , fhld (jpi,jpj) , &401 & hfx_sum (jpi,jpj) , hfx_bom (jpi,jpj) , hfx_bog(jpi,jpj) , hfx_dif(jpi,jpj) , &402 & hfx_opw (jpi,jpj) , hfx_thd (jpi,jpj) , hfx_dyn(jpi,jpj) , hfx_spr(jpi,jpj) , &389 ALLOCATE( t_bo (jpi,jpj) , wfx_snw_sni(jpi,jpj) , & 390 & wfx_snw (jpi,jpj) , wfx_snw_dyn(jpi,jpj) , wfx_snw_sum(jpi,jpj) , wfx_snw_sub(jpi,jpj) , & 391 & wfx_ice (jpi,jpj) , wfx_sub (jpi,jpj) , wfx_ice_sub(jpi,jpj) , wfx_lam (jpi,jpj) , & 392 & wfx_pnd (jpi,jpj) , & 393 & wfx_bog (jpi,jpj) , wfx_dyn (jpi,jpj) , wfx_bom(jpi,jpj) , wfx_sum(jpi,jpj) , & 394 & wfx_res (jpi,jpj) , wfx_sni (jpi,jpj) , wfx_opw(jpi,jpj) , wfx_spr(jpi,jpj) , & 395 & afx_tot (jpi,jpj) , rn_amax_2d(jpi,jpj), & 396 & qsb_ice_bot(jpi,jpj) , qlead (jpi,jpj) , & 397 & sfx_res (jpi,jpj) , sfx_bri (jpi,jpj) , sfx_dyn(jpi,jpj) , sfx_sub(jpi,jpj) , sfx_lam(jpi,jpj) , & 398 & sfx_bog (jpi,jpj) , sfx_bom (jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) , & 399 & hfx_res (jpi,jpj) , hfx_snw (jpi,jpj) , hfx_sub(jpi,jpj) , & 400 & qt_atm_oi (jpi,jpj) , qt_oce_ai (jpi,jpj) , fhld (jpi,jpj) , & 401 & hfx_sum (jpi,jpj) , hfx_bom (jpi,jpj) , hfx_bog(jpi,jpj) , hfx_dif(jpi,jpj) , & 402 & hfx_opw (jpi,jpj) , hfx_thd (jpi,jpj) , hfx_dyn(jpi,jpj) , hfx_spr(jpi,jpj) , & 403 403 & hfx_err_dif(jpi,jpj) , hfx_err_rem(jpi,jpj) , wfx_err_sub(jpi,jpj) , STAT=ierr(ii) ) 404 404 … … 451 451 ! * SIMIP diagnostics 452 452 ii = ii + 1 453 ALLOCATE( t_si (jpi,jpj,jpl) , tm_si(jpi,jpj) , diag_fc_bo(jpi,jpj) , diag_fc_su(jpi,jpj) , STAT = ierr(ii) )453 ALLOCATE( t_si (jpi,jpj,jpl) , tm_si(jpi,jpj) , qcn_ice_bot(jpi,jpj) , qcn_ice_top(jpi,jpj) , STAT = ierr(ii) ) 454 454 455 455 ice_alloc = MAXVAL( ierr(:) ) -
NEMO/trunk/src/ICE/ice1d.F90
r9912 r9913 93 93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_dyn_1d 94 94 95 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sprecip_1d !: <==> the 2D sprecip96 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_1d !: <==> the 2D at_i97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ato_i_1d !: <==> the 2D ato_i98 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhtur_1d !: <==> the 2D fhtur99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhld_1d !: <==> the 2D fhld100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dqns_ice_1d !: <==> the 2D dqns_ice101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: evap_ice_1d !: <==> the 2D evap_ice102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qprec_ice_1d !: <==> the 2D qprec_ice103 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_su_1d !: <==> the 2D t_su105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_si_1d !: <==> the 2D t_si106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_i_1d !: <==> the 2D a_i107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_ib_1d !: <==> the 2D a_i_b108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_i_1d !:109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_ib_1d !:110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_s_1d !:95 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sprecip_1d 96 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_1d 97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ato_i_1d 98 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qsb_ice_bot_1d 99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhld_1d 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dqns_ice_1d 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: evap_ice_1d 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qprec_ice_1d 103 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_su_1d 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_si_1d 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_i_1d 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_ib_1d 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_i_1d 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_ib_1d 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_s_1d 111 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_su !: Surface Conduction flux 112 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_bo_i !: Bottom Conduction flux … … 140 140 141 141 ! Conduction flux diagnostics (SIMIP) 142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: diag_fc_bo_1d !: <==> the 2D diag_fc_bo143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: diag_fc_su_1d !: <==> the 2D diag_fc_su142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qcn_ice_bot_1d 143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qcn_ice_top_1d 144 144 145 145 ! surface fields from the ocean … … 194 194 ii = ii + 1 195 195 ALLOCATE( sprecip_1d (jpij) , at_i_1d (jpij) , ato_i_1d (jpij) , & 196 & fhtur_1d(jpij) , wfx_snw_sni_1d(jpij) , wfx_spr_1d (jpij) , wfx_snw_sum_1d(jpij) , &196 & qsb_ice_bot_1d(jpij) , wfx_snw_sni_1d(jpij) , wfx_spr_1d (jpij) , wfx_snw_sum_1d(jpij) , & 197 197 & fhld_1d (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d (jpij) , wfx_bom_1d (jpij) , & 198 198 & wfx_sum_1d (jpij) , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) , wfx_res_1d (jpij) , & … … 219 219 ! 220 220 ii = ii + 1 221 ALLOCATE( diag_fc_bo_1d(jpij) , diag_fc_su_1d(jpij), STAT=ierr(ii) )221 ALLOCATE( qcn_ice_bot_1d(jpij) , qcn_ice_top_1d(jpij) , STAT=ierr(ii) ) 222 222 ! 223 223 ii = ii + 1 -
NEMO/trunk/src/ICE/icectl.F90
r9912 r9913 579 579 WRITE(numout,*) ' hfx_thd : ', hfx_thd(ji,jj) 580 580 WRITE(numout,*) ' hfx_res : ', hfx_res(ji,jj) 581 WRITE(numout,*) ' fhtur : ', fhtur(ji,jj)581 WRITE(numout,*) ' qsb_ice_bot : ', qsb_ice_bot(ji,jj) 582 582 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_rdtice 583 583 WRITE(numout,*) -
NEMO/trunk/src/ICE/icestp.F90
r9872 r9913 427 427 428 428 ! SIMIP diagnostics 429 diag_fc_bo(:,:) = 0._wp ; diag_fc_su(:,:) = 0._wp429 qcn_ice_bot(:,:) = 0._wp ; qcn_ice_top(:,:) = 0._wp 430 430 t_si(:,:,:) = rt0 ! temp at the ice-snow interface 431 431 -
NEMO/trunk/src/ICE/icethd.F90
r9912 r9913 157 157 ! --- Sensible ocean-to-ice heat flux (W/m2) 158 158 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 159 fhtur(ji,jj) = rswitch * rau0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2160 161 fhtur(ji,jj) = rswitch * MIN( fhtur(ji,jj), - zqfr_neg * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) )162 ! upper bound for fhtur: the heat retrieved from the ocean must be smaller than the heat necessary to reach163 ! the freezing point, so that we do not have SST < T_freeze164 ! This implies: - ( fhtur(ji,jj) * at_i(ji,jj) * rtdice ) - zqfr >= 0165 166 !-- Energy Budget of the leads (J.m-2), source of lateral accretion. Must be < 0 to form ice167 qlead(ji,jj) = MIN( 0._wp , zqld - ( fhtur(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr )159 qsb_ice_bot(ji,jj) = rswitch * rau0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 160 161 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 162 ! upper bound for qsb_ice_bot: the heat retrieved from the ocean must be smaller than the heat necessary to reach 163 ! the freezing point, so that we do not have SST < T_freeze 164 ! This implies: - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rtdice ) - zqfr >= 0 165 166 !-- Energy Budget of the leads (J.m-2), source of ice growth in open water. Must be < 0 to form ice 167 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 168 168 169 169 ! If there is ice and leads are warming, then transfer energy from the lead budget and use it for bottom melting … … 185 185 ! In case we bypass growing/melting from top and bottom: we suppose ice is impermeable => ocean is isolated from atmosphere 186 186 IF( .NOT. ln_icedH ) THEN 187 qt_atm_oi (:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:)188 fhtur(:,:) = 0._wp189 fhld (:,:) = 0._wp187 qt_atm_oi (:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 188 qsb_ice_bot(:,:) = 0._wp 189 fhld (:,:) = 0._wp 190 190 ENDIF 191 191 … … 193 193 ! Net heat flux on top of the ocean after ice thermo (1st step) [W.m-2] 194 194 ! --------------------------------------------------------------------- 195 ! First step here : non solar + precip - qlead - q turb195 ! First step here : non solar + precip - qlead - qsensible 196 196 ! Second step in icethd_dh : heat remaining if total melt (zq_rema) 197 197 ! Third step in iceupdate.F90 : heat from ice-ocean mass exchange (zf_mass) + solar 198 198 qt_oce_ai(:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + qemp_oce(:,:) & ! Non solar heat flux received by the ocean 199 199 & - qlead(:,:) * r1_rdtice & ! heat flux taken from the ocean where there is open water ice formation 200 & - at_i (:,:) * fhtur(:,:) & ! heat flux taken by turbulence201 & - at_i (:,:) * fhld(:,:)! heat flux taken during bottom growth/melt202 ! 200 & - at_i (:,:) * qsb_ice_bot(:,:) & ! heat flux taken by sensible flux 201 & - at_i (:,:) * fhld (:,:) ! heat flux taken during bottom growth/melt 202 ! ! (fhld should be 0 while bott growth) 203 203 !-------------------------------------------------------------------------------------------! 204 204 ! Thermodynamic computation (only on grid points covered by ice) => loop over ice categories … … 385 385 CALL tab_2d_1d( npti, nptidx(1:npti), t_bo_1d (1:npti), t_bo ) 386 386 CALL tab_2d_1d( npti, nptidx(1:npti), sprecip_1d (1:npti), sprecip ) 387 CALL tab_2d_1d( npti, nptidx(1:npti), fhtur_1d (1:npti), fhtur)387 CALL tab_2d_1d( npti, nptidx(1:npti), qsb_ice_bot_1d(1:npti), qsb_ice_bot ) 388 388 CALL tab_2d_1d( npti, nptidx(1:npti), fhld_1d (1:npti), fhld ) 389 389 … … 432 432 ! 433 433 ! SIMIP diagnostics 434 CALL tab_2d_1d( npti, nptidx(1:npti), diag_fc_bo_1d(1:npti), diag_fc_bo)435 CALL tab_2d_1d( npti, nptidx(1:npti), diag_fc_su_1d(1:npti), diag_fc_su)434 CALL tab_2d_1d( npti, nptidx(1:npti), qcn_ice_bot_1d(1:npti), qcn_ice_bot ) 435 CALL tab_2d_1d( npti, nptidx(1:npti), qcn_ice_top_1d(1:npti), qcn_ice_top ) 436 436 ! ocean surface fields 437 437 CALL tab_2d_1d( npti, nptidx(1:npti), sst_1d(1:npti), sst_m ) … … 527 527 CALL tab_1d_2d( npti, nptidx(1:npti), t1_ice_1d (1:npti), t1_ice (:,:,kl) ) 528 528 ! SIMIP diagnostics 529 CALL tab_1d_2d( npti, nptidx(1:npti), t_si_1d (1:npti), t_si(:,:,kl) )530 CALL tab_1d_2d( npti, nptidx(1:npti), diag_fc_bo_1d(1:npti), diag_fc_bo)531 CALL tab_1d_2d( npti, nptidx(1:npti), diag_fc_su_1d(1:npti), diag_fc_su)529 CALL tab_1d_2d( npti, nptidx(1:npti), t_si_1d (1:npti), t_si(:,:,kl) ) 530 CALL tab_1d_2d( npti, nptidx(1:npti), qcn_ice_bot_1d(1:npti), qcn_ice_bot ) 531 CALL tab_1d_2d( npti, nptidx(1:npti), qcn_ice_top_1d(1:npti), qcn_ice_top ) 532 532 ! extensive variables 533 533 CALL tab_1d_2d( npti, nptidx(1:npti), v_i_1d (1:npti), v_i (:,:,kl) ) -
NEMO/trunk/src/ICE/icethd_dh.F90
r9912 r9913 153 153 ! 154 154 DO ji = 1, npti 155 zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji)155 zf_tt(ji) = fc_bo_i(ji) + qsb_ice_bot_1d(ji) + fhld_1d(ji) 156 156 zq_bo(ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 157 157 END DO … … 417 417 ! Basal growth is driven by heat imbalance at the ice-ocean interface, 418 418 ! between the inner conductive flux (fc_bo_i), from the open water heat flux 419 ! (fhld) and the turbulent ocean flux (fhtur).420 ! fc_bo_i is positive downwards. fhturand fhld are positive to the ice419 ! (fhld) and the sensible ice-ocean flux (qsb_ice_bot). 420 ! fc_bo_i is positive downwards. qsb_ice_bot and fhld are positive to the ice 421 421 422 422 ! If salinity varies in time, an iterative procedure is required, because -
NEMO/trunk/src/ICE/icethd_zdf_bl99.F90
r9910 r9913 792 792 ! 793 793 DO ji = 1, npti 794 !--- Conduction fluxes (positive downward s)795 diag_fc_bo_1d(ji) = diag_fc_bo_1d(ji) + fc_bo_i(ji) * a_i_1d(ji) / at_i_1d(ji)796 diag_fc_su_1d(ji) = diag_fc_su_1d(ji) + fc_su (ji) * a_i_1d(ji) / at_i_1d(ji)794 !--- Conduction fluxes (positive downward) 795 qcn_ice_bot_1d(ji) = qcn_ice_bot_1d(ji) + fc_bo_i(ji) * a_i_1d(ji) / at_i_1d(ji) 796 qcn_ice_top_1d(ji) = qcn_ice_top_1d(ji) + fc_su (ji) * a_i_1d(ji) / at_i_1d(ji) 797 797 798 798 !--- Snow-ice interfacial temperature (diagnostic SIMIP) -
NEMO/trunk/src/ICE/iceupdate.F90
r9912 r9913 277 277 278 278 ! other heat fluxes 279 IF( iom_use('hfxsensib' ) ) CALL iom_put( "hfxsensib" , - fhtur* at_i_b ) ! Sensible oceanic heat flux280 IF( iom_use('hfxcndbot' ) ) CALL iom_put( "hfxcndbot" , diag_fc_bo* at_i_b ) ! Bottom conduction flux281 IF( iom_use('hfxcndtop' ) ) CALL iom_put( "hfxcndtop" , diag_fc_su* at_i_b ) ! Surface conduction flux279 IF( iom_use('hfxsensib' ) ) CALL iom_put( "hfxsensib" , -qsb_ice_bot * at_i_b ) ! Sensible oceanic heat flux 280 IF( iom_use('hfxcndbot' ) ) CALL iom_put( "hfxcndbot" , qcn_ice_bot * at_i_b ) ! Bottom conduction flux 281 IF( iom_use('hfxcndtop' ) ) CALL iom_put( "hfxcndtop" , qcn_ice_top * at_i_b ) ! Surface conduction flux 282 282 283 283 ! diags
Note: See TracChangeset
for help on using the changeset viewer.