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 12566 for NEMO/branches – NEMO

Changeset 12566 for NEMO/branches


Ignore:
Timestamp:
2020-03-17T17:09:23+01:00 (4 years ago)
Author:
dancopsey
Message:

Move calculation of effective pond fraction to icethd_pnd.F90 (not sbccpl)

Location:
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/cfgs/SHARED/field_def_nemo-ice.xml

    r12483 r12566  
    255255          <field id="icehpnd_cat"  long_name="Ice melt pond thickness per category"              unit="m"       detect_missing_value="true" />  
    256256          <field id="iceafpnd_cat" long_name="Ice melt pond fraction per category"               unit=""        />  
     257          <field id="iceaepnd_cat" long_name="Ice melt pond effective fraction per category"     unit=""        />  
    257258          <field id="icelhpnd_cat" long_name="Ice melt pond lid thickness per category"          unit="m"       detect_missing_value="true" />  
    258259          <field id="icemask_cat"  long_name="Fraction of time step with sea ice (per category)" unit=""        /> 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/ice.F90

    r12500 r12566  
    340340   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   v_ip       !: melt pond volume per grid cell area      [m] 
    341341   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   a_ip_frac  !: melt pond fraction (a_ip/a_i) 
     342   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   a_ip_eff   !: melt pond effective fraction (not covered up by lid) (a_ip/a_i) 
    342343   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   h_ip       !: melt pond depth                          [m] 
    343344   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   lh_ip      !: melt pond lid thickness                  [m] 
     
    461462 
    462463      ii = ii + 1 
    463       ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , h_ip(jpi,jpj,jpl), lh_ip(jpi,jpj,jpl) , STAT = ierr(ii) ) 
     464      ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , h_ip(jpi,jpj,jpl),  & 
     465         &      lh_ip(jpi,jpj,jpl), a_ip_eff(jpi,jpj,jpl) , STAT = ierr(ii) ) 
    464466 
    465467      ii = ii + 1 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/ice1d.F90

    r12500 r12566  
    128128   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   h_ip_1d       !: 
    129129   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   a_ip_frac_1d  !: 
     130   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   a_ip_eff_1d   !: 
    130131   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   lh_ip_1d      !: Ice pond lid thickness   [m] 
    131132 
     
    211212         &      dh_i_sub(jpij) , dh_s_mlt(jpij) , dh_snowice(jpij) , s_i_1d  (jpij) , s_i_new (jpij) ,  & 
    212213         &      a_ip_1d (jpij) , v_ip_1d (jpij) , v_i_1d    (jpij) , v_s_1d  (jpij) , lh_ip_1d(jpij) ,  & 
    213          &      h_ip_1d (jpij) , a_ip_frac_1d(jpij) ,                                                   & 
     214         &      h_ip_1d (jpij) , a_ip_frac_1d(jpij) , a_ip_eff_1d(jpij) ,                               & 
    214215         &      sv_i_1d (jpij) , oa_i_1d (jpij) , o_i_1d    (jpij) , STAT=ierr(ii) ) 
    215216      ! 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icealb.F90

    r12402 r12566  
    4545CONTAINS 
    4646 
    47    SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, plh_pnd, palb_cs, palb_os ) 
     47   SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, palb_cs, palb_os ) 
    4848      !!---------------------------------------------------------------------- 
    4949      !!               ***  ROUTINE ice_alb  *** 
     
    9696      LOGICAL , INTENT(in   )                   ::   ld_pnd_alb   !  effect of melt ponds on albedo 
    9797      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pafrac_pnd   !  melt pond relative fraction (per unit ice area) 
     98                                                                  !  This is the effective fraction not covered up by a pond lid 
    9899      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_pnd       !  melt pond depth 
    99       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   plh_pnd      !  melt pond lid thickness 
    100100      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   palb_cs      !  albedo of ice under clear    sky 
    101101      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   palb_os      !  albedo of ice under overcast sky 
    102       ! 
    103       REAL(wp), PARAMETER :: pnd_lid_max = 0.015                  !  pond lid thickness above which the ponds disappear from the albedo calculation 
    104       REAL(wp), PARAMETER :: pnd_lid_min = 0.005                  !  pond lid thickness below which the full pond area is used in the albedo calculation 
    105                                                                   ! Note: these two variables are mirrored in sbccpl.F90 (maybe put them in one place...) 
    106102      ! 
    107103      INTEGER  ::   ji, jj, jl                ! dummy loop indices 
     
    111107      REAL(wp) ::   zalb_ice, zafrac_ice      ! bare sea ice albedo & relative ice fraction 
    112108      REAL(wp) ::   zalb_snw, zafrac_snw      ! snow-covered sea ice albedo & relative snow fraction 
    113       REAL(wp) ::   lfrac_pnd                 ! The fraction of the meltpond exposed (not inder a frozen lid) 
    114109      !!--------------------------------------------------------------------- 
    115110      ! 
     
    129124                  zafrac_snw = 0._wp 
    130125                  IF( ld_pnd_alb ) THEN 
    131                      IF ( plh_pnd(ji,jj,jl) > pnd_lid_max ) THEN 
    132                         lfrac_pnd = 0._wp 
    133                      ELSE 
    134                         IF ( plh_pnd(ji,jj,jl) < pnd_lid_min ) THEN 
    135                            lfrac_pnd = 1._wp 
    136                         ELSE 
    137                            lfrac_pnd = ( plh_pnd(ji,jj,jl) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 
    138                         END IF 
    139                      END IF 
    140                      zafrac_pnd = pafrac_pnd(ji,jj,jl) * lfrac_pnd 
     126                     zafrac_pnd = pafrac_pnd(ji,jj,jl) 
    141127                  ELSE 
    142128                     zafrac_pnd = 0._wp 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/iceistate.F90

    r12402 r12566  
    160160      lh_ip    (:,:,:) = 0._wp 
    161161      a_ip_frac(:,:,:) = 0._wp 
     162      a_ip_eff (:,:,:) = 0._wp 
    162163      h_ip     (:,:,:) = 0._wp 
    163164      ! 
     
    366367            a_ip_frac(:,:,:) = 0._wp 
    367368         END WHERE 
     369         a_ip_eff(:,:,:) = a_ip_frac(:,:,:) 
    368370         v_ip(:,:,:) = h_ip(:,:,:) * a_ip(:,:,:) 
    369371           
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icerst.F90

    r12500 r12566  
    251251            v_ip(:,:,:) = 0._wp 
    252252         ENDIF 
     253         a_ip_eff(:,:,:) = a_ip(:,:,:) 
    253254         ! melt pond lids 
    254255         id5 = iom_varid( numrir, 'lh_ip' , ldstop = .FALSE. ) 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icesbc.F90

    r12402 r12566  
    132132 
    133133      ! --- cloud-sky and overcast-sky ice albedos --- ! 
    134       CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_frac, h_ip, lh_ip, zalb_cs, zalb_os ) 
     134      CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_eff, h_ip, zalb_cs, zalb_os ) 
    135135 
    136136      ! albedo depends on cloud fraction because of non-linear spectral effects 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icethd.F90

    r12500 r12566  
    355355         CALL tab_2d_1d( npti, nptidx(1:npti), h_ip_1d     (1:npti), h_ip     (:,:,kl) ) 
    356356         CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 
     357         CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_eff_1d (1:npti), a_ip_eff (:,:,kl) ) 
    357358         CALL tab_2d_1d( npti, nptidx(1:npti), lh_ip_1d     (1:npti), lh_ip     (:,:,kl) ) 
    358359         ! 
     
    462463         CALL tab_1d_2d( npti, nptidx(1:npti), h_ip_1d     (1:npti), h_ip     (:,:,kl) ) 
    463464         CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 
     465         CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_eff_1d (1:npti), a_ip_eff (:,:,kl) ) 
    464466         CALL tab_1d_2d( npti, nptidx(1:npti), lh_ip_1d    (1:npti), lh_ip    (:,:,kl) ) 
    465467         ! 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icethd_pnd.F90

    r12509 r12566  
    3838   INTEGER, PARAMETER ::   np_pndH12 = 2   ! Evolutive pond scheme (Holland et al. 2012) 
    3939 
    40    REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015_wp !  pond lid thickness above which the ponds disappear from the albedo calculation 
    41    REAL(wp), PUBLIC, PARAMETER :: pnd_lid_min = 0.005_wp !  pond lid thickness below which the full pond area is used in the albedo calculation 
    42  
    4340   REAL(wp), PARAMETER :: viscosity_dyn = 1.79e-3_wp 
    4441 
     
    9491         IF( a_i_1d(ji) > 0._wp .AND. t_su_1d(ji) >= rt0 ) THEN 
    9592            a_ip_frac_1d(ji) = rn_apnd 
     93            a_ip_eff_1d(ji)  = rn_apnd 
    9694            h_ip_1d(ji)      = rn_hpnd     
    9795            a_ip_1d(ji)      = a_ip_frac_1d(ji) * a_i_1d(ji) 
    9896         ELSE 
    9997            a_ip_frac_1d(ji) = 0._wp 
     98            a_ip_eff_1d(ji)  = 0._wp 
    10099            h_ip_1d(ji)      = 0._wp     
    101100            a_ip_1d(ji)      = 0._wp 
     
    135134      REAL(wp), PARAMETER ::   zTp         = -2._wp   ! reference temperature 
    136135      REAL(wp), PARAMETER ::   max_h_diff_s = -1.0E-6  ! Maximum meltpond depth change due to leaking or overflow (m s-1) 
     136      REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015_wp !  pond lid thickness above which the ponds disappear from the albedo calculation 
     137      REAL(wp), PUBLIC, PARAMETER :: pnd_lid_min = 0.005_wp !  pond lid thickness below which the full pond area is used in the albedo calculation 
    137138      ! 
    138139      REAL(wp) ::   tot_mlt          ! Total ice and snow surface melt (some goes into ponds, some into the ocean) 
     
    158159      REAL(wp) ::   za_ip            ! Temporary pond fraction 
    159160      REAL(wp) ::   max_h_diff_ts    ! Maximum meltpond depth change due to leaking or overflow (m per ts) 
     161      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   lfrac_pnd                 ! The fraction of the meltpond exposed (not inder a frozen lid) 
    160162       
    161163      ! 
     
    335337            ! 
    336338         ENDIF 
     339 
     340         ! Calculate how much meltpond is exposed to the atmosphere (not under a frozen lid)         
     341         IF ( lh_ip_1d(ji) < pnd_lid_min ) THEN       ! Pond lid is very thin. Expose all the pond. 
     342            lfrac_pnd = 1.0 
     343         ELSE 
     344            IF ( lh_ip_1d(ji) > pnd_lid_max ) THEN    ! Pond lid is very thick. Cover all the pond up with ice and nosw. 
     345              lfrac_pnd = 0.0 
     346            ELSE                                      ! Pond lid is of intermediate thickness. Expose part of the melt pond. 
     347              lfrac_pnd = ( lh_ip_1d(ji) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 
     348            ENDIF 
     349         ENDIF 
     350          
     351         ! Calculate the melt pond effective area 
     352         a_ip_eff_1d(ji) = a_ip_frac_1d(ji) * lfrac_pnd 
    337353 
    338354      END DO 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/iceupdate.F90

    r12402 r12566  
    185185      ! Snow/ice albedo (only if sent to coupler, useless in forced mode) 
    186186      !------------------------------------------------------------------ 
    187       CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_frac, h_ip, lh_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
     187      CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_eff, h_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
    188188      ! 
    189189      alb_ice(:,:,:) = ( 1._wp - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icewri.F90

    r12483 r12566  
    162162      IF( iom_use('icettop_cat' ) )   CALL iom_put( 'icettop_cat' , ( t_su - rt0 ) * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! surface temperature 
    163163      IF( iom_use('icebrv_cat'  ) )   CALL iom_put( 'icebrv_cat'  ,   bv_i * 100.  * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! brine volume 
    164       IF( iom_use('iceapnd_cat' ) )   CALL iom_put( 'iceapnd_cat' ,   a_ip         * zmsk00l                                   ) ! melt pond frac for categories 
    165       IF( iom_use('icehpnd_cat' ) )   CALL iom_put( 'icehpnd_cat' ,   h_ip         * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond frac for categories 
     164      IF( iom_use('iceapnd_cat' ) )   CALL iom_put( 'iceapnd_cat' ,   a_ip         * zmsk00l                                   ) ! melt pond area for categories 
     165      IF( iom_use('icehpnd_cat' ) )   CALL iom_put( 'icehpnd_cat' ,   h_ip         * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond depth for categories 
    166166      IF( iom_use('iceafpnd_cat') )   CALL iom_put( 'iceafpnd_cat',   a_ip_frac    * zmsk00l                                   ) ! melt pond frac for categories 
     167      IF( iom_use('iceaepnd_cat') )   CALL iom_put( 'iceaepnd_cat',   a_ip_eff     * zmsk00l                                   ) ! melt pond effective frac for categories 
    167168      IF( iom_use('icealb_cat'  ) )   CALL iom_put( 'icealb_cat'  ,   alb_ice      * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! ice albedo for categories 
    168169 
  • NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/OCE/SBC/sbccpl.F90

    r12402 r12566  
    21222122      INTEGER, INTENT(in) ::   kt 
    21232123      ! 
    2124       REAL(wp), PARAMETER :: pnd_lid_max = 0.015                  !  pond lid thickness above which the ponds disappear from the albedo calculation 
    2125       REAL(wp), PARAMETER :: pnd_lid_min = 0.005                  !  pond lid thickness below which the full pond area is used in the albedo calculation 
    2126                                                                   ! Note: these two variables are mirrored in icealb.F90 (maybe put them in one place...) 
    21272124      ! 
    21282125      INTEGER ::   ji, jj, jl   ! dummy loop indices 
     
    21302127      REAL(wp) ::   zumax, zvmax 
    21312128      REAL(wp), DIMENSION(jpi,jpj)     ::   zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 
    2132       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   ztmp3, ztmp4    
    2133       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   lfrac_pnd                 ! The fraction of the meltpond exposed (not inder a frozen lid) 
     2129      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   ztmp3, ztmp4 
    21342130 
    21352131      !!---------------------------------------------------------------------- 
     
    23482344            CASE( 'yes' )   
    23492345 
    2350                ! Calculate how much meltpond is exposed (not under a frozen lid) 
    2351                lfrac_pnd(:,:,1:jpl) = 1.0 
    2352                WHERE( lh_ip(:,:,1:jpl) > pnd_lid_max ) 
    2353                     lfrac_pnd(:,:,1:jpl) = 0.0 
    2354                END WHERE 
    2355                WHERE( lh_ip(:,:,1:jpl) > pnd_lid_min .AND. lh_ip(:,:,1:jpl) <= pnd_lid_max ) 
    2356                     lfrac_pnd(:,:,1:jpl) = ( lh_ip(:,:,1:jpl) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 
    2357                END WHERE 
    2358  
    2359                ztmp3(:,:,1:jpl) =  a_ip_frac(:,:,1:jpl) * lfrac_pnd(:,:,1:jpl) 
     2346               ztmp3(:,:,1:jpl) =  a_ip_eff(:,:,1:jpl) 
    23602347               ztmp4(:,:,1:jpl) =  h_ip(:,:,1:jpl) 
    23612348 
Note: See TracChangeset for help on using the changeset viewer.