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 12401 for NEMO/branches/UKMO/NEMO_4.0.1_add_pond_lids/src/ICE/icethd_pnd.F90 – NEMO

Ignore:
Timestamp:
2020-02-18T16:21:31+01:00 (4 years ago)
Author:
dancopsey
Message:

Add melt pond lid code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_add_pond_lids/src/ICE/icethd_pnd.F90

    r11715 r12401  
    129129      REAL(wp), PARAMETER ::   zpnd_aspect = 0.8_wp   ! pond aspect ratio 
    130130      REAL(wp), PARAMETER ::   zTp         = -2._wp   ! reference temperature 
     131      REAL(wp), PARAMETER ::   freezing_t  = 273.0_wp ! temperature below which refreezing occurs 
    131132      ! 
    132133      REAL(wp) ::   zfr_mlt          ! fraction of available meltwater retained for melt ponding 
    133134      REAL(wp) ::   zdv_mlt          ! available meltwater for melt ponding 
     135      REAL(wp) ::   actual_mlt       ! actual melt water used to make melt ponds (per m2). 
     136                                     ! Need to multiply this by ice area to work on volumes. 
    134137      REAL(wp) ::   z1_Tp            ! inverse reference temperature 
    135138      REAL(wp) ::   z1_rhow          ! inverse freshwater density 
    136139      REAL(wp) ::   z1_zpnd_aspect   ! inverse pond aspect ratio 
    137140      REAL(wp) ::   zfac, zdum 
     141      REAL(wp) ::   t_grad           ! Temperature deficit for refreezing 
     142      REAL(wp) ::   omega_dt         ! Time independent accumulated variables used for freezing 
     143      REAL(wp) ::   lh_ip_end        ! Lid thickness at end of timestep (temporary variable) 
     144      REAL(wp) ::   actual_frz       ! Amount of melt pond that freezes 
    138145      ! 
    139146      INTEGER  ::   ji   ! loop indices 
     
    142149      z1_zpnd_aspect = 1._wp / zpnd_aspect 
    143150      z1_Tp          = 1._wp / zTp  
     151 
     152      ! Define time-independent field for use in refreezing 
     153      omega_dt = 2.0_wp * rcnd_i * rdt_ice / (rLfus * rhow) 
    144154 
    145155      DO ji = 1, npti 
     
    151161            a_ip_frac_1d(ji) = 0._wp 
    152162            h_ip_1d(ji)      = 0._wp 
     163            lh_ip_1d(ji)     = 0._wp 
     164 
     165            actual_mlt = 0._wp 
     166            actual_frz = 0._wp 
    153167            !                                                     !--------------------------------! 
    154168         ELSE                                                     ! Case ice thickness >= rn_himin ! 
     
    157171            ! 
    158172            ! available meltwater for melt ponding [m, >0] and fraction 
    159             zdv_mlt = -( dh_i_sum(ji)*rhoi + dh_s_mlt(ji)*rhos ) * z1_rhow * a_i_1d(ji) 
     173            zdv_mlt = -( dh_i_sum(ji)*rhoi + dh_s_mlt(ji)*rhos ) * z1_rhow 
    160174            zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji)  ! from CICE doc 
    161175            !zfr_mlt = zrmin + zrmax * a_i_1d(ji)             ! from Holland paper  
     176            actual_mlt = zfr_mlt * zdv_mlt 
    162177            ! 
    163178            !--- Pond gowth ---! 
    164             ! v_ip should never be negative, otherwise code crashes 
    165             v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) + zfr_mlt * zdv_mlt ) 
    166             ! 
     179            v_ip_1d(ji) = v_ip_1d(ji) + actual_mlt * a_i_1d(ji) 
     180            ! 
     181            !--- Lid shrinking ---! 
     182            lh_ip_1d(ji) = lh_ip_1d(ji) - actual_mlt 
     183            ! 
     184            ! 
     185            !--- Pond contraction (due to refreezing) ---! 
     186            IF ( t_su_1d(ji) < freezing_t .AND. v_ip_1d(ji) > 0._wp ) THEN 
     187               t_grad = freezing_t - t_su_1d(ji) 
     188                
     189               ! The following equation is a rearranged form of: 
     190               ! lid_thickness_end - lid_thickness_start = rcnd_i * t_grad * rdt_ice / (0.5*(lid_thickness_end + lid_thickness_start) * rLfus * rhow) 
     191               ! where: lid_thickness_start = lh_ip_1d(ji) 
     192               !        lid_thickness_end = lh_ip_end 
     193               !        omega_dt is a bunch of terms in the equation that do not change 
     194               ! note the use of rhow instead of rhoi as we are working with volumes and it is easier if the water and ice volumes (for the lid and the pond) are the same 
     195               ! (have the same density). The lid will eventually remelt anyway so it doesn't matter if we make this simplification. 
     196                              
     197               lh_ip_end = SQRT(omega_dt * t_grad + lh_ip_1d(ji)**2) 
     198               actual_frz = lh_ip_end - lh_ip_1d(ji) 
     199 
     200               ! Pond shrinking 
     201               v_ip_1d(ji) = v_ip_1d(ji) - actual_frz * a_ip_1d(ji) 
     202 
     203               ! Lid growing 
     204               lh_ip_1d(ji) = lh_ip_1d(ji) + actual_frz 
     205            ELSE 
     206               actual_frz = 0._wp 
     207            END IF 
     208 
    167209            ! melt pond mass flux (<0) 
    168210            IF( zdv_mlt > 0._wp ) THEN 
    169                zfac = zfr_mlt * zdv_mlt * rhow * r1_rdtice 
     211               zfac = actual_mlt * a_i_1d(ji) * rhow * r1_rdtice 
    170212               wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 
    171213               ! 
     
    176218            ENDIF 
    177219            ! 
    178             !--- Pond contraction (due to refreezing) ---! 
    179             v_ip_1d(ji) = v_ip_1d(ji) * EXP( 0.01_wp * MAX( zTp+rt0 - t_su_1d(ji), 0._wp ) * z1_Tp ) 
     220            ! Make sure pond volume or lid thickness has not gone negative 
     221            IF ( v_ip_1d(ji) < 0._wp ) v_ip_1d(ji) = 0._wp  
     222            IF ( lh_ip_1d(ji) < 0._wp ) lh_ip_1d(ji) = 0._wp 
    180223            ! 
    181224            ! Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 
     
    184227            a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 
    185228            h_ip_1d(ji)      = zpnd_aspect * a_ip_frac_1d(ji) 
     229 
     230            ! If lid thickness is ten times greater than pond thickness then remove pond             
     231            IF ( lh_ip_1d(ji) > h_ip_1d(ji) * 10._wp ) THEN 
     232                a_ip_1d(ji)      = 0._wp 
     233                a_ip_frac_1d(ji) = 0._wp 
     234                h_ip_1d(ji)      = 0._wp 
     235                lh_ip_1d(ji)     = 0._wp 
     236                v_ip_1d(ji)      = 0._wp 
     237            END IF 
    186238            ! 
    187239         ENDIF 
Note: See TracChangeset for help on using the changeset viewer.