Changeset 6178


Ignore:
Timestamp:
Apr 19, 2026, 9:21:32 PM (2 weeks ago)
Author:
evignon
Message:

suite commit precedent

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90

    r6177 r6178  
    742742         IF (iflag_seaice .EQ. 1) THEN
    743743               hice(:) = sic_hice_fixed
    744          END IF
     744!            DO i = 1, knon
     745!               ki = knindex(i)
     746!               fsic(i) = pctsrf(ki, is_sic)
     747!               hice(ki) = (0.166 + 0.911 * (fsic(i)**2))*(1. + 2.*(fsic(i)-0.351))
     748!            END DO
     749          END IF
    745750
    746751
     
    756761         END IF
    757762
     763         ! snow and sea ice hydrology. If iflag_seaice==3, interactive computation of hice
     764
     765         ! let's start with snow on ice hydrology
    758766         DO i = 1, knon
    759767
     
    783791                  snow(i) = snow(i) - e_melt
    784792                  tsurf_new(i) = t_melt
    785                   icemelt(i) = 0.
    786793               ELSE ! all snow is melted
    787794                    ! add remaining heat flux to ice
    788795                  e_melt = e_melt - snow(i)
    789                   icemelt(i) = e_melt
    790796                  tice(ki) = tice(ki) + e_melt*ice_lat*2./(ice_cap*hice(ki)*ice_den)
    791797                  tsurf_new(i) = tice(ki)
     
    794800            END IF
    795801
     802            ! ice hydrology
     803
     804            ! melt ice from above if Tice>t_melt
     805            tice_i = tice(ki)
     806            IF (tice(ki) .GT. t_melt) THEN
     807
     808              ! quantity of ice melted (kg/m2)
     809              e_melt = MAX(hice(ki)*ice_den*(tice(ki) - t_melt)*ice_cap/2. &
     810                               /(ice_lat + ice_cap/2.*(t_melt - t_freeze)), 0.0)
     811              icemelt(i) = e_melt
     812              IF (iflag_seaice .EQ. 3) THEN
     813                  ! melt from above, height only
     814                  hice_i = hice(ki)
     815                  dhsic = MIN(hice(ki) - h_ice_min, e_melt/ice_den)
     816                  dh_top_melt(i) = dhsic
     817                  e_melt = e_melt - dhsic
     818                  IF (e_melt .GT. 0) THEN
     819                     ! lateral melt if ice too thin
     820                     dfsic = MAX(fsic(i) - ice_frac_min, e_melt/(h_ice_min*ice_den)*fsic(i))
     821                     ! if all melted do nothing with remaining heat
     822                     e_melt = MAX(0., e_melt*fsic(i) - dfsic*h_ice_min*ice_den)
     823                     ! slab_bilg(ki) = slab_bilg(ki) + e_melt*ice_lat/dtime
     824                  END IF
     825                  hice(ki) = hice(ki) - dhsic
     826                  dh_top_melt(ki) = (hice(ki) - hice_i)/dtime
     827                  ! surface temperature at melting point
     828               END IF
     829
     830               tice(ki) = t_melt
     831               tsurf_new(i) = t_melt
     832            END IF
     833            dtice_melt(ki) = dtice_melt(ki) + tice(ki) - tice_i
     834
     835            ! Bottom melt / grow if iflag_seaice == 3
     836            ! bottom freeze if bottom flux (cond + oce-ice) < t_melt
     837            ! + snow below floating line adjustment
    796838            IF (iflag_seaice .EQ. 3) THEN
    797                ! Interactive calculation of hice if iflag_seaice == 3
    798                ! Bottom melt / grow
    799                ! bottom freeze if bottom flux (cond + oce-ice) <0
    800 
    801839               IF (f_bot(i) .LT. 0) THEN
    802840                  ! larger fraction of bottom growth
     
    850888                  dh_basal_melt(ki) = (hice(ki) - hice_i)/dtime
    851889               END IF
    852             END IF
    853 
    854             ! melt ice from above if Tice>0
    855             tice_i = tice(ki)
    856             IF (tice(ki) .GT. t_melt) THEN
    857 
    858                IF (iflag_seaice .EQ. 3) THEN
    859                   ! quantity of ice melted (kg/m2)
    860                   e_melt = MAX(hice(ki)*ice_den*(tice(ki) - t_melt)*ice_cap/2. &
    861                                /(ice_lat + ice_cap/2.*(t_melt - t_freeze)), 0.0)
    862                   ! melt from above, height only
    863                   hice_i = hice(ki)
    864                   dhsic = MIN(hice(ki) - h_ice_min, e_melt/ice_den)
    865                   dh_top_melt(i) = dhsic
    866                   e_melt = e_melt - dhsic
    867                   IF (e_melt .GT. 0) THEN
    868                      ! lateral melt if ice too thin
    869                      dfsic = MAX(fsic(i) - ice_frac_min, e_melt/(h_ice_min*ice_den)*fsic(i))
    870                      ! if all melted do nothing with remaining heat
    871                      e_melt = MAX(0., e_melt*fsic(i) - dfsic*h_ice_min*ice_den)
    872                      ! slab_bilg(ki) = slab_bilg(ki) + e_melt*ice_lat/dtime
    873                   END IF
    874                   hice(ki) = hice(ki) - dhsic
    875                   dh_top_melt(ki) = (hice(ki) - hice_i)/dtime
    876                   ! surface temperature at melting point
    877                END IF
    878 
    879                tice(ki) = t_melt
    880                tsurf_new(i) = t_melt
    881             END IF
    882             dtice_melt(ki) = dtice_melt(ki) + tice(ki) - tice_i
    883 
    884             ! convert snow to ice if below floating line
    885             h_test = (hice(ki)*ice_den + snow(i)) - hice(ki)*sea_den
    886             IF ((h_test .GT. 0.) .AND. (hice(ki) .GT. h_ice_min)) THEN !snow under water
    887                ! extra snow converted to ice (with added frozen sea water)
    888                IF (iflag_seaice .EQ. 3) THEN
     890
     891               ! convert snow to ice if below floating line
     892               h_test = (hice(ki)*ice_den + snow(i)) - hice(ki)*sea_den
     893               IF ((h_test .GT. 0.) .AND. (hice(ki) .GT. h_ice_min)) THEN !snow under water
     894                  ! extra snow converted to ice (with added frozen sea water)
    889895                  dhsic = h_test/(sea_den - ice_den + sno_den)
    890896                  hice(ki) = hice(ki) + dhsic
     897                  snow(i) = snow(i) - dhsic*sno_den
     898                  ! available energy (freeze sea water + bring to tice)
     899                  e_melt = dhsic*ice_den*(1.-sno_den/ice_den)*(ice_lat + &
     900                                                            ice_cap/2.*(t_freeze - tice(ki)))
     901                  ! update ice temperature
     902                  tice_i = tice(ki)
     903                  tice(ki) = tice(ki) + 2.*e_melt/ice_cap/(snow(i) + hice(ki)*ice_den)
     904                  dh_snow2sic(ki) = dhsic/dtime
     905                  dtice_snow2sic(ki) = (tice(ki) - tice_i)/dtime
    891906               END IF
    892                snow(i) = snow(i) - dhsic*sno_den
    893                ! available energy (freeze sea water + bring to tice)
    894                e_melt = dhsic*ice_den*(1.-sno_den/ice_den)*(ice_lat + &
    895                                                             ice_cap/2.*(t_freeze - tice(ki)))
    896                ! update ice temperature
    897                tice_i = tice(ki)
    898                tice(ki) = tice(ki) + 2.*e_melt/ice_cap/(snow(i) + hice(ki)*ice_den)
    899                IF (iflag_seaice .EQ. 3) THEN
    900                   dh_snow2sic(ki) = dhsic/dtime
    901                END IF
    902                dtice_snow2sic(ki) = (tice(ki) - tice_i)/dtime
    903             END IF
    904 
    905          END DO
     907
     908            END IF ! iflag_seaice == 3
     909         
     910         END DO ! loop on horizontal indices
    906911
    907912! cumulated ice-ocean fluxes, update tslab, lateral grow
Note: See TracChangeset for help on using the changeset viewer.