Changeset 5791 for LMDZ6/branches/contrails/libf/phylmd/ocean_slab_mod.f90
- Timestamp:
- Jul 28, 2025, 7:23:15 PM (7 days ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 5654-5683,5685-5690,5692-5715,5718-5721,5726-5727,5729,5744-5761,5763-5778,5780,5785-5789
- Property svn:mergeinfo changed
-
LMDZ6/branches/contrails/libf/phylmd/ocean_slab_mod.f90
r5285 r5791 50 50 !$OMP THREADPRIVATE(fsic) 51 51 ! 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 54 58 ! sea ice thickness, in kg/m2 55 59 REAL, ALLOCATABLE, DIMENSION(:), PUBLIC, SAVE :: seaice … … 238 242 ENDIF 239 243 bilg_cum(:) = 0.0 240 ALLOCATE(tice(klon), stat = error) 244 !GG ALLOCATE(tice(klon), stat = error) 245 ALLOCATE(tice_slab(klon), stat = error) 241 246 IF (error /= 0) THEN 242 247 abort_message='Pb allocation slab_tice' … … 633 638 e_freeze=(t_freeze-tslab(ki,1))/cyang/ice_lat 634 639 ! new ice 635 tice(ki)=t_freeze 640 !GG tice(ki)=t_freeze 641 tice_slab(ki)=t_freeze 636 642 fsic(ki)=MIN(ice_frac_max,e_freeze/h_ice_thin) 637 643 IF (fsic(ki).GT.ice_frac_min) THEN … … 650 656 ! quantity of new ice formed over open ocean 651 657 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))) 653 660 ! new ice height and fraction 654 661 h_new=MIN(h_ice_new,seaice(ki)) ! max new height ice_new … … 759 766 cal(i)=2.*RCPD/(snow(i)*ice_cap) 760 767 ! 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) 762 770 ! all shortwave flux absorbed 763 771 f_swpen=0. 764 772 ! 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) 766 775 ! 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)) & 768 778 *(slab_bilg(ki)+f_cond)*dtime 769 779 ELSE ! bare ice … … 771 781 cal(i)=2.*RCPD/(seaice(ki)*ice_cap) 772 782 ! 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) 774 785 ! penetrative shortwave flux... 775 786 f_swpen=swnet(i)*pen_frac*exp(-pen_ext*seaice(ki)/ice_den) … … 789 800 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l) 790 801 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) 792 804 END DO 793 805 … … 819 831 ! energy available for melting snow (in kg of melted snow /m2) 820 832 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)) 822 835 ! remove snow 823 836 IF (snow(i).GT.e_melt) THEN … … 827 840 ! add remaining heat flux to ice 828 841 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) 831 846 END IF 832 847 END IF 833 848 ! 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 835 851 ! 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. & 837 854 /(ice_lat+ice_cap/2.*(t_melt-t_freeze)),0.0) 838 855 ! melt from above, height only … … 850 867 seaice(ki)=seaice(ki)-dhsic 851 868 ! surface temperature at melting point 852 tice(ki)=t_melt 869 !GG tice(ki)=t_melt 870 tice_slab(ki)=t_melt 853 871 tsurf_new(i)=t_melt 854 872 END IF … … 860 878 seaice(ki)=seaice(ki)+dhsic 861 879 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) 863 881 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))) 865 884 ! 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)) 867 887 END IF 868 888 END DO … … 882 902 ! ice albedo (varies with ice tkickness and temp) 883 903 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 885 906 alb_ice=MIN(alb_ice,alb_ice_wet) 886 907 ELSE … … 888 909 END IF 889 910 ! 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))) 891 913 ! 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))) 893 916 ! snow fraction 894 917 frac_snow=MAX(0.0,MIN(1.0-frac_pond,snow(i)/snow_min)) … … 917 940 ! quantity of new ice 918 941 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))) 920 944 ! first increase height to h_thin 921 945 dhsic=MAX(0.,MIN(h_ice_thin-seaice(ki),e_melt/fsic(ki))) … … 935 959 ! quantity of melted ice 936 960 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)) 938 963 ! first decrease height to h_thick 939 964 dhsic=MAX(0.,MIN(seaice(ki)-h_ice_thick,e_melt/fsic(ki))) … … 960 985 WHERE (fsic.LT.ice_frac_min) 961 986 tslab(:,1)=tslab(:,1)-fsic*seaice*ice_lat*cyang 962 tice=t_melt 987 tice_slab=t_melt 988 !GG tice=t_melt 963 989 fsic=0. 964 990 seaice=0. … … 976 1002 IF (ALLOCATED(tslab)) DEALLOCATE(tslab) 977 1003 IF (ALLOCATED(fsic)) DEALLOCATE(fsic) 978 IF (ALLOCATED(tice )) DEALLOCATE(tice)1004 IF (ALLOCATED(tice_slab)) DEALLOCATE(tice_slab) 979 1005 IF (ALLOCATED(seaice)) DEALLOCATE(seaice) 980 1006 IF (ALLOCATED(slab_bilg)) DEALLOCATE(slab_bilg)
Note: See TracChangeset
for help on using the changeset viewer.