Ignore:
Timestamp:
Jul 28, 2025, 7:23:15 PM (7 days ago)
Author:
aborella
Message:

Merge with trunk r5789

Location:
LMDZ6/branches/contrails
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails

  • LMDZ6/branches/contrails/libf/phylmd/ocean_slab_mod.f90

    r5285 r5791  
    5050  !$OMP THREADPRIVATE(fsic)
    5151  ! temperature of the sea ice
    52   REAL, ALLOCATABLE, DIMENSION(:), PUBLIC, SAVE  :: tice
    53   !$OMP THREADPRIVATE(tice)
     52!GG
     53  !REAL, ALLOCATABLE, DIMENSION(:), PUBLIC, SAVE  :: tice_slab
     54  !!$OMP THREADPRIVATE(tice_slab)
     55  REAL, ALLOCATABLE, DIMENSION(:), PUBLIC, SAVE  :: tice_slab
     56  !$OMP THREADPRIVATE(tice_slab)
     57!GG
    5458  ! sea ice thickness, in kg/m2
    5559  REAL, ALLOCATABLE, DIMENSION(:), PUBLIC, SAVE  :: seaice
     
    238242        ENDIF
    239243        bilg_cum(:) = 0.0   
    240         ALLOCATE(tice(klon), stat = error)
     244!GG        ALLOCATE(tice(klon), stat = error)
     245        ALLOCATE(tice_slab(klon), stat = error)
    241246        IF (error /= 0) THEN
    242247           abort_message='Pb allocation slab_tice'
     
    633638                      e_freeze=(t_freeze-tslab(ki,1))/cyang/ice_lat
    634639                      ! new ice
    635                       tice(ki)=t_freeze
     640                !GG      tice(ki)=t_freeze
     641                      tice_slab(ki)=t_freeze
    636642                      fsic(ki)=MIN(ice_frac_max,e_freeze/h_ice_thin)
    637643                      IF (fsic(ki).GT.ice_frac_min) THEN
     
    650656                      ! quantity of new ice formed over open ocean
    651657                      e_freeze=(t_freeze-tslab(ki,1))/cyang*(1.-fsic(ki)) &
    652                                /(ice_lat+ice_cap/2.*(t_freeze-tice(ki)))
     658                               /(ice_lat+ice_cap/2.*(t_freeze-tice_slab(ki)))
     659              !GG                 /(ice_lat+ice_cap/2.*(t_freeze-tice(ki)))
    653660                      ! new ice height and fraction
    654661                      h_new=MIN(h_ice_new,seaice(ki)) ! max new height ice_new
     
    759766            cal(i)=2.*RCPD/(snow(i)*ice_cap)
    760767            ! snow conductive flux
    761             f_cond=sno_cond*(tice(ki)-tsurf_in(i))/snow(i)
     768            f_cond=sno_cond*(tice_slab(ki)-tsurf_in(i))/snow(i)
     769       !GG     f_cond=sno_cond*(tice(ki)-tsurf_in(i))/snow(i)
    762770            ! all shortwave flux absorbed
    763771            f_swpen=0.
    764772            ! bottom flux (ice conduction)
    765             slab_bilg(ki)=ice_cond*(tice(ki)-t_freeze)/seaice(ki)
     773            slab_bilg(ki)=ice_cond*(tice_slab(ki)-t_freeze)/seaice(ki)
     774       !GG     slab_bilg(ki)=ice_cond*(tice(ki)-t_freeze)/seaice(ki)
    766775            ! update ice temperature
    767             tice(ki)=tice(ki)-2./ice_cap/(snow(i)+seaice(ki)) &
     776       !GG     tice(ki)=tice(ki)-2./ice_cap/(snow(i)+seaice(ki)) &
     777            tice_slab(ki)=tice_slab(ki)-2./ice_cap/(snow(i)+seaice(ki)) &
    768778                     *(slab_bilg(ki)+f_cond)*dtime
    769779       ELSE ! bare ice
     
    771781            cal(i)=2.*RCPD/(seaice(ki)*ice_cap)
    772782            ! conductive flux
    773             f_cond=ice_cond*(t_freeze-tice(ki))/seaice(ki)
     783       !GG     f_cond=ice_cond*(t_freeze-tice(ki))/seaice(ki)
     784            f_cond=ice_cond*(t_freeze-tice_slab(ki))/seaice(ki)
    774785            ! penetrative shortwave flux...
    775786            f_swpen=swnet(i)*pen_frac*exp(-pen_ext*seaice(ki)/ice_den)
     
    789800        tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
    790801    DO i=1,knon
    791         IF (snow(i).LT.snow_min) tice(knindex(i))=tsurf_new(i)
     802    !GG    IF (snow(i).LT.snow_min) tice(knindex(i))=tsurf_new(i)
     803        IF (snow(i).LT.snow_min) tice_slab(knindex(i))=tsurf_new(i)
    792804    END DO
    793805
     
    819831            ! energy available for melting snow (in kg of melted snow /m2)
    820832            e_melt = MIN(MAX(snow(i)*(tsurf_new(i)-t_melt)*ice_cap/2. &
    821                /(ice_lat+ice_cap/2.*(t_melt-tice(ki))),0.0),snow(i))
     833               /(ice_lat+ice_cap/2.*(t_melt-tice_slab(ki))),0.0),snow(i))
     834        !GG       /(ice_lat+ice_cap/2.*(t_melt-tice(ki))),0.0),snow(i))
    822835            ! remove snow
    823836            IF (snow(i).GT.e_melt) THEN
     
    827840                ! add remaining heat flux to ice
    828841                e_melt=e_melt-snow(i)
    829                 tice(ki)=tice(ki)+e_melt*ice_lat*2./(ice_cap*seaice(ki))
    830                 tsurf_new(i)=tice(ki)
     842                tice_slab(ki)=tice_slab(ki)+e_melt*ice_lat*2./(ice_cap*seaice(ki))
     843         !GG       tice(ki)=tice(ki)+e_melt*ice_lat*2./(ice_cap*seaice(ki))
     844                tsurf_new(i)=tice_slab(ki)
     845         !GG       tsurf_new(i)=tice(ki)
    831846            END IF
    832847        END IF
    833848! melt ice from above if Tice>0
    834         IF (tice(ki).GT.t_melt) THEN
     849      !GG  IF (tice(ki).GT.t_melt) THEN
     850        IF (tice_slab(ki).GT.t_melt) THEN
    835851            ! quantity of ice melted (kg/m2)
    836             e_melt=MAX(seaice(ki)*(tice(ki)-t_melt)*ice_cap/2. &
     852      !GG      e_melt=MAX(seaice(ki)*(tice(ki)-t_melt)*ice_cap/2. &
     853            e_melt=MAX(seaice(ki)*(tice_slab(ki)-t_melt)*ice_cap/2. &
    837854             /(ice_lat+ice_cap/2.*(t_melt-t_freeze)),0.0)
    838855            ! melt from above, height only
     
    850867            seaice(ki)=seaice(ki)-dhsic
    851868            ! surface temperature at melting point
    852             tice(ki)=t_melt
     869        !GG    tice(ki)=t_melt
     870            tice_slab(ki)=t_melt
    853871            tsurf_new(i)=t_melt
    854872        END IF
     
    860878            seaice(ki)=seaice(ki)+dhsic
    861879            snow(i)=snow(i)-dhsic*sno_den/ice_den
    862             ! available energy (freeze sea water + bring to tice)
     880            ! available energy (freeze sea water + bring to tice_slab)
    863881            e_melt=dhsic*(1.-sno_den/ice_den)*(ice_lat+ &
    864                    ice_cap/2.*(t_freeze-tice(ki)))
     882                   ice_cap/2.*(t_freeze-tice_slab(ki)))
     883       !GG            ice_cap/2.*(t_freeze-tice(ki)))
    865884            ! update ice temperature
    866             tice(ki)=tice(ki)+2.*e_melt/ice_cap/(snow(i)+seaice(ki))
     885       !GG     tice(ki)=tice(ki)+2.*e_melt/ice_cap/(snow(i)+seaice(ki))
     886            tice_slab(ki)=tice_slab(ki)+2.*e_melt/ice_cap/(snow(i)+seaice(ki))
    867887        END IF
    868888    END DO
     
    882902        ! ice albedo (varies with ice tkickness and temp)
    883903        alb_ice=MAX(0.0,0.13*LOG(100.*seaice(ki)/ice_den)+0.1)
    884         IF (tice(ki).GT.t_freeze-0.01) THEN
     904     !GG   IF (tice(ki).GT.t_freeze-0.01) THEN
     905        IF (tice_slab(ki).GT.t_freeze-0.01) THEN
    885906            alb_ice=MIN(alb_ice,alb_ice_wet)
    886907        ELSE
     
    888909        END IF
    889910        ! pond albedo
    890         alb_pond=0.36-0.1*(2.0+MIN(0.0,MAX(tice(ki)-t_melt,-2.0)))
     911        alb_pond=0.36-0.1*(2.0+MIN(0.0,MAX(tice_slab(ki)-t_melt,-2.0)))
     912     !GG   alb_pond=0.36-0.1*(2.0+MIN(0.0,MAX(tice(ki)-t_melt,-2.0)))
    891913        ! pond fraction
    892         frac_pond=0.2*(2.0+MIN(0.0,MAX(tice(ki)-t_melt,-2.0)))
     914        frac_pond=0.2*(2.0+MIN(0.0,MAX(tice_slab(ki)-t_melt,-2.0)))
     915     !GG   frac_pond=0.2*(2.0+MIN(0.0,MAX(tice(ki)-t_melt,-2.0)))
    893916        ! snow fraction
    894917        frac_snow=MAX(0.0,MIN(1.0-frac_pond,snow(i)/snow_min))
     
    917940               ! quantity of new ice
    918941                e_melt=(t_freeze-tslab(ki,1))/cyang &
    919                        /(ice_lat+ice_cap/2.*(t_freeze-tice(ki)))
     942                       /(ice_lat+ice_cap/2.*(t_freeze-tice_slab(ki)))
     943       !GG                /(ice_lat+ice_cap/2.*(t_freeze-tice(ki)))
    920944               ! first increase height to h_thin
    921945               dhsic=MAX(0.,MIN(h_ice_thin-seaice(ki),e_melt/fsic(ki)))
     
    935959               ! quantity of melted ice
    936960               e_melt=(tslab(ki,1)-t_freeze)/cyang &
    937                        /(ice_lat+ice_cap/2.*(tice(ki)-t_freeze))
     961                       /(ice_lat+ice_cap/2.*(tice_slab(ki)-t_freeze))
     962          !GG             /(ice_lat+ice_cap/2.*(tice(ki)-t_freeze))
    938963               ! first decrease height to h_thick
    939964               dhsic=MAX(0.,MIN(seaice(ki)-h_ice_thick,e_melt/fsic(ki)))
     
    960985    WHERE (fsic.LT.ice_frac_min)
    961986        tslab(:,1)=tslab(:,1)-fsic*seaice*ice_lat*cyang
    962         tice=t_melt
     987        tice_slab=t_melt
     988   !GG     tice=t_melt
    963989        fsic=0.
    964990        seaice=0.
     
    9761002    IF (ALLOCATED(tslab)) DEALLOCATE(tslab)
    9771003    IF (ALLOCATED(fsic)) DEALLOCATE(fsic)
    978     IF (ALLOCATED(tice)) DEALLOCATE(tice)
     1004    IF (ALLOCATED(tice_slab)) DEALLOCATE(tice_slab)
    9791005    IF (ALLOCATED(seaice)) DEALLOCATE(seaice)
    9801006    IF (ALLOCATED(slab_bilg)) DEALLOCATE(slab_bilg)
Note: See TracChangeset for help on using the changeset viewer.