- Timestamp:
- Mar 26, 2025, 6:05:40 PM (2 months ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/DefLists/field_def_lmdz.xml
r5575 r5589 912 912 <field id="qsati" long_name="Saturation with respect to ice" unit="kg/kg" /> 913 913 914 <field id="rcontseri" long_name="Linear contrail fraction to cloud fraction ratio" unit="-" />915 <field id="drcontdyn" long_name="Dynamics linear contrail fraction to cloud fraction ratio tendency" unit="s-1" />916 <field id="Tcritcont" long_name="Temperature threshold for contrail formation" unit="K" />917 <field id="qcritcont" long_name="Specific humidity threshold for contrail formation" unit="kg/kg" />914 <field id="rcontseri" long_name="Linear contrail fraction to cloud fraction ratio" unit="-" /> 915 <field id="drcontdyn" long_name="Dynamics linear contrail fraction to cloud fraction ratio tendency" unit="s-1" /> 916 <field id="Tcritcont" long_name="Temperature threshold for contrail formation" unit="K" /> 917 <field id="qcritcont" long_name="Specific humidity threshold for contrail formation" unit="kg/kg" /> 918 918 <field id="potcontfraP" long_name="Fraction with pontential persistent contrail" unit="-" /> 919 919 <field id="potcontfraNP" long_name="Fraction with potential non-persistent contrail" unit="-" /> … … 925 925 <field id="flightdist" long_name="Aviation flown distance concentration" unit="m/s/m3" /> 926 926 <field id="flighth2o" long_name="Aviation emitted H2O concentration" unit="kg H2O/s/m3" /> 927 <field id="dqavi" long_name="Water vapor emissions from aviation tendency" unit="kg/kg/s" /> 927 <field id="dqavi" long_name="Water vapor emissions from aviation tendency" unit="kg/kg/s" /> 928 <field id="cldfra_nocont" long_name="Cloud fraction w/o contrails" unit="-" /> 929 <field id="cldtau_nocont" long_name="Cloud optical thickness w/o contrails" unit="1" /> 930 <field id="cldemi_nocont" long_name="Cloud optical emissivity w/o contrails" unit="1" /> 931 <field id="cldh_nocont" long_name="High-level cloudiness w/o contrails" unit="-" /> 932 <field id="contcov" long_name="Total contrails cover" unit="-" /> 933 <field id="iwp_nocont" long_name="Cloud ice water path w/o contrails" unit="kg/m2" /> 934 <field id="iwc_nocont" long_name="Cloud ice water content seen by radiation w/o contrails" unit="kg/m3" /> 935 <field id="ref_ice_nocont" long_name="Effective radius of ice crystals w/o contrails" unit="microns" /> 936 <field id="tops_nocont" long_name="Solar rad. at TOA w/o contrails" unit="W/m2" /> 937 <field id="topl_nocont" long_name="IR rad. at TOA w/o contrails" unit="W/m2" /> 938 <field id="sols_nocont" long_name="Solar rad. at surf. w/o contrails" unit="W/m2" /> 939 <field id="soll_nocont" long_name="IR rad. at surface w/o contrails" unit="W/m2" /> 940 <field id="nettop_nocont" long_name="Net dn radiatif flux at TOA w/o contrails" unit="W/m2" /> 928 941 929 942 <field id="fluxt" long_name="flux h" unit="W/m2" /> -
LMDZ6/branches/contrails/libf/phylmd/clesphys_mod_h.f90
r5575 r5589 45 45 , iflag_rrtm, ok_strato, ok_hines, ok_qch4 & 46 46 , iflag_ice_thermo, ok_ice_supersat, ok_no_issr_strato & 47 , ok_plane_h2o, ok_plane_contrail 47 , ok_plane_h2o, ok_plane_contrail, ok_rad_contrail & 48 48 , ok_gwd_rando, NSW, iflag_albedo & 49 49 , ok_chlorophyll, ok_conserv_q, adjust_tropopause & … … 142 142 INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo 143 143 LOGICAL :: ok_ice_supersat, ok_no_issr_strato 144 LOGICAL :: ok_plane_h2o, ok_plane_contrail 144 LOGICAL :: ok_plane_h2o, ok_plane_contrail, ok_rad_contrail 145 145 LOGICAL :: ok_chlorophyll 146 146 LOGICAL :: ok_strato … … 203 203 !$OMP , iflag_rrtm, ok_strato, ok_hines, ok_qch4 & 204 204 !$OMP , iflag_ice_thermo, ok_ice_supersat, ok_no_issr_strato & 205 !$OMP , ok_plane_h2o, ok_plane_contrail 205 !$OMP , ok_plane_h2o, ok_plane_contrail, ok_rad_contrail & 206 206 !$OMP , ok_gwd_rando, NSW, iflag_albedo & 207 207 !$OMP , ok_chlorophyll, ok_conserv_q, adjust_tropopause & -
LMDZ6/branches/contrails/libf/phylmd/conf_phys_m.f90
r5575 r5589 173 173 INTEGER,SAVE :: iflag_ice_thermo_omp 174 174 LOGICAL,SAVE :: ok_ice_supersat_omp, ok_no_issr_strato_omp 175 LOGICAL,SAVE :: ok_plane_h2o_omp, ok_plane_contrail_omp 175 LOGICAL,SAVE :: ok_plane_h2o_omp, ok_plane_contrail_omp, ok_rad_contrail_omp 176 176 REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp 177 177 INTEGER,SAVE :: iflag_sic_omp, iflag_inertie_omp … … 1378 1378 ok_plane_contrail_omp = .FALSE. 1379 1379 CALL getin('ok_plane_contrail',ok_plane_contrail_omp) 1380 1381 !Config Key = ok_rad_contrail 1382 !Config Desc = double call to radiative routine w/ and w/o contrails 1383 !Config Def = .FALSE. 1384 !Config Help = 1385 ! 1386 ok_rad_contrail_omp = .FALSE. 1387 CALL getin('ok_rad_contrail',ok_rad_contrail_omp) 1380 1388 1381 1389 ! … … 2357 2365 ok_plane_h2o = ok_plane_h2o_omp 2358 2366 ok_plane_contrail = ok_plane_contrail_omp 2367 ok_rad_contrail = ok_rad_contrail_omp 2359 2368 top_height = top_height_omp 2360 2369 overlap = overlap_omp … … 2783 2792 WRITE(lunout,*) ' ok_plane_h2o = ',ok_plane_h2o 2784 2793 WRITE(lunout,*) ' ok_plane_contrail = ',ok_plane_contrail 2794 WRITE(lunout,*) ' ok_rad_contrail = ',ok_rad_contrail 2785 2795 WRITE(lunout,*) ' overlap = ',overlap 2786 2796 WRITE(lunout,*) ' cdmmax = ',cdmmax -
LMDZ6/branches/contrails/libf/phylmd/lmdz_aviation.f90
r5579 r5589 635 635 USE mod_grid_phy_lmdz, ONLY: nbp_lon_=>nbp_lon, nbp_lat_=>nbp_lat, nbp_lev_=>nbp_lev, & 636 636 klon_glo, grid2Dto1D_glo, grid_type, unstructured 637 USE iophy, ONLY : io_lon, io_lat 637 638 USE lmdz_xios 638 639 USE print_control_mod, ONLY: lunout 640 USE readaerosol_mod, ONLY: check_err 639 641 USE lmdz_lscp_ini, ONLY: EI_H2O_aviation 640 642 IMPLICIT NONE … … 648 650 INTEGER :: ierr 649 651 652 ! FOR REGULAR LON LAT 653 CHARACTER(len=30) :: fname 654 INTEGER :: nid, dimid, varid 655 INTEGER :: imth, i, j, k 656 REAL :: npole, spole 657 REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: flight_dist_glo2D 658 REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: flight_h2o_glo2D 659 REAL, ALLOCATABLE, DIMENSION(:) :: vartmp_lev 660 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: vartmp 661 REAL, ALLOCATABLE, DIMENSION(:) :: lon_src ! longitudes in file 662 REAL, ALLOCATABLE, DIMENSION(:) :: lat_src, lat_src_inv ! latitudes in file 663 LOGICAL :: invert_lat ! true if the field has to be inverted for latitudes 664 INTEGER :: nbp_lon, nbp_lat 665 666 667 IF (grid_type==unstructured) THEN 668 650 669 ! Get number of vertical levels and level values 651 670 IF (is_omp_master) CALL xios_get_axis_attr( "aviation_lev", n_glo=nleva ) … … 654 673 ! Allocation of arrays 655 674 ALLOCATE(flight_dist_read(klon, nleva,1), STAT=ierr) 656 IF (ierr /= 0) CALL abort_physic(' read_aviation_emissions', 'problem to allocate flight_dist',1)675 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'problem to allocate flight_dist',1) 657 676 ALLOCATE(flight_h2o_read(klon, nleva,1), STAT=ierr) 658 IF (ierr /= 0) CALL abort_physic(' read_aviation_emissions', 'problem to allocate flight_h2o',1)677 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'problem to allocate flight_h2o',1) 659 678 ALLOCATE(aviation_lev(nleva), STAT=ierr) 660 IF (ierr /= 0) CALL abort_physic(' read_aviation_emissions', 'problem to allocate aviation_lev',1)679 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'problem to allocate aviation_lev',1) 661 680 662 681 ! Read the data from the file … … 675 694 676 695 ! Propagate to other OMP threads: flight_dist_mpi(klon_mpi,klev) to flight_dist(klon,klev) 677 ! (klon_mpi,klon) = (200,50) avec 80 MPI, 4 OMP, nbp40678 696 CALL scatter_omp(flight_dist_mpi, flight_dist_read) 679 697 CALL scatter_omp(flight_h2o_mpi, flight_h2o_read) 680 698 CALL bcast_omp(aviation_lev) 699 700 ELSE 701 702 nbp_lon=nbp_lon_ 703 nbp_lat=nbp_lat_ 704 705 IF (is_mpi_root) THEN 706 ALLOCATE(lon_src(nbp_lon)) 707 ALLOCATE(lat_src(nbp_lat)) 708 ALLOCATE(lat_src_inv(nbp_lat)) 709 ELSE 710 ALLOCATE(flight_dist_glo2D(0,0,0,0)) 711 ALLOCATE(flight_h2o_glo2D(0,0,0,0)) 712 ENDIF 713 714 IF (is_mpi_root .AND. is_omp_root) THEN 715 716 ! 1) Open file 717 !**************************************************************************************** 718 fname = 'aviation.nc' 719 CALL check_err( nf90_open(TRIM(fname), NF90_NOWRITE, nid), "pb open "//TRIM(fname) ) 720 721 722 ! Test for equal longitudes and latitudes in file and model 723 !**************************************************************************************** 724 ! Read and test longitudes 725 CALL check_err( nf90_inq_varid(nid, 'longitude', varid), "pb inq lon" ) 726 CALL check_err( nf90_get_var(nid, varid, lon_src(:)), "pb get lon" ) 727 728 IF (maxval(ABS(lon_src - io_lon)) > 0.001) THEN 729 WRITE(lunout,*) 'Problem in longitudes read from file : ',TRIM(fname) 730 WRITE(lunout,*) 'longitudes in file ', TRIM(fname),' : ', lon_src 731 WRITE(lunout,*) 'longitudes in model :', io_lon 732 733 CALL abort_physic('lmdz_aviation', 'longitudes are not the same in file and model',1) 734 END IF 735 736 ! Read and test latitudes 737 CALL check_err( nf90_inq_varid(nid, 'latitude', varid),"pb inq lat" ) 738 CALL check_err( nf90_get_var(nid, varid, lat_src(:)),"pb get lat" ) 739 740 ! Invert source latitudes 741 DO j = 1, nbp_lat 742 lat_src_inv(j) = lat_src(nbp_lat+1-j) 743 END DO 744 745 IF (maxval(ABS(lat_src - io_lat)) < 0.001) THEN 746 ! Latitudes are the same 747 invert_lat=.FALSE. 748 ELSE IF (maxval(ABS(lat_src_inv - io_lat)) < 0.001) THEN 749 ! Inverted source latitudes correspond to model latitudes 750 WRITE(lunout,*) 'latitudes will be inverted for file : ',TRIM(fname) 751 invert_lat=.TRUE. 752 ELSE 753 WRITE(lunout,*) 'Problem in latitudes read from file : ',TRIM(fname) 754 WRITE(lunout,*) 'latitudes in file ', TRIM(fname),' : ', lat_src 755 WRITE(lunout,*) 'latitudes in model :', io_lat 756 CALL abort_physic('lmdz_aviation', 'latitudes do not correspond between file and model',1) 757 END IF 758 759 760 ! 2) Find vertical dimension nleva 761 !**************************************************************************************** 762 ierr = nf90_inq_dimid(nid, 'pressure_Pa', dimid) 763 CALL check_err( nf90_inquire_dimension(nid, dimid, len = nleva), "pb inq dim for PRESNIVS or lev" ) 764 765 ! Allocate variables depending on the number of vertical levels 766 ALLOCATE(flight_dist_glo2D(nbp_lon, nbp_lat, nleva, 1), flight_h2o_glo2D(nbp_lon, nbp_lat, nleva, 1), stat=ierr) 767 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'pb in allocation 1',1) 768 769 ALLOCATE(aviation_lev(nleva), stat=ierr) 770 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'pb in allocation 2',1) 771 772 ! 3) Read all variables from file 773 !**************************************************************************************** 774 775 ! Get variable id 776 CALL check_err( nf90_inq_varid(nid, 'seg_length_m', varid),"pb inq var seg_length_m" ) 777 ! Get the variable 778 CALL check_err( nf90_get_var(nid, varid, flight_dist_glo2D),"pb get var seg_length_m" ) 779 780 ! ! Get variable id 781 ! CALL check_err( nf90_inq_varid(nid, 'fuel_burn', varid),"pb inq var fuel_burn" ) 782 ! ! Get the variable 783 ! CALL check_err( nf90_get_var(nid, varid, flight_h2o_glo2D),"pb get var fuel_burn" ) 784 flight_h2o_glo2D(:,:,:,:) = 0. 785 786 ! Get variable id 787 CALL check_err( nf90_inq_varid(nid, "pressure_Pa", varid),"pb inq var pressure_Pa" ) 788 ! Get the variable 789 CALL check_err( nf90_get_var(nid, varid, aviation_lev),"pb get var pressure_Pa" ) 790 791 792 ! 4) Close file 793 !**************************************************************************************** 794 CALL check_err( nf90_close(nid), "pb in close" ) 795 796 797 ! 5) Transform the global field from 2D(nbp_lon,nbp_lat) to 1D(klon_glo) 798 !**************************************************************************************** 799 ! Test if vertical levels have to be inversed 800 801 IF (aviation_lev(1) < aviation_lev(nleva)) THEN 802 803 ALLOCATE(vartmp(nbp_lon, nbp_lat, nleva), vartmp_lev(nleva)) 804 805 ! Inverse vertical levels for flight_dist_glo2D 806 vartmp(:,:,:) = flight_dist_glo2D(:,:,:,1) 807 DO k=1, nleva 808 DO j=1, nbp_lat 809 DO i=1, nbp_lon 810 flight_dist_glo2D(i,j,k,1) = vartmp(i,j,nleva+1-k) 811 END DO 812 END DO 813 END DO 814 815 ! Inverse vertical levels for flight_h2o_glo2D 816 vartmp(:,:,:) = flight_h2o_glo2D(:,:,:,1) 817 DO k=1, nleva 818 DO j=1, nbp_lat 819 DO i=1, nbp_lon 820 flight_h2o_glo2D(i,j,k,1) = vartmp(i,j,nleva+1-k) 821 END DO 822 END DO 823 END DO 824 825 ALLOCATE(vartmp_lev(nleva)) 826 ! Inverte vertical axes for aviation_lev 827 vartmp_lev(:) = aviation_lev(:) 828 DO k=1, nleva 829 aviation_lev(k) = vartmp_lev(nleva+1-k) 830 END DO 831 832 DEALLOCATE(vartmp, vartmp_lev) 833 834 ELSE 835 WRITE(lunout,*) 'Vertical axis in file ',TRIM(fname), ' is ok, no vertical inversion is done' 836 END IF 837 838 839 ! - Invert latitudes if necessary 840 IF (invert_lat) THEN 841 842 ALLOCATE(vartmp(nbp_lon, nbp_lat, nleva)) 843 844 ! Invert latitudes for the variable 845 vartmp(:,:,:) = flight_dist_glo2D(:,:,:,1) ! use varmth temporarly 846 DO k=1,nleva 847 DO j=1,nbp_lat 848 DO i=1,nbp_lon 849 flight_dist_glo2D(i,j,k,1) = vartmp(i,nbp_lat+1-j,k) 850 END DO 851 END DO 852 END DO 853 854 ! Invert latitudes for the variable 855 vartmp(:,:,:) = flight_h2o_glo2D(:,:,:,1) ! use varmth temporarly 856 DO k=1,nleva 857 DO j=1,nbp_lat 858 DO i=1,nbp_lon 859 flight_h2o_glo2D(i,j,k,1) = vartmp(i,nbp_lat+1-j,k) 860 END DO 861 END DO 862 END DO 863 864 DEALLOCATE(vartmp) 865 END IF ! invert_lat 866 867 ! Do zonal mead at poles and distribut at whole first and last latitude 868 DO k=1, nleva 869 npole=0. ! North pole, j=1 870 spole=0. ! South pole, j=nbp_lat 871 DO i=1,nbp_lon 872 npole = npole + flight_dist_glo2D(i,1,k,1) 873 spole = spole + flight_dist_glo2D(i,nbp_lat,k,1) 874 END DO 875 npole = npole/REAL(nbp_lon) 876 spole = spole/REAL(nbp_lon) 877 flight_dist_glo2D(:,1, k,1) = npole 878 flight_dist_glo2D(:,nbp_lat,k,1) = spole 879 END DO 880 881 ! Do zonal mead at poles and distribut at whole first and last latitude 882 DO k=1, nleva 883 npole=0. ! North pole, j=1 884 spole=0. ! South pole, j=nbp_lat 885 DO i=1,nbp_lon 886 npole = npole + flight_h2o_glo2D(i,1,k,1) 887 spole = spole + flight_h2o_glo2D(i,nbp_lat,k,1) 888 END DO 889 npole = npole/REAL(nbp_lon) 890 spole = spole/REAL(nbp_lon) 891 flight_h2o_glo2D(:,1, k,1) = npole 892 flight_h2o_glo2D(:,nbp_lat,k,1) = spole 893 END DO 894 895 ALLOCATE(flight_dist_mpi(klon_glo, nleva, 1), flight_h2o_mpi(klon_glo, nleva, 1), stat=ierr) 896 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'pb in allocation 3',1) 897 898 ! Transform from 2D to 1D field 899 CALL grid2Dto1D_glo(flight_dist_glo2D, flight_dist_mpi) 900 CALL grid2Dto1D_glo(flight_h2o_glo2D, flight_h2o_mpi) 901 902 ELSE 903 ALLOCATE(flight_dist_mpi(0,0,0), flight_h2o_mpi(0,0,0)) 904 END IF ! is_mpi_root .AND. is_omp_root 905 906 !$OMP BARRIER 907 908 ! 6) Distribute to all processes 909 ! Scatter global field(klon_glo) to local process domain(klon) 910 ! and distribute nleva to all processes 911 !**************************************************************************************** 912 913 ! Distribute nleva 914 CALL bcast(nleva) 915 916 ! Allocate and distribute pt_ap and pt_b 917 IF (.NOT. ALLOCATED(aviation_lev)) THEN ! if pt_ap is allocated also pt_b is allocated 918 ALLOCATE(aviation_lev(nleva), stat=ierr) 919 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'pb in allocation 4',1) 920 END IF 921 CALL bcast(aviation_lev) 922 923 ! Allocate space for output pointer variable at local process 924 ALLOCATE(flight_dist_read(klon, nleva, 1), flight_h2o_read(klon, nleva, 1), stat=ierr) 925 IF (ierr /= 0) CALL abort_physic('lmdz_aviation', 'pb in allocation 5',1) 926 927 ! Scatter global field to local domain at local process 928 CALL scatter(flight_dist_mpi, flight_dist_read) 929 CALL scatter(flight_h2o_mpi, flight_h2o_read) 930 931 ENDIF 681 932 682 933 END SUBROUTINE read_aviation_emissions -
LMDZ6/branches/contrails/libf/phylmd/lmdz_call_cloud_optics_prop.f90
r5488 r5589 10 10 reliq_pi, reice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, & 11 11 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 12 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, rcontrail) 12 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, & 13 !--AB contrails 14 rcontrail, pclc_nocont, pcltau_nocont, pclemi_nocont, pch_nocont, & 15 pct_cont, xfiwp_nocont, xfiwc_nocont, reice_nocont) 13 16 14 17 ! Interface between the LMDZ physics monitor and the cloud properties calculation routines … … 47 50 LOGICAL, INTENT(IN) :: ptconv(klon, klev) ! flag for grid points affected by deep convection 48 51 LOGICAL, INTENT(IN) :: ok_newmicro, ok_aie 49 50 REAL, INTENT(IN) :: rcontrail(klon, klev) ! ratio of contrail to total cloud fraction, used only if ok_plane_contrail=y [-]51 52 52 53 ! inout: … … 92 93 REAL, INTENT(INOUT) :: icefrac_optics(klon, klev)! ice fraction in clouds seen by radiation [-] 93 94 95 !--AB for contrails. All these are used / outputed only if ok_plane_contrail=y 96 REAL, INTENT(IN) :: rcontrail(klon, klev) ! ratio of contrails to total cloud fraction [-] 97 REAL, INTENT(OUT) :: pch_nocont(klon) ! 2D high cloud cover without contrails[-] 98 REAL, INTENT(OUT) :: pct_cont(klon) ! 2D total contrails cover[-] 99 REAL, INTENT(OUT) :: xfiwp_nocont(klon) ! ice water path (seen by radiation) without contrails [kg/m2] 100 REAL, INTENT(OUT) :: xfiwc_nocont(klon, klev) ! ice water content seen by radiation without contrails [kg/kg] 101 REAL, INTENT(OUT) :: pclc_nocont(klon, klev) ! cloud fraction for radiation without contrails [-] 102 REAL, INTENT(OUT) :: pcltau_nocont(klon, klev) ! cloud optical depth without contrails [m] 103 REAL, INTENT(OUT) :: pclemi_nocont(klon, klev) ! cloud emissivity without contrails [-] 104 REAL, INTENT(OUT) :: reice_nocont(klon, klev) ! ice effective radius without contrails [m] 105 !--AB 106 94 107 ! Local variables 95 108 !---------------- … … 118 131 reliq_pi, reice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, & 119 132 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 120 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, rcontrail) 133 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, & 134 !--AB for contrails 135 rcontrail, pclc_nocont, pcltau_nocont, pclemi_nocont, pch_nocont, & 136 pct_cont, xfiwp_nocont, xfiwc_nocont, reice_nocont) 121 137 ELSE 122 138 CALL nuage (paprs, pplay, & -
LMDZ6/branches/contrails/libf/phylmd/lmdz_cloud_optics_prop.f90
r5576 r5589 9 9 reliq_pi, reice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, & 10 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 11 icefrac_optics, dNovrN, ptconv, rnebcon, ccwcon, rcontrail) 11 icefrac_optics, dNovrN, ptconv, rnebcon, ccwcon, & 12 !--AB contrails 13 rcontrail, pclc_nocont, pcltau_nocont, pclemi_nocont, pch_nocont, & 14 pct_cont, xfiwp_nocont, xfiwc_nocont, reice_nocont) 12 15 13 16 USE lmdz_cloud_optics_prop_ini , ONLY : flag_aerosol, ok_cdnc … … 72 75 LOGICAL, INTENT(IN) :: ptconv(klon, klev) ! flag for grid points affected by deep convection 73 76 74 REAL, INTENT(IN) :: rcontrail(klon, klev) ! ratio of contrails to total cloud fraction, used only if ok_plane_contrail=y [-]75 76 77 ! inout: 77 78 REAL, INTENT(INOUT) :: pclc(klon, klev) ! cloud fraction for radiation [-] … … 116 117 REAL, INTENT(INOUT) :: icefrac_optics(klon, klev)! ice fraction in clouds seen by radiation [-] 117 118 119 !--AB for contrails. All these are used / outputed only if ok_plane_contrail=y 120 REAL, INTENT(IN) :: rcontrail(klon, klev) ! ratio of contrails to total cloud fraction [-] 121 REAL, INTENT(OUT) :: pch_nocont(klon) ! 2D high cloud cover without contrails[-] 122 REAL, INTENT(OUT) :: pct_cont(klon) ! 2D total contrails cover[-] 123 REAL, INTENT(OUT) :: xfiwp_nocont(klon) ! ice water path (seen by radiation) without contrails [kg/m2] 124 REAL, INTENT(OUT) :: xfiwc_nocont(klon, klev) ! ice water content seen by radiation without contrails [kg/kg] 125 REAL, INTENT(OUT) :: pclc_nocont(klon, klev) ! cloud fraction for radiation without contrails [-] 126 REAL, INTENT(OUT) :: pcltau_nocont(klon, klev) ! cloud optical depth without contrails [m] 127 REAL, INTENT(OUT) :: pclemi_nocont(klon, klev) ! cloud emissivity without contrails [-] 128 REAL, INTENT(OUT) :: reice_nocont(klon, klev) ! ice effective radius without contrails [m] 129 !--AB 130 118 131 ! Local variables 119 132 !---------------- … … 173 186 xflwc = 0.D0 174 187 xfiwc = 0.D0 188 !--AB 189 IF (ok_plane_contrail) THEN 190 xfiwp_nocont = 0.D0 191 xfiwc_nocont = 0.D0 192 reice_nocont = 0. 193 ENDIF 175 194 176 195 reliq = 0. … … 222 241 ENDDO 223 242 ENDDO 243 244 !--AB 245 IF (ok_plane_contrail) THEN 246 !--If contrails are activated, we diagnose iwc without contrails 247 DO k = 1, klev 248 DO i = 1, klon 249 pclc_nocont(i,k) = pclc(i,k) * ( 1. - rcontrail(i,k) ) 250 xfiwc_nocont(i, k) = icefrac_optics(i, k)*radocond(i, k)*( 1. - rcontrail(i,k) ) 251 ENDDO 252 ENDDO 253 ENDIF 224 254 ENDIF 225 255 … … 363 393 !--vs contrail cirrus in the gridbox 364 394 !--Beware, re_ice_crystals_contrails is in m, while rei is in microns 365 rei = rei * ( 1. - rcontrail(i,k) ) + re_ice_crystals_contrails * 1.E6 * rcontrail(i,k) 395 rei = rei * ( 1. - rcontrail(i,k) ) & 396 + re_ice_crystals_contrails * 1.E6 * rcontrail(i,k) 366 397 ENDIF 367 398 pcldtaupi(i, k) = 3.0/2.0*zflwp_var/rad_chaud_pi(i, k) + & … … 415 446 pcltau(i, k) = 0.0 416 447 pclemi(i, k) = 0.0 448 449 !--AB 450 IF ( ok_plane_contrail ) THEN 451 reice_nocont(i,k) = 0. 452 pclc_nocont(i,k) = 0. 453 pcltau_nocont(i,k) = 0. 454 pclemi_nocont(i,k) = 0. 455 ENDIF 417 456 418 457 ELSE … … 495 534 IF (zfiwp_var==0. .OR. rei<=0.) rei = 1. 496 535 IF ( ok_plane_contrail ) THEN 536 !--Diagnostics of clouds emissivity, optical depth and ice crystal radius 537 !--without contrails 538 IF ( pclc_nocont(i,k) .LE. seuil_neb ) THEN 539 reice_nocont(i,k) = 0. 540 pclc_nocont(i,k) = 0. 541 pcltau_nocont(i,k) = 0. 542 pclemi_nocont(i, k) = 0. 543 ELSE 544 reice_nocont(i,k) = rei 545 pcltau_nocont(i,k) = 3.0/2.0*(zflwp_var/rel) + zfiwp_var*(3.448E-03+2.431/rei) 546 k_ice = k_ice0 + 1.0/rei 547 pclemi_nocont(i, k) = 1.0 - exp(-coef_chau*zflwp_var-df*k_ice*zfiwp_var) 548 ENDIF 549 497 550 !--If contrails are activated, rei is a weighted average between the natural 498 551 !--rei and the contrails rei, with the weights being the fraction of natural 499 552 !--vs contrail cirrus in the gridbox 500 553 !--Beware, re_ice_crystals_contrails is in m, while rei is in microns 501 rei = rei * ( 1. - rcontrail(i,k) ) + re_ice_crystals_contrails * 1.E6 * rcontrail(i,k) 502 ENDIF 554 rei = rei * ( 1. - rcontrail(i,k) ) & 555 + re_ice_crystals_contrails * 1.E6 * rcontrail(i,k) 556 ENDIF 557 503 558 pcltau(i, k) = 3.0/2.0*(zflwp_var/rel) + zfiwp_var*(3.448E-03+2.431/ & 504 559 rei) … … 519 574 xflwp(i) = xflwp(i) + xflwc(i, k)*rhodz(i, k) 520 575 xfiwp(i) = xfiwp(i) + xfiwc(i, k)*rhodz(i, k) 576 !--AB 577 IF ( ok_plane_contrail ) THEN 578 xfiwp_nocont(i) = xfiwp_nocont(i) + xfiwc_nocont(i, k)*rhodz(i, k) 579 ENDIF 521 580 522 581 ENDDO … … 630 689 pcl(i) = 1. - pcl(i) 631 690 ENDDO 691 692 !--AB we recompute high cloud cover with contrails only 693 !--and without contrails 694 IF ( ok_plane_contrail ) THEN 695 DO i = 1, klon 696 zclear(i) = 1. 697 zcloud(i) = 0. 698 zcloudh(i) = 0. 699 pch_nocont(i) = 1. 700 pct_cont(i) = 1. 701 ENDDO 702 703 DO k = klev, 1, -1 704 DO i = 1, klon 705 zclear(i) = zclear(i)*(1.-max(pclc(i,k)*rcontrail(i,k),zcloud(i)))/(1.-min(real( & 706 zcloud(i),kind=8),1.-zepsec)) 707 pct_cont(i) = 1. - zclear(i) 708 zcloud(i) = pclc(i, k)*rcontrail(i,k) 709 IF (paprs(i,k)<prmhc) THEN 710 pch_nocont(i) = pch_nocont(i)*(1.-max(pclc_nocont(i,k),zcloudh(i)))/(1.-min(real(zcloudh & 711 (i),kind=8),1.-zepsec)) 712 zcloudh(i) = pclc_nocont(i, k) 713 ENDIF 714 ENDDO 715 ENDDO 716 717 DO i = 1, klon 718 pch_nocont(i) = 1. - pch_nocont(i) 719 ENDDO 720 ENDIF ! ok_plane_contrail 632 721 633 722 ! ======================================================== -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
r5580 r5589 31 31 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, & 32 32 dqrcol, dqrmelt, dqrfreez, dqsauto, dqsagg, dqsrim,& 33 dqsmelt, dqsfreez, d cfres, dqsres, dqvcres)33 dqsmelt, dqsfreez, dqised, dcfsed, dqvcsed) 34 34 35 35 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 264 264 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqsfreez !--snow tendency due to freezing [kg/kg/s] 265 265 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqrfreez !--rain tendency due to freezing [kg/kg/s] 266 REAL, DIMENSION(klon,klev), INTENT(OUT) :: d cfres !--cloud fraction tendency due to resuspension of ice crystals [kg/kg/s]267 REAL, DIMENSION(klon,klev), INTENT(OUT) :: d qsres !--snow tendency due to resuspension of ice crystals [kg/kg/s]268 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqvc res !--cloud water vapor tendency due to resuspension of ice crystals [kg/kg/s]266 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqised !--ice water content tendency due to sedmentation of ice crystals [kg/kg/s] 267 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dcfsed !--cloud fraction tendency due to sedimentation of ice crystals [kg/kg/s] 268 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqvcsed !--cloud water vapor tendency due to sedimentation of ice crystals [kg/kg/s] 269 269 270 270 ! for thermals … … 306 306 REAL, DIMENSION(klon) :: ztupnew 307 307 REAL, DIMENSION(klon) :: zqvapclr, zqupnew ! for poprecip evap / subl 308 REAL, DIMENSION(klon) :: zqice_sedim ! for sedimentation of ice crystals 308 309 REAL, DIMENSION(klon) :: zrflclr, zrflcld 309 310 REAL, DIMENSION(klon) :: ziflclr, ziflcld … … 474 475 zqupnew(:) = 0. 475 476 zqvapclr(:) = 0. 477 zqice_sedim(:)= 0. 476 478 477 479 … … 529 531 CALL poprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), & 530 532 zt, ztupnew, zq, zmqc, znebprecipclr, znebprecipcld, & 531 zqvapclr, zqupnew, &533 zqvapclr, zqupnew, zqice_sedim, & 532 534 cldfra_in, qvc_in, qliq_in, qice_in, & 533 535 zrfl, zrflclr, zrflcld, & 534 536 zifl, ziflclr, ziflcld, & 535 537 dqreva(:,k), dqssub(:,k), & 536 d qsres(:,k), dcfres(:,k), dqvcres(:,k) &538 dcfsed(:,k), dqvcsed(:,k) & 537 539 ) 538 540 … … 974 976 ctot_vol(:,k), ptconv(:,k), & 975 977 zt, zq, zoliql, zoliqi, zfice, & 976 rneb(:,k), z nebprecipclr, znebprecipcld, &978 rneb(:,k), zqice_sedim, znebprecipclr, znebprecipcld, & 977 979 zrfl, zrflclr, zrflcld, & 978 980 zifl, ziflclr, ziflcld, & … … 980 982 dqrcol(:,k), dqrmelt(:,k), dqrfreez(:,k), & 981 983 dqsauto(:,k), dqsagg(:,k), dqsrim(:,k), & 982 dqsmelt(:,k), dqsfreez(:,k) &984 dqsmelt(:,k), dqsfreez(:,k), dqised(:,k) & 983 985 ) 984 986 DO i = 1, klon -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90
r5580 r5589 119 119 USE lmdz_lscp_ini, ONLY: RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG, RV, RPI, EPS_W 120 120 USE lmdz_lscp_ini, ONLY: eps, temp_nowater, ok_weibull_warm_clouds 121 USE lmdz_lscp_ini, ONLY: ok_unadjusted_clouds , iflag_cloud_sublim_pdf121 USE lmdz_lscp_ini, ONLY: ok_unadjusted_clouds 122 122 USE lmdz_lscp_ini, ONLY: ok_plane_contrail, ok_no_issr_strato 123 123 124 124 USE lmdz_lscp_ini, ONLY: depo_coef_cirrus, capa_cond_cirrus, std_subl_pdf_lscp, & 125 mu_subl_pdf_lscp,beta_pdf_lscp, temp_thresh_pdf_lscp, &125 beta_pdf_lscp, temp_thresh_pdf_lscp, & 126 126 std100_pdf_lscp, k0_pdf_lscp, kappa_pdf_lscp, & 127 127 coef_mixing_lscp, coef_shear_lscp, chi_mixing_lscp … … 361 361 qvc(i) = 0. 362 362 363 !--If all the ice has been sublimated, we sublimate 364 !--completely the cloud and do not activate the sublimation 365 !--process 366 qvapincld_new = 0. 367 363 368 !--Else, the cloud is adjusted and sublimated 364 369 ELSE … … 406 411 !------------------------------------ 407 412 408 !--If the vapor in cloud is below vapor needed for the cloud to survive 409 IF ( ( qvapincld .LT. qvapincld_new ) .OR. ( iflag_cloud_sublim_pdf .GE. 4 ) ) THEN 410 !--Sublimation of the subsaturated cloud 411 !--iflag_cloud_sublim_pdf selects the PDF of the ice water content 412 !--to use. 413 !--iflag = 1 --> uniform distribution 414 !--iflag = 2 --> exponential distribution 415 !--iflag = 3 --> gamma distribution (Karcher et al 2018) 416 417 IF ( iflag_cloud_sublim_pdf .EQ. 1 ) THEN 418 !--Uniform distribution starting at qvapincld 419 pdf_e1 = 1. / ( 2. * qiceincld ) 420 421 dcf_sub(i) = - cldfra(i) * ( qvapincld_new - qvapincld ) * pdf_e1 422 dqt_sub = - cldfra(i) * ( qvapincld_new**2 - qvapincld**2 ) & 423 * pdf_e1 / 2. 424 425 ELSEIF ( iflag_cloud_sublim_pdf .EQ. 2 ) THEN 426 !--Exponential distribution starting at qvapincld 427 pdf_alpha = 1. / qiceincld 428 pdf_e1 = EXP( - pdf_alpha * ( qvapincld_new - qvapincld ) ) 429 430 dcf_sub(i) = - cldfra(i) * ( 1. - pdf_e1 ) 431 dqt_sub = - cldfra(i) * ( ( 1. - pdf_e1 ) / pdf_alpha & 432 + qvapincld - qvapincld_new * pdf_e1 ) 433 434 ELSEIF ( iflag_cloud_sublim_pdf .EQ. 3 ) THEN 435 !--Gamma distribution starting at qvapincld 436 pdf_alpha = ( mu_subl_pdf_lscp + 1. ) / qiceincld 437 pdf_y = pdf_alpha * ( qvapincld_new - qvapincld ) 438 pdf_e1 = GAMMAINC ( mu_subl_pdf_lscp + 1. , pdf_y ) 439 pdf_e2 = GAMMAINC ( mu_subl_pdf_lscp + 2. , pdf_y ) 440 441 dcf_sub(i) = - cldfra(i) * pdf_e1 442 dqt_sub = - cldfra(i) * ( pdf_e2 / pdf_alpha + qvapincld * pdf_e1 ) 443 444 ELSEIF ( iflag_cloud_sublim_pdf .EQ. 4 ) THEN 445 !--Normal distribution around qvapincld + qiceincld with width 446 !--constant in the RHi space 447 pdf_y = ( qvapincld_new - qvapincld - qiceincld ) & 448 / ( std_subl_pdf_lscp / 100. * qsat(i)) 449 pdf_e1 = 0.5 * ( 1. + ERF( pdf_y / SQRT(2.) ) ) 450 pdf_e2 = EXP( - pdf_y**2 / 2. ) / SQRT( 2. * RPI ) 451 452 dcf_sub(i) = - cldfra(i) * pdf_e1 453 dqt_sub = - cldfra(i) * ( ( qvapincld + qiceincld ) * pdf_e1 & 454 - std_subl_pdf_lscp / 100. * qsat(i) * pdf_e2 ) 455 456 ENDIF 413 !--If the dissipation process must be activated 414 IF ( qvapincld_new .GT. 0. ) THEN 415 !--Normal distribution around qvapincld + qiceincld with width 416 !--constant in the RHi space 417 pdf_y = ( qvapincld_new - qvapincld - qiceincld ) & 418 / ( std_subl_pdf_lscp / 100. * qsat(i)) 419 pdf_e1 = 0.5 * ( 1. + ERF( pdf_y / SQRT(2.) ) ) 420 pdf_e2 = EXP( - pdf_y**2 / 2. ) / SQRT( 2. * RPI ) 421 422 dcf_sub(i) = - cldfra(i) * pdf_e1 423 dqt_sub = - cldfra(i) * ( ( qvapincld + qiceincld ) * pdf_e1 & 424 - std_subl_pdf_lscp / 100. * qsat(i) * pdf_e2 ) 457 425 458 426 !--Tendencies and diagnostics … … 464 432 qvc(i) = MAX(0., qvc(i) + dqvc_sub(i)) 465 433 466 ENDIF ! qvapincld .LT. qvapincld_new434 ENDIF ! qvapincld_new .GT. 0. 467 435 468 436 ENDIF ! qiceincld .LT. eps -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_ini.f90
r5580 r5589 162 162 !$OMP THREADPRIVATE(ok_weibull_warm_clouds) 163 163 164 INTEGER, SAVE, PROTECTED :: iflag_cloud_sublim_pdf=4 ! iflag for the distribution of water inside ice clouds165 !$OMP THREADPRIVATE(iflag_cloud_sublim_pdf)166 167 164 REAL, SAVE, PROTECTED :: depo_coef_cirrus=.7 ! [-] deposition coefficient for growth of ice crystals in cirrus clouds 168 165 !$OMP THREADPRIVATE(depo_coef_cirrus) … … 173 170 REAL, SAVE, PROTECTED :: std_subl_pdf_lscp=2. ! [%] standard deviation of the gaussian distribution of water inside ice clouds 174 171 !$OMP THREADPRIVATE(std_subl_pdf_lscp) 175 176 REAL, SAVE, PROTECTED :: mu_subl_pdf_lscp=1./3. ! [-] shape factor of the gamma distribution of water inside ice clouds177 !$OMP THREADPRIVATE(mu_subl_pdf_lscp)178 172 179 173 REAL, SAVE, PROTECTED :: beta_pdf_lscp=1.E-3 ! [SI] tuning coefficient for the standard deviation of the PDF of water vapor in the clear sky region … … 260 254 !$OMP THREADPRIVATE(ok_corr_vap_evasub) 261 255 256 LOGICAL, SAVE, PROTECTED :: ok_growth_precip_deposition=.FALSE. 257 !$OMP THREADPRIVATE(ok_growth_precip_deposition) 258 262 259 REAL, SAVE, PROTECTED :: cld_lc_lsc_snow=2.e-5 ! snow autoconversion coefficient, stratiform. default from Chaboureau and PInty 2006 263 260 !$OMP THREADPRIVATE(cld_lc_lsc_snow) … … 311 308 !$OMP THREADPRIVATE(r_snow) 312 309 310 REAL, SAVE, PROTECTED :: expo_tau_auto_snow=0.1 311 !$OMP THREADPRIVATE(expo_tau_auto_snow) 312 313 313 REAL, SAVE, PROTECTED :: tau_auto_snow_min=100. ! Snow autoconversion minimal timescale (when liquid) [s] 314 314 !$OMP THREADPRIVATE(tau_auto_snow_min) … … 344 344 !$OMP THREADPRIVATE(snow_fallspeed_cld) 345 345 346 LOGICAL, SAVE, PROTECTED :: ok_ precip_resuspension=.FALSE.! Flag to activate the resuspension of ice crystals347 !$OMP THREADPRIVATE(ok_ precip_resuspension)348 349 REAL, SAVE, PROTECTED :: snow_thresh_resuspension=1.e-5 ! [kg/m2/s] Threshold flux below which part of the snow flux will be resuspended350 !$OMP THREADPRIVATE( snow_thresh_resuspension)346 LOGICAL, SAVE, PROTECTED :: ok_ice_sedim=.FALSE. ! Flag to activate the sedimentation of ice crystals 347 !$OMP THREADPRIVATE(ok_ice_sedim) 348 349 REAL, SAVE, PROTECTED :: ice_fallspeed_sedim=0.1 ! Ice fallspeed velocity for sedimentation [m/s] 350 !$OMP THREADPRIVATE(ice_fallspeed_sedim) 351 351 !--End of the parameters for poprecip 352 352 … … 448 448 CALL getin_p('ok_poprecip',ok_poprecip) 449 449 CALL getin_p('ok_corr_vap_evasub',ok_corr_vap_evasub) 450 CALL getin_p('ok_growth_precip_deposition',ok_growth_precip_deposition) 450 451 CALL getin_p('rain_int_min',rain_int_min) 451 452 CALL getin_p('gamma_agg',gamma_agg) … … 467 468 CALL getin_p('snow_fallspeed_clr',snow_fallspeed_clr) 468 469 CALL getin_p('snow_fallspeed_cld',snow_fallspeed_cld) 469 CALL getin_p('ok_ precip_resuspension',ok_precip_resuspension)470 CALL getin_p(' snow_thresh_resuspension',snow_thresh_resuspension)470 CALL getin_p('ok_ice_sedim',ok_ice_sedim) 471 CALL getin_p('ice_fallspeed_sedim',ice_fallspeed_sedim) 471 472 ! for condensation and ice supersaturation 472 473 CALL getin_p('ok_unadjusted_clouds',ok_unadjusted_clouds) 473 474 CALL getin_p('ok_weibull_warm_clouds',ok_weibull_warm_clouds) 474 CALL getin_p('iflag_cloud_sublim_pdf',iflag_cloud_sublim_pdf)475 475 CALL getin_p('depo_coef_cirrus',depo_coef_cirrus) 476 476 CALL getin_p('capa_cond_cirrus',capa_cond_cirrus) 477 477 CALL getin_p('std_subl_pdf_lscp',std_subl_pdf_lscp) 478 CALL getin_p('mu_subl_pdf_lscp',mu_subl_pdf_lscp)479 478 CALL getin_p('beta_pdf_lscp',beta_pdf_lscp) 480 479 CALL getin_p('temp_thresh_pdf_lscp',temp_thresh_pdf_lscp) … … 553 552 WRITE(lunout,*) 'lscp_ini, ok_poprecip', ok_poprecip 554 553 WRITE(lunout,*) 'lscp_ini, ok_corr_vap_evasub', ok_corr_vap_evasub 554 WRITE(lunout,*) 'lscp_ini, ok_growth_precip_deposition', ok_growth_precip_deposition 555 555 WRITE(lunout,*) 'lscp_ini, rain_int_min:', rain_int_min 556 556 WRITE(lunout,*) 'lscp_ini, gamma_agg:', gamma_agg … … 566 566 WRITE(lunout,*) 'lscp_ini, snow_fallspeed_clr:', snow_fallspeed_clr 567 567 WRITE(lunout,*) 'lscp_ini, snow_fallspeed_cld:', snow_fallspeed_cld 568 WRITE(lunout,*) 'lscp_ini, ok_ precip_resuspension:', ok_precip_resuspension569 WRITE(lunout,*) 'lscp_ini, snow_thresh_resuspension:', snow_thresh_resuspension568 WRITE(lunout,*) 'lscp_ini, ok_ice_sedim:', ok_ice_sedim 569 WRITE(lunout,*) 'lscp_ini, ice_fallspeed_sedim:', ice_fallspeed_sedim 570 570 ! for condensation and ice supersaturation 571 571 WRITE(lunout,*) 'lscp_ini, ok_ice_supersat:', ok_ice_supersat 572 572 WRITE(lunout,*) 'lscp_ini, ok_unadjusted_clouds:', ok_unadjusted_clouds 573 573 WRITE(lunout,*) 'lscp_ini, ok_weibull_warm_clouds:', ok_weibull_warm_clouds 574 WRITE(lunout,*) 'lscp_ini, iflag_cloud_sublim_pdf:', iflag_cloud_sublim_pdf575 574 WRITE(lunout,*) 'lscp_ini, depo_coef_cirrus:', depo_coef_cirrus 576 575 WRITE(lunout,*) 'lscp_ini, capa_cond_cirrus:', capa_cond_cirrus 577 576 WRITE(lunout,*) 'lscp_ini, std_subl_pdf_lscp:', std_subl_pdf_lscp 578 WRITE(lunout,*) 'lscp_ini, mu_subl_pdf_lscp:', mu_subl_pdf_lscp579 577 WRITE(lunout,*) 'lscp_ini, beta_pdf_lscp:', beta_pdf_lscp 580 578 WRITE(lunout,*) 'lscp_ini, temp_thresh_pdf_lscp:', temp_thresh_pdf_lscp -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_precip.f90
r5581 r5589 540 540 IF (zoliqi(i) .GT. 0.) THEN 541 541 zfroi=(zoliqi(i)-((zoliqi(i)**(-dice_velo)) & 542 +dice_velo*dtime/REAL(niter_lscp)*cice_velo/zdz(i) *ffallv)**(-1./dice_velo))542 +dice_velo*dtime/REAL(niter_lscp)*cice_velo/zdz(i)/zneb(i)*zrho(i)*ffallv)**(-1./dice_velo)) 543 543 ELSE 544 544 zfroi=0. … … 713 713 SUBROUTINE poprecip_precld( & 714 714 klon, dtime, iftop, paprsdn, paprsup, pplay, temp, tempupnew, qvap, & 715 qprecip, precipfracclr, precipfraccld, qvapclrup, qtotupnew, &715 qprecip, precipfracclr, precipfraccld, qvapclrup, qtotupnew, qice_sedim, & 716 716 cldfra, qvc, qliq, qice, & 717 717 rain, rainclr, raincld, snow, snowclr, snowcld, & 718 dqreva, dqssub, d qsres, dcfres, dqvcres&718 dqreva, dqssub, dcfsed, dqvcsed & 719 719 ) 720 720 … … 722 722 USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 723 723 USE lmdz_lscp_ini, ONLY : ok_corr_vap_evasub, ok_ice_supersat, ok_unadjusted_clouds 724 USE lmdz_lscp_ini, ONLY : ok_growth_precip_deposition, ok_ice_sedim 724 725 USE lmdz_lscp_ini, ONLY : eps, temp_nowater 725 USE lmdz_lscp_ini, ONLY : ok_precip_resuspension, snow_thresh_resuspension726 726 USE lmdz_lscp_tools, ONLY : calc_qsat_ecmwf 727 727 … … 749 749 REAL, INTENT(IN), DIMENSION(klon) :: qvapclrup !--clear-sky specific humidity IN THE LAYER ABOVE [kg/kg] 750 750 REAL, INTENT(IN), DIMENSION(klon) :: qtotupnew !--total specific humidity IN THE LAYER ABOVE [kg/kg] 751 REAL, INTENT(IN), DIMENSION(klon) :: qice_sedim !--ice water content that sedimentated from the layer above [kg/kg] 751 752 752 753 REAL, INTENT(INOUT), DIMENSION(klon) :: cldfra !--cloud fraction at the beginning of lscp - used only if the cloud properties are advected [-] … … 765 766 REAL, INTENT(OUT), DIMENSION(klon) :: dqreva !--rain tendency due to evaporation [kg/kg/s] 766 767 REAL, INTENT(OUT), DIMENSION(klon) :: dqssub !--snow tendency due to sublimation [kg/kg/s] 767 REAL, INTENT(OUT), DIMENSION(klon) :: dqsres !--snow tendency due to resuspension of ice crystals [kg/kg/s] 768 REAL, INTENT(OUT), DIMENSION(klon) :: dcfres !--cloud fraction tendency due to resuspension of ice crystals [kg/kg/s] 769 REAL, INTENT(OUT), DIMENSION(klon) :: dqvcres !--cloud water vapor tendency due to resuspension of ice crystals [kg/kg/s] 768 REAL, INTENT(OUT), DIMENSION(klon) :: dcfsed !--cloud fraction tendency due to sedimentation of ice crystals [s-1] 769 REAL, INTENT(OUT), DIMENSION(klon) :: dqvcsed !--cloud water vapor tendency due to sedimentation of ice crystals [kg/kg/s] 770 770 771 771 … … 791 791 !--Specific heat constant 792 792 REAL :: cpair, cpw 793 !--For resuspension of ice crystals794 REAL :: dsnowres, qiceinprecip795 793 796 794 !--Initialisation … … 798 796 dqreva(:) = 0. 799 797 dqssub(:) = 0. 800 dqrevap = 0. 801 dqssubl = 0. 802 IF ( ok_precip_resuspension ) THEN 803 dqsres(:) = 0. 804 dcfres(:) = 0. 805 dqvcres(:) = 0. 798 IF ( ok_ice_sedim .AND. ok_ice_supersat ) THEN 799 dcfsed(:) = 0. 800 dqvcsed(:) = 0. 806 801 ENDIF 807 802 … … 891 886 DO i = 1, klon 892 887 888 dqrevap = 0. 889 dqssubl = 0. 893 890 !--If there is precipitation from the layer above 894 891 IF ( ( rain(i) + snow(i) ) .GT. 0. ) THEN … … 924 921 IF ( ( 1. - precipfraccld(i) ) .GT. eps ) THEN 925 922 qvapclr = qvapclrup(i) / qtotupnew(i) * qvap(i) / ( 1. - precipfraccld(i) ) 923 ELSE 924 qvapclr = 0. 925 ENDIF 926 IF ( precipfraccld(i) .GT. eps ) THEN 927 qvapcld = MAX(qtotupnew(i)-qvapclrup(i) , 0.) / qtotupnew(i) * qvap(i) / precipfraccld(i) 928 ELSE 929 qvapcld = 0. 926 930 ENDIF 927 931 ELSE … … 929 933 !--for the evap / subl process 930 934 qvapclr = qvap(i) 931 ENDIF 935 qvapcld = qvap(i) 936 ENDIF 937 938 939 !-------------------- 940 !-- ICE SEDIMENTATION 941 !-------------------- 942 943 !--If the sedimentation of ice crystals is activated, the falling ice is sublimated and 944 !--added to the total water content of the gridbox 945 IF ( ok_ice_sedim .AND. ( qice_sedim(i) .GT. 0. ) ) THEN 946 !--Vapor is updated after evaporation/sublimation (it is increased) 947 qvap(i) = qvap(i) + qice_sedim(i) 948 !--Air and precip temperature (i.e., gridbox temperature) 949 !--is updated due to latent heat cooling 950 temp(i) = temp(i) & 951 - qice_sedim(i) * RLSTT / RCPD & 952 / ( 1. + RVTMP2 * ( qvap(i) + qprecip(i) ) ) 953 954 IF ( ok_ice_supersat ) THEN 955 !--If ice supersaturation is activated, the cloud properties are prognostic. 956 !--The falling ice is then considered a new cloud in the gridbox. 957 !--BEWARE with this parameterisation, we can create a new cloud with a much 958 !--different ice water content and water vapor content than the existing cloud 959 !--(if it exists). This implies than unphysical fluxes of ice and vapor 960 !--occur between the existing cloud and the newly formed cloud (from sedimentation). 961 !--Note also that currently, the precipitation scheme assume a maximum 962 !--random overlap, meaning that the new formed clouds will not be affected 963 !--by vertical wind shear. 964 ! Maybe we should reduce dcfsed? 965 dcfsed(i) = precipfracclr_tmp(i) 966 dqvcsed(i) = qvapclr * dcfsed(i) 967 !--Add tendencies 968 cldfra(i) = cldfra(i) + dcfsed(i) 969 qvc(i) = qvc(i) + dqvcsed(i) 970 qice(i) = qice(i) + qice_sedim(i) 971 !--Normalisation 972 dcfsed(i) = dcfsed(i) / dtime 973 dqvcsed(i) = dqvcsed(i) / dtime 974 ENDIF 975 ENDIF ! ok_ice_sedim 976 932 977 933 978 !--------------------------- … … 997 1042 ENDIF 998 1043 1044 ELSE 1045 !--All the precipitation is sublimated if the fraction is zero 1046 drainclreva = - rainclr_tmp(i) 1047 dsnowclrsub = - snowclr_tmp(i) 1048 999 1049 ENDIF ! precipfracclr_tmp .GT. eps 1000 1050 … … 1004 1054 !--------------------------- 1005 1055 1006 IF ( ok_ unadjusted_clouds .AND. ( temp(i) .LE. temp_nowater) .AND. ( precipfraccld_tmp(i) .GT. eps ) ) THEN1056 IF ( ok_growth_precip_deposition .AND. ( temp(i) .LE. RTT ) .AND. ( precipfraccld_tmp(i) .GT. eps ) ) THEN 1007 1057 !--Evaporation of liquid precipitation coming from above 1008 1058 !--in the cloud only … … 1011 1061 !--Exact explicit formulation (raincld is resolved exactly, qvap explicitly) 1012 1062 !--which does not need a barrier on raincld, because included in the formula 1013 !draincldeva = precipfraccld_tmp(i) * MAX(0., &1014 !- coef_eva * ( 1. - expo_eva ) * (1. - qvapcld / qsatl(i)) * dz(i) &1015 !+ ( raincld_tmp(i) / precipfraccld_tmp(i) )**( 1. - expo_eva ) &1016 !)**( 1. / ( 1. - expo_eva ) ) - raincld_tmp(i)1063 draincldeva = precipfraccld_tmp(i) * MAX(0., & 1064 - coef_eva * ( 1. - expo_eva ) * (1. - qvapcld / qsatl(i)) * dz(i) & 1065 + ( raincld_tmp(i) / precipfraccld_tmp(i) )**( 1. - expo_eva ) & 1066 )**( 1. / ( 1. - expo_eva ) ) - raincld_tmp(i) 1017 1067 1018 1068 !--Evaporation is limited by 0 1019 1069 !--NB. with ok_ice_supersat activated, this barrier should be useless 1020 !draincldeva = MIN(0., draincldeva) 1021 draincldeva = 0. 1070 draincldeva = MIN(0., draincldeva) 1022 1071 1023 1072 … … 1081 1130 raincld_tmp(i) = MAX(0., raincld_tmp(i) + draincldeva) 1082 1131 snowcld_tmp(i) = MAX(0., snowcld_tmp(i) + dsnowcldsub) 1083 1084 1085 !--If ok_precip_to_clouds is set to .TRUE., some of the precipitations can go back to clouds1086 !--Only the snow flux can go back to cloud, and only if there is no rain flux1087 !--(mixed-phase clouds)1088 IF ( ok_precip_resuspension ) THEN1089 1090 IF ( (snowclr_tmp(i) .GT. 0.) .AND. (precipfracclr_tmp(i) .GT. eps) &1091 .AND. (rainclr_tmp(i) .LT. eps) ) THEN1092 dsnowres = snowclr_tmp(i) * EXP( - snowclr_tmp(i) / precipfracclr_tmp(i) &1093 / snow_thresh_resuspension )1094 IF ( dsnowres .GT. 0. ) THEN1095 dqsres(i) = dqsres(i) - dsnowres / dhum_to_dflux(i)1096 !--The following line determines the in-cloud ice water content of the newly formed cloud1097 !--It is a linear combination between the in-precip ice water content (left term) and the1098 !--in-existing-cloud ice water content (right term). This is done so that the existing1099 !--cloud is not too modified, i.e. unphysical ice fluxes going from the existing cloud1100 !--to the new cloud. If the existing cloud is already large, the newly formed cloud1101 !--fraction is reduced to match the in-cloud ice water content of the existing cloud.1102 !--NB. this is done on qi, not on qvc. Not sure what impact that implies1103 qiceinprecip = - dqsres(i) / precipfracclr_tmp(i) * ( 1. - cldfra(i) ) + qice(i)1104 dcfres(i) = - dqsres(i) / qiceinprecip1105 dqvcres(i) = qvapclr * dcfres(i)1106 !--Add tendencies1107 snowcld_tmp(i) = snowcld_tmp(i) + dsnowres1108 ENDIF1109 ENDIF1110 1111 IF ( (snowcld_tmp(i) .GT. 0.) .AND. (precipfraccld_tmp(i) .GT. 0.) &1112 .AND. (raincld_tmp(i) .LT. eps) ) THEN1113 dsnowres = snowcld_tmp(i) * EXP( - snowcld_tmp(i) / precipfraccld_tmp(i) &1114 / snow_thresh_resuspension )1115 IF ( dsnowres .GT. 0. ) THEN1116 dqsres(i) = dqsres(i) - dsnowres / dhum_to_dflux(i)1117 !--Add tendencies1118 snowcld_tmp(i) = snowcld_tmp(i) + dsnowres1119 ENDIF1120 ENDIF1121 1122 !--Add tendencies1123 cldfra(i) = cldfra(i) + dcfres(i)1124 qvc(i) = qvc(i) + dqvcres(i)1125 qice(i) = qice(i) - dqsres(i)1126 !--Recall that qvap is here the total water in the gridbox1127 qvap(i) = qvap(i) - dqsres(i)1128 ENDIF1129 1132 1130 1133 … … 1323 1326 SUBROUTINE poprecip_postcld( & 1324 1327 klon, dtime, paprsdn, paprsup, pplay, ctot_vol, ptconv, & 1325 temp, qvap, qliq, qice, icefrac, cldfra, &1328 temp, qvap, qliq, qice, icefrac, cldfra, qice_sedim, & 1326 1329 precipfracclr, precipfraccld, & 1327 1330 rain, rainclr, raincld, snow, snowclr, snowcld, & 1328 1331 qraindiag, qsnowdiag, dqrauto, dqrcol, dqrmelt, dqrfreez, & 1329 dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez )1332 dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez, dqised) 1330 1333 1331 1334 USE lmdz_lscp_ini, ONLY : prt_level, lunout … … 1338 1341 rho_rain, r_rain, r_snow, rho_ice, & 1339 1342 tau_auto_snow_min, tau_auto_snow_max, & 1340 thresh_precip_frac, eps,&1343 expo_tau_auto_snow, thresh_precip_frac, eps, & 1341 1344 gamma_melt, alpha_freez, beta_freez, temp_nowater, & 1342 1345 iflag_cloudth_vert, iflag_rain_incloud_vol, & 1343 1346 cld_lc_lsc_snow, cld_lc_con_snow, gamma_freez, & 1344 1347 rain_fallspeed_clr, rain_fallspeed_cld, & 1345 snow_fallspeed_clr, snow_fallspeed_cld 1348 snow_fallspeed_clr, snow_fallspeed_cld, & 1349 ok_ice_sedim, ice_fallspeed_sedim 1346 1350 1347 1351 … … 1364 1368 REAL, INTENT(IN), DIMENSION(klon) :: icefrac !--ice fraction [-] 1365 1369 REAL, INTENT(IN), DIMENSION(klon) :: cldfra !--cloud fraction [-] 1370 REAL, INTENT(INOUT), DIMENSION(klon) :: qice_sedim !--quantity of sedimentated ice [kg/kg] 1366 1371 1367 1372 REAL, INTENT(INOUT), DIMENSION(klon) :: precipfracclr !--fraction of precipitation in the clear sky IN THE LAYER ABOVE [-] … … 1388 1393 REAL, INTENT(OUT), DIMENSION(klon) :: dqsfreez !--snow tendency due to freezing [kg/kg/s] 1389 1394 REAL, INTENT(OUT), DIMENSION(klon) :: dqrfreez !--rain tendency due to freezing [kg/kg/s] 1395 REAL, INTENT(OUT), DIMENSION(klon) :: dqised !--ice water content tendency due to sedimentation of ice crystals [kg/kg/s] 1390 1396 1391 1397 … … 1428 1434 REAL :: dqifreez !--loss of ice cloud content due to collection of ice from rain [kg/kg/s] 1429 1435 REAL :: Eff_rain_ice 1436 1437 !--Ice sedimentation 1438 REAL :: dz, qice_sedim_tmp 1430 1439 1431 1440 … … 1444 1453 dqrfreez(:) = 0. 1445 1454 dqsfreez(:) = 0. 1455 IF ( ok_ice_sedim ) dqised(:) = 0. 1446 1456 1447 1457 … … 1559 1569 !--tau for snow depends on the ice fraction in mixed-phase clouds 1560 1570 tau_auto_snow = tau_auto_snow_max & 1561 + ( tau_auto_snow_min - tau_auto_snow_max ) * ( 1. - icefrac(i))1571 + ( tau_auto_snow_min - tau_auto_snow_max ) * ((1. - icefrac(i))**expo_tau_auto_snow) 1562 1572 1563 1573 expo_auto_rain = cld_expo_con … … 1570 1580 !--tau for snow depends on the ice fraction in mixed-phase clouds 1571 1581 tau_auto_snow = tau_auto_snow_max & 1572 + ( tau_auto_snow_min - tau_auto_snow_max ) * ( 1. - icefrac(i))1582 + ( tau_auto_snow_min - tau_auto_snow_max ) * ((1. - icefrac(i))**expo_tau_auto_snow) 1573 1583 1574 1584 expo_auto_rain = cld_expo_lsc … … 1903 1913 1904 1914 1915 !--------------------------------------------------------- 1916 !-- ICE SEDIMENTATION 1917 !--------------------------------------------------------- 1918 IF ( ok_ice_sedim ) THEN 1919 qice_sedim_tmp = 0. 1920 1921 IF ( temp(i) .LE. temp_nowater ) THEN 1922 rho = pplay(i) / temp(i) / RD 1923 dz = ( paprsdn(i) - paprsup(i) ) / RG / rho 1924 qice_sedim_tmp = qice(i) * MIN(1., ice_fallspeed_sedim * dtime / dz) 1925 !--Add tendencies 1926 qice(i) = qice(i) - qice_sedim_tmp 1927 ENDIF 1928 1929 !--Diagnostic tendencies 1930 dqised(i) = ( qice_sedim(i) - qice_sedim_tmp ) / dtime 1931 !--Save quantity that will be sedimentated in the layer below 1932 qice_sedim(i) = qice_sedim_tmp 1933 ENDIF 1934 1905 1935 1906 1936 !--If the local flux of rain+snow in clear/cloudy air is lower than rain_int_min, … … 1915 1945 !--Note that this is physically different than what is proposed in LTP thesis. 1916 1946 precipfracclr(i) = MIN( precipfracclr(i), ( rainclr(i) + snowclr(i) ) / rain_int_min ) 1917 precipfraccld(i) = MIN( precipfraccld(i), ( raincld(i) + snowcld(i) ) / rain_int_min )1918 1947 1919 1948 !--Calculate outputs -
LMDZ6/branches/contrails/libf/phylmd/phys_local_var_mod.F90
r5579 r5589 683 683 REAL, SAVE, ALLOCATABLE :: dcf_avi(:,:), dqi_avi(:,:), dqvc_avi(:,:) 684 684 !$OMP THREADPRIVATE(dcf_avi, dqi_avi, dqvc_avi) 685 REAL, SAVE, ALLOCATABLE :: cldfra_nocont(:,:), cldtau_nocont(:,:), cldemi_nocont(:,:) 686 !$OMP THREADPRIVATE(cldfra_nocont, cldtau_nocont, cldemi_nocont) 687 REAL, SAVE, ALLOCATABLE :: cldh_nocont(:), contcov(:) 688 !$OMP THREADPRIVATE(cldh_nocont, contcov) 689 REAL, SAVE, ALLOCATABLE :: fiwp_nocont(:), fiwc_nocont(:,:), ref_ice_nocont(:,:) 690 !$OMP THREADPRIVATE(fiwp_nocont, fiwc_nocont, ref_ice_nocont) 691 REAL, SAVE, ALLOCATABLE :: topsw_nocont(:), solsw_nocont(:) 692 !$OMP THREADPRIVATE(topsw_nocont, solsw_nocont) 693 REAL, SAVE, ALLOCATABLE :: toplw_nocont(:), sollw_nocont(:) 694 !$OMP THREADPRIVATE(toplw_nocont, sollw_nocont) 685 695 686 696 !-- LSCP - mixed phase clouds variables … … 717 727 REAL, SAVE, ALLOCATABLE :: dqsfreez(:,:) 718 728 !$OMP THREADPRIVATE(dqsfreez) 719 REAL, SAVE, ALLOCATABLE :: d cfres(:,:)720 !$OMP THREADPRIVATE(d cfres)721 REAL, SAVE, ALLOCATABLE :: d qsres(:,:)722 !$OMP THREADPRIVATE(d qsres)723 REAL, SAVE, ALLOCATABLE :: dqvc res(:,:)724 !$OMP THREADPRIVATE(dqvc res)729 REAL, SAVE, ALLOCATABLE :: dqised(:,:) 730 !$OMP THREADPRIVATE(dqised) 731 REAL, SAVE, ALLOCATABLE :: dcfsed(:,:) 732 !$OMP THREADPRIVATE(dcfsed) 733 REAL, SAVE, ALLOCATABLE :: dqvcsed(:,:) 734 !$OMP THREADPRIVATE(dqvcsed) 725 735 726 736 ! variables for stratospheric aerosol … … 1238 1248 ALLOCATE(contfra(klon,klev), dcontfra_cir(klon,klev)) 1239 1249 ALLOCATE(dcf_avi(klon,klev), dqi_avi(klon,klev), dqvc_avi(klon,klev)) 1250 ALLOCATE(cldfra_nocont(klon,klev), cldtau_nocont(klon,klev), cldemi_nocont(klon,klev)) 1251 ALLOCATE(cldh_nocont(klon), contcov(klon)) 1252 ALLOCATE(fiwp_nocont(klon), fiwc_nocont(klon,klev), ref_ice_nocont(klon,klev)) 1253 ALLOCATE(topsw_nocont(klon), solsw_nocont(klon)) 1254 ALLOCATE(toplw_nocont(klon), sollw_nocont(klon)) 1240 1255 1241 1256 !-- LSCP - POPRECIP variables … … 1244 1259 ALLOCATE(dqrauto(klon,klev), dqrcol(klon,klev), dqrmelt(klon,klev), dqrfreez(klon,klev)) 1245 1260 ALLOCATE(dqsauto(klon,klev), dqsagg(klon,klev), dqsrim(klon,klev), dqsmelt(klon,klev), dqsfreez(klon,klev)) 1246 ALLOCATE(d cfres(klon,klev), dqsres(klon,klev), dqvcres(klon,klev))1261 ALLOCATE(dqised(klon,klev), dcfsed(klon,klev), dqvcsed(klon,klev)) 1247 1262 1248 1263 IF (CPPKEY_STRATAER) THEN … … 1646 1661 DEALLOCATE(contfra, dcontfra_cir) 1647 1662 DEALLOCATE(dcf_avi, dqi_avi, dqvc_avi) 1663 DEALLOCATE(cldfra_nocont, cldtau_nocont, cldemi_nocont) 1664 DEALLOCATE(cldh_nocont, contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont) 1665 DEALLOCATE(topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont) 1648 1666 1649 1667 !-- LSCP - POPRECIP variables … … 1652 1670 DEALLOCATE(dqrauto, dqrcol, dqrmelt, dqrfreez) 1653 1671 DEALLOCATE(dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez) 1654 DEALLOCATE(d cfres, dqsres, dqvcres)1672 DEALLOCATE(dqised, dcfsed, dqvcsed) 1655 1673 1656 1674 IF (CPPKEY_STRATAER) THEN -
LMDZ6/branches/contrails/libf/phylmd/phys_output_ctrlout_mod.F90
r5579 r5589 1611 1611 TYPE(ctrl_out), SAVE :: o_dqsfreez = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1612 1612 'dqsfreez', 'LS snow tendency due to freezing', 'kg/kg/s', (/ ('', i=1, 10) /)) 1613 TYPE(ctrl_out), SAVE :: o_d cfres= ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &1614 'd cfres', 'LS cloud fraction tendency due to resuspension', 'kg/kg/s', (/ ('', i=1, 10) /))1615 TYPE(ctrl_out), SAVE :: o_d qsres= ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &1616 'd qsres', 'LS snow tendency due to resuspension', 'kg/kg/s', (/ ('', i=1, 10) /))1617 TYPE(ctrl_out), SAVE :: o_dqvc res= ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &1618 'dqvc res', 'LS cloud water vapor tendency due to resuspension', 'kg/kg/s', (/ ('', i=1, 10) /))1613 TYPE(ctrl_out), SAVE :: o_dqised = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1614 'dqised', 'Ice water content tendency due to sedimentation', 'kg/kg/s', (/ ('', i=1, 10) /)) 1615 TYPE(ctrl_out), SAVE :: o_dcfsed = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1616 'dcfsed', 'Cloud fraction tendency due to sedimentation', 's-1', (/ ('', i=1, 10) /)) 1617 TYPE(ctrl_out), SAVE :: o_dqvcsed = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1618 'dqvcsed', 'Cloud water vapor tendency due to sedimentation', 'kg/kg/s', (/ ('', i=1, 10) /)) 1619 1619 TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1620 1620 'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /)) … … 2214 2214 TYPE(ctrl_out), SAVE :: o_flight_h2o = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2215 2215 'flighth2o', 'Aviation H2O flight emission', 'kg H2O/s/m^3', (/ ('', i=1, 10) /)) 2216 TYPE(ctrl_out), SAVE :: o_cldfra_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2217 'cldfra_nocont', 'Cloud fraction w/o contrails', '-', (/ ('', i=1, 10) /)) 2218 TYPE(ctrl_out), SAVE :: o_cldtau_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2219 'cldtau_nocont', 'Cloud optical thickness w/o contrails', '1', (/ ('', i=1, 10) /)) 2220 TYPE(ctrl_out), SAVE :: o_cldemi_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2221 'cldemi_nocont', 'Cloud optical emissivity w/o contrails', '1', (/ ('', i=1, 10) /)) 2222 TYPE(ctrl_out), SAVE :: o_cldh_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2223 'cldh_nocont', 'High-level cloudiness w/o contrails', '-', (/ ('', i=1, 10) /)) 2224 TYPE(ctrl_out), SAVE :: o_contcov = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2225 'contcov', 'Total contrails cover', '-', (/ ('', i=1, 10) /)) 2226 TYPE(ctrl_out), SAVE :: o_iwp_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2227 'iwp_nocont', 'Cloud ice water path w/o contrails', 'kg/m2', (/ ('', i=1, 10) /)) 2228 TYPE(ctrl_out), SAVE :: o_iwc_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2229 'iwc_nocont', 'Cloud ice water content seen by radiation w/o contrails', 'kg/kg', (/ ('', i=1, 10) /)) 2230 TYPE(ctrl_out), SAVE :: o_ref_ice_nocont = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 2231 'ref_ice_nocont', 'Effective radius of ice crystals w/o contrails', 'microns', (/ ('', i=1, 10) /)) 2232 TYPE(ctrl_out), SAVE :: o_tops_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2233 'tops_nocont', 'Solar rad. at TOA w/o contrails', 'W/m2', (/ ('', i=1, 10) /)) 2234 TYPE(ctrl_out), SAVE :: o_topl_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2235 'topl_nocont', 'IR rad. at TOA w/o contrails', 'W/m2', (/ ('', i=1, 10) /)) 2236 TYPE(ctrl_out), SAVE :: o_sols_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2237 'sols_nocont', 'Solar rad. at surf. w/o contrails', 'W/m2', (/ ('', i=1, 10) /)) 2238 TYPE(ctrl_out), SAVE :: o_soll_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2239 'soll_nocont', 'IR rad. at surface w/o contrails', 'W/m2', (/ ('', i=1, 10) /)) 2240 TYPE(ctrl_out), SAVE :: o_nettop_nocont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2241 'nettop_nocont', 'Net dn radiatif flux at TOA w/o contrails', 'W/m2', (/ ('', i=1, 10) /)) 2216 2242 2217 2243 !!!!!!!!!!!!! Sorties niveaux standards de pression NMC -
LMDZ6/branches/contrails/libf/phylmd/phys_output_write_mod.F90
r5579 r5589 145 145 o_qrainlsc, o_qsnowlsc, o_dqreva, o_dqrauto, o_dqrcol, o_dqrmelt, o_dqrfreez, & 146 146 o_dqssub, o_dqsauto, o_dqsagg, o_dqsrim, o_dqsmelt, o_dqsfreez, & 147 o_d cfres, o_dqsres, o_dqvcres, &147 o_dqised, o_dcfsed, o_dqvcsed, & 148 148 o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, & 149 149 o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, & … … 232 232 o_Tcritcont, o_qcritcont, o_potcontfraP, o_potcontfraNP, & 233 233 o_dcontfracir, o_dcfavi, o_dqiavi, o_dqvcavi, o_flight_dist, o_flight_h2o, & 234 o_cldfra_nocont, o_cldtau_nocont, o_cldemi_nocont, o_cldh_nocont, & 235 o_contcov, o_iwp_nocont, o_iwc_nocont, o_ref_ice_nocont, & 236 o_tops_nocont, o_topl_nocont, o_sols_nocont, o_soll_nocont, & 234 237 !--interactive CO2 235 238 o_flx_co2_ocean, o_flx_co2_ocean_cor, & … … 269 272 o_SAD_sulfate, o_reff_sulfate, o_sulfmmr, o_nd_mode, o_sulfmmr_mode 270 273 271 USE lmdz_lscp_ini, ONLY: ok_poprecip, ok_ precip_resuspension274 USE lmdz_lscp_ini, ONLY: ok_poprecip, ok_ice_sedim 272 275 273 276 USE phys_output_ctrlout_mod, ONLY: o_heat_volc, o_cool_volc !NL … … 358 361 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 359 362 dcontfra_cir, dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, & 363 cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & 364 contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont, & 365 topsw_nocont, toplw_nocont, solsw_nocont, sollw_nocont, & 360 366 alp_bl_det, alp_bl_fluct_m, alp_bl_conv, & 361 367 alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, & … … 384 390 dqrauto,dqrcol,dqrmelt,dqrfreez, & 385 391 dqsauto,dqsagg,dqsrim,dqsmelt,dqsfreez, & 386 d cfres, dqsres, dqvcres, &392 dqised, dcfsed, dqvcsed, & 387 393 d_t_dyn, & 388 394 d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, & … … 2095 2101 CALL histwrite_phy(o_dqsfreez, dqsfreez) 2096 2102 CALL histwrite_phy(o_dqsrim, dqsrim) 2097 IF ( ok_ precip_resuspension) THEN2098 CALL histwrite_phy(o_d cfres, dcfres)2099 CALL histwrite_phy(o_d qsres, dqsres)2100 CALL histwrite_phy(o_dqvc res, dqvcres)2103 IF ( ok_ice_sedim ) THEN 2104 CALL histwrite_phy(o_dqised, dqised) 2105 CALL histwrite_phy(o_dcfsed, dcfsed) 2106 CALL histwrite_phy(o_dqvcsed, dqvcsed) 2101 2107 ENDIF 2102 2108 ELSE … … 2154 2160 CALL histwrite_phy(o_dqiavi, dqi_avi) 2155 2161 CALL histwrite_phy(o_dqvcavi, dqvc_avi) 2162 CALL histwrite_phy(o_cldfra_nocont, cldfra_nocont) 2163 CALL histwrite_phy(o_cldtau_nocont, cldtau_nocont) 2164 CALL histwrite_phy(o_cldemi_nocont, cldemi_nocont) 2165 CALL histwrite_phy(o_cldh_nocont, cldh_nocont) 2166 CALL histwrite_phy(o_contcov, contcov) 2167 CALL histwrite_phy(o_iwp_nocont, fiwp_nocont) 2168 CALL histwrite_phy(o_iwc_nocont, fiwc_nocont) 2169 CALL histwrite_phy(o_ref_ice_nocont, ref_ice_nocont) 2170 IF (ok_rad_contrail) THEN 2171 IF (vars_defined) zx_tmp_fi2d = topsw_nocont * swradcorr 2172 CALL histwrite_phy(o_tops_nocont, topsw_nocont) 2173 CALL histwrite_phy(o_topl_nocont, toplw_nocont) 2174 IF (vars_defined) zx_tmp_fi2d = topsw_nocont * swradcorr - toplw_nocont 2175 CALL histwrite_phy(o_nettop_nocont, zx_tmp_fi2d) 2176 IF (vars_defined) zx_tmp_fi2d = solsw_nocont * swradcorr 2177 CALL histwrite_phy(o_sols_nocont, solsw_nocont) 2178 CALL histwrite_phy(o_soll_nocont, sollw_nocont) 2179 ENDIF 2156 2180 ENDIF 2157 2181 IF (ok_plane_h2o) THEN -
LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
r5579 r5589 187 187 ! proprecip 188 188 qraindiag, qsnowdiag, & 189 dqreva, dqssub, d cfres, dqsres, dqvcres, &189 dqreva, dqssub, dqised, dcfsed, dqvcsed, & 190 190 dqrauto,dqrcol,dqrmelt,dqrfreez, & 191 191 dqsauto,dqsagg,dqsrim,dqsmelt,dqsfreez, & … … 331 331 contfra, Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 332 332 dcontfra_cir, dcf_avi, dqi_avi, dqvc_avi, & 333 cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & 334 contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont, & 335 topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont, & 333 336 ! 334 337 stratomask, & … … 1226 1229 ! "CRF off" 1227 1230 REAL, dimension(klon, klev) :: cldfrarad ! fraction nuageuse 1231 !--AB contrails 1232 REAL, dimension(klon, klev) :: cldfrarad_nocont ! fraction nuageuse without contrails 1228 1233 1229 1234 REAL :: calday, zxsnow_dummy(klon) … … 1430 1435 WRITE (lunout, *) ' ok_plane_contrail=y requires 6 H2O tracers ', & 1431 1436 '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c, H2O_a) but nqo=', nqo, '. Might as well stop here.' 1437 abort_message='see above' 1438 CALL abort_physic(modname,abort_message,1) 1439 ENDIF 1440 1441 IF (ok_rad_contrail.AND..NOT.ok_plane_contrail) THEN 1442 WRITE (lunout, *) ' ok_rad_contrail=y requires ok_plane_contrail=y ' 1432 1443 abort_message='see above' 1433 1444 CALL abort_physic(modname,abort_message,1) … … 2111 2122 !============================================================= 2112 2123 2124 !--Read the aviation emissions 2125 IF ( ok_plane_h2o .OR. ok_plane_contrail ) CALL read_aviation_emissions(klon, klev) 2126 2113 2127 IF (using_xios) THEN 2114 2128 ! Get "missing_val" value from XML files (from temperature variable) … … 2123 2137 IF (is_omp_master) CALL xios_get_field_attr("temp",default_value=missing_val) 2124 2138 CALL bcast_omp(missing_val) 2125 2126 !--Read the aviation emissions2127 IF ( ok_plane_h2o .OR. ok_plane_contrail ) CALL read_aviation_emissions(klon, klev)2128 2139 ! 2129 2140 ! Now we activate some double radiation call flags only if some … … 3924 3935 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, & 3925 3936 dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez, & 3926 d cfres, dqsres, dqvcres)3937 dqised, dcfsed, dqvcsed) 3927 3938 3928 3939 … … 4470 4481 ref_liq_pi, ref_ice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, & 4471 4482 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 4472 zfice, dNovrN, ptconv, rnebcon, clwcon, rcont_seri) 4483 zfice, dNovrN, ptconv, rnebcon, clwcon, & 4484 !--AB contrails 4485 rcont_seri, cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & 4486 contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont) 4473 4487 4474 4488 ! … … 4479 4493 cldemirad = cldemi 4480 4494 cldfrarad = cldfra 4495 !--AB contrails 4496 IF (ok_rad_contrail) cldfrarad_nocont = cldfra_nocont 4481 4497 4482 4498 ! … … 4505 4521 ENDDO 4506 4522 ENDDO 4523 4524 !--AB contrails 4525 IF ( ok_rad_contrail ) THEN 4526 DO k=1, klev 4527 DO i=1, klon 4528 cldfrarad_nocont(i,k) = cldfra_nocont(i,k) * beta(i,k) 4529 ENDDO 4530 ENDDO 4531 ENDIF 4507 4532 ! 4508 4533 ELSE … … 4533 4558 ENDDO 4534 4559 ENDDO 4560 4561 !--AB contrails 4562 IF ( ok_rad_contrail ) THEN 4563 DO k=1, klev 4564 DO i=1, klon 4565 cldfrarad_nocont(i,k) = cldfra_nocont(i,k) * beta(i,k) 4566 ENDDO 4567 ENDDO 4568 ENDIF 4535 4569 ! 4536 4570 ENDIF … … 4649 4683 ZLWFT0_i, ZFLDN0, ZFLUP0, & 4650 4684 ZSWFT0_i, ZFSDN0, ZFSUP0, & 4651 cloud_cover_sw) 4685 cloud_cover_sw, & 4686 !--AB contrails radiative effects 4687 cldfrarad_nocont, fiwc_nocont, ref_ice_nocont, & 4688 topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont) 4652 4689 4653 4690 !lwoff=y, betalwoff=1. : offset LW CRE for radiation code and other … … 4660 4697 sollwdown(:)) 4661 4698 cool = cool + betalwoff * (cool0 - cool) 4699 !--AB contrails 4700 IF ( ok_rad_contrail ) THEN 4701 toplw_nocont = toplw_nocont + betalwoff * (toplw0 - toplw_nocont) 4702 sollw_nocont = sollw_nocont + betalwoff * (sollw0 - sollw_nocont) 4703 ENDIF 4662 4704 4663 4705 IF (.NOT. using_xios) THEN … … 4727 4769 ZLWFT0_i, ZFLDN0, ZFLUP0, & 4728 4770 ZSWFT0_i, ZFSDN0, ZFSUP0, & 4729 cloud_cover_sw) 4771 cloud_cover_sw, & 4772 !--AB contrails radiative effects 4773 cldfrarad_nocont, fiwc_nocont, ref_ice_nocont, & 4774 topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont) 4730 4775 ENDIF !ok_4xCO2atm 4731 4776 -
LMDZ6/branches/contrails/libf/phylmd/radlwsw_m.F90
r5325 r5589 45 45 ZLWFT0_i, ZFLDN0, ZFLUP0, & 46 46 ZSWFT0_i, ZFSDN0, ZFSUP0, & 47 cloud_cover_sw) 47 cloud_cover_sw, & 48 !--AB contrails radiative effects 49 cldfra_nocont, fiwc_nocont, ref_ice_nocont, & 50 topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont) 48 51 49 52 ! Modules necessaires … … 279 282 REAL, DIMENSION(kdlon,kflev+1), INTENT(out) :: ZSWFT0_i 280 283 REAL, DIMENSION(kdlon,kflev+1), INTENT(out) :: ZLWFT0_i 284 !--AB contrails radiative effects 285 REAL, DIMENSION(klon,klev), INTENT(in) :: cldfra_nocont 286 REAL, DIMENSION(klon,klev), INTENT(in) :: fiwc_nocont 287 REAL, DIMENSION(klon,klev), INTENT(in) :: ref_ice_nocont 288 REAL, DIMENSION(klon), INTENT(out) :: topsw_nocont 289 REAL, DIMENSION(klon), INTENT(out) :: solsw_nocont 290 REAL, DIMENSION(klon), INTENT(out) :: toplw_nocont 291 REAL, DIMENSION(klon), INTENT(out) :: sollw_nocont 281 292 282 293 ! Local variables … … 467 478 REAL(KIND=8) ZFLCCDWN_i (klon,klev+1) 468 479 REAL(KIND=8) ZFLCCUP_i (klon,klev+1) 480 !--AB contrails radiative effects 481 REAL(KIND=8) cldfra_nocont_i(klon,klev) 482 REAL(KIND=8) fiwc_nocont_i(klon,klev) 483 REAL(KIND=8) ref_ice_nocont_i(klon,klev) 484 REAL(KIND=8) ZTOPSWNOCONT(klon) 485 REAL(KIND=8) ZSOLSWNOCONT(klon) 486 REAL(KIND=8) ZTOPLWNOCONT(klon) 487 REAL(KIND=8) ZSOLLWNOCONT(klon) 469 488 ! 3 lignes suivantes a activer pour CCMVAL (MPL 20100412) 470 489 ! REAL(KIND=8) RSUN(3,2) … … 900 919 ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k) 901 920 ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k) 921 IF (ok_rad_contrail) THEN 922 !--AB contrails radiative effects 923 cldfra_nocont_i(1:klon,k) = cldfra_nocont(1:klon,klev+1-k) 924 fiwc_nocont_i(1:klon,k) = fiwc_nocont(1:klon,klev+1-k) 925 ref_ice_nocont_i(1:klon,k) = ref_ice_nocont(1:klon,klev+1-k) 926 ENDIF 902 927 ENDDO 903 928 DO k=1,kflev … … 980 1005 ZLWADAERO, & !--NL 981 1006 volmip_solsw, flag_volc_surfstrat, & !--VOLMIP 982 ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback) ! flags aerosols 1007 ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback, & ! flags aerosols 1008 !--AB contrails radiative effect 1009 ok_rad_contrail, cldfra_nocont_i, fiwc_nocont_i, ref_ice_nocont_i, & 1010 ZTOPSWNOCONT, ZSOLSWNOCONT, ZTOPLWNOCONT, ZSOLLWNOCONT) 983 1011 984 1012 !--OB diagnostics … … 1080 1108 ZSOLSWCF_AERO(:,2)=ZSOLSWCF_AERO(:,2)*fract(:) 1081 1109 ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:) 1110 1111 IF (ok_rad_contrail) THEN 1112 !--AB contrails radiative effect 1113 ZTOPSWNOCONT(:) = ZTOPSWNOCONT(:) * fract(:) 1114 ZSOLSWNOCONT(:) = ZSOLSWNOCONT(:) * fract(:) 1115 ENDIF 1082 1116 1083 1117 ! --------- … … 1655 1689 ENDDO 1656 1690 ENDIF 1691 !--AB radiative effect from contrails 1692 IF (ok_rad_contrail) THEN 1693 DO i = 1, kdlon 1694 topsw_nocont(iof+i) = ZTOPSWNOCONT(i) 1695 solsw_nocont(iof+i) = ZSOLSWNOCONT(i) 1696 toplw_nocont(iof+i) = ZTOPLWNOCONT(i) 1697 sollw_nocont(iof+i) = ZSOLLWNOCONT(i) 1698 ENDDO 1699 ENDIF 1657 1700 DO k = 1, kflev 1658 1701 DO i = 1, kdlon -
LMDZ6/branches/contrails/libf/phylmd/rrtm/recmwf_aero.F90
r5294 r5589 40 40 !..end 41 41 & ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat,& 42 & flag_aer_feedback) 42 & flag_aer_feedback, & 43 !--AB contrails radiative effect 44 & ok_rad_contrail, PCLFR_NOCONT, PQIWP_NOCONT, PREF_ICE_NOCONT, & 45 & PTOPSWNOCONT, PSOLSWNOCONT, PTOPLWNOCONT, PSOLLWNOCONT) 43 46 !--fin 44 47 … … 266 269 REAL(KIND=JPRB) ,INTENT(OUT) :: volmip_solsw(KPROMA) ! SW clear sky in the case of VOLMIP 267 270 INTEGER, INTENT(IN) :: flag_volc_surfstrat !--VOlMIP Modif 271 !--AB contrails radiative effect 272 LOGICAL ,INTENT(IN) :: ok_rad_contrail 273 REAL(KIND=JPRB) ,INTENT(IN) :: PCLFR_NOCONT(KPROMA,KLEV) 274 REAL(KIND=JPRB) ,INTENT(IN) :: PQIWP_NOCONT(KPROMA,KLEV) 275 REAL(KIND=JPRB) ,INTENT(IN) :: PREF_ICE_NOCONT(KPROMA,KLEV) 276 REAL(KIND=JPRB) ,INTENT(OUT) :: PTOPSWNOCONT(KPROMA), PSOLSWNOCONT(KPROMA) ! No contrails experiment forcing at TOA and surface (SW) 277 REAL(KIND=JPRB) ,INTENT(OUT) :: PTOPLWNOCONT(KPROMA), PSOLLWNOCONT(KPROMA) ! No contrails experiment forcing at TOA and surface (LW) 268 278 269 279 ! ==== COMPUTED IN RADITE === … … 346 356 REAL(KIND=JPRB) :: LWUP0_AERO(KPROMA,KLEV+1,5) 347 357 REAL(KIND=JPRB) :: LWDN0_AERO(KPROMA,KLEV+1,5) 358 !--AB contrails radiative effect 359 REAL(KIND=JPRB) :: ZRCLC_NOCONT(KPROMA,KLEV), ZQIWP_NOCONT(KPROMA,KLEV) 360 REAL(KIND=JPRB) :: PREF_LIQ_NOCONT(KPROMA,KLEV) 361 REAL(KIND=JPRB) :: PPIZA_NOCONT(KPROMA,KLEV,NSW) 362 REAL(KIND=JPRB) :: PCGA_NOCONT(KPROMA,KLEV,NSW) 363 REAL(KIND=JPRB) :: PTAU_NOCONT(KPROMA,KLEV,NSW) 364 REAL(KIND=JPRB) :: PTAU_LW_NOCONT(KPROMA,KLEV,NLW) 348 365 349 366 #include "radlsw.intfb.h" … … 673 690 ENDIF ! .not. AEROSOLFEEDBACK_ACTIVE 674 691 692 693 !--Double call to radiative routine for contrails 694 !--The calculation are done again WITHOUT contrails 695 IF (ok_rad_contrail) THEN 696 697 !--The same base case is used 698 !--NB. here we could use pointers... 699 IF ( flag_aerosol .EQ. 0 ) THEN 700 PREF_LIQ_NOCONT(:,:) = PREF_LIQ_PI(:,:) 701 PPIZA_NOCONT(:,:,:) = PPIZA_ZERO(:,:,:) 702 PCGA_NOCONT(:,:,:) = PCGA_ZERO(:,:,:) 703 PTAU_NOCONT(:,:,:) = PTAU_ZERO(:,:,:) 704 PTAU_LW_NOCONT(:,:,:) = PTAU_LW_ZERO(:,:,:) 705 ELSEIF ( .not. ok_ade .AND. .not. ok_aie ) THEN 706 PREF_LIQ_NOCONT(:,:) = PREF_LIQ_PI(:,:) 707 PPIZA_NOCONT(:,:,:) = PPIZA_NAT(:,:,:) 708 PCGA_NOCONT(:,:,:) = PCGA_NAT(:,:,:) 709 PTAU_NOCONT(:,:,:) = PTAU_NAT(:,:,:) 710 PTAU_LW_NOCONT(:,:,:) = PTAU_LW_NAT(:,:,:) 711 ELSEIF ( .not. ok_ade .AND. ok_aie ) THEN 712 PREF_LIQ_NOCONT(:,:) = PREF_LIQ(:,:) 713 PPIZA_NOCONT(:,:,:) = PPIZA_NAT(:,:,:) 714 PCGA_NOCONT(:,:,:) = PCGA_NAT(:,:,:) 715 PTAU_NOCONT(:,:,:) = PTAU_NAT(:,:,:) 716 PTAU_LW_NOCONT(:,:,:) = PTAU_LW_NAT(:,:,:) 717 ELSEIF ( ok_ade .AND. .not. ok_aie ) THEN 718 PREF_LIQ_NOCONT(:,:) = PREF_LIQ_PI(:,:) 719 PPIZA_NOCONT(:,:,:) = PPIZA_TOT(:,:,:) 720 PCGA_NOCONT(:,:,:) = PCGA_TOT(:,:,:) 721 PTAU_NOCONT(:,:,:) = PTAU_TOT(:,:,:) 722 PTAU_LW_NOCONT(:,:,:) = PTAU_LW_TOT(:,:,:) 723 ELSEIF ( ok_ade .AND. ok_aie ) THEN 724 PREF_LIQ_NOCONT(:,:) = PREF_LIQ(:,:) 725 PPIZA_NOCONT(:,:,:) = PPIZA_TOT(:,:,:) 726 PCGA_NOCONT(:,:,:) = PCGA_TOT(:,:,:) 727 PTAU_NOCONT(:,:,:) = PTAU_TOT(:,:,:) 728 PTAU_LW_NOCONT(:,:,:) = PTAU_LW_TOT(:,:,:) 729 ENDIF 730 731 DO JK=1,KLEV 732 DO JL=IBEG,IEND 733 ZRCLC_NOCONT(JL,JK)=MAX( 0.0_JPRB ,MIN( 1.0_JPRB ,PCLFR_NOCONT(JL,JK))) 734 IF (ZRCLC_NOCONT(JL,JK) > REPCLC) THEN 735 ZQIWP_NOCONT(JL,JK)=PQIWP_NOCONT(JL,JK) 736 ELSE 737 ZQIWP_NOCONT(JL,JK)=REPH2O*ZRCLC_NOCONT(JL,JK) 738 ENDIF 739 ENDDO 740 ENDDO 741 742 CALL RADLSW (& 743 & IBEG , IEND , KPROMA , KLEV , KMODE , NAER,& 744 & ZRII0 ,& 745 & ZRAER , PALBD , PALBP , PAPRS , ZRPR ,& 746 & ZCCNL , ZCCNO ,& 747 & PCCO2 , ZRCLC_NOCONT , PDP , PEMIS , ZEMIW ,PSLM , ZRMU0 , ZPQO3,& 748 & ZQ , ZQIWP_NOCONT , ZQLWP , ZQS , ZQRAIN,ZQRAINT ,& 749 & PTH , ZRTI , PTS , ZNBAS , ZNTOP ,& 750 & PREF_LIQ_NOCONT, PREF_ICE_NOCONT,& 751 & ZEMIT , ZFCT , ZFLT , ZFCS , ZFLS ,& 752 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 753 & PSFSWDIF,PFSDNN, PFSDNV ,& 754 & LRDUST,PPIZA_NOCONT,PCGA_NOCONT,PTAU_NOCONT,PTAU_LW_NOCONT,PFLUX,PFLUC,& 755 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 756 757 ! save budgets LW and SW at TOA and surface 758 PTOPSWNOCONT(:) = PFSDN(:,KLEV+1) - PFSUP(:,KLEV+1) 759 PSOLSWNOCONT(:) = PFSDN(:,1) - PFSUP(:,1) 760 PTOPLWNOCONT(:) = PFLUX(:,1,KLEV+1) + PFLUX(:,2,KLEV+1) 761 PSOLLWNOCONT(:) = - PFLUX(:,1,1) - PFLUX(:,2,1) 762 763 ENDIF 764 675 765 !* 4.2 TRANSFORM FLUXES TO MODEL HISTORICAL VARIABLES 676 766
Note: See TracChangeset
for help on using the changeset viewer.