Changeset 1115


Ignore:
Timestamp:
Mar 26, 2013 6:16:16 PM (11 years ago)
Author:
hoffmann
Message:

optimization of two-moments cloud physics

Location:
palm/trunk/SOURCE
Files:
21 edited

Legend:

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

    r1054 r1115  
    2020! Current revisions:
    2121! ------------------
     22! calculation of qr and nr is restricted to precipitation
    2223!
    2324! Former revisions:
     
    210211          sums_wspts_ws_l = 0.0
    211212
    212           IF ( humidity .OR. passive_scalar )  THEN
     213          IF ( humidity  .OR. passive_scalar )  THEN
    213214             ALLOCATE( sums_wsqs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    214215             sums_wsqs_ws_l = 0.0
    215216          ENDIF
    216217
    217           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     218          IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     219               precipitation )  THEN
    218220             ALLOCATE( sums_wsqrs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    219221             ALLOCATE( sums_wsnrs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     
    264266                       diss_l_e(nzb+1:nzt,nys:nyn,0:threads_per_task-1) )
    265267
    266              IF ( humidity .OR. passive_scalar )  THEN
     268             IF ( humidity  .OR. passive_scalar )  THEN
    267269                ALLOCATE( flux_s_q(nzb+1:nzt,0:threads_per_task-1),          &
    268270                          diss_s_q(nzb+1:nzt,0:threads_per_task-1) )
     
    271273             ENDIF
    272274
    273              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     275             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.            &
     276                  precipitation )  THEN
    274277                ALLOCATE( flux_s_qr(nzb+1:nzt,0:threads_per_task-1),         &
    275278                          diss_s_qr(nzb+1:nzt,0:threads_per_task-1),         &
     
    280283                          flux_l_nr(nzb+1:nzt,nys:nyn,0:threads_per_task-1), &
    281284                          diss_l_nr(nzb+1:nzt,nys:nyn,0:threads_per_task-1) )
    282              END IF
     285             ENDIF
    283286
    284287             IF ( ocean )  THEN
     
    297300
    298301!------------------------------------------------------------------------------!
    299 ! Initialize variables used for storing statistic qauntities (fluxes, variances)
     302! Initialize variables used for storing statistic quantities (fluxes, variances)
    300303!------------------------------------------------------------------------------!
    301304    SUBROUTINE ws_statistics
     
    319322       IF ( ws_scheme_sca )  THEN
    320323          sums_wspts_ws_l = 0.0
    321           IF ( humidity .OR. passive_scalar )  sums_wsqs_ws_l = 0.0
    322           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     324          IF ( humidity  .OR.  passive_scalar )  sums_wsqs_ws_l = 0.0
     325          IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     326               precipitation )  THEN
    323327             sums_wsqrs_ws_l = 0.0
    324328             sums_wsnrs_ws_l = 0.0
     
    770774                                 * weight_substep(intermediate_timestep_count)
    771775             ENDDO
    772 
    773776
    774777         END SELECT
  • palm/trunk/SOURCE/average_3d_data.f90

    r1054 r1115  
    2020! Current revisions:
    2121! -----------------
     22! +qc
    2223!
    2324! Former revisions:
     
    181182             ENDDO
    182183
     184          CASE ( 'qc' )
     185             DO  i = nxlg, nxrg
     186                DO  j = nysg, nyng
     187                   DO  k = nzb, nzt+1
     188                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d )
     189                   ENDDO
     190                ENDDO
     191             ENDDO
     192
    183193          CASE ( 'ql' )
    184194             DO  i = nxlg, nxrg
  • palm/trunk/SOURCE/boundary_conds.f90

    r1114 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! boundary conditions of two-moment cloud scheme are restricted to Neumann-
     23! boundary-conditions
    2324
    2425! Former revisions:
     
    246247       q_p(nzt+1,:,:) = q_p(nzt,:,:)   + bc_q_t_val * dzu(nzt+1)
    247248
    248        IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     249       IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     250            precipitation )  THEN
    249251!             
    250 !--       Surface conditions for constant_humidity_flux
    251           IF ( ibc_qr_b == 0 ) THEN
    252              DO  i = nxlg, nxrg
    253                 DO  j = nysg, nyng
    254                    qr_p(nzb_s_inner(j,i),j,i) = qr(nzb_s_inner(j,i),j,i)
    255                 ENDDO
    256              ENDDO
    257           ELSE
    258              DO  i = nxlg, nxrg
    259                 DO  j = nysg, nyng
    260                    qr_p(nzb_s_inner(j,i),j,i) = qr_p(nzb_s_inner(j,i)+1,j,i)
    261                 ENDDO
    262              ENDDO
    263           ENDIF
    264 !
    265 !--       Top boundary
    266           qr_p(nzt+1,:,:) = qr_p(nzt,:,:) + bc_qr_t_val * dzu(nzt+1)
    267 !             
    268 !--       Surface conditions for constant_humidity_flux
    269           IF ( ibc_nr_b == 0 ) THEN
    270              DO  i = nxlg, nxrg
    271                 DO  j = nysg, nyng
    272                    nr_p(nzb_s_inner(j,i),j,i) = nr(nzb_s_inner(j,i),j,i)
    273                 ENDDO
    274              ENDDO
    275           ELSE
    276              DO  i = nxlg, nxrg
    277                 DO  j = nysg, nyng
    278                    nr_p(nzb_s_inner(j,i),j,i) = nr_p(nzb_s_inner(j,i)+1,j,i)
    279                 ENDDO
    280              ENDDO
    281           ENDIF
    282 !
    283 !--       Top boundary
    284           nr_p(nzt+1,:,:) = nr_p(nzt,:,:) + bc_nr_t_val * dzu(nzt+1)
     252!--       Surface conditions rain water (Neumann)
     253          DO  i = nxlg, nxrg
     254             DO  j = nysg, nyng
     255                qr_p(nzb_s_inner(j,i),j,i) = qr_p(nzb_s_inner(j,i)+1,j,i)
     256                nr_p(nzb_s_inner(j,i),j,i) = nr_p(nzb_s_inner(j,i)+1,j,i)
     257             ENDDO
     258          ENDDO
     259!
     260!--       Top boundary condition for rain water (Neumann)
     261          qr_p(nzt+1,:,:) = qr_p(nzt,:,:)
     262          nr_p(nzt+1,:,:) = nr_p(nzt,:,:)
     263           
    285264       ENDIF
    286 
    287265!
    288266!--    In case of inflow at the south boundary the boundary for v is at nys
     
    308286          pt_p(:,nys-1,:)     = pt_p(:,nys,:)
    309287          IF ( .NOT. constant_diffusion     )  e_p(:,nys-1,:) = e_p(:,nys,:)
    310           IF ( humidity .OR. passive_scalar )  THEN
     288          IF ( humidity  .OR. passive_scalar )  THEN
    311289             q_p(:,nys-1,:) = q_p(:,nys,:)
    312              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     290             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     291                  precipitation)  THEN
    313292                qr_p(:,nys-1,:) = qr_p(:,nys,:)
    314293                nr_p(:,nys-1,:) = nr_p(:,nys,:)
     
    318297          pt_p(:,nyn+1,:)     = pt_p(:,nyn,:)
    319298          IF ( .NOT. constant_diffusion     )  e_p(:,nyn+1,:) = e_p(:,nyn,:)
    320           IF ( humidity .OR. passive_scalar )  THEN
     299          IF ( humidity  .OR. passive_scalar )  THEN
    321300             q_p(:,nyn+1,:) = q_p(:,nyn,:)
    322              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     301             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     302                  precipitation )  THEN
    323303                qr_p(:,nyn+1,:) = qr_p(:,nyn,:)
    324304                nr_p(:,nyn+1,:) = nr_p(:,nyn,:)
     
    328308          pt_p(:,:,nxl-1)     = pt_p(:,:,nxl)
    329309          IF ( .NOT. constant_diffusion     )  e_p(:,:,nxl-1) = e_p(:,:,nxl)
    330           IF ( humidity .OR. passive_scalar )  THEN
     310          IF ( humidity  .OR. passive_scalar )  THEN
    331311             q_p(:,:,nxl-1) = q_p(:,:,nxl)
    332              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     312             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     313                  precipitation )  THEN
    333314                qr_p(:,:,nxl-1) = qr_p(:,:,nxl)
    334315                nr_p(:,:,nxl-1) = nr_p(:,:,nxl)
     
    340321          IF ( humidity .OR. passive_scalar )  THEN
    341322             q_p(:,:,nxr+1) = q_p(:,:,nxr)
    342              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     323             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  precipitation )  THEN
    343324                qr_p(:,:,nxr+1) = qr_p(:,:,nxr)
    344325                nr_p(:,:,nxr+1) = nr_p(:,:,nxr)
  • palm/trunk/SOURCE/calc_liquid_water_content.f90

    r1054 r1115  
    2020! Current revisions:
    2121! -----------------
     22! drizzle can be used independently from precipitation
    2223!
    2324! Former revisions:
     
    6364    USE cloud_parameters
    6465    USE constants
     66    USE control_parameters
    6567    USE grid_variables
    6668    USE indices
     
    7577    DO  i = nxlg, nxrg
    7678       DO  j = nysg, nyng
    77           DO  k = nzb_2d(j,i)+1, nzt
     79          DO  k = nzb_s_inner(j,i)+1, nzt
    7880
    7981!
     
    101103!
    102104!--          Compute the liquid water content
    103              IF ( ( q(k,j,i) - q_s ) > 0.0 ) THEN
    104                 ql(k,j,i) = q(k,j,i) - q_s
     105             IF ( icloud_scheme == 0  .AND.  precipitation)  THEN
     106                IF ( ( q(k,j,i) - q_s - qr(k,j,i) ) > 0.0 ) THEN
     107                   qc(k,j,i) = q(k,j,i) - q_s - qr(k,j,i)
     108                   ql(k,j,i) = qc(k,j,i) + qr(k,j,i)
     109                ELSE
     110                   qc(k,j,i) = 0.0
     111                   ql(k,j,i) = qr(k,j,i)
     112                ENDIF
     113             ELSEIF ( icloud_scheme == 0  .AND.  .NOT. precipitation )  THEN
     114                IF ( ( q(k,j,i) - q_s ) > 0.0 ) THEN
     115                   qc(k,j,i) = q(k,j,i) - q_s
     116                   ql(k,j,i) = qc(k,j,i)
     117                ELSE
     118                   qc(k,j,i) = 0.0
     119                   ql(k,j,i) = 0.0
     120                ENDIF
    105121             ELSE
    106                 ql(k,j,i) = 0.0
     122                IF ( ( q(k,j,i) - q_s ) > 0.0 ) THEN
     123                   ql(k,j,i) = q(k,j,i) - q_s
     124                ELSE
     125                   ql(k,j,i) = 0.0
     126                ENDIF
    107127             ENDIF
    108 
    109128          ENDDO
    110129       ENDDO
  • palm/trunk/SOURCE/check_parameters.f90

    r1112 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! unused variables removed
     23! drizzle can be used without precipitation
    2324!
    2425! Former revisions:
     
    569570          WRITE( action, '(A)' )  'galilei_transformation = .TRUE.'
    570571       ENDIF
     572       IF ( cloud_physics )  THEN
     573          WRITE( action, '(A)' )  'cloud_physics = .TRUE.'
     574       ENDIF
    571575       IF ( cloud_droplets )  THEN
    572           WRITE( action, '(A)' )  'cloud_droplets = .TRUE. (has not been tested)'
     576          WRITE( action, '(A)' )  'cloud_droplets = .TRUE.'
    573577       ENDIF
    574578       IF ( .NOT. prandtl_layer )  THEN
     
    899903    ENDIF
    900904
    901     IF ( cloud_physics  .AND. icloud_scheme == 0  .AND.                      &
    902          .NOT. precipitation ) THEN
    903        message_string = 'cloud_scheme = seifert_beheng requires ' // &
    904                         'precipitation = .TRUE.'
    905        CALL message( 'check_parameters', 'PA0363', 1, 2, 0, 6, 0 )
    906     ENDIF
     905!    IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     906!         .NOT. precipitation  .AND.  .NOT. drizzle ) THEN
     907!       message_string = 'cloud_scheme = seifert_beheng requires ' // &
     908!                        'precipitation = .TRUE. or drizzle = .TRUE.'
     909!       CALL message( 'check_parameters', 'PA0363', 1, 2, 0, 6, 0 )
     910!    ENDIF
    907911
    908912!
     
    916920       IF ( humidity )  THEN
    917921          q_init  = q_surface
    918 !
    919 !--       It is not allowed to choose initial profiles of rain water content
    920 !--       and rain drop concentration. They are set to 0.0.
    921           IF ( cloud_physics .AND. icloud_scheme == 0 ) THEN
    922              qr_init = 0.0
    923              nr_init = 0.0
    924           ENDIF
    925922       ENDIF
    926923       IF ( ocean )           sa_init = sa_surface
     
    12281225             q_vertical_gradient_level(1) = 0.0
    12291226          ENDIF
    1230 
    1231           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
    1232 
    1233              i = 1
    1234              gradient = 0.0
    1235              qr_vertical_gradient_level_ind(1) = 0
    1236              DO  k = 1, nzt+1
    1237                 IF ( i < 11 ) THEN
    1238                    IF ( qr_vertical_gradient_level(i) < zu(k)  .AND. &
    1239                         qr_vertical_gradient_level(i) >= 0.0 )  THEN
    1240                       gradient = qr_vertical_gradient(i) / 100.0
    1241                       qr_vertical_gradient_level_ind(i) = k - 1
    1242                       i = i + 1
    1243                    ENDIF
    1244                 ENDIF
    1245                 IF ( gradient /= 0.0 )  THEN
    1246                    IF ( k /= 1 )  THEN
    1247                       qr_init(k) = qr_init(k-1) + dzu(k) * gradient
    1248                    ELSE
    1249                       qr_init(k) = qr_init(k-1) + 0.5 * dzu(k) * gradient
    1250                    ENDIF
    1251                 ELSE
    1252                    qr_init(k) = qr_init(k-1)
    1253                 ENDIF
    1254 !
    1255 !--             Avoid negative rain water content
    1256                 IF ( qr_init(k) < 0.0 )  THEN
    1257                    qr_init(k) = 0.0
    1258                 ENDIF
    1259              ENDDO
    1260 !
    1261 !--          In case of no given rain water content gradients, choose zero gradient
    1262 !--          conditions
    1263              IF ( qr_vertical_gradient_level(1) == -1.0 )  THEN
    1264                 qr_vertical_gradient_level(1) = 0.0
    1265              ENDIF
    1266 
    1267              i = 1
    1268              gradient = 0.0
    1269              nr_vertical_gradient_level_ind(1) = 0
    1270              DO  k = 1, nzt+1
    1271                 IF ( i < 11 ) THEN
    1272                    IF ( nr_vertical_gradient_level(i) < zu(k)  .AND. &
    1273                         nr_vertical_gradient_level(i) >= 0.0 )  THEN
    1274                       gradient = nr_vertical_gradient(i) / 100.0
    1275                       nr_vertical_gradient_level_ind(i) = k - 1
    1276                       i = i + 1
    1277                    ENDIF
    1278                 ENDIF
    1279                 IF ( gradient /= 0.0 )  THEN
    1280                    IF ( k /= 1 )  THEN
    1281                       nr_init(k) = nr_init(k-1) + dzu(k) * gradient
    1282                    ELSE
    1283                       nr_init(k) = nr_init(k-1) + 0.5 * dzu(k) * gradient
    1284                    ENDIF
    1285                 ELSE
    1286                    nr_init(k) = nr_init(k-1)
    1287                 ENDIF
    1288 !
    1289 !--             Avoid negative rain water content
    1290                 IF ( nr_init(k) < 0.0 )  THEN
    1291                    nr_init(k) = 0.0
    1292                 ENDIF
    1293              ENDDO
    1294 !
    1295 !--          In case of no given rain water content gradients, choose zero gradient
    1296 !--          conditions
    1297              IF ( nr_vertical_gradient_level(1) == -1.0 )  THEN
    1298                 nr_vertical_gradient_level(1) = 0.0
    1299              ENDIF
    1300 
    1301           ENDIF
    13021227!
    13031228!--       Store humidity, rain water content and rain drop concentration
    13041229!--       gradient at the top boundary for possile Neumann boundary condition
    13051230          bc_q_t_val  = ( q_init(nzt+1) - q_init(nzt) ) / dzu(nzt+1)
    1306            
    1307           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
    1308              bc_qr_t_val = ( qr_init(nzt+1) - qr_init(nzt) ) / dzu(nzt+1)
    1309              bc_nr_t_val = ( nr_init(nzt+1) - nr_init(nzt) ) / dzu(nzt+1)
    1310           ENDIF
    1311 
    13121231       ENDIF
    13131232
     
    17871706       ENDIF
    17881707
    1789        IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
    1790           IF ( bc_qr_b == 'dirichlet' )  THEN
    1791              ibc_qr_b = 0
    1792           ELSEIF ( bc_qr_b == 'neumann' )  THEN
    1793              ibc_qr_b = 1
    1794           ELSE
    1795              message_string = 'unknown boundary condition: bc_qr_b ="' // &
    1796                               TRIM( bc_qr_b ) // '"'
    1797              CALL message( 'check_parameters', 'PA0352', 1, 2, 0, 6, 0 )
    1798           ENDIF
    1799           IF ( bc_qr_t == 'dirichlet' )  THEN
    1800              ibc_qr_t = 0
    1801           ELSEIF ( bc_qr_t == 'neumann' )  THEN
    1802              ibc_qr_t = 1
    1803           ELSE
    1804              message_string = 'unknown boundary condition: bc_qr_t ="' // &
    1805                               TRIM( bc_qr_t ) // '"'
    1806              CALL message( 'check_parameters', 'PA0353', 1, 2, 0, 6, 0 )
    1807           ENDIF
    1808           IF ( bc_nr_b == 'dirichlet' )  THEN
    1809              ibc_nr_b = 0
    1810           ELSEIF ( bc_nr_b == 'neumann' )  THEN
    1811              ibc_nr_b = 1
    1812           ELSE
    1813              message_string = 'unknown boundary condition: bc_nr_b ="' // &
    1814                               TRIM( bc_nr_b ) // '"'
    1815              CALL message( 'check_parameters', 'PA0355', 1, 2, 0, 6, 0 )
    1816           ENDIF
    1817           IF ( bc_nr_t == 'dirichlet' )  THEN
    1818              ibc_nr_t = 0
    1819           ELSEIF ( bc_nr_t == 'neumann' )  THEN
    1820              ibc_nr_t = 1
    1821           ELSE
    1822              message_string = 'unknown boundary condition: bc_nr_t ="' // &
    1823                               TRIM( bc_nr_t ) // '"'
    1824              CALL message( 'check_parameters', 'PA0356', 1, 2, 0, 6, 0 )
    1825           ENDIF
    1826        ENDIF       
    1827 
    1828     ENDIF
    1829 
     1708    ENDIF
    18301709!
    18311710!-- Boundary conditions for horizontal components of wind speed
     
    26692548                                 'lemented for cloud_scheme /= seifert_beheng'
    26702549                CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
     2550             ELSEIF ( .NOT. precipitation )  THEN
     2551                message_string = 'data_output_pr = ' // &
     2552                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
     2553                                 'lemented for precipitation = .FALSE.'
     2554                CALL message( 'check_parameters', 'PA0361', 1, 2, 0, 6, 0 )
    26712555             ELSE
    26722556                dopr_index(i) = 73
     
    26862570                                 'lemented for cloud_scheme /= seifert_beheng'
    26872571                CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
     2572             ELSEIF ( .NOT. precipitation )  THEN
     2573                message_string = 'data_output_pr = ' // &
     2574                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
     2575                                 'lemented for precipitation = .FALSE.'
     2576                CALL message( 'check_parameters', 'PA0361', 1, 2, 0, 6, 0 )
    26882577             ELSE
    26892578                dopr_index(i) = 74
     
    29062795                         'res cloud_scheme = seifert_beheng'
    29072796                CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
     2797             ELSEIF ( .NOT. precipitation )  THEN
     2798                message_string = 'output of "' // TRIM( var ) // '" requi' // &
     2799                                 'res precipitation = .TRUE.'
     2800                CALL message( 'check_parameters', 'PA0112', 1, 2, 0, 6, 0 )
    29082801             ENDIF
    29092802             unit = 'kg/kg'
  • palm/trunk/SOURCE/data_output_2d.f90

    r1077 r1115  
    2020! Current revisions:
    2121! -----------------
     22! ql is calculated by calc_liquid_water_content
    2223!
    2324! Former revisions:
     
    483484             CASE ( 'qc_xy', 'qc_xz', 'qc_yz' )
    484485                IF ( av == 0 )  THEN
     486                   to_be_resorted => qc
     487                ELSE
     488                   to_be_resorted => qc_av
     489                ENDIF
     490                IF ( mode == 'xy' )  level_z = zu
     491
     492             CASE ( 'ql_xy', 'ql_xz', 'ql_yz' )
     493                IF ( av == 0 )  THEN
    485494                   to_be_resorted => ql
    486495                ELSE
    487496                   to_be_resorted => ql_av
    488                 ENDIF
    489                 IF ( mode == 'xy' )  level_z = zu
    490 
    491              CASE ( 'ql_xy', 'ql_xz', 'ql_yz' )
    492                 IF ( av == 0 )  THEN
    493                    IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    494                       DO  i = nxlg, nxrg
    495                          DO  j = nysg, nyng
    496                             DO  k = nzb, nzt+1
    497                                local_pf(i,j,k) = ql(k,j,i) + qr(k,j,i)
    498                             ENDDO
    499                          ENDDO
    500                       ENDDO
    501                       resorted = .TRUE.
    502                    ELSE
    503                       to_be_resorted => ql
    504                    ENDIF
    505                 ELSE
    506                    IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    507                       DO  i = nxlg, nxrg
    508                          DO  j = nysg, nyng
    509                             DO  k = nzb, nzt+1
    510                                local_pf(i,j,k) = ql_av(k,j,i) + qr_av(k,j,i)
    511                             ENDDO
    512                          ENDDO
    513                       ENDDO
    514                       resorted = .TRUE.
    515                    ELSE
    516                       to_be_resorted => ql_av
    517                    ENDIF
    518497                ENDIF
    519498                IF ( mode == 'xy' )  level_z = zu
  • palm/trunk/SOURCE/data_output_3d.f90

    r1107 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! ql is calculated by calc_liquid_water_content
    2323!
    2424! Former revisions:
     
    337337          CASE ( 'qc' )
    338338             IF ( av == 0 )  THEN
     339                to_be_resorted => qc
     340             ELSE
     341                to_be_resorted => qc_av
     342             ENDIF
     343
     344          CASE ( 'ql' )
     345             IF ( av == 0 )  THEN
    339346                to_be_resorted => ql
    340347             ELSE
    341348                to_be_resorted => ql_av
    342              ENDIF
    343 
    344           CASE ( 'ql' )
    345              IF ( av == 0 )  THEN
    346                 IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    347                    DO  i = nxlg, nxrg
    348                       DO  j = nysg, nyng
    349                          DO  k = nzb, nz_do3d
    350                             local_pf(i,j,k) = ql(k,j,i) + qr(k,j,i)
    351                          ENDDO
    352                       ENDDO
    353                    ENDDO
    354                    resorted = .TRUE.
    355                 ELSE
    356                    to_be_resorted => ql
    357                 ENDIF
    358              ELSE
    359                 IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    360                    DO  i = nxlg, nxrg
    361                       DO  j = nysg, nyng
    362                          DO  k = nzb, nz_do3d
    363                             local_pf(i,j,k) = ql_av(k,j,i) + qr_av(k,j,i)
    364                          ENDDO
    365                       ENDDO
    366                    ENDDO
    367                    resorted = .TRUE.
    368                 ELSE
    369                    to_be_resorted => ql_av
    370                 ENDIF
    371349             ENDIF
    372350
  • palm/trunk/SOURCE/flow_statistics.f90

    r1112 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! ql is calculated by calc_liquid_water_content
    2323!
    2424! Former revisions:
     
    766766                                                          rmask(j,i,sr)
    767767                      IF ( .NOT. cloud_droplets )  THEN
    768                          pts = 0.5 *                                          &
    769                               ( ( q(k,j,i) - ql(k,j,i) ) -                    &
    770                               hom(k,1,42,sr) +                                &
    771                               ( q(k+1,j,i) - ql(k+1,j,i) ) -                  &
     768                         pts = 0.5 *                                           &
     769                              ( ( q(k,j,i) - ql(k,j,i) ) -                     &
     770                              hom(k,1,42,sr) +                                 &
     771                              ( q(k+1,j,i) - ql(k+1,j,i) ) -                   &
    772772                              hom(k+1,1,42,sr) )
    773                          sums_l(k,52,tn) = sums_l(k,52,tn) + pts * w(k,j,i) * &
     773                         sums_l(k,52,tn) = sums_l(k,52,tn) + pts * w(k,j,i) *  &
    774774                                                             rmask(j,i,sr)
    775775                         IF ( icloud_scheme == 0  )  THEN
    776                             sums_l(k,54,tn) = sums_l(k,54,tn) + ( ql(k,j,i) + &
    777                                                                 qr(k,j,i) ) * &
     776                            sums_l(k,54,tn) = sums_l(k,54,tn) + ql(k,j,i) *    &
    778777                                                                rmask(j,i,sr)
    779                             sums_l(k,73,tn) = sums_l(k,73,tn) + nr(k,j,i) *   &
     778                            sums_l(k,75,tn) = sums_l(k,75,tn) + qc(k,j,i) *    &
    780779                                                                rmask(j,i,sr)
    781                             sums_l(k,74,tn) = sums_l(k,74,tn) + qr(k,j,i) *   &
    782                                                                 rmask(j,i,sr)
    783                             sums_l(k,75,tn) = sums_l(k,75,tn) + ql(k,j,i) *   &
    784                                                                 rmask(j,i,sr)
    785                             sums_l(k,76,tn) = sums_l(k,76,tn) + prr(k,j,i) *  &
    786                                                                 rmask(j,i,sr)
     780                            IF ( precipitation )  THEN
     781                               sums_l(k,73,tn) = sums_l(k,73,tn) + nr(k,j,i) * &
     782                                                                   rmask(j,i,sr)
     783                               sums_l(k,74,tn) = sums_l(k,74,tn) + qr(k,j,i) * &
     784                                                                   rmask(j,i,sr)
     785                               sums_l(k,76,tn) = sums_l(k,76,tn) + prr(k,j,i) *&
     786                                                                   rmask(j,i,sr)
     787                            ENDIF
    787788                         ELSE
    788                             sums_l(k,54,tn) = sums_l(k,54,tn) + ql(k,j,i) *   &
     789                            sums_l(k,54,tn) = sums_l(k,54,tn) + ql(k,j,i) *    &
    789790                                                                rmask(j,i,sr)
    790791                         ENDIF
    791792                      ELSE
    792                          sums_l(k,54,tn) = sums_l(k,54,tn) + ql(k,j,i) *      &
     793                         sums_l(k,54,tn) = sums_l(k,54,tn) + ql(k,j,i) *       &
    793794                                                             rmask(j,i,sr)
    794795                      ENDIF
  • palm/trunk/SOURCE/header.f90

    r1112 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! descriptions for Seifert-Beheng-cloud-physics-scheme added
    2323!
    2424! Former revisions:
     
    12371237       WRITE ( io, 415 )
    12381238       WRITE ( io, 416 ) surface_pressure, r_d, rho_surface, cp, l_v
     1239       IF ( icloud_scheme == 0 )  THEN
     1240          WRITE ( io, 510 ) 1.0E-6 * nc_const
     1241          IF ( precipitation )  WRITE ( io, 511 ) c_sedimentation
     1242       ENDIF
    12391243    ENDIF
    12401244
     
    14581462    ELSEIF ( humidity  .AND.  cloud_physics )  THEN
    14591463       WRITE ( io, 432 )
    1460        IF ( radiation )      WRITE ( io, 132 )
    1461        IF ( precipitation )  WRITE ( io, 133 )
     1464       IF ( radiation )  WRITE ( io, 132 )
     1465       IF ( icloud_scheme == 1 )  THEN
     1466          IF ( precipitation )  WRITE ( io, 133 )
     1467       ELSEIF ( icloud_scheme == 0 )  THEN
     1468          IF ( drizzle )  WRITE ( io, 506 )
     1469          IF ( precipitation )  THEN
     1470             WRITE ( io, 505 )
     1471             IF ( turbulence )  WRITE ( io, 507 )
     1472             IF ( ventilation_effect )  WRITE ( io, 508 )
     1473             IF ( limiter_sedimentation )  WRITE ( io, 509 )
     1474          ENDIF
     1475       ENDIF
    14621476    ELSEIF ( humidity  .AND.  cloud_droplets )  THEN
    14631477       WRITE ( io, 433 )
     
    20202034503 FORMAT (' --> Momentum advection via Wicker-Skamarock-Scheme 5th order')
    20212035504 FORMAT (' --> Scalar advection via Wicker-Skamarock-Scheme 5th order')
    2022 
     2036505 FORMAT ('    Precipitation parameterization via Seifert-Beheng-Scheme')
     2037506 FORMAT ('    Drizzle parameterization via Stokes law')
     2038507 FORMAT ('    Turbulence effects on precipitation process')
     2039508 FORMAT ('    Ventilation effects on evaporation of rain drops')
     2040509 FORMAT ('    Slope limiter used for sedimentation process')
     2041510 FORMAT ('        Droplet density    :   N_c   = ',F6.1,' 1/cm**3')
     2042511 FORMAT ('        Sedimentation Courant number:                  '/&
     2043            '                               C_s   = ',F3.1,'        ')
    20232044
    20242045 END SUBROUTINE header
  • palm/trunk/SOURCE/init_3d_model.f90

    r1114 r1115  
    2323! Current revisions:
    2424! ------------------
    25 !
     25! unused variables removed
    2626!
    2727! Former revisions:
     
    392392             IF ( icloud_scheme == 0 )  THEN
    393393!
    394 !--             1D-rain sedimentation fluxes and rain drop size distribution
    395 !--             properties
    396                 ALLOCATE ( dr(nzb:nzt+1), lambda_r(nzb:nzt+1),  &
    397                            mu_r(nzb:nzt+1), sed_q(nzb:nzt+1),   &
    398                            sed_qr(nzb:nzt+1), sed_nr(nzb:nzt+1),&
    399                            xr(nzb:nzt+1) )
    400 !
    401 !--             2D-rain water content and rain drop concentration arrays
    402                 ALLOCATE ( qrs(nysg:nyng,nxlg:nxrg),   &
    403                    qrsws(nysg:nyng,nxlg:nxrg),         &
    404                    qrswst(nysg:nyng,nxlg:nxrg),        &
    405                    nrs(nysg:nyng,nxlg:nxrg),           &
    406                    nrsws(nysg:nyng,nxlg:nxrg),         &
    407                    nrswst(nysg:nyng,nxlg:nxrg) )
    408 !
    409 !--             3D-rain water content, rain drop concentration arrays
     394!--             1D-arrays
     395                ALLOCATE ( nc_1d(nzb:nzt+1), pt_1d(nzb:nzt+1), &
     396                           q_1d(nzb:nzt+1), qc_1d(nzb:nzt+1) )
     397!
     398!--             3D-cloud water content
    410399#if defined( __nopointer )
    411                 ALLOCATE( nr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),         &
    412                           nr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    413                           qr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),         &
    414                           qr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    415                           tnr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg),      &
    416                           tqr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     400                ALLOCATE( qc(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    417401#else
    418                 ALLOCATE( nr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    419                           nr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    420                           nr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    421                           qr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    422                           qr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
    423                           qr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     402                ALLOCATE( qc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    424403#endif
    425404!
    426405!--             3D-tendency arrays
    427                 ALLOCATE( tend_nr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),    &
    428                           tend_pt(nzb:nzt+1,nysg:nyng,nxlg:nxrg),    &
    429                           tend_q(nzb:nzt+1,nysg:nyng,nxlg:nxrg),     &
    430                           tend_qr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    431 !
    432 !--             3d-precipitation rate
     406                ALLOCATE( tend_pt(nzb:nzt+1,nysg:nyng,nxlg:nxrg),    &
     407                          tend_q(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     408
    433409                IF ( precipitation )  THEN
     410!
     411!--                1D-arrays
     412                   ALLOCATE ( nr_1d(nzb:nzt+1), qr_1d(nzb:nzt+1) )
     413!
     414!
     415!--                3D-tendency arrays
     416                   ALLOCATE( tend_nr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),    &
     417                             tend_qr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     418!
     419!--                2D-rain water content and rain drop concentration arrays
     420                   ALLOCATE ( qrs(nysg:nyng,nxlg:nxrg),                 &
     421                              qrsws(nysg:nyng,nxlg:nxrg),               &
     422                              qrswst(nysg:nyng,nxlg:nxrg),              &
     423                              nrs(nysg:nyng,nxlg:nxrg),                 &
     424                              nrsws(nysg:nyng,nxlg:nxrg),               &
     425                              nrswst(nysg:nyng,nxlg:nxrg) )
     426!
     427!--                3D-rain water content, rain drop concentration arrays
     428#if defined( __nopointer )
     429                   ALLOCATE( nr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),         &
     430                             nr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     431                             qr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),         &
     432                             qr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     433                             tnr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg),      &
     434                             tqr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     435#else
     436                   ALLOCATE( nr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     437                             nr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     438                             nr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     439                             qr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     440                             qr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),       &
     441                             qr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     442#endif
     443!
     444!--                3d-precipitation rate
    434445                   ALLOCATE( prr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    435446                ENDIF
     
    582593             ql => ql_1
    583594             IF ( icloud_scheme == 0 )  THEN
    584                 qr => qr_1;  qr_p  => qr_2;  tqr_m  => qr_3
    585                 nr => nr_1;  nr_p  => nr_2;  tnr_m  => nr_3
     595                qc => qc_1
     596                IF ( precipitation )  THEN
     597                   qr => qr_1;  qr_p  => qr_2;  tqr_m  => qr_3
     598                   nr => nr_1;  nr_p  => nr_2;  tnr_m  => nr_3
     599                ENDIF
    586600             ENDIF
    587601          ENDIF
     
    641655                ENDDO
    642656             ENDDO
    643              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     657             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     658                  precipitation )  THEN
    644659                DO  i = nxlg, nxrg
    645660                   DO  j = nysg, nyng
    646                       qr(:,j,i) = qr_init
    647                       nr(:,j,i) = nr_init
     661                      qr(:,j,i) = 0.0
     662                      nr(:,j,i) = 0.0
    648663                   ENDDO
    649664                ENDDO
     665!
     666!--             Initialze nc_1d with default value
     667                nc_1d(:) = nc_const
     668
    650669             ENDIF
    651670          ENDIF
     
    693712          IF ( humidity  .OR.  passive_scalar )  THEN
    694713             qs = 0.0
    695              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
     714             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     715                  precipitation )  THEN
    696716                qrs = 0.0
    697717                nrs = 0.0
     
    762782                ENDDO
    763783             ENDDO
    764              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
    765                 DO  i = nxlg, nxrg
    766                    DO  j = nysg, nyng
    767                       qr(:,j,i) = qr_init
    768                       nr(:,j,i) = nr_init
     784             IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
     785!
     786!--             Initialze nc_1d with default value
     787                nc_1d(:) = nc_const
     788
     789                IF ( precipitation )  THEN
     790                   DO  i = nxlg, nxrg
     791                      DO  j = nysg, nyng
     792                         qr(:,j,i) = 0.0
     793                         nr(:,j,i) = 0.0
     794                      ENDDO
    769795                   ENDDO
    770                 ENDDO
     796                ENDIF
     797
    771798             ENDIF
    772799          ENDIF
     
    910937!--       Determine the near-surface water flux
    911938          IF ( humidity  .OR.  passive_scalar )  THEN
    912              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    913                 IF ( constant_waterflux_qr )  THEN
    914                    qrsws = surface_waterflux_qr
    915                 ENDIF
    916                 IF (constant_waterflux_nr )  THEN
    917                    nrsws = surface_waterflux_nr
    918                 ENDIF
     939             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     940                  precipitation )  THEN
     941                qrsws = 0.0
     942                nrsws = 0.0
    919943             ENDIF
    920944             IF ( constant_waterflux )  THEN
     
    951975             IF ( humidity  .OR.  passive_scalar )  THEN
    952976                qswst = 0.0
    953                 IF ( cloud_physics  .AND.  icloud_scheme == 0 ) THEN
     977                IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     978                     precipitation ) THEN
    954979                   nrswst = 0.0
    955980                   qrswst = 0.0
     
    9901015          IF ( humidity  .OR.  passive_scalar )  THEN
    9911016             IF ( .NOT. constant_waterflux )  qsws   = 0.0
    992              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    993                 IF ( .NOT. constant_waterflux_qr )  THEN
    994                    qrsws = 0.0
    995                 ENDIF
    996                 IF ( .NOT. constant_waterflux_nr )  THEN
    997                    nrsws = 0.0
    998                 ENDIF
     1017             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     1018                  precipitation )  THEN
     1019                qrsws = 0.0
     1020                nrsws = 0.0
    9991021             ENDIF
    10001022          ENDIF
     
    10211043          ql = 0.0
    10221044          IF ( precipitation )  precipitation_amount = 0.0
     1045          IF ( icloud_scheme == 0 )  THEN
     1046             qc = 0.0
     1047             nc_1d = nc_const
     1048          ENDIF
    10231049       ENDIF
    10241050!
     
    10461072            q_surface_initial_change /= 0.0 )  THEN
    10471073          q(nzb,:,:) = q(nzb,:,:) + q_surface_initial_change
    1048           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
    1049              IF ( qr_surface_initial_change /= 0.0 )  THEN
    1050                 qr(nzb,:,:) = qr(nzb,:,:) + qr_surface_initial_change
    1051              ELSEIF ( nr_surface_initial_change /= 0.0 ) THEN
    1052                 nr(nzb,:,:) = nr(nzb,:,:) + nr_surface_initial_change
    1053              ENDIF
    1054           ENDIF
    1055        ENDIF
    1056 
     1074       ENDIF
    10571075!
    10581076!--    Initialize the random number generator (from numerical recipes)
     
    10671085          tq_m = 0.0
    10681086          q_p = q
    1069           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     1087          IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     1088               precipitation )  THEN
    10701089             tqr_m = 0.0
    10711090             qr_p = qr
     
    12451264       IF ( humidity  .OR.  passive_scalar )  THEN
    12461265          q_p = q
    1247           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     1266          IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     1267               precipitation )  THEN
    12481268             qr_p = qr
    12491269             nr_p = nr
     
    12591279       IF ( humidity  .OR.  passive_scalar )  THEN
    12601280          tq_m = 0.0
    1261           IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     1281          IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     1282               precipitation )  THEN
    12621283             tqr_m = 0.0
    12631284             tnr_m = 0.0
  • palm/trunk/SOURCE/microphysics.f90

    r1107 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! microphyical tendencies are calculated in microphysics_control in an optimized
     23! way; unrealistic values are prevented; bugfix in evaporation; some reformatting
    2324!
    2425! Former revisions:
     
    3536! 1065 2012-11-22 17:42:36Z hoffmann
    3637! Sedimentation process implemented according to Stevens and Seifert (2008).
    37 ! Turbulence effects on autoconversion and accretion added (Seifert, Nuijens 
     38! Turbulence effects on autoconversion and accretion added (Seifert, Nuijens
    3839! and Stevens, 2010).
    3940!
     
    4849
    4950    PRIVATE
    50     PUBLIC dsd_properties, autoconversion, accretion, selfcollection_breakup, &
    51            evaporation_rain, sedimentation_cloud, sedimentation_rain
    52 
    53     INTERFACE dsd_properties
    54        MODULE PROCEDURE dsd_properties
    55        MODULE PROCEDURE dsd_properties_ij
    56     END INTERFACE dsd_properties
     51    PUBLIC microphysics_control
     52
     53    INTERFACE microphysics_control
     54       MODULE PROCEDURE microphysics_control
     55       MODULE PROCEDURE microphysics_control_ij
     56    END INTERFACE microphysics_control
     57
     58    INTERFACE adjust_cloud
     59       MODULE PROCEDURE adjust_cloud
     60       MODULE PROCEDURE adjust_cloud_ij
     61    END INTERFACE adjust_cloud
    5762
    5863    INTERFACE autoconversion
     
    9297! Call for all grid points
    9398!------------------------------------------------------------------------------!
    94     SUBROUTINE dsd_properties
    95 
    96        USE arrays_3d
    97        USE cloud_parameters
    98        USE constants
    99        USE indices
     99    SUBROUTINE microphysics_control
     100
     101       USE arrays_3d
     102       USE control_parameters
     103       USE indices
     104       USE statistics
    100105
    101106       IMPLICIT NONE
     
    106111       DO  i = nxl, nxr
    107112          DO  j = nys, nyn
    108              DO  k = nzb_2d(j,i)+1, nzt
     113             DO  k = nzb_s_inner(j,i)+1, nzt
    109114
    110115             ENDDO
     
    112117       ENDDO
    113118
    114     END SUBROUTINE dsd_properties
    115 
    116 
    117     SUBROUTINE autoconversion
    118 
    119        USE arrays_3d
    120        USE cloud_parameters
    121        USE constants
     119    END SUBROUTINE microphysics_control
     120
     121    SUBROUTINE adjust_cloud
     122
     123       USE arrays_3d
     124       USE cloud_parameters
    122125       USE indices
    123126
     
    129132       DO  i = nxl, nxr
    130133          DO  j = nys, nyn
    131              DO  k = nzb_2d(j,i)+1, nzt
     134             DO  k = nzb_s_inner(j,i)+1, nzt
    132135
    133136             ENDDO
     
    135138       ENDDO
    136139
    137     END SUBROUTINE autoconversion
    138 
    139 
    140     SUBROUTINE accretion
    141 
    142        USE arrays_3d
    143        USE cloud_parameters
    144        USE constants
     140    END SUBROUTINE adjust_cloud
     141
     142
     143    SUBROUTINE autoconversion
     144
     145       USE arrays_3d
     146       USE cloud_parameters
     147       USE control_parameters
     148       USE grid_variables
    145149       USE indices
    146150
     
    152156       DO  i = nxl, nxr
    153157          DO  j = nys, nyn
    154              DO  k = nzb_2d(j,i)+1, nzt
     158             DO  k = nzb_s_inner(j,i)+1, nzt
    155159
    156160             ENDDO
     
    158162       ENDDO
    159163
    160     END SUBROUTINE accretion
    161 
    162 
    163     SUBROUTINE selfcollection_breakup
    164 
    165        USE arrays_3d
    166        USE cloud_parameters
    167        USE constants
     164    END SUBROUTINE autoconversion
     165
     166
     167    SUBROUTINE accretion
     168
     169       USE arrays_3d
     170       USE cloud_parameters
     171       USE control_parameters
    168172       USE indices
    169173
     
    175179       DO  i = nxl, nxr
    176180          DO  j = nys, nyn
    177              DO  k = nzb_2d(j,i)+1, nzt
     181             DO  k = nzb_s_inner(j,i)+1, nzt
    178182
    179183             ENDDO
     
    181185       ENDDO
    182186
    183     END SUBROUTINE selfcollection_breakup
    184 
    185 
    186     SUBROUTINE evaporation_rain
    187 
    188        USE arrays_3d
    189        USE cloud_parameters
    190        USE constants
     187    END SUBROUTINE accretion
     188
     189
     190    SUBROUTINE selfcollection_breakup
     191
     192       USE arrays_3d
     193       USE cloud_parameters
     194       USE control_parameters
    191195       USE indices
    192196
     
    198202       DO  i = nxl, nxr
    199203          DO  j = nys, nyn
    200              DO  k = nzb_2d(j,i)+1, nzt
     204             DO  k = nzb_s_inner(j,i)+1, nzt
    201205
    202206             ENDDO
     
    204208       ENDDO
    205209
    206     END SUBROUTINE evaporation_rain
    207 
    208 
    209     SUBROUTINE sedimentation_cloud
     210    END SUBROUTINE selfcollection_breakup
     211
     212
     213    SUBROUTINE evaporation_rain
    210214
    211215       USE arrays_3d
    212216       USE cloud_parameters
    213217       USE constants
     218       USE control_parameters
    214219       USE indices
    215220
     
    221226       DO  i = nxl, nxr
    222227          DO  j = nys, nyn
    223              DO  k = nzb_2d(j,i)+1, nzt
     228             DO  k = nzb_s_inner(j,i)+1, nzt
    224229
    225230             ENDDO
     
    227232       ENDDO
    228233
    229     END SUBROUTINE sedimentation_cloud
    230 
    231 
    232     SUBROUTINE sedimentation_rain
     234    END SUBROUTINE evaporation_rain
     235
     236
     237    SUBROUTINE sedimentation_cloud
    233238
    234239       USE arrays_3d
    235240       USE cloud_parameters
    236241       USE constants
     242       USE control_parameters
    237243       USE indices
    238244
     
    244250       DO  i = nxl, nxr
    245251          DO  j = nys, nyn
    246              DO  k = nzb_2d(j,i)+1, nzt
     252             DO  k = nzb_s_inner(j,i)+1, nzt
     253
     254             ENDDO
     255          ENDDO
     256       ENDDO
     257
     258    END SUBROUTINE sedimentation_cloud
     259
     260
     261    SUBROUTINE sedimentation_rain
     262
     263       USE arrays_3d
     264       USE cloud_parameters
     265       USE constants
     266       USE control_parameters
     267       USE indices
     268       USE statistics
     269
     270       IMPLICIT NONE
     271
     272       INTEGER ::  i, j, k
     273
     274 
     275       DO  i = nxl, nxr
     276          DO  j = nys, nyn
     277             DO  k = nzb_s_inner(j,i)+1, nzt
    247278
    248279             ENDDO
     
    256287! Call for grid point i,j
    257288!------------------------------------------------------------------------------!
    258     SUBROUTINE dsd_properties_ij( i, j )
    259 
    260        USE arrays_3d
    261        USE cloud_parameters
    262        USE constants
    263        USE indices
    264        USE control_parameters
    265        USE user
    266    
    267        IMPLICIT NONE
    268 
    269        INTEGER ::  i, j, k
    270 
    271        DO  k = nzb_2d(j,i)+1, nzt
     289
     290    SUBROUTINE microphysics_control_ij( i, j )
     291
     292       USE arrays_3d
     293       USE cloud_parameters
     294       USE control_parameters
     295       USE statistics
     296
     297       IMPLICIT NONE
     298
     299       INTEGER ::  i, j
     300
     301       dt_micro = dt_3d * weight_pres(intermediate_timestep_count)
     302!
     303!--    Adjust unrealistic values
     304       IF ( precipitation )  CALL adjust_cloud( i,j )
     305!
     306!--    Use 1-d arrays
     307       q_1d(:)  = q(:,j,i)
     308       pt_1d(:) = pt(:,j,i)
     309       qc_1d(:) = qc(:,j,i)
     310       nc_1d(:) = nc_const
     311       IF ( precipitation )  THEN
     312          qr_1d(:) = qr(:,j,i)
     313          nr_1d(:) = nr(:,j,i)
     314       ENDIF
     315!
     316!--    Compute cloud physics
     317       IF ( precipitation )  THEN
     318          CALL autoconversion( i,j )
     319          CALL accretion( i,j )
     320          CALL selfcollection_breakup( i,j )
     321          CALL evaporation_rain( i,j )
     322          CALL sedimentation_rain( i,j )
     323       ENDIF
     324
     325       IF ( drizzle )  CALL sedimentation_cloud( i,j )
     326!
     327!--    Derive tendencies
     328       tend_q(:,j,i)  = ( q_1d(:) - q(:,j,i) ) / dt_micro
     329       tend_pt(:,j,i) = ( pt_1d(:) - pt(:,j,i) ) / dt_micro
     330       IF ( precipitation )  THEN
     331          tend_qr(:,j,i) = ( qr_1d(:) - qr(:,j,i) ) / dt_micro
     332          tend_nr(:,j,i) = ( nr_1d(:) - nr(:,j,i) ) / dt_micro
     333       ENDIF
     334
     335    END SUBROUTINE microphysics_control_ij
     336
     337    SUBROUTINE adjust_cloud_ij( i, j )
     338
     339       USE arrays_3d
     340       USE cloud_parameters
     341       USE indices
     342
     343       IMPLICIT NONE
     344
     345       INTEGER ::  i, j, k
     346!
     347!--    Adjust number of raindrops to avoid nonlinear effects in
     348!--    sedimentation and evaporation of rain drops due to too small or
     349!--    too big weights of rain drops (Stevens and Seifert, 2008).
     350!--    The same procedure is applied to cloud droplets if they are determined
     351!--    prognostically. 
     352       DO  k = nzb_s_inner(j,i)+1, nzt
    272353
    273354          IF ( qr(k,j,i) <= eps_sb )  THEN
    274355             qr(k,j,i) = 0.0
     356             nr(k,j,i) = 0.0
    275357          ELSE
    276358!
     
    283365                nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax
    284366             ENDIF
    285              xr(k) = hyrho(k) * qr(k,j,i) / nr(k,j,i)
    286 !
    287 !--          Weight averaged diameter of rain drops:
    288              dr(k) = ( hyrho(k) * qr(k,j,i) / nr(k,j,i) *                     &
    289                        dpirho_l )**( 1.0 / 3.0 )
    290 !
    291 !--          Shape parameter of gamma distribution (Milbrandt and Yau, 2005;
    292 !--          Stevens and Seifert, 2008):
    293              mu_r(k) = 10.0 * ( 1.0 + TANH( 1.2E3 * ( dr(k) - 1.4E-3 ) ) )
    294 !
    295 !--          Slope parameter of gamma distribution (Seifert, 2008):
    296              lambda_r(k) = ( ( mu_r(k) + 3.0 ) * ( mu_r(k) + 2.0 ) *          &
    297                              ( mu_r(k) + 1.0 ) )**( 1.0 / 3.0 ) / dr(k)
     367
    298368          ENDIF
    299        ENDDO
    300 
    301     END SUBROUTINE dsd_properties_ij
     369
     370       ENDDO
     371
     372    END SUBROUTINE adjust_cloud_ij
    302373
    303374
     
    306377       USE arrays_3d
    307378       USE cloud_parameters
    308        USE constants
    309        USE indices
    310        USE control_parameters
    311        USE statistics
     379       USE control_parameters
    312380       USE grid_variables
    313    
    314        IMPLICIT NONE
    315 
    316        INTEGER ::  i, j, k
    317        REAL    ::  k_au, autocon, phi_au, tau_cloud, xc, nu_c, rc,   &
    318                    l_mix, re_lambda, alpha_cc, r_cc, sigma_cc, epsilon
     381       USE indices
     382
     383       IMPLICIT NONE
     384
     385       INTEGER ::  i, j, k
     386       REAL    ::  alpha_cc, autocon, epsilon, k_au, l_mix, nu_c, phi_au,      &
     387                   r_cc, rc, re_lambda, selfcoll, sigma_cc, tau_cloud, xc                     
    319388
    320389
    321390       k_au = k_cc / ( 20.0 * x0 )
    322391
    323        DO  k = nzb_2d(j,i)+1, nzt
    324 
    325           IF ( ql(k,j,i) > 0.0 )  THEN
     392       DO  k = nzb_s_inner(j,i)+1, nzt
     393
     394          IF ( qc_1d(k) > eps_sb )  THEN
    326395!
    327396!--          Intern time scale of coagulation (Seifert and Beheng, 2006):
    328 !--          (1.0 - ql(k,j,i) / ( ql(k,j,i) + qr(k,j,i) ))
    329              tau_cloud = 1.0 - ql(k,j,i) / ( ql(k,j,i) + qr(k,j,i) + 1.0E-20 )
     397!--          (1.0 - qc(k,j,i) / ( qc(k,j,i) + qr_1d(k) ))
     398             tau_cloud = 1.0 - qc_1d(k) / ( qr_1d(k) + qc_1d(k) )
    330399!
    331400!--          Universal function for autoconversion process
     
    335404!--          Shape parameter of gamma distribution (Geoffroy et al., 2010):
    336405!--          (Use constant nu_c = 1.0 instead?)
    337              nu_c      = 1.0 !MAX( 0.0, 1580.0 * hyrho(k) * ql(k,j,i) - 0.28 )
     406             nu_c      = 1.0 !MAX( 0.0, 1580.0 * hyrho(k) * qc(k,j,i) - 0.28 )
    338407!
    339408!--          Mean weight of cloud droplets:
    340              xc        = hyrho(k) * ql(k,j,i) / nc
     409             xc = hyrho(k) * qc_1d(k) / nc_1d(k)
    341410!
    342411!--          Parameterized turbulence effects on autoconversion (Seifert,
     
    371440!
    372441!--          Autoconversion rate (Seifert and Beheng, 2006):
    373              autocon   = k_au * ( nu_c + 2.0 ) * ( nu_c + 4.0 ) /              &
    374                          ( nu_c + 1.0 )**2 * ql(k,j,i)**2 * xc**2 *            &
    375                          ( 1.0 + phi_au / ( 1.0 - tau_cloud )**2 ) *           &
    376                          rho_surface
    377              autocon   = MIN( autocon, ql(k,j,i) / ( dt_3d *                   &
    378                               weight_substep(intermediate_timestep_count) ) )
    379 !
    380 !--          Tendencies for q, qr, nr, pt:
    381              tend_qr(k,j,i) = tend_qr(k,j,i) + autocon
    382              tend_q(k,j,i)  = tend_q(k,j,i)  - autocon
    383              tend_nr(k,j,i) = tend_nr(k,j,i) + autocon / x0 * hyrho(k)
    384              tend_pt(k,j,i) = tend_pt(k,j,i) + autocon * l_d_cp * pt_d_t(k)
     442             autocon = k_au * ( nu_c + 2.0 ) * ( nu_c + 4.0 ) /    &
     443                       ( nu_c + 1.0 )**2 * qc_1d(k)**2 * xc**2 *   &
     444                       ( 1.0 + phi_au / ( 1.0 - tau_cloud )**2 ) * &
     445                       rho_surface
     446             autocon = MIN( autocon, qc_1d(k) / dt_micro )
     447
     448             qr_1d(k) = qr_1d(k) + autocon * dt_micro
     449             qc_1d(k) = qc_1d(k) - autocon * dt_micro
     450             nr_1d(k) = nr_1d(k) + autocon / x0 * hyrho(k) * dt_micro
    385451
    386452          ENDIF
     
    395461       USE arrays_3d
    396462       USE cloud_parameters
    397        USE constants
    398        USE indices
    399        USE control_parameters
    400        USE statistics
    401        
    402        IMPLICIT NONE
    403 
    404        INTEGER ::  i, j, k
    405        REAL    ::  accr, phi_ac, tau_cloud, k_cr
    406 
    407        DO  k = nzb_2d(j,i)+1, nzt
    408 
    409           IF ( ( ql(k,j,i) > 0.0 )  .AND.  ( qr(k,j,i) > eps_sb ) )  THEN
     463       USE control_parameters
     464       USE indices
     465
     466       IMPLICIT NONE
     467
     468       INTEGER ::  i, j, k
     469       REAL    ::  accr, k_cr, phi_ac, tau_cloud, xc
     470
     471       DO  k = nzb_s_inner(j,i)+1, nzt
     472          IF ( ( qc_1d(k) > eps_sb )  .AND.  ( qr_1d(k) > eps_sb ) )  THEN
    410473!
    411474!--          Intern time scale of coagulation (Seifert and Beheng, 2006):
    412              tau_cloud = 1.0 - ql(k,j,i) / ( ql(k,j,i) + qr(k,j,i) + 1.0E-20)
     475             tau_cloud = 1.0 - qc_1d(k) / ( qc_1d(k) + qr_1d(k) )
    413476!
    414477!--          Universal function for accretion process
     
    421484!--          convert the dissipation (diss) from m2 s-3 to cm2 s-3.
    422485             IF ( turbulence )  THEN
    423                 k_cr = k_cr0 * ( 1.0 + 0.05 *                            &
     486                k_cr = k_cr0 * ( 1.0 + 0.05 *                             &
    424487                                 MIN( 600.0, diss(k,j,i) * 1.0E4 )**0.25 )
    425488             ELSE
     
    428491!
    429492!--          Accretion rate (Seifert and Beheng, 2006):
    430              accr = k_cr * ql(k,j,i) * qr(k,j,i) * phi_ac *              &
     493             accr = k_cr * qc_1d(k) * qr_1d(k) * phi_ac *                 &
    431494                    SQRT( rho_surface * hyrho(k) )
    432              accr = MIN( accr, ql(k,j,i) / ( dt_3d *                     &
    433                     weight_substep(intermediate_timestep_count) ) )
    434 !
    435 !--          Tendencies for q, qr, pt:
    436              tend_qr(k,j,i) = tend_qr(k,j,i) + accr
    437              tend_q(k,j,i)  = tend_q(k,j,i)  - accr
    438              tend_pt(k,j,i) = tend_pt(k,j,i) + accr * l_d_cp * pt_d_t(k)
     495             accr = MIN( accr, qc_1d(k) / dt_micro )
     496
     497             qr_1d(k) = qr_1d(k) + accr * dt_micro
     498             qc_1d(k) = qc_1d(k) - accr * dt_micro
    439499
    440500          ENDIF
     
    449509       USE arrays_3d
    450510       USE cloud_parameters
    451        USE constants
    452        USE indices
    453        USE control_parameters
    454        USE statistics
     511       USE control_parameters
     512       USE indices
    455513   
    456514       IMPLICIT NONE
    457515
    458516       INTEGER ::  i, j, k
    459        REAL    ::  selfcoll, breakup, phi_br, phi_sc
    460 
    461 
    462        DO  k = nzb_2d(j,i)+1, nzt
    463 
    464           IF ( qr(k,j,i) > eps_sb )  THEN
    465 !
    466 !--          Selfcollection rate (Seifert and Beheng, 2006):
    467 !--          pirho_l**( 1.0 / 3.0 ) is necessary to convert [lambda_r] = m-1 to
    468 !--          kg**( 1.0 / 3.0 ).
    469              phi_sc = 1.0 !( 1.0 + kappa_rr / lambda_r(k) *                        &
    470                       !pirho_l**( 1.0 / 3.0 ) )**( -9 )
    471 
    472              selfcoll = k_rr * nr(k,j,i) * qr(k,j,i) * phi_sc *               &
     517       REAL    ::  breakup, dr, phi_br, selfcoll
     518
     519       DO  k = nzb_s_inner(j,i)+1, nzt
     520          IF ( qr_1d(k) > eps_sb )  THEN
     521!
     522!--          Selfcollection rate (Seifert and Beheng, 2001):
     523             selfcoll = k_rr * nr_1d(k) * qr_1d(k) *         &
    473524                        SQRT( hyrho(k) * rho_surface )
    474525!
     526!--          Weight averaged diameter of rain drops:
     527             dr = ( hyrho(k) * qr_1d(k) / nr_1d(k) * dpirho_l )**( 1.0 / 3.0 )
     528!
    475529!--          Collisional breakup rate (Seifert, 2008):
    476              IF ( dr(k) >= 0.3E-3 )  THEN
    477                 phi_br  = k_br * ( dr(k) - 1.1E-3 )
     530             IF ( dr >= 0.3E-3 )  THEN
     531                phi_br  = k_br * ( dr - 1.1E-3 )
    478532                breakup = selfcoll * ( phi_br + 1.0 )
    479533             ELSE
     
    481535             ENDIF
    482536
    483              selfcoll =  MAX( breakup - selfcoll, -nr(k,j,i) / ( dt_3d *      &
    484                               weight_substep(intermediate_timestep_count) ) )
    485 !
    486 !--          Tendency for nr:
    487              tend_nr(k,j,i) = tend_nr(k,j,i) + selfcoll
     537             selfcoll = MAX( breakup - selfcoll, -nr_1d(k) / dt_micro )
     538             nr_1d(k) = nr_1d(k) + selfcoll * dt_micro
    488539
    489540          ENDIF         
    490 
    491541       ENDDO
    492542
     
    502552       USE cloud_parameters
    503553       USE constants
    504        USE indices
    505        USE control_parameters
    506        USE statistics
    507 
    508        IMPLICIT NONE
    509 
    510        INTEGER ::  i, j, k
    511        REAL    ::  evap, alpha, e_s, q_s, t_l, sat, temp, g_evap, f_vent, &
    512                    mu_r_2, mu_r_5d2, nr_0
    513 
    514 
    515        DO  k = nzb_2d(j,i)+1, nzt
    516 
    517           IF ( qr(k,j,i) > eps_sb )  THEN
     554       USE control_parameters
     555       USE indices
     556
     557       IMPLICIT NONE
     558
     559       INTEGER ::  i, j, k
     560       REAL    ::  alpha, dr, e_s, evap, evap_nr, f_vent, g_evap, lambda_r, &
     561                   mu_r, mu_r_2, mu_r_5d2, nr_0, q_s, sat, t_l, temp, xr
     562
     563       DO  k = nzb_s_inner(j,i)+1, nzt
     564          IF ( qr_1d(k) > eps_sb )  THEN
    518565!
    519566!--          Actual liquid water temperature:
    520              t_l = t_d_pt(k) * pt(k,j,i)
     567             t_l = t_d_pt(k) * pt_1d(k)
    521568!
    522569!--          Saturation vapor pressure at t_l:
     
    526573             q_s = 0.622 * e_s / ( hyp(k) - 0.378 * e_s )
    527574             alpha = 0.622 * l_d_r * l_d_cp / ( t_l * t_l )
    528              q_s = q_s * ( 1.0 + alpha * q(k,j,i) ) / ( 1.0 + alpha * q_s )
     575             q_s = q_s * ( 1.0 + alpha * q_1d(k) ) / ( 1.0 + alpha * q_s )
    529576!
    530577!--          Supersaturation:
    531              sat = MIN( 0.0, ( q(k,j,i) - ql(k,j,i) ) / q_s - 1.0 )
     578             sat = MIN( 0.0, ( q_1d(k) - qr_1d(k) - qc_1d(k) ) / q_s - 1.0 )
    532579!
    533580!--          Actual temperature:
    534              temp = t_l + l_d_cp * ql(k,j,i)
    535 !
    536 !--         
    537              g_evap = ( l_v / ( r_v * temp ) - 1.0 ) * l_v /                  &
    538                       ( thermal_conductivity_l * temp ) + rho_l * r_v * temp /&
    539                       ( diff_coeff_l * e_s )
    540              g_evap = 1.0 / g_evap
     581             temp = t_l + l_d_cp * ( qc_1d(k) + qr_1d(k) )
     582   
     583             g_evap = 1.0 / ( ( l_v / ( r_v * temp ) - 1.0 ) * l_v /   &
     584                      ( thermal_conductivity_l * temp ) + r_v * temp / &
     585                      ( diff_coeff_l * e_s ) )
     586!
     587!--          Mean weight of rain drops
     588             xr = hyrho(k) * qr_1d(k) / nr_1d(k)
     589!
     590!--          Weight averaged diameter of rain drops:
     591             dr = ( xr * dpirho_l )**( 1.0 / 3.0 )
    541592!
    542593!--          Compute ventilation factor and intercept parameter
    543594!--          (Seifert and Beheng, 2006; Seifert, 2008):
    544595             IF ( ventilation_effect )  THEN
    545                 mu_r_2   = mu_r(k) + 2.0
    546                 mu_r_5d2 = mu_r(k) + 2.5
     596!
     597!--             Shape parameter of gamma distribution (Milbrandt and Yau, 2005;
     598!--             Stevens and Seifert, 2008):
     599                mu_r = 10.0 * ( 1.0 + TANH( 1.2E3 * ( dr - 1.4E-3 ) ) )
     600!
     601!--             Slope parameter of gamma distribution (Seifert, 2008):
     602                lambda_r = ( ( mu_r + 3.0 ) * ( mu_r + 2.0 ) *       &
     603                             ( mu_r + 1.0 ) )**( 1.0 / 3.0 ) / dr
     604
     605                mu_r_2   = mu_r + 2.0
     606                mu_r_5d2 = mu_r + 2.5
    547607                f_vent = a_vent * gamm( mu_r_2 ) *                            &
    548                          lambda_r(k)**( -mu_r_2 ) +                           &
     608                         lambda_r**( -mu_r_2 ) +                              &
    549609                         b_vent * schmidt_p_1d3 *                             &
    550610                         SQRT( a_term / kin_vis_air ) * gamm( mu_r_5d2 ) *    &
    551                          lambda_r(k)**( -mu_r_5d2 ) *                         &
     611                         lambda_r**( -mu_r_5d2 ) *                            &
    552612                         ( 1.0 - 0.5 * ( b_term / a_term ) *                  &
    553                          ( lambda_r(k) /                                      &
    554                          (       c_term + lambda_r(k) ) )**mu_r_5d2 -         &
     613                         ( lambda_r /                                         &
     614                         (       c_term + lambda_r ) )**mu_r_5d2 -            &
    555615                                 0.125 * ( b_term / a_term )**2 *             &
    556                          ( lambda_r(k) /                                      &
    557                          ( 2.0 * c_term + lambda_r(k) ) )**mu_r_5d2 -         &
     616                         ( lambda_r /                                         &
     617                         ( 2.0 * c_term + lambda_r ) )**mu_r_5d2 -            &
    558618                                 0.0625 * ( b_term / a_term )**3 *            &
    559                          ( lambda_r(k) /                                      &
    560                          ( 3.0 * c_term + lambda_r(k) ) )**mu_r_5d2 -         &
     619                         ( lambda_r /                                         &
     620                         ( 3.0 * c_term + lambda_r ) )**mu_r_5d2 -            &
    561621                                 0.0390625 * ( b_term / a_term )**4 *         &
    562                          ( lambda_r(k) /                                      &
    563                          ( 4.0 * c_term + lambda_r(k) ) )**mu_r_5d2 )
    564                 nr_0   = nr(k,j,i) * lambda_r(k)**( mu_r(k) + 1.0 ) /         &
    565                          gamm( mu_r(k) + 1.0 )
     622                         ( lambda_r /                                         &
     623                         ( 4.0 * c_term + lambda_r ) )**mu_r_5d2 )
     624                nr_0   = nr_1d(k) * lambda_r**( mu_r + 1.0 ) /                &
     625                         gamm( mu_r + 1.0 )
    566626             ELSE
    567627                f_vent = 1.0
    568                 nr_0   = nr(k,j,i) * dr(k)
     628                nr_0   = nr_1d(k) * dr
    569629             ENDIF
    570630!
     
    572632             evap = 2.0 * pi * nr_0 * g_evap * f_vent * sat /    &
    573633                    hyrho(k)
    574              evap = MAX( evap, -qr(k,j,i) / ( dt_3d *            &
    575                          weight_substep(intermediate_timestep_count) ) )
    576 !
    577 !--          Tendencies for q, qr, nr, pt:
    578              tend_qr(k,j,i) = tend_qr(k,j,i) + evap
    579              tend_q(k,j,i)  = tend_q(k,j,i)  - evap
    580              tend_nr(k,j,i) = tend_nr(k,j,i) + c_evap * evap / xr(k) * hyrho(k)
    581              tend_pt(k,j,i) = tend_pt(k,j,i) + evap * l_d_cp * pt_d_t(k)
    582 
     634
     635             evap    = MAX( evap, -qr_1d(k) / dt_micro )
     636             evap_nr = MAX( c_evap * evap / xr * hyrho(k), &
     637                            -nr_1d(k) / dt_micro )
     638
     639             qr_1d(k) = qr_1d(k) + evap * dt_micro
     640             nr_1d(k) = nr_1d(k) + evap_nr * dt_micro
    583641          ENDIF         
    584642
     
    593651       USE cloud_parameters
    594652       USE constants
    595        USE indices
    596        USE control_parameters
     653       USE control_parameters
     654       USE indices
    597655       
    598656       IMPLICIT NONE
    599657
    600658       INTEGER ::  i, j, k
    601        REAL    ::  sed_q_const, sigma_gc = 1.3, k_st = 1.2E8
     659       REAL    ::  sed_qc_const
     660
     661       REAL, DIMENSION(nzb:nzt+1) :: sed_qc
    602662
    603663!
    604664!--    Sedimentation of cloud droplets (Heus et al., 2010):
    605        sed_q_const = k_st * ( 3.0 / ( 4.0 * pi * rho_l ))**( 2.0 / 3.0 ) *    &
     665       sed_qc_const = k_st * ( 3.0 / ( 4.0 * pi * rho_l ))**( 2.0 / 3.0 ) *   &
    606666                     EXP( 5.0 * LOG( sigma_gc )**2 )
    607667
    608        sed_q = 0.0
    609 
    610        DO  k = nzb_2d(j,i)+1, nzt
    611           IF ( ql(k,j,i) > 0.0 )  THEN
    612              sed_q(k) = sed_q_const * nc**( -2.0 / 3.0 ) *                    &
    613                         ( ql(k,j,i) * hyrho(k) )**( 5.0 / 3.0 )
     668       sed_qc(nzt+1) = 0.0
     669
     670       DO  k = nzt, nzb_s_inner(j,i)+1, -1
     671          IF ( qc_1d(k) > eps_sb )  THEN
     672             sed_qc(k) = sed_qc_const * nc_1d(k)**( -2.0 / 3.0 ) * &
     673                        ( qc_1d(k) * hyrho(k) )**( 5.0 / 3.0 )
     674          ELSE
     675             sed_qc(k) = 0.0
    614676          ENDIF
    615        ENDDO
    616 !
    617 !--    Tendency for q, pt:
    618        DO  k = nzb_2d(j,i)+1, nzt
    619           tend_q(k,j,i)  = tend_q(k,j,i) + ( sed_q(k+1) - sed_q(k) ) *        &
    620                            ddzu(k+1) / hyrho(k)
    621           tend_pt(k,j,i) = tend_pt(k,j,i) - ( sed_q(k+1) - sed_q(k) ) *       &
    622                            ddzu(k+1) / hyrho(k) * l_d_cp * pt_d_t(k)
     677
     678          sed_qc(k) = MIN( sed_qc(k), hyrho(k) * dzu(k+1) * q_1d(k) /     &
     679                                      dt_micro + sed_qc(k+1) )
     680
     681          q_1d(k)  = q_1d(k)  + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /  &
     682                                hyrho(k) * dt_micro
     683          qc_1d(k) = qc_1d(k) + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) / &
     684                                hyrho(k) * dt_micro
     685          pt_1d(k) = pt_1d(k) - ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) / &
     686                                hyrho(k) * l_d_cp * pt_d_t(k) * dt_micro
     687
    623688       ENDDO
    624689
     
    631696       USE cloud_parameters
    632697       USE constants
    633        USE indices
    634        USE control_parameters
     698       USE control_parameters
     699       USE indices
    635700       USE statistics
    636701       
     
    638703
    639704       INTEGER ::  i, j, k, k_run
    640        REAL    ::  c_run, d_max, d_mean, d_min, dt_sedi, flux, z_run
    641 
    642        REAL, DIMENSION(nzb:nzt) :: c_nr, c_qr, nr_slope, qr_slope, w_nr, w_qr
    643 
     705       REAL    ::  c_run, d_max, d_mean, d_min, dr, dt_sedi, flux, lambda_r,  &
     706                   mu_r, z_run
     707
     708       REAL, DIMENSION(nzb:nzt+1) :: c_nr, c_qr, d_nr, d_qr, nr_slope,        &
     709                                     qr_slope, sed_nr, sed_qr, w_nr, w_qr
    644710!
    645711!--    Computation of sedimentation flux. Implementation according to Stevens
    646712!--    and Seifert (2008).
    647713       IF ( intermediate_timestep_count == 1 )  prr(:,j,i) = 0.0
    648 
    649        dt_sedi = dt_3d * weight_substep(intermediate_timestep_count)
    650 
    651        w_nr = 0.0
    652        w_qr = 0.0
    653714!
    654715!--    Compute velocities
    655716       DO  k = nzb_s_inner(j,i)+1, nzt
    656           IF ( qr(k,j,i) > eps_sb )  THEN
     717          IF ( qr_1d(k) > eps_sb )  THEN
     718!
     719!--          Weight averaged diameter of rain drops:
     720             dr = ( hyrho(k) * qr_1d(k) / nr_1d(k) * dpirho_l )**( 1.0 / 3.0 )
     721!
     722!--          Shape parameter of gamma distribution (Milbrandt and Yau, 2005;
     723!--          Stevens and Seifert, 2008):
     724             mu_r = 10.0 * ( 1.0 + TANH( 1.2E3 * ( dr - 1.4E-3 ) ) )
     725!
     726!--          Slope parameter of gamma distribution (Seifert, 2008):
     727             lambda_r = ( ( mu_r + 3.0 ) * ( mu_r + 2.0 ) *          &
     728                        ( mu_r + 1.0 ) )**( 1.0 / 3.0 ) / dr
     729
    657730             w_nr(k) = MAX( 0.1, MIN( 20.0, a_term - b_term * ( 1.0 +          &
    658                        c_term / lambda_r(k) )**( -1.0 * ( mu_r(k) + 1.0 ) ) ) )
     731                       c_term / lambda_r )**( -1.0 * ( mu_r + 1.0 ) ) ) )
    659732             w_qr(k) = MAX( 0.1, MIN( 20.0, a_term - b_term * ( 1.0 +          &
    660                        c_term / lambda_r(k) )**( -1.0 * ( mu_r(k) + 4.0 ) ) ) )
     733                       c_term / lambda_r )**( -1.0 * ( mu_r + 4.0 ) ) ) )
    661734          ELSE
    662735             w_nr(k) = 0.0
     
    666739!
    667740!--    Adjust boundary values
    668        w_nr(nzb_2d(j,i)) = w_nr(nzb_2d(j,i)+1)
    669        w_qr(nzb_2d(j,i)) = w_qr(nzb_2d(j,i)+1)
    670        w_nr(nzt) = w_nr(nzt-1)
    671        w_qr(nzt) = w_qr(nzt-1)
     741       w_nr(nzb_s_inner(j,i)) = w_nr(nzb_s_inner(j,i)+1)
     742       w_qr(nzb_s_inner(j,i)) = w_qr(nzb_s_inner(j,i)+1)
     743       w_nr(nzt+1) = 0.0
     744       w_qr(nzt+1) = 0.0
    672745!
    673746!--    Compute Courant number
    674        DO  k = nzb_s_inner(j,i)+1, nzt-1
     747       DO  k = nzb_s_inner(j,i)+1, nzt
    675748          c_nr(k) = 0.25 * ( w_nr(k-1) + 2.0 * w_nr(k) + w_nr(k+1) ) * &
    676                     dt_sedi * ddzu(k)
     749                    dt_micro * ddzu(k)
    677750          c_qr(k) = 0.25 * ( w_qr(k-1) + 2.0 * w_qr(k) + w_qr(k+1) ) * &
    678                     dt_sedi * ddzu(k)
    679        ENDDO
     751                    dt_micro * ddzu(k)
     752       ENDDO     
    680753!
    681754!--    Limit slopes with monotonized centered (MC) limiter (van Leer, 1977):
    682755       IF ( limiter_sedimentation )  THEN
    683756
    684           qr(nzb_s_inner(j,i),j,i) = 0.0
    685           nr(nzb_s_inner(j,i),j,i) = 0.0
    686           qr(nzt,j,i) = 0.0
    687           nr(nzt,j,i) = 0.0
    688 
    689           DO k = nzb_s_inner(j,i)+1, nzt-1
    690              d_mean = 0.5 * ( qr(k+1,j,i) + qr(k-1,j,i) )
    691              d_min  = qr(k,j,i) - MIN( qr(k+1,j,i), qr(k,j,i), qr(k-1,j,i) )
    692              d_max  = MAX( qr(k+1,j,i), qr(k,j,i), qr(k-1,j,i) ) - qr(k,j,i)
     757          DO k = nzb_s_inner(j,i)+1, nzt
     758             d_mean = 0.5 * ( qr_1d(k+1) + qr_1d(k-1) )
     759             d_min  = qr_1d(k) - MIN( qr_1d(k+1), qr_1d(k), qr_1d(k-1) )
     760             d_max  = MAX( qr_1d(k+1), qr_1d(k), qr_1d(k-1) ) - qr_1d(k)
    693761
    694762             qr_slope(k) = SIGN(1.0, d_mean) * MIN ( 2.0 * d_min, 2.0 * d_max, &
    695763                                                     ABS( d_mean ) )
    696764
    697              d_mean = 0.5 * ( nr(k+1,j,i) + nr(k-1,j,i) )
    698              d_min  = nr(k,j,i) - MIN( nr(k+1,j,i), nr(k,j,i), nr(k-1,j,i) )
    699              d_max  = MAX( nr(k+1,j,i), nr(k,j,i), nr(k-1,j,i) ) - nr(k,j,i)
     765             d_mean = 0.5 * ( nr_1d(k+1) + nr_1d(k-1) )
     766             d_min  = nr_1d(k) - MIN( nr_1d(k+1), nr_1d(k), nr_1d(k-1) )
     767             d_max  = MAX( nr_1d(k+1), nr_1d(k), nr_1d(k-1) ) - nr_1d(k)
    700768
    701769             nr_slope(k) = SIGN(1.0, d_mean) * MIN ( 2.0 * d_min, 2.0 * d_max, &
     
    709777
    710778       ENDIF
     779
     780       sed_nr(nzt+1) = 0.0
     781       sed_qr(nzt+1) = 0.0
    711782!
    712783!--    Compute sedimentation flux
    713        DO  k = nzt-2, nzb_s_inner(j,i)+1, -1
     784       DO  k = nzt, nzb_s_inner(j,i)+1, -1
    714785!
    715786!--       Sum up all rain drop number densities which contribute to the flux
     
    719790          k_run = k
    720791          c_run = MIN( 1.0, c_nr(k) )
    721           DO WHILE ( c_run > 0.0  .AND.  k_run <= nzt-1 )
     792          DO WHILE ( c_run > 0.0  .AND.  k_run <= nzt )
    722793             flux  = flux + hyrho(k_run) *                                    &
    723                      ( nr(k_run,j,i) + nr_slope(k_run) * ( 1.0 - c_run ) *    &
     794                     ( nr_1d(k_run) + nr_slope(k_run) * ( 1.0 - c_run ) *     &
    724795                     0.5 ) * c_run * dzu(k_run)
    725796             z_run = z_run + dzu(k_run)
     
    731802!--       available
    732803          flux = MIN( flux,                                                   &
    733                       hyrho(k) * dzu(k) * nr(k,j,i) + sed_nr(k+1) * dt_sedi )
    734 
    735           sed_nr(k)      = flux / dt_sedi
    736           tend_nr(k,j,i) = tend_nr(k,j,i) + ( sed_nr(k+1) - sed_nr(k) ) *     &
    737                                             ddzu(k+1) / hyrho(k)
     804                      hyrho(k) * dzu(k+1) * nr_1d(k) + sed_nr(k+1) * dt_micro )
     805
     806          sed_nr(k) = flux / dt_micro
     807          nr_1d(k)  = nr_1d(k) + ( sed_nr(k+1) - sed_nr(k) ) * ddzu(k+1) /    &
     808                                 hyrho(k) * dt_micro
    738809!
    739810!--       Sum up all rain water content which contributes to the flux
     
    747818
    748819             flux  = flux + hyrho(k_run) *                                    &
    749                      ( qr(k_run,j,i) + qr_slope(k_run) * ( 1.0 - c_run ) *    &
     820                     ( qr_1d(k_run) + qr_slope(k_run) * ( 1.0 - c_run ) *    &
    750821                     0.5 ) * c_run * dzu(k_run)
    751822             z_run = z_run + dzu(k_run)
     
    757828!--       It is not allowed to sediment more rain water content than available
    758829          flux = MIN( flux,                                                   &
    759                       hyrho(k) * dzu(k) * qr(k,j,i) + sed_qr(k+1) * dt_sedi )
    760 
    761           sed_qr(k)      = flux / dt_sedi
    762           tend_qr(k,j,i) = tend_qr(k,j,i) + ( sed_qr(k+1) - sed_qr(k) ) *     &
    763                                             ddzu(k+1) / hyrho(k)
     830                      hyrho(k) * dzu(k) * qr_1d(k) + sed_qr(k+1) * dt_micro )
     831
     832          sed_qr(k) = flux / dt_micro
     833
     834          qr_1d(k) = qr_1d(k) + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) / &
     835                                hyrho(k) * dt_micro
     836          q_1d(k)  = q_1d(k)  + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) / &
     837                                hyrho(k) * dt_micro
     838          pt_1d(k) = pt_1d(k) - ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) / &
     839                                hyrho(k) * l_d_cp * pt_d_t(k) * dt_micro
    764840!
    765841!--       Compute the rain rate
    766842          prr(k,j,i) = prr(k,j,i) + sed_qr(k) / hyrho(k) *                    &
    767                        weight_substep(intermediate_timestep_count)
    768        ENDDO
     843                       weight_substep(intermediate_timestep_count)
     844       ENDDO
     845
    769846!
    770847!--    Precipitation amount
     
    774851
    775852          precipitation_amount(j,i) = precipitation_amount(j,i) +   &
    776                                       prr(nzb_2d(j,i)+1,j,i) *      &
    777                                       hyrho(nzb_2d(j,i)+1) * dt_3d
     853                                      prr(nzb_s_inner(j,i)+1,j,i) *      &
     854                                      hyrho(nzb_s_inner(j,i)+1) * dt_3d
    778855       ENDIF
    779856
  • palm/trunk/SOURCE/modules.f90

    r1114 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! unused variables removed
    2323!
    2424! Former revisions:
     
    408408          c_u_m, c_u_m_l, c_v_m, c_v_m_l, c_w_m, c_w_m_l, ddzu, ddzu_pres,     &
    409409          dd2zu, dzu, ddzw, dzw, hyp, inflow_damping_factor, lad, l_grid,      &
    410           nr_init, ptdf_x, ptdf_y, pt_init, q_init, qr_init, rdf, rdf_sc,      &
    411           sa_init, ug, u_init, u_nzb_p1_for_vfc, vg, v_init, v_nzb_p1_for_vfc, &
    412           w_subs, zu, zw
     410          nc_1d, nr_1d, ptdf_x, ptdf_y, pt_1d, pt_init, q_1d, q_init, qc_1d,   &
     411          qr_1d, rdf, rdf_sc, sa_init, ug, u_init, u_nzb_p1_for_vfc, vg,      &
     412          v_init, v_nzb_p1_for_vfc, w_subs, zu, zw
    413413
    414414    REAL, DIMENSION(:,:), ALLOCATABLE ::                                       &
     
    430430          tend_nr, tend_q, tend_qr, tric, u_m_l, u_m_n, u_m_r, u_m_s, v_m_l,   &
    431431          v_m_n, v_m_r, v_m_s, w_m_l, w_m_n, w_m_r, w_m_s
    432            
    433432
    434433#if defined( __nopointer )
    435434    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                             &
    436           e, e_p, nr, nr_p, p, prho, pt, pt_p, q, q_p, ql, ql_c, ql_v, ql_vp,  &
    437           qr, qr_p, rho, sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m, tsa_m,     &
    438           tu_m, tv_m, tw_m, u, u_p, v, v_p, vpt, w, w_p
     435          e, e_p, nr, nr_p, p, prho, pt, pt_p, q, q_p, qc, ql, ql_c, ql_v,     &
     436          ql_vp, qr, qr_p, rho, sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m,     &
     437          tsa_m, tu_m, tv_m, tw_m, u, u_p, v, v_p, vpt, w, w_p
    439438#else
    440439    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                             &
    441440          e_1, e_2, e_3, p, prho_1, nr_1, nr_2, nr_3, pt_1, pt_2, pt_3, q_1,   &
    442           q_2, q_3, ql_v, ql_vp, ql_1, ql_2, qr_1, qr_2, qr_3, rho_1, sa_1,    &
    443           sa_2, sa_3, u_1, u_2, u_3, v_1, v_2, v_3, vpt_1, w_1, w_2, w_3
     441          q_2, q_3, qc_1, ql_v, ql_vp, ql_1, ql_2, qr_1, qr_2, qr_3, rho_1,    &
     442          sa_1, sa_2, sa_3, u_1, u_2, u_3, v_1, v_2, v_3, vpt_1, w_1, w_2, w_3
    444443
    445444    REAL, DIMENSION(:,:,:), POINTER ::                                         &
    446           e, e_p, nr, nr_p, prho, pt, pt_p, q, q_p, ql, ql_c, qr, qr_p, rho,   &
    447           sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m, tsa_m, tu_m, tv_m, tw_m,  &
    448           u, u_p, v, v_p, vpt, w, w_p
     445          e, e_p, nr, nr_p, prho, pt, pt_p, q, q_p, qc, ql, ql_c, qr, qr_p,    &
     446          rho, sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m, tsa_m, tu_m, tv_m,   &
     447          tw_m, u, u_p, v, v_p, vpt, w, w_p
    449448#endif
    450449
     
    474473
    475474    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: &
    476           e_av, lpt_av, nr_av, p_av, pc_av, pr_av, prr_av, pt_av, q_av, ql_av, &
    477           ql_c_av, ql_v_av, ql_vp_av, qr_av, qv_av, rho_av, s_av, sa_av, u_av, &
    478           v_av, vpt_av, w_av
     475          e_av, lpt_av, nr_av, p_av, pc_av, pr_av, prr_av, pt_av, q_av, qc_av, &
     476          ql_av, ql_c_av, ql_v_av, ql_vp_av, qr_av, qv_av, rho_av, s_av, sa_av,&
     477          u_av, v_av, vpt_av, w_av
    479478 
    480479 END MODULE averaging
     
    525524             eps_ros = 1.0E-4,  & ! accuracy of Rosenbrock method
    526525             eps_sb = 1.0E-20,  & ! threshold in two-moments scheme
    527              k_cc = 9.44E09,    & ! const. rain-rain kernel (m3 kg-2 s-1)
     526             k_cc = 9.44E09,    & ! const. cloud-cloud kernel (m3 kg-2 s-1)
    528527             k_cr0 = 4.33,      & ! const. cloud-rain kernel (m3 kg-1 s-1)
    529528             k_rr = 7.12,       & ! const. rain-rain kernel (m3 kg-1 s-1)
    530529             k_br = 1000.,      & ! const. in breakup parametrization (m-1)
     530             k_st = 1.2E8,      & ! const. in drizzle parametrization (m-1 s-1)
    531531             kappa_rr = 60.7,   & ! const. in collision kernel (kg-1/3)
    532532             kin_vis_air = 1.4086E-5, & ! kin. viscosity of air (m2 s-1)
     
    536536             molecular_weight_of_solute = 0.05844, & ! mol. m. NaCl (kg mol-1)
    537537             molecular_weight_of_water = 0.01801528, & ! mol. m. H2O (kg mol-1)
    538              nc = 70.0E6,       & ! cloud droplet concentration
     538             nc_const = 70.0E6, & ! cloud droplet concentration
    539539             prec_time_const = 0.001, & !coef. in Kessler scheme
    540540             pirho_l, dpirho_l, & ! pi * rho_l / 6.0; 6.0 / ( pi * rho_l )
     
    545545             schmidt = 0.71,    & ! Schmidt number
    546546             schmidt_p_1d3,     & ! schmidt**( 1.0 / 3.0 )
     547             sigma_gc = 1.3,    & ! log-normal geometric standard deviation
    547548             stp = 2.5066282746310005, & ! parameter in gamma function
    548549             thermal_conductivity_l = 2.43E-2, & ! therm. cond. air (J m-1 s-1 K-1)
     
    554555             w_precipitation = 9.65      ! maximum terminal velocity (m s-1)
    555556
    556     REAL, DIMENSION(:), ALLOCATABLE     ::  dr, hyrho, lambda_r, mu_r, pt_d_t, &
    557                                             sed_nr, sed_q, sed_qr, t_d_pt, xr 
     557    REAL, DIMENSION(:), ALLOCATABLE     ::  hyrho, pt_d_t, t_d_pt 
    558558
    559559    REAL, DIMENSION(:,:), ALLOCATABLE   ::  precipitation_amount, &
     
    630630                             scalar_advec = 'ws-scheme'
    631631    CHARACTER (LEN=20)   ::  bc_e_b = 'neumann', bc_lr = 'cyclic', &
    632                              bc_nr_b = 'neumann', bc_nr_t = 'neumann', &
    633632                             bc_ns = 'cyclic', bc_p_b = 'neumann', &
    634633                             bc_p_t = 'dirichlet', bc_pt_b = 'dirichlet', &
    635634                             bc_pt_t = 'initial_gradient', &
    636635                             bc_q_b = 'dirichlet', bc_q_t = 'neumann', &
    637                              bc_qr_b = 'neumann', bc_qr_t = 'neumann',&
    638636                             bc_s_b = 'dirichlet', bc_s_t = 'neumann', &
    639637                             bc_sa_t = 'neumann', &
     
    681679                dp_level_ind_b = 0, dvrp_filecount = 0, &
    682680                dz_stretch_level_index, gamma_mg, gathered_size, &
    683                 grid_level, ibc_e_b, ibc_nr_b, ibc_nr_t, ibc_p_b, ibc_p_t, &
    684                 ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, ibc_qr_b, ibc_qr_t, &
     681                grid_level, ibc_e_b, ibc_p_b, ibc_p_t, &
     682                ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, &
    685683                ibc_sa_t, ibc_uv_b, ibc_uv_t, icloud_scheme, &
    686684                inflow_disturbance_begin = -1, inflow_disturbance_end = -1, &
     
    705703                mask_size(max_masks,3) = -1, mask_size_l(max_masks,3) = -1, &
    706704                mask_start_l(max_masks,3) = -1, &
    707                 nr_vertical_gradient_level_ind(10) = -9999, &
    708705                pt_vertical_gradient_level_ind(10) = -9999, &
    709706                q_vertical_gradient_level_ind(10) = -9999, &
    710                 qr_vertical_gradient_level_ind(10) = -9999, &
    711707                sa_vertical_gradient_level_ind(10) = -9999, &
    712708                section(100,3), section_xy(100) = -9999, &
     
    738734                constant_top_momentumflux = .FALSE., &
    739735                constant_top_salinityflux = .TRUE., &
    740                 constant_waterflux = .TRUE., constant_waterflux_nr = .TRUE., &
    741                 constant_waterflux_qr = .TRUE., create_disturbances = .TRUE., &
     736                constant_waterflux = .TRUE., create_disturbances = .TRUE., &
    742737                data_output_2d_on_each_pe = .TRUE., &
    743738                dissipation_control = .FALSE., disturbance_created = .FALSE., &
     
    779774             averaging_interval = 0.0, averaging_interval_pr = 9999999.9, &
    780775             averaging_interval_sp = 9999999.9, bc_pt_t_val, bc_q_t_val, &
    781              bc_qr_t_val, bc_nr_t_val, bottom_salinityflux = 0.0, &
     776             bottom_salinityflux = 0.0, &
    782777             building_height = 50.0, building_length_x = 50.0, &
    783778             building_length_y = 50.0, building_wall_left = 9999999.9, &
     
    799794             dt_do2d_xy = 9999999.9, dt_do2d_xz = 9999999.9, &
    800795             dt_do2d_yz = 9999999.9, dt_do3d = 9999999.9, dt_dvrp = 9999999.9, &
    801              dt_max = 20.0, dt_restart = 9999999.9, &
     796             dt_max = 20.0, dt_micro = -1.0, dt_restart = 9999999.9, &
    802797             dt_run_control = 60.0, dt_3d = -1.0, dz = -1.0, &
    803798             dz_max = 9999999.9, dz_stretch_factor = 1.08, &
     
    810805             maximum_cpu_time_allowed = 0.0,  &
    811806             molecular_viscosity = 1.461E-5, &
    812              nr_surface = 0.0, nr_surface_initial_change = 0.0, &
    813807             old_dt = 1.0E-10, omega = 7.29212E-5, omega_sor = 1.8, &
    814808             particle_maximum_age = 9999999.9, &
     
    819813             pt_surface = 300.0, pt_surface_initial_change = 0.0, &
    820814             q_surface = 0.0, q_surface_initial_change = 0.0, &
    821              qr_surface = 0.0, qr_surface_initial_change = 0.0, &
    822815             rayleigh_damping_factor = -1.0, rayleigh_damping_height = -1.0, &
    823816             recycling_width = 9999999.9, residual_limit = 1.0E-4, &
     
    832825             surface_heatflux = 9999999.9, surface_pressure = 1013.25, &
    833826             surface_scalarflux = 9999999.9, surface_waterflux = 9999999.9, &
    834              surface_waterflux_nr = 0.0, surface_waterflux_qr = 0.0, &
    835827             s_surface = 0.0, s_surface_initial_change = 0.0, &
    836828             termination_time_needed = -1.0, time_coupling = 0.0, &
     
    854846             lad_vertical_gradient_level(10) = -9999999.9, &
    855847             mask_scale(3), &
    856              nr_vertical_gradient(10) = 0.0, &
    857              nr_vertical_gradient_level(10) = -1.0, &
    858848             pt_vertical_gradient(10) = 0.0, &
    859849             pt_vertical_gradient_level(10) = -9999999.9, &
    860850             q_vertical_gradient(10) = 0.0, &
    861851             q_vertical_gradient_level(10) = -1.0, &
    862              qr_vertical_gradient(10) = 0.0, &
    863              qr_vertical_gradient_level(10) = -1.0, &
    864852             s_vertical_gradient(10) = 0.0, &
    865853             s_vertical_gradient_level(10) = -1.0, &
     
    877865             volume_flow(1:2) = 0.0, volume_flow_area(1:2) = 0.0, &
    878866             volume_flow_initial(1:2) = 0.0, wall_heatflux(0:4) = 0.0, &
    879              wall_humidityflux(0:4) = 0.0, wall_nrflux(0:4) = 0.0, & 
     867             wall_humidityflux(0:4) = 0.0, wall_nrflux(0:4) = 0.0, &
    880868             wall_qflux(0:4) = 0.0, wall_qrflux(0:4) = 0.0, &
    881869             wall_salinityflux(0:4) = 0.0, wall_scalarflux(0:4) = 0.0, &
  • palm/trunk/SOURCE/parin.f90

    r1093 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! unused variables removed
    2323!
    2424! Former revisions:
     
    224224             loop_optimization, masking_method, mg_cycles, &
    225225             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec, &
    226              nc, netcdf_precision, neutral, ngsrb, nr_surface, &
    227              nr_surface_initial_change, nr_vertical_gradient, &
    228              nr_vertical_gradient_level, nsor, &
     226             nc_const, netcdf_precision, neutral, ngsrb, &
     227             nsor, &
    229228             nsor_ini, nx, ny, nz, ocean, omega, omega_sor, &
    230229             passive_scalar, pch_index, phi, plant_canopy, prandtl_layer, &
     
    234233             pt_vertical_gradient_level, q_surface, q_surface_initial_change, &
    235234             q_vertical_gradient, q_vertical_gradient_level, &
    236              qr_surface, qr_surface_initial_change, &
    237              qr_vertical_gradient, qr_vertical_gradient_level, radiation, &
     235             radiation, &
    238236             random_generator, random_heatflux, rayleigh_damping_factor, &
    239237             rayleigh_damping_height, recycling_width, residual_limit, &
     
    243241             statistic_regions, subs_vertical_gradient, &
    244242             subs_vertical_gradient_level, surface_heatflux, surface_pressure, &
    245              surface_scalarflux, surface_waterflux, surface_waterflux_nr, &
    246              surface_waterflux_qr, s_surface, &
     243             surface_scalarflux, surface_waterflux, &
     244             s_surface, &
    247245             s_surface_initial_change, s_vertical_gradient, &
    248246             s_vertical_gradient_level, timestep_scheme, &
     
    412410!--                  also check the allocate statement in routine read_var_list
    413411             ALLOCATE( lad(0:nz+1),pt_init(0:nz+1), q_init(0:nz+1),           &
    414                        qr_init(0:nz+1), nr_init(0:nz+1),                      &
    415412                       sa_init(0:nz+1), ug(0:nz+1), u_init(0:nz+1),           &
    416413                       v_init(0:nz+1), vg(0:nz+1),                            &
  • palm/trunk/SOURCE/prognostic_equations.f90

    r1112 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! optimized cloud physics: calculation of microphysical tendencies transfered
     23! to microphysics.f90; qr and nr are only calculated if precipitation is required
    2324!
    2425! Former revisions:
     
    229230    IF ( ( ws_scheme_mom .OR. ws_scheme_sca )  .AND.  &
    230231         intermediate_timestep_count == 1 )  CALL ws_statistics
    231 
    232232!
    233233!-- Loop over all prognostic equations
     
    285285
    286286             CALL user_actions( i, j, 'u-tendency' )
    287 
    288287!
    289288!--          Prognostic equation for u-velocity component
     
    341340
    342341             CALL user_actions( i, j, 'v-tendency' )
    343 
    344342!
    345343!--          Prognostic equation for v-velocity component
     
    422420             ENDIF
    423421          ENDIF
    424 
    425 !
    426 !--       If required, calculate tendencies for total water content, rain water
    427 !--       content, rain drop concentration and liquid temperature
    428           IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
    429 
    430              tend_q(:,j,i)  = 0.0
    431              tend_qr(:,j,i) = 0.0
    432              tend_nr(:,j,i) = 0.0
    433              tend_pt(:,j,i) = 0.0
    434 !
    435 !--          Droplet size distribution (dsd) properties are needed for the
    436 !--          computation of selfcollection, breakup, evaporation and
    437 !--          sedimentation of rain
    438              IF ( precipitation )  THEN
    439                 CALL dsd_properties( i,j )
    440                 CALL autoconversion( i,j )
    441                 CALL accretion( i,j )
    442                 CALL selfcollection_breakup( i,j )
    443                 CALL evaporation_rain( i,j )
    444                 CALL sedimentation_rain( i,j )
    445              ENDIF
    446 
    447              IF ( drizzle )  CALL sedimentation_cloud( i,j )
    448 
    449           ENDIF
    450 
     422!
     423!--       If required, calculate tendencies for total water content, liquid water
     424!--       potential temperature, rain water content and rain drop concentration
     425          IF ( cloud_physics  .AND.  icloud_scheme == 0 )  CALL microphysics_control( i, j )
    451426!
    452427!--       If required, compute prognostic equation for potential temperature
     
    650625!--          If required, calculate prognostic equations for rain water content
    651626!--          and rain drop concentration
    652              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
     627             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.              &
     628                  precipitation )  THEN
    653629!
    654630!--             Calculate prognostic equation for rain water content
     
    667643                ENDIF
    668644                CALL diffusion_s( i, j, qr, qrsws, qrswst, wall_qrflux )
    669 
    670645!
    671646!--             Using microphysical tendencies (autoconversion, accretion,
     
    673648                tend(:,j,i) = tend(:,j,i) + tend_qr(:,j,i)
    674649
    675 !
    676 !--             If required, compute influence of large-scale subsidence/ascent
    677                 IF ( large_scale_subsidence )  THEN
    678                    CALL subsidence( i, j, tend, qr, qr_init )
    679                 ENDIF
    680 
    681 !              CALL user_actions( i, j, 'qr-tendency' )
    682 
     650                CALL user_actions( i, j, 'qr-tendency' )
    683651!
    684652!--             Prognostic equation for rain water content
    685653                DO  k = nzb_s_inner(j,i)+1, nzt
    686                    qr_p(k,j,i) = qr(k,j,i) + dt_3d * ( tsc(2) * tend(k,j,i) +    &
    687                                                      tsc(3) * tqr_m(k,j,i) )     &
    688                                          - tsc(5) * rdf_sc(k) *                  &
    689                                         ( qr(k,j,i) - qr_init(k) )
    690                    IF ( qr_p(k,j,i) < 0.0 )  qr_p(k,j,i) = 0.1 * qr(k,j,i)
     654                   qr_p(k,j,i) = qr(k,j,i) + dt_3d * ( tsc(2) * tend(k,j,i) +  &
     655                                                       tsc(3) * tqr_m(k,j,i) ) &
     656                                           - tsc(5) * rdf_sc(k) * qr(k,j,i)
     657                   IF ( qr_p(k,j,i) < 0.0 )  qr_p(k,j,i) = 0.0
    691658                ENDDO
    692659!
     
    711678                IF ( timestep_scheme(1:5) == 'runge' )  THEN
    712679                   IF ( ws_scheme_sca )  THEN
    713                       CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr,       &
    714                                        diss_s_nr, flux_l_nr, diss_l_nr, &
    715                                        i_omp_start, tn )
     680                      CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr,    &
     681                                    diss_s_nr, flux_l_nr, diss_l_nr, &
     682                                    i_omp_start, tn )
    716683                   ELSE
    717684                      CALL advec_s_pw( i, j, nr )
     
    721688                ENDIF
    722689                CALL diffusion_s( i, j, nr, nrsws, nrswst, wall_nrflux )
    723 
     690!
    724691!--             Using microphysical tendencies (autoconversion, accretion,
    725692!--             selfcollection, breakup, evaporation;
     
    727694                tend(:,j,i) = tend(:,j,i) + tend_nr(:,j,i)
    728695
    729 !
    730 !--             If required, compute influence of large-scale subsidence/ascent
    731                 IF ( large_scale_subsidence )  THEN
    732                    CALL subsidence( i, j, tend, nr, nr_init )
    733                 ENDIF
    734 
    735 !                CALL user_actions( i, j, 'nr-tendency' )
    736 
     696                CALL user_actions( i, j, 'nr-tendency' )
    737697!
    738698!--             Prognostic equation for rain drop concentration
    739699                DO  k = nzb_s_inner(j,i)+1, nzt
    740                    nr_p(k,j,i) = nr(k,j,i) + dt_3d * ( tsc(2) * tend(k,j,i) + &
    741                                                   tsc(3) * tnr_m(k,j,i) )     &
    742                                       - tsc(5) * rdf_sc(k) *                  &
    743                                         ( nr(k,j,i) - nr_init(k) )
    744                    IF ( nr_p(k,j,i) < 0.0 )  nr_p(k,j,i) = 0.1 * nr(k,j,i)
     700                   nr_p(k,j,i) = nr(k,j,i) + dt_3d * ( tsc(2) * tend(k,j,i) +  &
     701                                                       tsc(3) * tnr_m(k,j,i) ) &
     702                                           - tsc(5) * rdf_sc(k) * nr(k,j,i)
     703                   IF ( nr_p(k,j,i) < 0.0 )  nr_p(k,j,i) = 0.0
    745704                ENDDO
    746705!
     
    762721             ENDIF
    763722
    764           ENDIF
    765 
     723         ENDIF
    766724!
    767725!--       If required, compute prognostic equation for turbulent kinetic
  • palm/trunk/SOURCE/read_3d_binary.f90

    r1054 r1115  
    2020! Current revisions:
    2121! -----------------
     22! unused variables removed
    2223!
    2324! Former revisions:
     
    283284!--    First compare the version numbers
    284285       READ ( 13 )  version_on_file
    285        binary_version = '3.3'
     286       binary_version = '3.4'
    286287       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
    287288          WRITE( message_string, * ) 'version mismatch concerning data ',      &
     
    432433                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    433434
     435                CASE ( 'nr' )
     436                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     437                   nr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     438                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     439
     440                CASE ( 'nr_av' )
     441                   IF ( .NOT. ALLOCATED( nr_av ) )  THEN
     442                      ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     443                   ENDIF
     444                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     445                   nr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     446                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     447
     448                CASE ( 'nrs' )
     449                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     450                   nrs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     451                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     452
     453                CASE ( 'nrsws' )
     454                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     455                   nrsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     456                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     457
     458                CASE ( 'nrswst' )
     459                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     460                   nrswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     461                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     462
    434463                CASE ( 'p' )
    435464                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    516545                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    517546
     547                CASE ( 'qc' )
     548                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     549                   qc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     550                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     551
     552                CASE ( 'qc_av' )
     553                   IF ( .NOT. ALLOCATED( qc_av ) )  THEN
     554                      ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     555                   ENDIF
     556                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     557                   qc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     558                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     559
    518560                CASE ( 'ql' )
    519561                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    534576                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    535577
    536                 CASE ( 'nr' )
    537                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    538                    nr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    539                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    540 
    541578                CASE ( 'qr_av' )
    542579                   IF ( .NOT. ALLOCATED( qr_av ) )  THEN
     
    547584                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    548585
    549                 CASE ( 'nr_av' )
    550                    IF ( .NOT. ALLOCATED( nr_av ) )  THEN
    551                       ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    552                    ENDIF
    553                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    554                    nr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    555                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    556 
    557586                CASE ( 'qrs' )
    558587                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     
    568597                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    569598                   qrswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    570                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    571 
    572                 CASE ( 'nrs' )
    573                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    574                    nrs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    575                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    576 
    577                 CASE ( 'nrsws' )
    578                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    579                    nrsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    580                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    581 
    582                 CASE ( 'nrswst' )
    583                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    584                    nrswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    585599                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    586600
  • palm/trunk/SOURCE/read_var_list.f90

    r1093 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! unused variables removed
    2323!
    2424! Former revisions:
     
    185185!-- Make version number check first
    186186    READ ( 13 )  version_on_file
    187     binary_version = '3.8'
     187    binary_version = '3.9'
    188188    IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
    189189       WRITE( message_string, * ) 'version mismatch concerning control ', &
     
    251251       ALLOCATE( lad(0:nz+1), ug(0:nz+1), u_init(0:nz+1), vg(0:nz+1),    &
    252252                 v_init(0:nz+1), pt_init(0:nz+1), q_init(0:nz+1),        &
    253                  qr_init(0:nz+1), nr_init(0:nz+1), sa_init(0:nz+1),      &
     253                 sa_init(0:nz+1),                                        &
    254254                 hom(0:nz+1,2,pr_palm+max_pr_user,0:statistic_regions),  &
    255255                 hom_sum(0:nz+1,pr_palm+max_pr_user,0:statistic_regions) )
     
    284284          CASE ( 'bc_ns' )
    285285             READ ( 13 )  bc_ns
    286           CASE ( 'bc_nr_b' )
    287              READ ( 13 )  bc_nr_b
    288           CASE ( 'bc_nr_t' )
    289              READ ( 13 )  bc_nr_t
    290           CASE ( 'bc_nr_t_val' )
    291              READ ( 13 )  bc_nr_t_val
    292286          CASE ( 'bc_p_b' )
    293287             READ ( 13 )  bc_p_b
     
    306300          CASE ( 'bc_q_t_val' )
    307301             READ ( 13 )  bc_q_t_val
    308           CASE ( 'bc_qr_b' )
    309              READ ( 13 )  bc_qr_b
    310           CASE ( 'bc_qr_t' )
    311              READ ( 13 )  bc_qr_t
    312           CASE ( 'bc_qr_t_val' )
    313              READ ( 13 )  bc_qr_t_val
    314302          CASE ( 'bc_s_b' )
    315303             READ ( 13 )  bc_s_b
     
    474462          CASE ( 'momentum_advec' )
    475463             READ ( 13 )  momentum_advec
    476           CASE ( 'nc' )
    477              READ ( 13 )  nc
     464          CASE ( 'nc_const' )
     465             READ ( 13 )  nc_const
    478466          CASE ( 'netcdf_precision' )
    479467             READ ( 13 )  netcdf_precision
     
    482470          CASE ( 'ngsrb' )
    483471             READ ( 13 )  ngsrb
    484           CASE ( 'nr_init' )
    485              READ ( 13 )  nr_init
    486           CASE ( 'nr_surface' )
    487              READ ( 13 )  nr_surface
    488           CASE ( 'nr_surface_initial_change' )
    489              READ ( 13 )  nr_surface_initial_change
    490           CASE ( 'nr_vertical_gradient' )
    491              READ ( 13 )  nr_vertical_gradient
    492           CASE ( 'nr_vertical_gradient_level' )
    493              READ ( 13 )  nr_vertical_gradient_level
    494           CASE ( 'nr_vertical_gradient_level_ind' )
    495              READ ( 13 )  nr_vertical_gradient_level_ind
    496472          CASE ( 'nsor' )
    497473             READ ( 13 )  nsor
     
    560536          CASE ( 'q_vertical_gradient_level_ind' )
    561537             READ ( 13 )  q_vertical_gradient_level_ind
    562           CASE ( 'qr_init' )
    563              READ ( 13 )  qr_init
    564           CASE ( 'qr_surface' )
    565              READ ( 13 )  qr_surface
    566           CASE ( 'qr_surface_initial_change' )
    567              READ ( 13 )  qr_surface_initial_change
    568           CASE ( 'qr_vertical_gradient' )
    569              READ ( 13 )  qr_vertical_gradient
    570           CASE ( 'qr_vertical_gradient_level' )
    571              READ ( 13 )  qr_vertical_gradient_level
    572           CASE ( 'qr_vertical_gradient_level_ind' )
    573              READ ( 13 )  qr_vertical_gradient_level_ind
    574538          CASE ( 'radiation' )
    575539             READ ( 13 )  radiation
     
    618582          CASE ( 'surface_waterflux' )
    619583             READ ( 13 )  surface_waterflux     
    620           CASE ( 'surface_waterflux_nr' )
    621              READ ( 13 )  surface_waterflux_nr   
    622           CASE ( 'surface_waterflux_qr' )
    623              READ ( 13 )  surface_waterflux_qr   
    624584          CASE ( 's_surface' )
    625585             READ ( 13 )  s_surface
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r1054 r1115  
    2020! Current revisions:
    2121! -----------------
     22! ql is calculated by calc_liquid_water_content
    2223!
    2324! Former revisions:
     
    164165                ENDIF
    165166                q_av = 0.0
     167
     168             CASE ( 'qc' )
     169                IF ( .NOT. ALLOCATED( qc_av ) )  THEN
     170                   ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     171                ENDIF
     172                qc_av = 0.0
    166173
    167174             CASE ( 'ql' )
     
    411418             ENDDO
    412419
     420          CASE ( 'qc' )
     421             DO  i = nxlg, nxrg
     422                DO  j = nysg, nyng
     423                   DO  k = nzb, nzt+1
     424                      qc_av(k,j,i) = qc_av(k,j,i) + qc(k,j,i)
     425                   ENDDO
     426                ENDDO
     427             ENDDO
     428
    413429          CASE ( 'ql' )
    414430             DO  i = nxlg, nxrg
  • palm/trunk/SOURCE/swap_timelevel.f90

    r1112 r1115  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! calculation of qr and nr is restricted to precipitation
    2323!
    2424! Former revisions:
     
    130130          IF ( humidity  .OR.  passive_scalar )  THEN
    131131             q => q_1;    q_p => q_2
    132              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
     132             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     133                  precipitation )  THEN
    133134                qr => qr_1;    qr_p => qr_2
    134135                nr => nr_1;    nr_p => nr_2
     
    153154          IF ( humidity  .OR.  passive_scalar )  THEN
    154155             q => q_2;    q_p => q_1
    155              IF ( cloud_physics  .AND.  icloud_scheme == 0 )  THEN
     156             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.  &
     157                  precipitation)  THEN
    156158                qr => qr_2;    qr_p => qr_1
    157159                nr => nr_2;    nr_p => nr_1
  • palm/trunk/SOURCE/time_integration.f90

    r1114 r1115  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! calculation of qr and nr is restricted to precipitation
    2323!
    2424! Former revisions:
     
    266266          IF (humidity  .OR.  passive_scalar)  THEN
    267267             CALL exchange_horiz( q_p, nbgp )
    268              IF ( cloud_physics .AND. icloud_scheme == 0 )  THEN
     268             IF ( cloud_physics  .AND.  icloud_scheme == 0  .AND.              &
     269                  precipitation)  THEN
    269270                CALL exchange_horiz( qr_p, nbgp )
    270271                CALL exchange_horiz( nr_p, nbgp )
     
    349350
    350351!
    351 !--       If required, compute virtuell potential temperature
    352           IF ( humidity )  THEN
    353              CALL compute_vpt
    354              !$acc update device( vpt )
    355           ENDIF
    356 
    357 !
    358352!--       If required, compute liquid water content
    359353          IF ( cloud_physics )  THEN
     
    361355             !$acc update device( ql )
    362356          ENDIF
    363 
     357!
     358!--       If required, compute virtual potential temperature
     359          IF ( humidity )  THEN
     360             CALL compute_vpt
     361             !$acc update device( vpt )
     362          ENDIF
    364363!
    365364!--       Compute the diffusion quantities
     
    373372                CALL cpu_log( log_point(19), 'prandtl_fluxes', 'stop' )
    374373             ENDIF
    375 
    376374!
    377375!--          Compute the diffusion coefficients
  • palm/trunk/SOURCE/write_3d_binary.f90

    r1075 r1115  
    2020! Current revisions:
    2121! -----------------
     22! qr and nr are restricted to precipitation
    2223!
    2324! Former revisions:
    2425! -----------------
    2526! $Id$
    26 !
    27 ! 1074 2012-12-03 11:00:05Z hoffmann
    28 ! Bugfix in writing qr, nr
    2927!
    3028! 1053 2012-11-13 17:11:03Z hoffmann
     
    117115!
    118116!-- Write arrays.
    119     binary_version = '3.3'
     117    binary_version = '3.4'
    120118
    121119    WRITE ( 14 )  binary_version
     
    179177             WRITE ( 14 )  'ql_av               ';  WRITE ( 14 )  ql_av
    180178          ENDIF
    181           IF ( icloud_scheme == 0  .AND.  cloud_physics )  THEN
    182              WRITE ( 14 )  'qr                  ';  WRITE ( 14 ) qr
    183              WRITE ( 14 )  'nr                  ';  WRITE ( 14 ) nr
    184              IF ( ALLOCATED( qr_av ) )  THEN
    185                 WRITE ( 14 )  'qr_av               ';  WRITE ( 14 )  qr_av
     179          IF ( icloud_scheme == 0 )  THEN
     180             WRITE ( 14 )  'qc                  ';  WRITE ( 14 ) qc
     181             IF ( ALLOCATED( qc_av ) )  THEN
     182                WRITE ( 14 )  'qc_av               ';  WRITE ( 14 )  qc_av
    186183             ENDIF
    187              IF ( ALLOCATED( nr_av ) )  THEN
    188                 WRITE ( 14 )  'nr_av               ';  WRITE ( 14 )  nr_av
     184             IF ( precipitation )  THEN
     185                WRITE ( 14 )  'nr                  ';  WRITE ( 14 ) nr
     186                IF ( ALLOCATED( nr_av ) )  THEN
     187                   WRITE ( 14 )  'nr_av               ';  WRITE ( 14 )  nr_av
     188                ENDIF
     189                WRITE ( 14 )  'nrs                 ';  WRITE ( 14 ) nrs
     190                WRITE ( 14 )  'nrsws               ';  WRITE ( 14 ) nrsws
     191                WRITE ( 14 )  'nrswst              ';  WRITE ( 14 ) nrswst
     192                WRITE ( 14 )  'qr                  ';  WRITE ( 14 ) qr
     193                IF ( ALLOCATED( qr_av ) )  THEN
     194                   WRITE ( 14 )  'qr_av               ';  WRITE ( 14 )  qr_av
     195                ENDIF
     196                WRITE ( 14 )  'qrs                 ';  WRITE ( 14 ) qrs
     197                WRITE ( 14 )  'qrsws               ';  WRITE ( 14 ) qrsws
     198                WRITE ( 14 )  'qrswst              ';  WRITE ( 14 ) qrswst
    189199             ENDIF
    190              WRITE ( 14 )  'qrs                 ';  WRITE ( 14 ) qrs
    191              WRITE ( 14 )  'qrsws               ';  WRITE ( 14 ) qrsws
    192              WRITE ( 14 )  'qrswst              ';  WRITE ( 14 ) qrswst
    193              WRITE ( 14 )  'nrs                 ';  WRITE ( 14 ) nrs
    194              WRITE ( 14 )  'nrsws               ';  WRITE ( 14 ) nrsws
    195              WRITE ( 14 )  'nrswst              ';  WRITE ( 14 ) nrswst
    196200          ENDIF
    197201       ENDIF
  • palm/trunk/SOURCE/write_var_list.f90

    r1066 r1115  
    2020! Current revisions:
    2121! -----------------
     22! unused variables removed
    2223!
    2324! Former revisions:
     
    165166
    166167
    167     binary_version = '3.8'
     168    binary_version = '3.9'
    168169
    169170    WRITE ( 14 )  binary_version
     
    204205    WRITE ( 14 )  'bc_ns                         '
    205206    WRITE ( 14 )  bc_ns
    206     WRITE ( 14 )  'bc_nr_b                       '
    207     WRITE ( 14 )  bc_nr_b
    208     WRITE ( 14 )  'bc_nr_t                       '
    209     WRITE ( 14 )  bc_nr_t
    210     WRITE ( 14 )  'bc_nr_t_val                   '
    211     WRITE ( 14 )  bc_nr_t_val
    212207    WRITE ( 14 )  'bc_p_b                        '
    213208    WRITE ( 14 )  bc_p_b
     
    226221    WRITE ( 14 )  'bc_q_t_val                    '
    227222    WRITE ( 14 )  bc_q_t_val
    228     WRITE ( 14 )  'bc_qr_b                       '
    229     WRITE ( 14 )  bc_qr_b
    230     WRITE ( 14 )  'bc_qr_t                       '
    231     WRITE ( 14 )  bc_qr_t
    232     WRITE ( 14 )  'bc_qr_t_val                   '
    233     WRITE ( 14 )  bc_qr_t_val
    234223    WRITE ( 14 )  'bc_s_b                        '
    235224    WRITE ( 14 )  bc_s_b
     
    392381    WRITE ( 14 )  'momentum_advec                '
    393382    WRITE ( 14 )  momentum_advec
    394     WRITE ( 14 )  'nc                            '
    395     WRITE ( 14 )  nc
     383    WRITE ( 14 )  'nc_const                      '
     384    WRITE ( 14 )  nc_const
    396385    WRITE ( 14 )  'netcdf_precision              '
    397386    WRITE ( 14 )  netcdf_precision
     
    400389    WRITE ( 14 )  'ngsrb                         '
    401390    WRITE ( 14 )  ngsrb
    402     WRITE ( 14 )  'nr_init                       '
    403     WRITE ( 14 )  nr_init
    404     WRITE ( 14 )  'nr_surface                    '
    405     WRITE ( 14 )  nr_surface
    406     WRITE ( 14 )  'nr_surface_initial_change     '
    407     WRITE ( 14 )  nr_surface_initial_change
    408     WRITE ( 14 )  'nr_vertical_gradient          '
    409     WRITE ( 14 )  nr_vertical_gradient
    410     WRITE ( 14 )  'nr_vertical_gradient_level    '
    411     WRITE ( 14 )  nr_vertical_gradient_level
    412     WRITE ( 14 )  'nr_vertical_gradient_level_ind'
    413     WRITE ( 14 )  nr_vertical_gradient_level_ind
    414391    WRITE ( 14 )  'nsor                          '
    415392    WRITE ( 14 )  nsor
     
    476453    WRITE ( 14 )  'q_vertical_gradient_level_ind '
    477454    WRITE ( 14 )  q_vertical_gradient_level_ind
    478     WRITE ( 14 )  'qr_init                       '
    479     WRITE ( 14 )  qr_init
    480     WRITE ( 14 )  'qr_surface                    '
    481     WRITE ( 14 )  qr_surface
    482     WRITE ( 14 )  'qr_surface_initial_change     '
    483     WRITE ( 14 )  qr_surface_initial_change
    484     WRITE ( 14 )  'qr_vertical_gradient          '
    485     WRITE ( 14 )  qr_vertical_gradient
    486     WRITE ( 14 )  'qr_vertical_gradient_level    '
    487     WRITE ( 14 )  qr_vertical_gradient_level
    488     WRITE ( 14 )  'qr_vertical_gradient_level_ind'
    489     WRITE ( 14 )  qr_vertical_gradient_level_ind
    490455    WRITE ( 14 )  'radiation                     '
    491456    WRITE ( 14 )  radiation
     
    534499    WRITE ( 14 )  'surface_waterflux             '
    535500    WRITE ( 14 )  surface_waterflux   
    536     WRITE ( 14 )  'surface_waterflux_nr          '
    537     WRITE ( 14 )  surface_waterflux_nr   
    538     WRITE ( 14 )  'surface_waterflux_qr          '
    539     WRITE ( 14 )  surface_waterflux_qr   
    540501    WRITE ( 14 )  's_surface                     '
    541502    WRITE ( 14 )  s_surface
Note: See TracChangeset for help on using the changeset viewer.