New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1858 for branches/DEV_r1837_mass_heat_salt_fluxes/NEMO/LIM_SRC_2/limthd_zdf_2.F90 – NEMO

Ignore:
Timestamp:
2010-05-04T10:39:48+02:00 (14 years ago)
Author:
gm
Message:

ticket:#665 : step 1 - heat content of freezing-melting ice

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1837_mass_heat_salt_fluxes/NEMO/LIM_SRC_2/limthd_zdf_2.F90

    r1857 r1858  
    44   !!                thermodynamic growth and decay of the ice  
    55   !!====================================================================== 
    6    !! History :  1.0  !  01-04 (LIM) Original code 
    7    !!            2.0  !  02-08 (C. Ethe, G. Madec) F90 
     6   !! History : LIM  ! 2001-04 (UCL) Original code 
     7   !!           2.0  ! 2002-08 (C. Ethe, G. Madec) re-writing F90 
     8   !!           2.1  ! 2010-05  (Y. Aksenov, M. Vancoppenolle, G. Madec) add heat content exchanges 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_lim2 
     
    158159          , zdrfrl1, zdrfrl2 &  ! tempory scalars 
    159160          , zihsn, zidhb, zihic, zihe, zihq, ziexp, ziqf, zihnf, zibmlt, ziqr, zihgnew, zind 
     161       REAL(wp) ::   ztmp   ! temporary scalar 
    160162       !!---------------------------------------------------------------------- 
    161163 
     
    168170        
    169171       DO ji = kideb , kiut 
     172          ! do nothing if the snow (ice) thickness falls below its minimum thickness 
    170173          zihsn = MAX( zzero , SIGN( zone , hsndif - h_snow_1d(ji) ) ) 
    171           zihic = MAX( zzero , SIGN( zone , hicdif - h_ice_1d(ji) ) ) 
    172           !--computation of energy due to surface melting 
    173           zqcmlt(ji,1) = ( MAX ( zzero ,  & 
    174              &                   rcpsn * h_snow_1d(ji) * ( tbif_1d(ji,1) - rt0_snow ) ) ) * ( 1.0 - zihsn ) 
    175           !--computation of energy due to bottom melting 
    176           zqcmlt(ji,2) = ( MAX( zzero , & 
    177              &                  rcpic * ( tbif_1d(ji,2) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 
    178              &           + MAX( zzero , & 
    179              &                  rcpic * ( tbif_1d(ji,3) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 
     174          zihic = MAX( zzero , SIGN( zone , hicdif - h_ice_1d (ji) ) ) 
     175          !--energy required to bring snow to its melting point (rt0_snow) 
     176          zqcmlt(ji,1) = ( MAX ( zzero , rcpsn * h_snow_1d(ji) * ( tbif_1d(ji,1) - rt0_snow ) ) ) * ( 1.0 - zihsn ) 
     177          !--energy required to bring ice to its melting point (rt0_ice) 
     178          zqcmlt(ji,2) = ( MAX( zzero , rcpic * ( tbif_1d(ji,2) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) )   & 
     179             &           + MAX( zzero , rcpic * ( tbif_1d(ji,3) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) )   & 
    180180             &           ) * ( 1.0 - zihic  ) 
    181           !--limitation of  snow/ice system internal temperature 
     181          !--limitation of snow/ice system internal temperature 
    182182          tbif_1d(ji,1)   = MIN( rt0_snow, tbif_1d(ji,1) ) 
    183183          tbif_1d(ji,2)   = MIN( rt0_ice , tbif_1d(ji,2) ) 
     
    478478          dvsbq_1d(ji) =  ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsnw_old(ji) - zsprecip(ji) ) 
    479479          dvsbq_1d(ji) =  MIN( zzero , dvsbq_1d(ji) ) 
    480           rdmsnif_1d(ji) =  rhosn * dvsbq_1d(ji) 
     480          ztmp = rhosn * dvsbq_1d(ji) 
     481          rdm_snw_1d(ji) =  ztmp 
     482          !--heat content of the water provided to the ocean (referenced to rt0) 
     483          rdq_snw_1d(ji) =  cpic * ztmp * ( rt0_snow - rt0 ) 
    481484          !-- If the snow is completely melted the remaining heat is used to melt ice 
    482485          zqsn_mlt_rem  = MAX( zzero , -zhsn ) * xlsn 
     
    621624          !---updating new ice thickness and computing the newly formed ice mass 
    622625          zhicnew   =  zihgnew * zhicnew 
    623           rdmicif_1d(ji) =  rdmicif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d(ji) ) * rhoic 
     626          ztmp    =  ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d(ji) ) * rhoic 
     627          rdm_ice_1d(ji) =  rdm_ice_1d(ji) + ztmp 
     628          !---heat content of the water provided to the ocean (referenced to rt0) 
     629          ! use of rt0_ice is OK for melting ice, in case of freezing tfu_1d should be used. This is done in 9.5 section (see below) 
     630          rdq_ice_1d(ji) =  cpic * ztmp * ( rt0_ice - rt0 ) 
    624631          !---updating new snow thickness and computing the newly formed snow mass 
    625632          zhsnfi   = zhsn + zdhsnm 
    626633          h_snow_1d(ji) = MAX( zzero , zhsnfi ) 
    627           rdmsnif_1d(ji) =  rdmsnif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsn ) * rhosn 
     634          ztmp = ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsn ) * rhosn 
     635          rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 
     636          !---updating the heat content of the water provided to the ocean (referenced to rt0) 
     637          rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( rt0_snow - rt0 ) 
    628638          !--remaining energy in case of total ablation 
    629639          zqocea(ji) = - ( zihsn * xlic * zdhicm + xlsn * ( zhsnfi - h_snow_1d(ji) ) ) * ( 1.0 - frld_1d(ji) ) 
     
    657667          tbif_1d(ji,3) =  zihgnew * ztb3 + ( 1.0 - zihgnew ) * tfu_1d(ji) 
    658668          h_ice_1d(ji)  =  zhicnew 
    659        END DO 
     669          ! update the ice heat content given to the ocean in freezing case (part from rt0_ice to tfu_1d) 
     670         ztmp = ( 1. - zidhb ) * rhoic * dvbbq_1d(ji) 
     671         rdqicif_1d(ji) = rdqicif_1d(ji) + cpic * ztmp * ( tfu_1d(ji) - rt0_ice ) 
     672      END DO 
    660673 
    661674 
     
    698711          dmgwi_1d(ji) = dmgwi_1d(ji) + ( 1.0 -frld_1d(ji) ) * ( h_snow_1d(ji) - zhsnnew ) * rhosn 
    699712          !---  volume change of ice and snow (used for ocean-ice freshwater flux computation) 
    700           rdmicif_1d(ji) = rdmicif_1d(ji) + ( 1.0 - frld_1d(ji) )   * ( zhicnew - h_ice_1d (ji) ) * rhoic 
    701           rdmsnif_1d(ji) = rdmsnif_1d(ji) + ( 1.0 - frld_1d(ji) )   * ( zhsnnew - h_snow_1d(ji) ) * rhosn 
     713          ztmp = ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d (ji) ) * rhoic 
     714          rdm_ice_1d(ji) = rdm_ice_1d(ji) + ztmp 
     715          rdq_ice_1d(ji) = rdq_ice_1d(ji) + cpic * ztmp * ( tfu_1d(ji) - rt0 ) 
     716!!gm BUG ??   snow ==>  only needed for nn_ice_embd == 0  (standard levitating sea-ice) 
     717          ztmp = ( 1.0 - frld_1d(ji) )   * ( zhsnnew - h_snow_1d(ji) ) * rhosn 
     718         rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 
     719         rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( rt0_snow - rt0 ) 
    702720 
    703721          !---  Actualize new snow and ice thickness. 
     
    746764          !--variation of ice volume and ice mass  
    747765          dvlbq_1d(ji)   = zihic * ( zfrl_old(ji) - frld_1d(ji) ) * h_ice_1d(ji) 
    748           rdmicif_1d(ji) = rdmicif_1d(ji) + dvlbq_1d(ji) * rhoic 
     766          ztmp = dvlbq_1d(ji) * rhoic 
     767          rdm_ice_1d(ji) = rdm_ice_1d(ji) + ztmp 
     768!!gm 
     769!!gm   This should be split in two parts: 
     770!!gm         1-  heat required to bring sea-ice at tfu  : this part should be added to the heat flux taken from the ocean 
     771!!gm                 cpic * ztmp * 0.5 * ( tbif_1d(ji,2) + tbif_1d(ji,3) - 2.* rt0_ice ) 
     772!!gm         2-  heat content of lateral ablation referenced to rt0 : this part only put in rdq_ice_1d 
     773!!gm                 cpic * ztmp * ( rt0_ice - rt0 ) 
     774!!gm   Currently we put all the heat in rdq_ice_1d 
     775          rdq_ice_1d(ji) = rdq_ice_1d(ji) + cpic * ztmp * 0.5 * ( tbif_1d(ji,2) + tbif_1d(ji,3) - 2.* rt0 ) 
     776          ! 
    749777          !--variation of snow volume and snow mass  
    750           zdvsnvol    = zihsn * ( zfrl_old(ji) - frld_1d(ji) ) * h_snow_1d(ji) 
    751           rdmsnif_1d(ji) = rdmsnif_1d(ji) + zdvsnvol * rhosn 
     778          zdvsnvol = zihsn * ( zfrl_old(ji) - frld_1d(ji) ) * h_snow_1d(ji) 
     779          ztmp     = zdvsnvol * rhosn 
     780          rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 
     781!!gm 
     782!!gm   This should be split in two parts: 
     783!!gm         1-  heat required to bring snow at tfu  : this part should be added to the heat flux taken from the ocean 
     784!!gm                 cpic * ztmp * ( tbif_1d(ji,1) - rt0_snow ) 
     785!!gm         2-  heat content of lateral ablation referenced to rt0 : this part only put in rdqicif_1d 
     786!!gm                 cpic * ztmp * ( rt0_snow - rt0 ) 
     787!!gm   Currently we put all the heat in rdqicif_1d 
     788          rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( tbif_1d(ji,1) - rt0 ) 
     789 
    752790          h_snow_1d(ji)  = ziqf * h_snow_1d(ji) 
    753791 
Note: See TracChangeset for help on using the changeset viewer.