Ignore:
Timestamp:
Apr 8, 2019 1:44:34 PM (2 years ago)
Author:
knoop
Message:

Moving prognostic equations of bcm into bulk_cloud_model_mod

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/prognostic_equations.f90

    r3864 r3870  
    2525! -----------------
    2626! $Id$
     27! Moving prognostic equations of bcm into bulk_cloud_model_mod
     28!
     29! 3864 2019-04-05 09:01:56Z monakurppa
    2730! Modifications made for salsa:
    2831! - salsa_prognostic_equations moved to salsa_mod (and the call to
     
    332335 MODULE prognostic_equations_mod
    333336
    334 
    335337    USE advec_s_bc_mod,                                                        &
    336338        ONLY:  advec_s_bc
     
    364366
    365367    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                tnr_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,                         &
    376378               ug, u_init, u_p, v, vg, vpt, v_init, v_p, w, w_p
    377379
    378380    USE bulk_cloud_model_mod,                                                  &
    379381        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
    382383
    383384    USE buoyancy_mod,                                                          &
     
    663664       DO  i = nxlg, nxrg
    664665          DO  j = nysg, nyng
    665              CALL bcm_actions( i, j )
     666             CALL bcm_actions_micro( i, j )
    666667           ENDDO
    667668       ENDDO
     
    11041105             ENDIF
    11051106
    1106 !
    1107 !--          If required, calculate prognostic equations for cloud water content
    1108 !--          and cloud drop concentration
    1109              IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    1110 !
    1111 !--             Calculate prognostic equation for cloud water content
    1112                 tend(:,j,i) = 0.0_wp
    1113                 IF ( timestep_scheme(1:5) == 'runge' ) &
    1114                 THEN
    1115                    IF ( ws_scheme_sca )  THEN
    1116                       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                    ELSE
    1120                       CALL advec_s_pw( i, j, qc )
    1121                    ENDIF
    1122                 ELSE
    1123                    CALL advec_s_up( i, j, qc )
    1124                 ENDIF
    1125                 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 content
    1138                 DO  k = nzb+1, nzt
    1139                    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_wp
    1149                 ENDDO
    1150 !
    1151 !--             Calculate tendencies for the next Runge-Kutta step
    1152                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1153                    IF ( intermediate_timestep_count == 1 )  THEN
    1154                       DO  k = nzb+1, nzt
    1155                          tqc_m(k,j,i) = tend(k,j,i)
    1156                       ENDDO
    1157                    ELSEIF ( intermediate_timestep_count < &
    1158                             intermediate_timestep_count_max )  THEN
    1159                       DO  k = nzb+1, nzt
    1160                          tqc_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
    1161                                            5.3125_wp * tqc_m(k,j,i)
    1162                       ENDDO
    1163                    ENDIF
    1164                 ENDIF
    1165 
    1166 !
    1167 !--             Calculate prognostic equation for cloud drop concentration.
    1168                 tend(:,j,i) = 0.0_wp
    1169                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1170                    IF ( ws_scheme_sca )  THEN
    1171                       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                    ELSE
    1175                       CALL advec_s_pw( i, j, nc )
    1176                    ENDIF
    1177                 ELSE
    1178                    CALL advec_s_up( i, j, nc )
    1179                 ENDIF
    1180                 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 concentration
    1193                 DO  k = nzb+1, nzt
    1194                    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_wp
    1204                 ENDDO
    1205 !
    1206 !--             Calculate tendencies for the next Runge-Kutta step
    1207                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1208                    IF ( intermediate_timestep_count == 1 )  THEN
    1209                       DO  k = nzb+1, nzt
    1210                          tnc_m(k,j,i) = tend(k,j,i)
    1211                       ENDDO
    1212                    ELSEIF ( intermediate_timestep_count < &
    1213                             intermediate_timestep_count_max )  THEN
    1214                       DO  k = nzb+1, nzt
    1215                          tnc_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
    1216                                            5.3125_wp * tnc_m(k,j,i)
    1217                       ENDDO
    1218                    ENDIF
    1219                 ENDIF
    1220 
    1221              ENDIF
    1222 !
    1223 !--          If required, calculate prognostic equations for rain water content
    1224 !--          and rain drop concentration
    1225              IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    1226 !
    1227 !--             Calculate prognostic equation for rain water content
    1228                 tend(:,j,i) = 0.0_wp
    1229                 IF ( timestep_scheme(1:5) == 'runge' ) &
    1230                 THEN
    1231                    IF ( ws_scheme_sca )  THEN
    1232                       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                    ELSE
    1236                       CALL advec_s_pw( i, j, qr )
    1237                    ENDIF
    1238                 ELSE
    1239                    CALL advec_s_up( i, j, qr )
    1240                 ENDIF
    1241                 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 content
    1254                 DO  k = nzb+1, nzt
    1255                    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_wp
    1265                 ENDDO
    1266 !
    1267 !--             Calculate tendencies for the next Runge-Kutta step
    1268                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1269                    IF ( intermediate_timestep_count == 1 )  THEN
    1270                       DO  k = nzb+1, nzt
    1271                          tqr_m(k,j,i) = tend(k,j,i)
    1272                       ENDDO
    1273                    ELSEIF ( intermediate_timestep_count < &
    1274                             intermediate_timestep_count_max )  THEN
    1275                       DO  k = nzb+1, nzt
    1276                          tqr_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
    1277                                            5.3125_wp * tqr_m(k,j,i)
    1278                       ENDDO
    1279                    ENDIF
    1280                 ENDIF
    1281 
    1282 !
    1283 !--             Calculate prognostic equation for rain drop concentration.
    1284                 tend(:,j,i) = 0.0_wp
    1285                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1286                    IF ( ws_scheme_sca )  THEN
    1287                       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                    ELSE
    1291                       CALL advec_s_pw( i, j, nr )
    1292                    ENDIF
    1293                 ELSE
    1294                    CALL advec_s_up( i, j, nr )
    1295                 ENDIF
    1296                 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 concentration
    1309                 DO  k = nzb+1, nzt
    1310                    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_wp
    1320                 ENDDO
    1321 !
    1322 !--             Calculate tendencies for the next Runge-Kutta step
    1323                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1324                    IF ( intermediate_timestep_count == 1 )  THEN
    1325                       DO  k = nzb+1, nzt
    1326                          tnr_m(k,j,i) = tend(k,j,i)
    1327                       ENDDO
    1328                    ELSEIF ( intermediate_timestep_count < &
    1329                             intermediate_timestep_count_max )  THEN
    1330                       DO  k = nzb+1, nzt
    1331                          tnr_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
    1332                                            5.3125_wp * tnr_m(k,j,i)
    1333                       ENDDO
    1334                    ENDIF
    1335                 ENDIF
    1336 
    1337              ENDIF
    1338 
    13391107          ENDIF
    13401108
     
    15431311       )  THEN
    15441312       CALL cpu_log( log_point(51), 'microphysics', 'start' )
    1545        CALL bcm_actions
     1313       CALL bcm_actions_micro
    15461314       CALL cpu_log( log_point(51), 'microphysics', 'stop' )
    15471315    ENDIF
     
    21101878       CALL cpu_log( log_point(29), 'q-equation', 'stop' )
    21111879
    2112 !
    2113 !--    If required, calculate prognostic equations for cloud water content
    2114 !--    and cloud drop concentration
    2115        IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    2116 
    2117           CALL cpu_log( log_point(67), 'qc-equation', 'start' )
    2118 
    2119 !
    2120 !--       Calculate prognostic equation for cloud water content
    2121           sbt = tsc(2)
    2122           IF ( scalar_advec == 'bc-scheme' )  THEN
    2123 
    2124              IF ( timestep_scheme(1:5) /= 'runge' )  THEN
    2125 !
    2126 !--             Bott-Chlond scheme always uses Euler time step. Thus:
    2127                 sbt = 1.0_wp
    2128              ENDIF
    2129              tend = 0.0_wp
    2130              CALL advec_s_bc( qc, 'qc' )
    2131 
    2132           ENDIF
    2133 
    2134 !
    2135 !--       qc-tendency terms with no communication
    2136           IF ( scalar_advec /= 'bc-scheme' )  THEN
    2137              tend = 0.0_wp
    2138              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2139                 IF ( ws_scheme_sca )  THEN
    2140                    CALL advec_s_ws( qc, 'qc' )
    2141                 ELSE
    2142                    CALL advec_s_pw( qc )
    2143                 ENDIF
    2144              ELSE
    2145                 CALL advec_s_up( qc )
    2146              ENDIF
    2147           ENDIF
    2148 
    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 content
    2162           DO  i = nxl, nxr
    2163              DO  j = nys, nyn
    2164                 DO  k = nzb+1, nzt
    2165                    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_wp
    2174                 ENDDO
    2175              ENDDO
    2176           ENDDO
    2177 
    2178 !
    2179 !--       Calculate tendencies for the next Runge-Kutta step
    2180           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2181              IF ( intermediate_timestep_count == 1 )  THEN
    2182                 DO  i = nxl, nxr
    2183                    DO  j = nys, nyn
    2184                       DO  k = nzb+1, nzt
    2185                          tqc_m(k,j,i) = tend(k,j,i)
    2186                       ENDDO
    2187                    ENDDO
    2188                 ENDDO
    2189              ELSEIF ( intermediate_timestep_count < &
    2190                       intermediate_timestep_count_max )  THEN
    2191                 DO  i = nxl, nxr
    2192                    DO  j = nys, nyn
    2193                       DO  k = nzb+1, nzt
    2194                          tqc_m(k,j,i) =   -9.5625_wp * tend(k,j,i)             &
    2195                                          + 5.3125_wp * tqc_m(k,j,i)
    2196                       ENDDO
    2197                    ENDDO
    2198                 ENDDO
    2199              ENDIF
    2200           ENDIF
    2201 
    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 concentration
    2207           sbt = tsc(2)
    2208           IF ( scalar_advec == 'bc-scheme' )  THEN
    2209 
    2210              IF ( timestep_scheme(1:5) /= 'runge' )  THEN
    2211 !
    2212 !--             Bott-Chlond scheme always uses Euler time step. Thus:
    2213                 sbt = 1.0_wp
    2214              ENDIF
    2215              tend = 0.0_wp
    2216              CALL advec_s_bc( nc, 'nc' )
    2217 
    2218           ENDIF
    2219 
    2220 !
    2221 !--       nc-tendency terms with no communication
    2222           IF ( scalar_advec /= 'bc-scheme' )  THEN
    2223              tend = 0.0_wp
    2224              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2225                 IF ( ws_scheme_sca )  THEN
    2226                    CALL advec_s_ws( nc, 'nc' )
    2227                 ELSE
    2228                    CALL advec_s_pw( nc )
    2229                 ENDIF
    2230              ELSE
    2231                 CALL advec_s_up( nc )
    2232              ENDIF
    2233           ENDIF
    2234 
    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 concentration
    2248           DO  i = nxl, nxr
    2249              DO  j = nys, nyn
    2250                 DO  k = nzb+1, nzt
    2251                    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_wp
    2260                 ENDDO
    2261              ENDDO
    2262           ENDDO
    2263 
    2264 !
    2265 !--       Calculate tendencies for the next Runge-Kutta step
    2266           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2267              IF ( intermediate_timestep_count == 1 )  THEN
    2268                 DO  i = nxl, nxr
    2269                    DO  j = nys, nyn
    2270                       DO  k = nzb+1, nzt
    2271                          tnc_m(k,j,i) = tend(k,j,i)
    2272                       ENDDO
    2273                    ENDDO
    2274                 ENDDO
    2275              ELSEIF ( intermediate_timestep_count < &
    2276                       intermediate_timestep_count_max )  THEN
    2277                 DO  i = nxl, nxr
    2278                    DO  j = nys, nyn
    2279                       DO  k = nzb+1, nzt
    2280                          tnc_m(k,j,i) =  -9.5625_wp * tend(k,j,i)             &
    2281                                          + 5.3125_wp * tnc_m(k,j,i)
    2282                       ENDDO
    2283                    ENDDO
    2284                 ENDDO
    2285              ENDIF
    2286           ENDIF
    2287 
    2288           CALL cpu_log( log_point(68), 'nc-equation', 'stop' )
    2289 
    2290        ENDIF
    2291 !
    2292 !--    If required, calculate prognostic equations for rain water content
    2293 !--    and rain drop concentration
    2294        IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    2295 
    2296           CALL cpu_log( log_point(52), 'qr-equation', 'start' )
    2297 
    2298 !
    2299 !--       Calculate prognostic equation for rain water content
    2300           sbt = tsc(2)
    2301           IF ( scalar_advec == 'bc-scheme' )  THEN
    2302 
    2303              IF ( timestep_scheme(1:5) /= 'runge' )  THEN
    2304 !
    2305 !--             Bott-Chlond scheme always uses Euler time step. Thus:
    2306                 sbt = 1.0_wp
    2307              ENDIF
    2308              tend = 0.0_wp
    2309              CALL advec_s_bc( qr, 'qr' )
    2310 
    2311           ENDIF
    2312 
    2313 !
    2314 !--       qr-tendency terms with no communication
    2315           IF ( scalar_advec /= 'bc-scheme' )  THEN
    2316              tend = 0.0_wp
    2317              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2318                 IF ( ws_scheme_sca )  THEN
    2319                    CALL advec_s_ws( qr, 'qr' )
    2320                 ELSE
    2321                    CALL advec_s_pw( qr )
    2322                 ENDIF
    2323              ELSE
    2324                 CALL advec_s_up( qr )
    2325              ENDIF
    2326           ENDIF
    2327 
    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 content
    2341           DO  i = nxl, nxr
    2342              DO  j = nys, nyn
    2343                 DO  k = nzb+1, nzt
    2344                    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_wp
    2353                 ENDDO
    2354              ENDDO
    2355           ENDDO
    2356 
    2357 !
    2358 !--       Calculate tendencies for the next Runge-Kutta step
    2359           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2360              IF ( intermediate_timestep_count == 1 )  THEN
    2361                 DO  i = nxl, nxr
    2362                    DO  j = nys, nyn
    2363                       DO  k = nzb+1, nzt
    2364                          tqr_m(k,j,i) = tend(k,j,i)
    2365                       ENDDO
    2366                    ENDDO
    2367                 ENDDO
    2368              ELSEIF ( intermediate_timestep_count < &
    2369                       intermediate_timestep_count_max )  THEN
    2370                 DO  i = nxl, nxr
    2371                    DO  j = nys, nyn
    2372                       DO  k = nzb+1, nzt
    2373                          tqr_m(k,j,i) =   -9.5625_wp * tend(k,j,i)             &
    2374                                          + 5.3125_wp * tqr_m(k,j,i)
    2375                       ENDDO
    2376                    ENDDO
    2377                 ENDDO
    2378              ENDIF
    2379           ENDIF
    2380 
    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 concentration
    2386           sbt = tsc(2)
    2387           IF ( scalar_advec == 'bc-scheme' )  THEN
    2388 
    2389              IF ( timestep_scheme(1:5) /= 'runge' )  THEN
    2390 !
    2391 !--             Bott-Chlond scheme always uses Euler time step. Thus:
    2392                 sbt = 1.0_wp
    2393              ENDIF
    2394              tend = 0.0_wp
    2395              CALL advec_s_bc( nr, 'nr' )
    2396 
    2397           ENDIF
    2398 
    2399 !
    2400 !--       nr-tendency terms with no communication
    2401           IF ( scalar_advec /= 'bc-scheme' )  THEN
    2402              tend = 0.0_wp
    2403              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2404                 IF ( ws_scheme_sca )  THEN
    2405                    CALL advec_s_ws( nr, 'nr' )
    2406                 ELSE
    2407                    CALL advec_s_pw( nr )
    2408                 ENDIF
    2409              ELSE
    2410                 CALL advec_s_up( nr )
    2411              ENDIF
    2412           ENDIF
    2413 
    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 concentration
    2427           DO  i = nxl, nxr
    2428              DO  j = nys, nyn
    2429                 DO  k = nzb+1, nzt
    2430                    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_wp
    2439                 ENDDO
    2440              ENDDO
    2441           ENDDO
    2442 
    2443 !
    2444 !--       Calculate tendencies for the next Runge-Kutta step
    2445           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    2446              IF ( intermediate_timestep_count == 1 )  THEN
    2447                 DO  i = nxl, nxr
    2448                    DO  j = nys, nyn
    2449                       DO  k = nzb+1, nzt
    2450                          tnr_m(k,j,i) = tend(k,j,i)
    2451                       ENDDO
    2452                    ENDDO
    2453                 ENDDO
    2454              ELSEIF ( intermediate_timestep_count < &
    2455                       intermediate_timestep_count_max )  THEN
    2456                 DO  i = nxl, nxr
    2457                    DO  j = nys, nyn
    2458                       DO  k = nzb+1, nzt
    2459                          tnr_m(k,j,i) =  -9.5625_wp * tend(k,j,i)             &
    2460                                          + 5.3125_wp * tnr_m(k,j,i)
    2461                       ENDDO
    2462                    ENDDO
    2463                 ENDDO
    2464              ENDIF
    2465           ENDIF
    2466 
    2467           CALL cpu_log( log_point(53), 'nr-equation', 'stop' )
    2468 
    2469        ENDIF
    2470 
    24711880    ENDIF
    24721881!
Note: See TracChangeset for help on using the changeset viewer.