Changeset 2292 for palm/trunk/SOURCE/prognostic_equations.f90
- Timestamp:
- Jun 20, 2017 9:51:42 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/prognostic_equations.f90
r2261 r2292 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Implementation of new microphysic scheme: cloud_scheme = 'morrison' 28 ! includes two more prognostic equations for cloud drop concentration (nc) 29 ! and cloud water content (qc). 30 ! 31 ! 2261 2017-06-08 14:25:57Z raasch 27 32 ! bugfix for r2232: openmp directives removed 28 33 ! … … 227 232 228 233 USE arrays_3d, & 229 ONLY: diss_l_e, diss_l_nr, diss_l_pt, diss_l_q, diss_l_qr, & 230 diss_l_s, diss_l_sa, diss_s_e, diss_s_nr, diss_s_pt, diss_s_q, & 231 diss_s_qr, diss_s_s, diss_s_sa, e, e_p, flux_s_e, flux_s_nr, & 232 flux_s_pt, flux_s_q, flux_s_qr, flux_s_s, flux_s_sa, flux_l_e, & 233 flux_l_nr, flux_l_pt, flux_l_q, flux_l_qr, flux_l_s, flux_l_sa, & 234 nr, nr_p, pt, ptdf_x, ptdf_y, pt_init, pt_p, & 235 prho, q, q_init, q_p, qr, qr_p, rdf, & 236 rdf_sc, ref_state, rho_ocean, s, s_init, s_p, sa, sa_init, sa_p,& 237 tend, te_m, tnr_m, tpt_m, tq_m, tqr_m, ts_m, tsa_m, tu_m, tv_m, & 238 tw_m, u, ug, u_init, u_p, v, vg, vpt, v_init, v_p, w, w_p 234 ONLY: diss_l_e, diss_l_nc, diss_l_nr, diss_l_pt, diss_l_q, diss_l_qc, & 235 diss_l_qr, diss_l_s, diss_l_sa, diss_s_e, diss_s_nc, diss_s_nr, & 236 diss_s_pt, diss_s_q, diss_s_qc, diss_s_qr, diss_s_s, diss_s_sa, & 237 e, e_p, flux_s_e, flux_s_nc, flux_s_nr, flux_s_pt, flux_s_q, & 238 flux_s_qc, flux_s_qr, flux_s_s, flux_s_sa, flux_l_e, flux_l_nc, & 239 flux_l_nr, flux_l_pt, flux_l_q, flux_l_qc, flux_l_qr, flux_l_s, & 240 flux_l_sa, nc, nc_p, nr, nr_p, pt, ptdf_x, ptdf_y, pt_init, & 241 pt_p, prho, q, q_init, q_p, qc, qc_p, qr, qr_p, rdf, rdf_sc, & 242 ref_state, rho_ocean, s, s_init, s_p, sa, sa_init, sa_p, tend, & 243 te_m, tnc_m, tnr_m, tpt_m, tq_m, tqc_m, tqr_m, ts_m, tsa_m, & 244 tu_m, tv_m, tw_m, u, ug, u_init, u_p, v, vg, vpt, v_init, v_p, & 245 w, w_p 239 246 240 247 USE control_parameters, & … … 244 251 inflow_l, intermediate_timestep_count, & 245 252 intermediate_timestep_count_max, large_scale_forcing, & 246 large_scale_subsidence, microphysics_ seifert,&253 large_scale_subsidence, microphysics_morrison, microphysics_seifert, & 247 254 microphysics_sat_adjust, neutral, nudging, ocean, outflow_l, & 248 255 outflow_s, passive_scalar, prho_reference, prho_reference, & … … 892 899 893 900 ! 901 !-- If required, calculate prognostic equations for cloud water content 902 !-- and cloud drop concentration 903 IF ( cloud_physics .AND. microphysics_morrison ) THEN 904 ! 905 !-- Calculate prognostic equation for cloud water content 906 tend(:,j,i) = 0.0_wp 907 IF ( timestep_scheme(1:5) == 'runge' ) & 908 THEN 909 IF ( ws_scheme_sca ) THEN 910 CALL advec_s_ws( i, j, qc, 'qc', flux_s_qc, & 911 diss_s_qc, flux_l_qc, diss_l_qc, & 912 i_omp_start, tn ) 913 ELSE 914 CALL advec_s_pw( i, j, qc ) 915 ENDIF 916 ELSE 917 CALL advec_s_up( i, j, qc ) 918 ENDIF 919 CALL diffusion_s( i, j, qc, & 920 surf_def_h(0)%qcsws, surf_def_h(1)%qcsws, & 921 surf_def_h(2)%qcsws, & 922 surf_lsm_h%qcsws, surf_usm_h%qcsws, & 923 surf_def_v(0)%qcsws, surf_def_v(1)%qcsws, & 924 surf_def_v(2)%qcsws, surf_def_v(3)%qcsws, & 925 surf_lsm_v(0)%qcsws, surf_lsm_v(1)%qcsws, & 926 surf_lsm_v(2)%qcsws, surf_lsm_v(3)%qcsws, & 927 surf_usm_v(0)%qcsws, surf_usm_v(1)%qcsws, & 928 surf_usm_v(2)%qcsws, surf_usm_v(3)%qcsws ) 929 930 ! 931 !-- Prognostic equation for cloud water content 932 DO k = nzb+1, nzt 933 qc_p(k,j,i) = qc(k,j,i) + ( dt_3d * & 934 ( tsc(2) * tend(k,j,i) + & 935 tsc(3) * tqc_m(k,j,i) )& 936 - tsc(5) * rdf_sc(k) & 937 * qc(k,j,i) & 938 ) & 939 * MERGE( 1.0_wp, 0.0_wp, & 940 BTEST( wall_flags_0(k,j,i), 0 )& 941 ) 942 IF ( qc_p(k,j,i) < 0.0_wp ) qc_p(k,j,i) = 0.0_wp 943 ENDDO 944 ! 945 !-- Calculate tendencies for the next Runge-Kutta step 946 IF ( timestep_scheme(1:5) == 'runge' ) THEN 947 IF ( intermediate_timestep_count == 1 ) THEN 948 DO k = nzb+1, nzt 949 tqc_m(k,j,i) = tend(k,j,i) 950 ENDDO 951 ELSEIF ( intermediate_timestep_count < & 952 intermediate_timestep_count_max ) THEN 953 DO k = nzb+1, nzt 954 tqc_m(k,j,i) = -9.5625_wp * tend(k,j,i) + & 955 5.3125_wp * tqc_m(k,j,i) 956 ENDDO 957 ENDIF 958 ENDIF 959 960 ! 961 !-- Calculate prognostic equation for cloud drop concentration. 962 tend(:,j,i) = 0.0_wp 963 IF ( timestep_scheme(1:5) == 'runge' ) THEN 964 IF ( ws_scheme_sca ) THEN 965 CALL advec_s_ws( i, j, nc, 'nc', flux_s_nc, & 966 diss_s_nc, flux_l_nc, diss_l_nc, & 967 i_omp_start, tn ) 968 ELSE 969 CALL advec_s_pw( i, j, nc ) 970 ENDIF 971 ELSE 972 CALL advec_s_up( i, j, nc ) 973 ENDIF 974 CALL diffusion_s( i, j, nc, & 975 surf_def_h(0)%ncsws, surf_def_h(1)%ncsws, & 976 surf_def_h(2)%ncsws, & 977 surf_lsm_h%ncsws, surf_usm_h%ncsws, & 978 surf_def_v(0)%ncsws, surf_def_v(1)%ncsws, & 979 surf_def_v(2)%ncsws, surf_def_v(3)%ncsws, & 980 surf_lsm_v(0)%ncsws, surf_lsm_v(1)%ncsws, & 981 surf_lsm_v(2)%ncsws, surf_lsm_v(3)%ncsws, & 982 surf_usm_v(0)%ncsws, surf_usm_v(1)%ncsws, & 983 surf_usm_v(2)%ncsws, surf_usm_v(3)%ncsws ) 984 985 ! 986 !-- Prognostic equation for cloud drop concentration 987 DO k = nzb+1, nzt 988 nc_p(k,j,i) = nc(k,j,i) + ( dt_3d * & 989 ( tsc(2) * tend(k,j,i) + & 990 tsc(3) * tnc_m(k,j,i) )& 991 - tsc(5) * rdf_sc(k) & 992 * nc(k,j,i) & 993 ) & 994 * MERGE( 1.0_wp, 0.0_wp, & 995 BTEST( wall_flags_0(k,j,i), 0 )& 996 ) 997 IF ( nc_p(k,j,i) < 0.0_wp ) nc_p(k,j,i) = 0.0_wp 998 ENDDO 999 ! 1000 !-- Calculate tendencies for the next Runge-Kutta step 1001 IF ( timestep_scheme(1:5) == 'runge' ) THEN 1002 IF ( intermediate_timestep_count == 1 ) THEN 1003 DO k = nzb+1, nzt 1004 tnc_m(k,j,i) = tend(k,j,i) 1005 ENDDO 1006 ELSEIF ( intermediate_timestep_count < & 1007 intermediate_timestep_count_max ) THEN 1008 DO k = nzb+1, nzt 1009 tnc_m(k,j,i) = -9.5625_wp * tend(k,j,i) + & 1010 5.3125_wp * tnc_m(k,j,i) 1011 ENDDO 1012 ENDIF 1013 ENDIF 1014 1015 ENDIF 1016 ! 894 1017 !-- If required, calculate prognostic equations for rain water content 895 1018 !-- and rain drop concentration … … 1808 1931 1809 1932 ! 1933 !-- If required, calculate prognostic equations for cloud water content 1934 !-- and cloud drop concentration 1935 IF ( cloud_physics .AND. microphysics_morrison ) THEN 1936 1937 CALL cpu_log( log_point(67), 'qc-equation', 'start' ) 1938 1939 ! 1940 !-- Calculate prognostic equation for cloud water content 1941 sbt = tsc(2) 1942 IF ( scalar_advec == 'bc-scheme' ) THEN 1943 1944 IF ( timestep_scheme(1:5) /= 'runge' ) THEN 1945 ! 1946 !-- Bott-Chlond scheme always uses Euler time step. Thus: 1947 sbt = 1.0_wp 1948 ENDIF 1949 tend = 0.0_wp 1950 CALL advec_s_bc( qc, 'qc' ) 1951 1952 ENDIF 1953 1954 ! 1955 !-- qc-tendency terms with no communication 1956 IF ( scalar_advec /= 'bc-scheme' ) THEN 1957 tend = 0.0_wp 1958 IF ( timestep_scheme(1:5) == 'runge' ) THEN 1959 IF ( ws_scheme_sca ) THEN 1960 CALL advec_s_ws( qc, 'qc' ) 1961 ELSE 1962 CALL advec_s_pw( qc ) 1963 ENDIF 1964 ELSE 1965 CALL advec_s_up( qc ) 1966 ENDIF 1967 ENDIF 1968 1969 CALL diffusion_s( qc, & 1970 surf_def_h(0)%qcsws, surf_def_h(1)%qcsws, & 1971 surf_def_h(2)%qcsws, & 1972 surf_lsm_h%qcsws, surf_usm_h%qcsws, & 1973 surf_def_v(0)%qcsws, surf_def_v(1)%qcsws, & 1974 surf_def_v(2)%qcsws, surf_def_v(3)%qcsws, & 1975 surf_lsm_v(0)%qcsws, surf_lsm_v(1)%qcsws, & 1976 surf_lsm_v(2)%qcsws, surf_lsm_v(3)%qcsws, & 1977 surf_usm_v(0)%qcsws, surf_usm_v(1)%qcsws, & 1978 surf_usm_v(2)%qcsws, surf_usm_v(3)%qcsws ) 1979 1980 ! 1981 !-- Prognostic equation for cloud water content 1982 DO i = nxl, nxr 1983 DO j = nys, nyn 1984 DO k = nzb+1, nzt 1985 qc_p(k,j,i) = qc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + & 1986 tsc(3) * tqc_m(k,j,i) ) & 1987 - tsc(5) * rdf_sc(k) * & 1988 qc(k,j,i) & 1989 ) & 1990 * MERGE( 1.0_wp, 0.0_wp, & 1991 BTEST( wall_flags_0(k,j,i), 0 ) & 1992 ) 1993 IF ( qc_p(k,j,i) < 0.0_wp ) qc_p(k,j,i) = 0.0_wp 1994 ENDDO 1995 ENDDO 1996 ENDDO 1997 1998 ! 1999 !-- Calculate tendencies for the next Runge-Kutta step 2000 IF ( timestep_scheme(1:5) == 'runge' ) THEN 2001 IF ( intermediate_timestep_count == 1 ) THEN 2002 DO i = nxl, nxr 2003 DO j = nys, nyn 2004 DO k = nzb+1, nzt 2005 tqc_m(k,j,i) = tend(k,j,i) 2006 ENDDO 2007 ENDDO 2008 ENDDO 2009 ELSEIF ( intermediate_timestep_count < & 2010 intermediate_timestep_count_max ) THEN 2011 DO i = nxl, nxr 2012 DO j = nys, nyn 2013 DO k = nzb+1, nzt 2014 tqc_m(k,j,i) = -9.5625_wp * tend(k,j,i) & 2015 + 5.3125_wp * tqc_m(k,j,i) 2016 ENDDO 2017 ENDDO 2018 ENDDO 2019 ENDIF 2020 ENDIF 2021 2022 CALL cpu_log( log_point(67), 'qc-equation', 'stop' ) 2023 CALL cpu_log( log_point(68), 'nc-equation', 'start' ) 2024 2025 ! 2026 !-- Calculate prognostic equation for cloud drop concentration 2027 sbt = tsc(2) 2028 IF ( scalar_advec == 'bc-scheme' ) THEN 2029 2030 IF ( timestep_scheme(1:5) /= 'runge' ) THEN 2031 ! 2032 !-- Bott-Chlond scheme always uses Euler time step. Thus: 2033 sbt = 1.0_wp 2034 ENDIF 2035 tend = 0.0_wp 2036 CALL advec_s_bc( nc, 'nc' ) 2037 2038 ENDIF 2039 2040 ! 2041 !-- nc-tendency terms with no communication 2042 IF ( scalar_advec /= 'bc-scheme' ) THEN 2043 tend = 0.0_wp 2044 IF ( timestep_scheme(1:5) == 'runge' ) THEN 2045 IF ( ws_scheme_sca ) THEN 2046 CALL advec_s_ws( nc, 'nc' ) 2047 ELSE 2048 CALL advec_s_pw( nc ) 2049 ENDIF 2050 ELSE 2051 CALL advec_s_up( nc ) 2052 ENDIF 2053 ENDIF 2054 2055 CALL diffusion_s( nc, & 2056 surf_def_h(0)%ncsws, surf_def_h(1)%ncsws, & 2057 surf_def_h(2)%ncsws, & 2058 surf_lsm_h%ncsws, surf_usm_h%ncsws, & 2059 surf_def_v(0)%ncsws, surf_def_v(1)%ncsws, & 2060 surf_def_v(2)%ncsws, surf_def_v(3)%ncsws, & 2061 surf_lsm_v(0)%ncsws, surf_lsm_v(1)%ncsws, & 2062 surf_lsm_v(2)%ncsws, surf_lsm_v(3)%ncsws, & 2063 surf_usm_v(0)%ncsws, surf_usm_v(1)%ncsws, & 2064 surf_usm_v(2)%ncsws, surf_usm_v(3)%ncsws ) 2065 2066 ! 2067 !-- Prognostic equation for cloud drop concentration 2068 DO i = nxl, nxr 2069 DO j = nys, nyn 2070 DO k = nzb+1, nzt 2071 nc_p(k,j,i) = nc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + & 2072 tsc(3) * tnc_m(k,j,i) ) & 2073 - tsc(5) * rdf_sc(k) * & 2074 nc(k,j,i) & 2075 ) & 2076 * MERGE( 1.0_wp, 0.0_wp, & 2077 BTEST( wall_flags_0(k,j,i), 0 ) & 2078 ) 2079 IF ( nc_p(k,j,i) < 0.0_wp ) nc_p(k,j,i) = 0.0_wp 2080 ENDDO 2081 ENDDO 2082 ENDDO 2083 2084 ! 2085 !-- Calculate tendencies for the next Runge-Kutta step 2086 IF ( timestep_scheme(1:5) == 'runge' ) THEN 2087 IF ( intermediate_timestep_count == 1 ) THEN 2088 DO i = nxl, nxr 2089 DO j = nys, nyn 2090 DO k = nzb+1, nzt 2091 tnc_m(k,j,i) = tend(k,j,i) 2092 ENDDO 2093 ENDDO 2094 ENDDO 2095 ELSEIF ( intermediate_timestep_count < & 2096 intermediate_timestep_count_max ) THEN 2097 DO i = nxl, nxr 2098 DO j = nys, nyn 2099 DO k = nzb+1, nzt 2100 tnc_m(k,j,i) = -9.5625_wp * tend(k,j,i) & 2101 + 5.3125_wp * tnc_m(k,j,i) 2102 ENDDO 2103 ENDDO 2104 ENDDO 2105 ENDIF 2106 ENDIF 2107 2108 CALL cpu_log( log_point(68), 'nc-equation', 'stop' ) 2109 2110 ENDIF 2111 ! 1810 2112 !-- If required, calculate prognostic equations for rain water content 1811 2113 !-- and rain drop concentration
Note: See TracChangeset
for help on using the changeset viewer.