Changeset 6178
- Timestamp:
- Apr 19, 2026, 9:21:32 PM (2 weeks ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90 (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90
r6177 r6178 742 742 IF (iflag_seaice .EQ. 1) THEN 743 743 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 745 750 746 751 … … 756 761 END IF 757 762 763 ! snow and sea ice hydrology. If iflag_seaice==3, interactive computation of hice 764 765 ! let's start with snow on ice hydrology 758 766 DO i = 1, knon 759 767 … … 783 791 snow(i) = snow(i) - e_melt 784 792 tsurf_new(i) = t_melt 785 icemelt(i) = 0.786 793 ELSE ! all snow is melted 787 794 ! add remaining heat flux to ice 788 795 e_melt = e_melt - snow(i) 789 icemelt(i) = e_melt790 796 tice(ki) = tice(ki) + e_melt*ice_lat*2./(ice_cap*hice(ki)*ice_den) 791 797 tsurf_new(i) = tice(ki) … … 794 800 END IF 795 801 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 796 838 IF (iflag_seaice .EQ. 3) THEN 797 ! Interactive calculation of hice if iflag_seaice == 3798 ! Bottom melt / grow799 ! bottom freeze if bottom flux (cond + oce-ice) <0800 801 839 IF (f_bot(i) .LT. 0) THEN 802 840 ! larger fraction of bottom growth … … 850 888 dh_basal_melt(ki) = (hice(ki) - hice_i)/dtime 851 889 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) 889 895 dhsic = h_test/(sea_den - ice_den + sno_den) 890 896 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 891 906 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 906 911 907 912 ! cumulated ice-ocean fluxes, update tslab, lateral grow
Note: See TracChangeset
for help on using the changeset viewer.
