Changeset 3870 for palm/trunk/SOURCE/prognostic_equations.f90
- Timestamp:
- Apr 8, 2019 1:44:34 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/prognostic_equations.f90
r3864 r3870 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Moving prognostic equations of bcm into bulk_cloud_model_mod 28 ! 29 ! 3864 2019-04-05 09:01:56Z monakurppa 27 30 ! Modifications made for salsa: 28 31 ! - salsa_prognostic_equations moved to salsa_mod (and the call to … … 332 335 MODULE prognostic_equations_mod 333 336 334 335 337 USE advec_s_bc_mod, & 336 338 ONLY: advec_s_bc … … 364 366 365 367 USE arrays_3d, & 366 ONLY: diss_l_e, diss_l_ nc, diss_l_nr, diss_l_pt, diss_l_q, diss_l_qc,&367 diss_l_ qr, diss_l_s, diss_l_sa, diss_s_e, diss_s_nc, diss_s_nr,&368 diss_s_pt, diss_s_q, diss_s_ qc, diss_s_qr, diss_s_s, diss_s_sa,&369 e, e_p, flux_s_e, flux_s_ nc, flux_s_nr, flux_s_pt, flux_s_q,&370 flux_s_ qc, flux_s_qr, flux_s_s, flux_s_sa, flux_l_e, flux_l_nc,&371 flux_l_ nr, flux_l_pt, flux_l_q, flux_l_qc, flux_l_qr, flux_l_s,&372 flux_l_sa, nc, nc_p, nr, nr_p, pt, ptdf_x, ptdf_y, pt_init,&373 pt_p, prho, q, q_init, q_p, qc, qc_p, qr, qr_p, rdf, rdf_sc,&374 ref_state, rho_ocean, s, s_init, s_p, tend, te_m, tnc_m,&375 t nr_m, tpt_m, tq_m, tqc_m, tqr_m, ts_m, tu_m, tv_m, tw_m, u,&368 ONLY: diss_l_e, diss_l_pt, diss_l_q, & 369 diss_l_s, diss_l_sa, diss_s_e, & 370 diss_s_pt, diss_s_q, diss_s_s, diss_s_sa, & 371 e, e_p, flux_s_e, flux_s_pt, flux_s_q, & 372 flux_s_s, flux_s_sa, flux_l_e, & 373 flux_l_pt, flux_l_q, flux_l_s, & 374 flux_l_sa, pt, ptdf_x, ptdf_y, pt_init, & 375 pt_p, prho, q, q_init, q_p, rdf, rdf_sc, & 376 ref_state, rho_ocean, s, s_init, s_p, tend, te_m, & 377 tpt_m, tq_m, ts_m, tu_m, tv_m, tw_m, u, & 376 378 ug, u_init, u_p, v, vg, vpt, v_init, v_p, w, w_p 377 379 378 380 USE bulk_cloud_model_mod, & 379 381 ONLY: call_microphysics_at_all_substeps, bulk_cloud_model, & 380 bcm_actions, microphysics_sat_adjust, & 381 microphysics_morrison, microphysics_seifert 382 bcm_actions_micro, microphysics_sat_adjust 382 383 383 384 USE buoyancy_mod, & … … 663 664 DO i = nxlg, nxrg 664 665 DO j = nysg, nyng 665 CALL bcm_actions ( i, j )666 CALL bcm_actions_micro( i, j ) 666 667 ENDDO 667 668 ENDDO … … 1104 1105 ENDIF 1105 1106 1106 !1107 !-- If required, calculate prognostic equations for cloud water content1108 !-- and cloud drop concentration1109 IF ( bulk_cloud_model .AND. microphysics_morrison ) THEN1110 !1111 !-- Calculate prognostic equation for cloud water content1112 tend(:,j,i) = 0.0_wp1113 IF ( timestep_scheme(1:5) == 'runge' ) &1114 THEN1115 IF ( ws_scheme_sca ) THEN1116 CALL advec_s_ws( i, j, qc, 'qc', flux_s_qc, &1117 diss_s_qc, flux_l_qc, diss_l_qc, &1118 i_omp_start, tn )1119 ELSE1120 CALL advec_s_pw( i, j, qc )1121 ENDIF1122 ELSE1123 CALL advec_s_up( i, j, qc )1124 ENDIF1125 CALL diffusion_s( i, j, qc, &1126 surf_def_h(0)%qcsws, surf_def_h(1)%qcsws, &1127 surf_def_h(2)%qcsws, &1128 surf_lsm_h%qcsws, surf_usm_h%qcsws, &1129 surf_def_v(0)%qcsws, surf_def_v(1)%qcsws, &1130 surf_def_v(2)%qcsws, surf_def_v(3)%qcsws, &1131 surf_lsm_v(0)%qcsws, surf_lsm_v(1)%qcsws, &1132 surf_lsm_v(2)%qcsws, surf_lsm_v(3)%qcsws, &1133 surf_usm_v(0)%qcsws, surf_usm_v(1)%qcsws, &1134 surf_usm_v(2)%qcsws, surf_usm_v(3)%qcsws )1135 1136 !1137 !-- Prognostic equation for cloud water content1138 DO k = nzb+1, nzt1139 qc_p(k,j,i) = qc(k,j,i) + ( dt_3d * &1140 ( tsc(2) * tend(k,j,i) + &1141 tsc(3) * tqc_m(k,j,i) )&1142 - tsc(5) * rdf_sc(k) &1143 * qc(k,j,i) &1144 ) &1145 * MERGE( 1.0_wp, 0.0_wp, &1146 BTEST( wall_flags_0(k,j,i), 0 )&1147 )1148 IF ( qc_p(k,j,i) < 0.0_wp ) qc_p(k,j,i) = 0.0_wp1149 ENDDO1150 !1151 !-- Calculate tendencies for the next Runge-Kutta step1152 IF ( timestep_scheme(1:5) == 'runge' ) THEN1153 IF ( intermediate_timestep_count == 1 ) THEN1154 DO k = nzb+1, nzt1155 tqc_m(k,j,i) = tend(k,j,i)1156 ENDDO1157 ELSEIF ( intermediate_timestep_count < &1158 intermediate_timestep_count_max ) THEN1159 DO k = nzb+1, nzt1160 tqc_m(k,j,i) = -9.5625_wp * tend(k,j,i) + &1161 5.3125_wp * tqc_m(k,j,i)1162 ENDDO1163 ENDIF1164 ENDIF1165 1166 !1167 !-- Calculate prognostic equation for cloud drop concentration.1168 tend(:,j,i) = 0.0_wp1169 IF ( timestep_scheme(1:5) == 'runge' ) THEN1170 IF ( ws_scheme_sca ) THEN1171 CALL advec_s_ws( i, j, nc, 'nc', flux_s_nc, &1172 diss_s_nc, flux_l_nc, diss_l_nc, &1173 i_omp_start, tn )1174 ELSE1175 CALL advec_s_pw( i, j, nc )1176 ENDIF1177 ELSE1178 CALL advec_s_up( i, j, nc )1179 ENDIF1180 CALL diffusion_s( i, j, nc, &1181 surf_def_h(0)%ncsws, surf_def_h(1)%ncsws, &1182 surf_def_h(2)%ncsws, &1183 surf_lsm_h%ncsws, surf_usm_h%ncsws, &1184 surf_def_v(0)%ncsws, surf_def_v(1)%ncsws, &1185 surf_def_v(2)%ncsws, surf_def_v(3)%ncsws, &1186 surf_lsm_v(0)%ncsws, surf_lsm_v(1)%ncsws, &1187 surf_lsm_v(2)%ncsws, surf_lsm_v(3)%ncsws, &1188 surf_usm_v(0)%ncsws, surf_usm_v(1)%ncsws, &1189 surf_usm_v(2)%ncsws, surf_usm_v(3)%ncsws )1190 1191 !1192 !-- Prognostic equation for cloud drop concentration1193 DO k = nzb+1, nzt1194 nc_p(k,j,i) = nc(k,j,i) + ( dt_3d * &1195 ( tsc(2) * tend(k,j,i) + &1196 tsc(3) * tnc_m(k,j,i) )&1197 - tsc(5) * rdf_sc(k) &1198 * nc(k,j,i) &1199 ) &1200 * MERGE( 1.0_wp, 0.0_wp, &1201 BTEST( wall_flags_0(k,j,i), 0 )&1202 )1203 IF ( nc_p(k,j,i) < 0.0_wp ) nc_p(k,j,i) = 0.0_wp1204 ENDDO1205 !1206 !-- Calculate tendencies for the next Runge-Kutta step1207 IF ( timestep_scheme(1:5) == 'runge' ) THEN1208 IF ( intermediate_timestep_count == 1 ) THEN1209 DO k = nzb+1, nzt1210 tnc_m(k,j,i) = tend(k,j,i)1211 ENDDO1212 ELSEIF ( intermediate_timestep_count < &1213 intermediate_timestep_count_max ) THEN1214 DO k = nzb+1, nzt1215 tnc_m(k,j,i) = -9.5625_wp * tend(k,j,i) + &1216 5.3125_wp * tnc_m(k,j,i)1217 ENDDO1218 ENDIF1219 ENDIF1220 1221 ENDIF1222 !1223 !-- If required, calculate prognostic equations for rain water content1224 !-- and rain drop concentration1225 IF ( bulk_cloud_model .AND. microphysics_seifert ) THEN1226 !1227 !-- Calculate prognostic equation for rain water content1228 tend(:,j,i) = 0.0_wp1229 IF ( timestep_scheme(1:5) == 'runge' ) &1230 THEN1231 IF ( ws_scheme_sca ) THEN1232 CALL advec_s_ws( i, j, qr, 'qr', flux_s_qr, &1233 diss_s_qr, flux_l_qr, diss_l_qr, &1234 i_omp_start, tn )1235 ELSE1236 CALL advec_s_pw( i, j, qr )1237 ENDIF1238 ELSE1239 CALL advec_s_up( i, j, qr )1240 ENDIF1241 CALL diffusion_s( i, j, qr, &1242 surf_def_h(0)%qrsws, surf_def_h(1)%qrsws, &1243 surf_def_h(2)%qrsws, &1244 surf_lsm_h%qrsws, surf_usm_h%qrsws, &1245 surf_def_v(0)%qrsws, surf_def_v(1)%qrsws, &1246 surf_def_v(2)%qrsws, surf_def_v(3)%qrsws, &1247 surf_lsm_v(0)%qrsws, surf_lsm_v(1)%qrsws, &1248 surf_lsm_v(2)%qrsws, surf_lsm_v(3)%qrsws, &1249 surf_usm_v(0)%qrsws, surf_usm_v(1)%qrsws, &1250 surf_usm_v(2)%qrsws, surf_usm_v(3)%qrsws )1251 1252 !1253 !-- Prognostic equation for rain water content1254 DO k = nzb+1, nzt1255 qr_p(k,j,i) = qr(k,j,i) + ( dt_3d * &1256 ( tsc(2) * tend(k,j,i) + &1257 tsc(3) * tqr_m(k,j,i) )&1258 - tsc(5) * rdf_sc(k) &1259 * qr(k,j,i) &1260 ) &1261 * MERGE( 1.0_wp, 0.0_wp, &1262 BTEST( wall_flags_0(k,j,i), 0 )&1263 )1264 IF ( qr_p(k,j,i) < 0.0_wp ) qr_p(k,j,i) = 0.0_wp1265 ENDDO1266 !1267 !-- Calculate tendencies for the next Runge-Kutta step1268 IF ( timestep_scheme(1:5) == 'runge' ) THEN1269 IF ( intermediate_timestep_count == 1 ) THEN1270 DO k = nzb+1, nzt1271 tqr_m(k,j,i) = tend(k,j,i)1272 ENDDO1273 ELSEIF ( intermediate_timestep_count < &1274 intermediate_timestep_count_max ) THEN1275 DO k = nzb+1, nzt1276 tqr_m(k,j,i) = -9.5625_wp * tend(k,j,i) + &1277 5.3125_wp * tqr_m(k,j,i)1278 ENDDO1279 ENDIF1280 ENDIF1281 1282 !1283 !-- Calculate prognostic equation for rain drop concentration.1284 tend(:,j,i) = 0.0_wp1285 IF ( timestep_scheme(1:5) == 'runge' ) THEN1286 IF ( ws_scheme_sca ) THEN1287 CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr, &1288 diss_s_nr, flux_l_nr, diss_l_nr, &1289 i_omp_start, tn )1290 ELSE1291 CALL advec_s_pw( i, j, nr )1292 ENDIF1293 ELSE1294 CALL advec_s_up( i, j, nr )1295 ENDIF1296 CALL diffusion_s( i, j, nr, &1297 surf_def_h(0)%nrsws, surf_def_h(1)%nrsws, &1298 surf_def_h(2)%nrsws, &1299 surf_lsm_h%nrsws, surf_usm_h%nrsws, &1300 surf_def_v(0)%nrsws, surf_def_v(1)%nrsws, &1301 surf_def_v(2)%nrsws, surf_def_v(3)%nrsws, &1302 surf_lsm_v(0)%nrsws, surf_lsm_v(1)%nrsws, &1303 surf_lsm_v(2)%nrsws, surf_lsm_v(3)%nrsws, &1304 surf_usm_v(0)%nrsws, surf_usm_v(1)%nrsws, &1305 surf_usm_v(2)%nrsws, surf_usm_v(3)%nrsws )1306 1307 !1308 !-- Prognostic equation for rain drop concentration1309 DO k = nzb+1, nzt1310 nr_p(k,j,i) = nr(k,j,i) + ( dt_3d * &1311 ( tsc(2) * tend(k,j,i) + &1312 tsc(3) * tnr_m(k,j,i) )&1313 - tsc(5) * rdf_sc(k) &1314 * nr(k,j,i) &1315 ) &1316 * MERGE( 1.0_wp, 0.0_wp, &1317 BTEST( wall_flags_0(k,j,i), 0 )&1318 )1319 IF ( nr_p(k,j,i) < 0.0_wp ) nr_p(k,j,i) = 0.0_wp1320 ENDDO1321 !1322 !-- Calculate tendencies for the next Runge-Kutta step1323 IF ( timestep_scheme(1:5) == 'runge' ) THEN1324 IF ( intermediate_timestep_count == 1 ) THEN1325 DO k = nzb+1, nzt1326 tnr_m(k,j,i) = tend(k,j,i)1327 ENDDO1328 ELSEIF ( intermediate_timestep_count < &1329 intermediate_timestep_count_max ) THEN1330 DO k = nzb+1, nzt1331 tnr_m(k,j,i) = -9.5625_wp * tend(k,j,i) + &1332 5.3125_wp * tnr_m(k,j,i)1333 ENDDO1334 ENDIF1335 ENDIF1336 1337 ENDIF1338 1339 1107 ENDIF 1340 1108 … … 1543 1311 ) THEN 1544 1312 CALL cpu_log( log_point(51), 'microphysics', 'start' ) 1545 CALL bcm_actions 1313 CALL bcm_actions_micro 1546 1314 CALL cpu_log( log_point(51), 'microphysics', 'stop' ) 1547 1315 ENDIF … … 2110 1878 CALL cpu_log( log_point(29), 'q-equation', 'stop' ) 2111 1879 2112 !2113 !-- If required, calculate prognostic equations for cloud water content2114 !-- and cloud drop concentration2115 IF ( bulk_cloud_model .AND. microphysics_morrison ) THEN2116 2117 CALL cpu_log( log_point(67), 'qc-equation', 'start' )2118 2119 !2120 !-- Calculate prognostic equation for cloud water content2121 sbt = tsc(2)2122 IF ( scalar_advec == 'bc-scheme' ) THEN2123 2124 IF ( timestep_scheme(1:5) /= 'runge' ) THEN2125 !2126 !-- Bott-Chlond scheme always uses Euler time step. Thus:2127 sbt = 1.0_wp2128 ENDIF2129 tend = 0.0_wp2130 CALL advec_s_bc( qc, 'qc' )2131 2132 ENDIF2133 2134 !2135 !-- qc-tendency terms with no communication2136 IF ( scalar_advec /= 'bc-scheme' ) THEN2137 tend = 0.0_wp2138 IF ( timestep_scheme(1:5) == 'runge' ) THEN2139 IF ( ws_scheme_sca ) THEN2140 CALL advec_s_ws( qc, 'qc' )2141 ELSE2142 CALL advec_s_pw( qc )2143 ENDIF2144 ELSE2145 CALL advec_s_up( qc )2146 ENDIF2147 ENDIF2148 2149 CALL diffusion_s( qc, &2150 surf_def_h(0)%qcsws, surf_def_h(1)%qcsws, &2151 surf_def_h(2)%qcsws, &2152 surf_lsm_h%qcsws, surf_usm_h%qcsws, &2153 surf_def_v(0)%qcsws, surf_def_v(1)%qcsws, &2154 surf_def_v(2)%qcsws, surf_def_v(3)%qcsws, &2155 surf_lsm_v(0)%qcsws, surf_lsm_v(1)%qcsws, &2156 surf_lsm_v(2)%qcsws, surf_lsm_v(3)%qcsws, &2157 surf_usm_v(0)%qcsws, surf_usm_v(1)%qcsws, &2158 surf_usm_v(2)%qcsws, surf_usm_v(3)%qcsws )2159 2160 !2161 !-- Prognostic equation for cloud water content2162 DO i = nxl, nxr2163 DO j = nys, nyn2164 DO k = nzb+1, nzt2165 qc_p(k,j,i) = qc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + &2166 tsc(3) * tqc_m(k,j,i) ) &2167 - tsc(5) * rdf_sc(k) * &2168 qc(k,j,i) &2169 ) &2170 * MERGE( 1.0_wp, 0.0_wp, &2171 BTEST( wall_flags_0(k,j,i), 0 ) &2172 )2173 IF ( qc_p(k,j,i) < 0.0_wp ) qc_p(k,j,i) = 0.0_wp2174 ENDDO2175 ENDDO2176 ENDDO2177 2178 !2179 !-- Calculate tendencies for the next Runge-Kutta step2180 IF ( timestep_scheme(1:5) == 'runge' ) THEN2181 IF ( intermediate_timestep_count == 1 ) THEN2182 DO i = nxl, nxr2183 DO j = nys, nyn2184 DO k = nzb+1, nzt2185 tqc_m(k,j,i) = tend(k,j,i)2186 ENDDO2187 ENDDO2188 ENDDO2189 ELSEIF ( intermediate_timestep_count < &2190 intermediate_timestep_count_max ) THEN2191 DO i = nxl, nxr2192 DO j = nys, nyn2193 DO k = nzb+1, nzt2194 tqc_m(k,j,i) = -9.5625_wp * tend(k,j,i) &2195 + 5.3125_wp * tqc_m(k,j,i)2196 ENDDO2197 ENDDO2198 ENDDO2199 ENDIF2200 ENDIF2201 2202 CALL cpu_log( log_point(67), 'qc-equation', 'stop' )2203 2204 CALL cpu_log( log_point(68), 'nc-equation', 'start' )2205 !2206 !-- Calculate prognostic equation for cloud drop concentration2207 sbt = tsc(2)2208 IF ( scalar_advec == 'bc-scheme' ) THEN2209 2210 IF ( timestep_scheme(1:5) /= 'runge' ) THEN2211 !2212 !-- Bott-Chlond scheme always uses Euler time step. Thus:2213 sbt = 1.0_wp2214 ENDIF2215 tend = 0.0_wp2216 CALL advec_s_bc( nc, 'nc' )2217 2218 ENDIF2219 2220 !2221 !-- nc-tendency terms with no communication2222 IF ( scalar_advec /= 'bc-scheme' ) THEN2223 tend = 0.0_wp2224 IF ( timestep_scheme(1:5) == 'runge' ) THEN2225 IF ( ws_scheme_sca ) THEN2226 CALL advec_s_ws( nc, 'nc' )2227 ELSE2228 CALL advec_s_pw( nc )2229 ENDIF2230 ELSE2231 CALL advec_s_up( nc )2232 ENDIF2233 ENDIF2234 2235 CALL diffusion_s( nc, &2236 surf_def_h(0)%ncsws, surf_def_h(1)%ncsws, &2237 surf_def_h(2)%ncsws, &2238 surf_lsm_h%ncsws, surf_usm_h%ncsws, &2239 surf_def_v(0)%ncsws, surf_def_v(1)%ncsws, &2240 surf_def_v(2)%ncsws, surf_def_v(3)%ncsws, &2241 surf_lsm_v(0)%ncsws, surf_lsm_v(1)%ncsws, &2242 surf_lsm_v(2)%ncsws, surf_lsm_v(3)%ncsws, &2243 surf_usm_v(0)%ncsws, surf_usm_v(1)%ncsws, &2244 surf_usm_v(2)%ncsws, surf_usm_v(3)%ncsws )2245 2246 !2247 !-- Prognostic equation for cloud drop concentration2248 DO i = nxl, nxr2249 DO j = nys, nyn2250 DO k = nzb+1, nzt2251 nc_p(k,j,i) = nc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + &2252 tsc(3) * tnc_m(k,j,i) ) &2253 - tsc(5) * rdf_sc(k) * &2254 nc(k,j,i) &2255 ) &2256 * MERGE( 1.0_wp, 0.0_wp, &2257 BTEST( wall_flags_0(k,j,i), 0 ) &2258 )2259 IF ( nc_p(k,j,i) < 0.0_wp ) nc_p(k,j,i) = 0.0_wp2260 ENDDO2261 ENDDO2262 ENDDO2263 2264 !2265 !-- Calculate tendencies for the next Runge-Kutta step2266 IF ( timestep_scheme(1:5) == 'runge' ) THEN2267 IF ( intermediate_timestep_count == 1 ) THEN2268 DO i = nxl, nxr2269 DO j = nys, nyn2270 DO k = nzb+1, nzt2271 tnc_m(k,j,i) = tend(k,j,i)2272 ENDDO2273 ENDDO2274 ENDDO2275 ELSEIF ( intermediate_timestep_count < &2276 intermediate_timestep_count_max ) THEN2277 DO i = nxl, nxr2278 DO j = nys, nyn2279 DO k = nzb+1, nzt2280 tnc_m(k,j,i) = -9.5625_wp * tend(k,j,i) &2281 + 5.3125_wp * tnc_m(k,j,i)2282 ENDDO2283 ENDDO2284 ENDDO2285 ENDIF2286 ENDIF2287 2288 CALL cpu_log( log_point(68), 'nc-equation', 'stop' )2289 2290 ENDIF2291 !2292 !-- If required, calculate prognostic equations for rain water content2293 !-- and rain drop concentration2294 IF ( bulk_cloud_model .AND. microphysics_seifert ) THEN2295 2296 CALL cpu_log( log_point(52), 'qr-equation', 'start' )2297 2298 !2299 !-- Calculate prognostic equation for rain water content2300 sbt = tsc(2)2301 IF ( scalar_advec == 'bc-scheme' ) THEN2302 2303 IF ( timestep_scheme(1:5) /= 'runge' ) THEN2304 !2305 !-- Bott-Chlond scheme always uses Euler time step. Thus:2306 sbt = 1.0_wp2307 ENDIF2308 tend = 0.0_wp2309 CALL advec_s_bc( qr, 'qr' )2310 2311 ENDIF2312 2313 !2314 !-- qr-tendency terms with no communication2315 IF ( scalar_advec /= 'bc-scheme' ) THEN2316 tend = 0.0_wp2317 IF ( timestep_scheme(1:5) == 'runge' ) THEN2318 IF ( ws_scheme_sca ) THEN2319 CALL advec_s_ws( qr, 'qr' )2320 ELSE2321 CALL advec_s_pw( qr )2322 ENDIF2323 ELSE2324 CALL advec_s_up( qr )2325 ENDIF2326 ENDIF2327 2328 CALL diffusion_s( qr, &2329 surf_def_h(0)%qrsws, surf_def_h(1)%qrsws, &2330 surf_def_h(2)%qrsws, &2331 surf_lsm_h%qrsws, surf_usm_h%qrsws, &2332 surf_def_v(0)%qrsws, surf_def_v(1)%qrsws, &2333 surf_def_v(2)%qrsws, surf_def_v(3)%qrsws, &2334 surf_lsm_v(0)%qrsws, surf_lsm_v(1)%qrsws, &2335 surf_lsm_v(2)%qrsws, surf_lsm_v(3)%qrsws, &2336 surf_usm_v(0)%qrsws, surf_usm_v(1)%qrsws, &2337 surf_usm_v(2)%qrsws, surf_usm_v(3)%qrsws )2338 2339 !2340 !-- Prognostic equation for rain water content2341 DO i = nxl, nxr2342 DO j = nys, nyn2343 DO k = nzb+1, nzt2344 qr_p(k,j,i) = qr(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + &2345 tsc(3) * tqr_m(k,j,i) ) &2346 - tsc(5) * rdf_sc(k) * &2347 qr(k,j,i) &2348 ) &2349 * MERGE( 1.0_wp, 0.0_wp, &2350 BTEST( wall_flags_0(k,j,i), 0 ) &2351 )2352 IF ( qr_p(k,j,i) < 0.0_wp ) qr_p(k,j,i) = 0.0_wp2353 ENDDO2354 ENDDO2355 ENDDO2356 2357 !2358 !-- Calculate tendencies for the next Runge-Kutta step2359 IF ( timestep_scheme(1:5) == 'runge' ) THEN2360 IF ( intermediate_timestep_count == 1 ) THEN2361 DO i = nxl, nxr2362 DO j = nys, nyn2363 DO k = nzb+1, nzt2364 tqr_m(k,j,i) = tend(k,j,i)2365 ENDDO2366 ENDDO2367 ENDDO2368 ELSEIF ( intermediate_timestep_count < &2369 intermediate_timestep_count_max ) THEN2370 DO i = nxl, nxr2371 DO j = nys, nyn2372 DO k = nzb+1, nzt2373 tqr_m(k,j,i) = -9.5625_wp * tend(k,j,i) &2374 + 5.3125_wp * tqr_m(k,j,i)2375 ENDDO2376 ENDDO2377 ENDDO2378 ENDIF2379 ENDIF2380 2381 CALL cpu_log( log_point(52), 'qr-equation', 'stop' )2382 CALL cpu_log( log_point(53), 'nr-equation', 'start' )2383 2384 !2385 !-- Calculate prognostic equation for rain drop concentration2386 sbt = tsc(2)2387 IF ( scalar_advec == 'bc-scheme' ) THEN2388 2389 IF ( timestep_scheme(1:5) /= 'runge' ) THEN2390 !2391 !-- Bott-Chlond scheme always uses Euler time step. Thus:2392 sbt = 1.0_wp2393 ENDIF2394 tend = 0.0_wp2395 CALL advec_s_bc( nr, 'nr' )2396 2397 ENDIF2398 2399 !2400 !-- nr-tendency terms with no communication2401 IF ( scalar_advec /= 'bc-scheme' ) THEN2402 tend = 0.0_wp2403 IF ( timestep_scheme(1:5) == 'runge' ) THEN2404 IF ( ws_scheme_sca ) THEN2405 CALL advec_s_ws( nr, 'nr' )2406 ELSE2407 CALL advec_s_pw( nr )2408 ENDIF2409 ELSE2410 CALL advec_s_up( nr )2411 ENDIF2412 ENDIF2413 2414 CALL diffusion_s( nr, &2415 surf_def_h(0)%nrsws, surf_def_h(1)%nrsws, &2416 surf_def_h(2)%nrsws, &2417 surf_lsm_h%nrsws, surf_usm_h%nrsws, &2418 surf_def_v(0)%nrsws, surf_def_v(1)%nrsws, &2419 surf_def_v(2)%nrsws, surf_def_v(3)%nrsws, &2420 surf_lsm_v(0)%nrsws, surf_lsm_v(1)%nrsws, &2421 surf_lsm_v(2)%nrsws, surf_lsm_v(3)%nrsws, &2422 surf_usm_v(0)%nrsws, surf_usm_v(1)%nrsws, &2423 surf_usm_v(2)%nrsws, surf_usm_v(3)%nrsws )2424 2425 !2426 !-- Prognostic equation for rain drop concentration2427 DO i = nxl, nxr2428 DO j = nys, nyn2429 DO k = nzb+1, nzt2430 nr_p(k,j,i) = nr(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) + &2431 tsc(3) * tnr_m(k,j,i) ) &2432 - tsc(5) * rdf_sc(k) * &2433 nr(k,j,i) &2434 ) &2435 * MERGE( 1.0_wp, 0.0_wp, &2436 BTEST( wall_flags_0(k,j,i), 0 ) &2437 )2438 IF ( nr_p(k,j,i) < 0.0_wp ) nr_p(k,j,i) = 0.0_wp2439 ENDDO2440 ENDDO2441 ENDDO2442 2443 !2444 !-- Calculate tendencies for the next Runge-Kutta step2445 IF ( timestep_scheme(1:5) == 'runge' ) THEN2446 IF ( intermediate_timestep_count == 1 ) THEN2447 DO i = nxl, nxr2448 DO j = nys, nyn2449 DO k = nzb+1, nzt2450 tnr_m(k,j,i) = tend(k,j,i)2451 ENDDO2452 ENDDO2453 ENDDO2454 ELSEIF ( intermediate_timestep_count < &2455 intermediate_timestep_count_max ) THEN2456 DO i = nxl, nxr2457 DO j = nys, nyn2458 DO k = nzb+1, nzt2459 tnr_m(k,j,i) = -9.5625_wp * tend(k,j,i) &2460 + 5.3125_wp * tnr_m(k,j,i)2461 ENDDO2462 ENDDO2463 ENDDO2464 ENDIF2465 ENDIF2466 2467 CALL cpu_log( log_point(53), 'nr-equation', 'stop' )2468 2469 ENDIF2470 2471 1880 ENDIF 2472 1881 !
Note: See TracChangeset
for help on using the changeset viewer.