Changeset 3582 for palm


Ignore:
Timestamp:
Nov 29, 2018 7:16:36 PM (5 years ago)
Author:
suehring
Message:

Merge branch salsa with trunk

Location:
palm/trunk
Files:
26 edited
3 copied

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE

  • palm/trunk/SOURCE/advec_ws.f90

    r3551 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    317318       USE control_parameters,                                                 &
    318319           ONLY:  humidity, loop_optimization, passive_scalar, ocean_mode,     &
    319                   rans_tke_e, ws_scheme_mom, ws_scheme_sca
     320                  rans_tke_e, ws_scheme_mom, ws_scheme_sca, salsa
    320321
    321322       USE indices,                                                            &
     
    399400             sums_wssas_ws_l = 0.0_wp
    400401          ENDIF       
    401 !         
    402 !--       Mona: Now always allocated
    403           ALLOCATE( sums_salsa_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    404           sums_salsa_ws_l = 0.0_wp         
     402         
     403          IF ( salsa )  THEN
     404             ALLOCATE( sums_salsa_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     405             sums_salsa_ws_l = 0.0_wp   
     406          ENDIF
    405407
    406408       ENDIF
     
    11151117       USE control_parameters,                                                 &
    11161118           ONLY:  humidity, passive_scalar, ocean_mode, ws_scheme_mom,         &
    1117                   ws_scheme_sca
     1119                  ws_scheme_sca, salsa
    11181120
    11191121       USE kinds 
     
    11581160          ENDIF
    11591161          IF ( ocean_mode )  sums_wssas_ws_l = 0.0_wp
    1160        
    1161           sums_salsa_ws_l = 0.0_wp
    1162          
    1163          
     1162          IF ( salsa )       sums_salsa_ws_l = 0.0_wp
     1163
    11641164       ENDIF
    11651165
  • palm/trunk/SOURCE/average_3d_data.f90

    r3569 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
    23 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
     24!
    2425! Former revisions:
    2526! -----------------
     
    177178    USE control_parameters,                                                    &
    178179        ONLY:  air_chemistry, average_count_3d, biometeorology, doav, doav_n,  &
    179                land_surface, ocean_mode, urban_surface, varnamelength
     180               land_surface, ocean_mode, salsa, urban_surface, varnamelength
    180181
    181182    USE cpulog,                                                                &
     
    200201           
    201202    USE salsa_mod,                                                             &
    202         ONLY:  salsa, salsa_3d_data_averaging
     203        ONLY:  salsa_3d_data_averaging
    203204
    204205    USE turbulence_closure_mod,                                                &
  • palm/trunk/SOURCE/biometeorology_mod.f90

    • Property svn:mergeinfo
      •  

        old new  
        66/palm/branches/palm4u/SOURCE/biometeorology_mod.f90:2540-2692
        77/palm/branches/rans/SOURCE/biometeorology_mod.f90:2078-3128
        8 /palm/branches/resler/SOURCE/biometeorology_mod.f90:2023-3474
        9 /palm/branches/salsa/SOURCE/biometeorology_mod.f90:2503-3460
         8/palm/branches/resler/SOURCE/biometeorology_mod.f90:2023-3320,3337-3474
         9/palm/branches/salsa/SOURCE/biometeorology_mod.f90:2503-3581
        1010/palm/branches/suehring/biometeorology_mod.f90:423-666
         11/palm/trunk/SOURCE/biometeorology_mod.f90:2503-3336
  • palm/trunk/SOURCE/boundary_conds.f90

    r3562 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    225226               bc_dirichlet_s, bc_radiation_l, bc_radiation_n, bc_radiation_r, &
    226227               bc_radiation_s, bc_pt_t_val, bc_q_t_val, bc_s_t_val,            &
    227                child_domain, constant_diffusion, coupling_mode, &
    228                dt_3d, humidity, ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, ibc_s_b, &
    229                ibc_s_t, ibc_uv_b, ibc_uv_t,                           &
    230                intermediate_timestep_count, nesting_offline, nudging,          &
    231                ocean_mode, passive_scalar, rans_mode, rans_tke_e, tsc, use_cmax
     228               child_domain, constant_diffusion, coupling_mode, dt_3d,         &
     229               humidity, ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, ibc_s_b,        &
     230               ibc_s_t, ibc_uv_b, ibc_uv_t, intermediate_timestep_count,       &
     231               nesting_offline, nudging, ocean_mode, passive_scalar, rans_mode,&
     232               rans_tke_e, tsc, salsa, use_cmax
    232233
    233234    USE grid_variables,                                                        &
     
    248249 
    249250    USE salsa_mod,                                                             &
    250         ONLY:  salsa, salsa_boundary_conds       
     251        ONLY:  salsa_boundary_conds       
    251252
    252253    USE surface_mod,                                                           &
  • palm/trunk/SOURCE/check_parameters.f90

    r3579 r3582  
    2020! Current revisions:
    2121! -----------------
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2224!
    2325!
     
    813815                           
    814816    USE salsa_mod,                                                             &
    815         ONLY:  salsa, salsa_check_data_output, salsa_check_parameters       
     817        ONLY:  salsa_check_data_output, salsa_check_parameters       
    816818
    817819    USE spectra_mod,                                                           &
     
    821823
    822824    USE subsidence_mod
    823 
    824     USE statistics
    825825
    826826    USE surface_output_mod,                                                    &
  • palm/trunk/SOURCE/chem_emissions_mod.f90

    r3570 r3582  
    2222! Current revisions:
    2323! ------------------
    24 !
     24! - Removed salsa dependency.
     25! - Enabled PARAMETRIZED mode for default surfaces when LSM is not applied but
     26!   salsa is (M. Kurppa)
    2527!
    2628! Former revisions:
     
    890892   USE indices,                                                               &
    891893       ONLY: nnx,nny,nnz
    892    USE salsa_mod,                                                             &
    893        ONLY:  salsa
    894894   USE surface_mod,                                                           &
    895895       ONLY:  surf_lsm_h,surf_def_h,surf_usm_h
     
    14621462
    14631463                ENDDO
    1464              ELSEIF ( salsa ) THEN
    1465                 DO  m = 1, surf_def_h(0)%ns
    1466                    i = surf_def_h(0)%i(m)
    1467                    j = surf_def_h(0)%j(m)
    1468                    k = surf_def_h(0)%k(m)
    1469 
    1470 
    1471                    IF ( street_type_f%var(j,i) >= main_street_id  .AND.        &
    1472                         street_type_f%var(j,i) < max_street_id )               &
    1473                    THEN
    1474 
    1475                       !> Cycle over already matched species
    1476                       DO  ispec=1,nspec_out
    1477 
    1478                          !> PMs are already in mass units:micrograms: have to be converted to kilograms
    1479                          IF ( TRIM(spc_names(match_spec_model(ispec)))=="PM1"       &
    1480                               .OR. TRIM(spc_names(match_spec_model(ispec)))=="PM25" &
    1481                               .OR. TRIM(spc_names(match_spec_model(ispec)))=="PM10")&
    1482                          THEN
    1483                                  
    1484                             surf_def_h(0)%cssws(match_spec_model(ispec),m) =   &
    1485                                   emiss_factor_main(match_spec_input(ispec)) * &
    1486                                   emis_distribution(1,j,i,ispec) * rho_air(k) /&
    1487                                   time_factor(1)
    1488                          ELSE
    1489 
    1490                          !> Other Species: inputs are micromoles: have to be converted             
    1491                             surf_def_h(0)%cssws(match_spec_model(ispec),m) =   &
    1492                                emiss_factor_main(match_spec_input(ispec)) *    &
    1493                                emis_distribution(1,j,i,ispec) *                &
    1494                                conv_to_ratio(k,j,i) *  rho_air(k) / time_factor(1)
    1495                          ENDIF
    1496                       ENDDO
    1497 
    1498                    ELSEIF ( street_type_f%var(j,i) >= side_street_id  .AND.    &
    1499                             street_type_f%var(j,i) < main_street_id )          &
    1500                    THEN
    1501 
    1502                    !> Cycle over already matched species
    1503                       DO  ispec=1,nspec_out
    1504 
    1505                          !> PMs are already in mass units: micrograms
    1506                          IF ( TRIM(spc_names(match_spec_model(ispec)))=="PM1"   &
    1507                               .OR. TRIM(spc_names(match_spec_model(ispec)))=="PM25" &
    1508                               .OR. TRIM(spc_names(match_spec_model(ispec)))=="PM10")&
    1509                          THEN
    1510 
    1511                             surf_def_h(0)%cssws(match_spec_model(ispec),m) =   &
    1512                                emiss_factor_side(match_spec_input(ispec)) *    &
    1513                                emis_distribution(1,j,i,ispec) * rho_air(k) /   &
    1514                                time_factor(1) 
    1515                          ELSE
    1516                
    1517                             surf_def_h(0)%cssws(match_spec_model(ispec),m) =   &
    1518                                emiss_factor_side(match_spec_input(ispec)) *    &
    1519                                emis_distribution(1,j,i,ispec) *                &
    1520                                conv_to_ratio(k,j,i) * rho_air(k) / time_factor(1)
    1521                          ENDIF
    1522 
    1523                       ENDDO
    1524 
    1525                    ELSE
    1526 
    1527                    !> If no street type is defined, then assign null emissions to all the species
    1528                       surf_def_h(0)%cssws(:,m) = 0.0_wp
    1529 
    1530                    ENDIF
    1531 
    1532                 ENDDO
    1533 
    15341464             ENDIF
    15351465
  • palm/trunk/SOURCE/data_output_2d.f90

    r3569 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    294295               ibc_uv_b, io_blocks, io_group, land_surface, message_string,    &
    295296               ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz,                          &
    296                ocean_mode, psolver, section, simulated_time,                   &
     297               ocean_mode, psolver, salsa, section, simulated_time,            &
    297298               time_since_reference_point
    298299
     
    334335   
    335336    USE salsa_mod,                                                             &
    336         ONLY:  salsa, salsa_data_output_2d   
     337        ONLY:  salsa_data_output_2d   
    337338
    338339    USE surface_mod,                                                           &
     
    13531354               
    13541355                IF ( .NOT. found  .AND.  salsa )  THEN
    1355                    CALL salsa_data_output_2d( av, do2d(av,ivar), found, grid,    &
    1356                                               mode, local_pf, two_d )
     1356                   CALL salsa_data_output_2d( av, do2d(av,ivar), found, grid,  &
     1357                                              mode, local_pf, two_d, nzb_do,   &
     1358                                              nzt_do)
    13571359                ENDIF                 
    13581360
  • palm/trunk/SOURCE/data_output_3d.f90

    r3554 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
    23 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
     24!
    2425! Former revisions:
    2526! -----------------
     
    254255               io_blocks, io_group, land_surface, message_string,              &
    255256               ntdim_3d, nz_do3d,  ocean_mode, plant_canopy,                   &
    256                psolver, simulated_time, time_since_reference_point,            &
     257               psolver, salsa, simulated_time, time_since_reference_point,     &
    257258               urban_surface, varnamelength
    258259
     
    302303               
    303304    USE salsa_mod,                                                             &
    304         ONLY:  salsa, salsa_data_output_3d     
     305        ONLY:  salsa_data_output_3d     
    305306
    306307    USE turbulence_closure_mod,                                                &
     
    791792!--          SALSA output
    792793             IF ( .NOT. found  .AND.  salsa )  THEN
    793                 CALL salsa_data_output_3d( av, do3d(av,ivar), found, local_pf )
     794                CALL salsa_data_output_3d( av, do3d(av,ivar), found, local_pf, &
     795                                           nzb_do, nzt_do )
    794796                resorted = .TRUE.
    795797             ENDIF                 
  • palm/trunk/SOURCE/data_output_mask.f90

    r3554 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod.f90 to control_parameters
    2323!
    2424! Former revisions:
     
    165165               mask_j, mask_k, mask_size, mask_size_l, mask_start_l,           &
    166166               mask_surface,                                                   &
    167                max_masks, message_string, mid, nz_do3d, simulated_time
     167               max_masks, message_string, mid, nz_do3d, salsa, simulated_time
    168168    USE cpulog,                                                                &
    169169        ONLY:  cpu_log, log_point
     
    193193
    194194    USE salsa_mod,                                                             &
    195         ONLY:  salsa, salsa_data_output_mask     
     195        ONLY:  salsa_data_output_mask     
    196196       
    197197    USE surface_mod,                                                           &
  • palm/trunk/SOURCE/header.f90

    r3553 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
    23 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
     24
    2425! Former revisions:
    2526! -----------------
     
    501502               
    502503    USE salsa_mod,                                                             &
    503         ONLY:  salsa, salsa_header       
     504        ONLY:  salsa_header       
    504505   
    505506    USE spectra_mod,                                                           &
  • palm/trunk/SOURCE/init_3d_model.f90

    r3579 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    655656             
    656657    USE salsa_mod,                                                             &
    657         ONLY:  salsa, salsa_init, salsa_init_arrays     
     658        ONLY:  salsa_init, salsa_init_arrays     
    658659   
    659660    USE statistics,                                                            &
  • palm/trunk/SOURCE/init_masks.f90

    r3554 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    173174               mask_x_loop, mask_xyz_dimension, mask_y, mask_y_loop, mask_z,   &
    174175               mask_z_loop, max_masks,  message_string, mid,                   &
    175                passive_scalar, ocean_mode, varnamelength
     176               passive_scalar, ocean_mode, salsa, varnamelength
    176177
    177178    USE grid_variables,                                                        &
     
    190191
    191192    USE pegrid 
    192 
     193   
    193194    USE radiation_model_mod,                                                   &
    194195        ONLY:  radiation, radiation_check_data_output
    195196       
    196197    USE salsa_mod,                                                             &
    197         ONLY:  salsa, salsa_check_data_output
     198        ONLY:  salsa_check_data_output
    198199
    199200    IMPLICIT NONE
  • palm/trunk/SOURCE/modules.f90

    r3569 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    13871388    LOGICAL ::  run_control_header = .FALSE.                     !< onetime output of RUN_CONTROL header
    13881389    LOGICAL ::  run_coupled = .TRUE.                             !< internal switch telling PALM to run in coupled mode (i.e. to exchange surface data) in case of atmosphere-ocean coupling
     1390    LOGICAL ::  salsa = .FALSE.                                  !< switch for the sectional aerosol module salsa
    13891391    LOGICAL ::  scalar_rayleigh_damping = .TRUE.                 !< namelist parameter
    13901392    LOGICAL ::  sloping_surface = .FALSE.                        !< use sloped surface? (namelist parameter alpha_surface)
  • palm/trunk/SOURCE/netcdf_interface_mod.f90

    r3569 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    646647               message_string, mid, ntdim_2d_xy, ntdim_2d_xz,                  &
    647648               ntdim_2d_yz, ntdim_3d, nz_do3d, ocean_mode, plant_canopy,       &
    648                run_description_header, section, simulated_time,                &
     649               run_description_header, salsa, section, simulated_time,         &
    649650               simulated_time_at_begin, skip_time_data_output_av,              &
    650651               skip_time_do2d_xy, skip_time_do2d_xz, skip_time_do2d_yz,        &
     
    684685     
    685686    USE salsa_mod,                                                             &
    686         ONLY:  salsa, salsa_define_netcdf_grid            
     687        ONLY:  salsa_define_netcdf_grid           
    687688
    688689    USE spectra_mod,                                                           &
     
    11471148                      CALL salsa_define_netcdf_grid( domask(mid,av,i), found,  &
    11481149                                                     grid_x, grid_y, grid_z )
    1149                    ENDIF                 
     1150                   ENDIF                                   
    11501151!
    11511152!--                Now check for user-defined quantities
     
    19101911                                                     grid_y, grid_z )
    19111912                   ENDIF                 
    1912                    
     1913!                   
    19131914!--                Check for user-defined quantities
    19141915                   IF ( .NOT. found )  THEN
     
    28562857                                                         grid_z )
    28572858                         ENDIF
    2858                          
     2859
    28592860!
    28602861!--                      Check for SALSA quantities
     
    37583759                                                            grid_z )
    37593760                      ENDIF
    3760                      
    37613761!
    37623762!--                   Check for SALSA quantities
     
    46184618                                                            grid_z )
    46194619                      ENDIF
    4620                      
    46214620!
    46224621!--                   Check for SALSA quantities
  • palm/trunk/SOURCE/plant_canopy_model_mod.f90

    r3524 r3582  
    2222! Current revisions:
    2323! ------------------
    24 !
     24! Formatting adjustments
    2525!
    2626! Former revisions:
     
    16791679                         ! to include also the dependecy to the radiation
    16801680                         ! in the plant canopy box
    1681                          pc_transpiration_rate(kk,j,i) =  - lsec                  &
    1682                                           * lad_s(kk,j,i) *                       &
    1683                                           SQRT( ( 0.5_wp * ( u(k,j,i) +           &
    1684                                                              u(k,j,i+1) )         &
    1685                                                 )**2 +                            &
    1686                                                 ( 0.5_wp * ( v(k,j,i) +           &
    1687                                                              v(k,j+1,i) )         &
    1688                                                 )**2 +                            &
    1689                                                 ( 0.5_wp * ( w(k-1,j,i) +         &
    1690                                                              w(k,j,i) )           &
    1691                                                 )**2                              &
    1692                                               ) *                                 &
     1681                         pc_transpiration_rate(kk,j,i) =  - lsec               &
     1682                                          * lad_s(kk,j,i) *                    &
     1683                                          SQRT( ( 0.5_wp * ( u(k,j,i) +        &
     1684                                                             u(k,j,i+1) )      &
     1685                                                )**2 +                         &
     1686                                                ( 0.5_wp * ( v(k,j,i) +        &
     1687                                                             v(k,j+1,i) )      &
     1688                                                )**2 +                         &
     1689                                                ( 0.5_wp * ( w(k-1,j,i) +      &
     1690                                                             w(k,j,i) )        &
     1691                                                )**2                           &
     1692                                              ) *                              &
    16931693                                          ( q(k,j,i) - lsc )
    16941694                      ENDIF
     
    20012001                DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
    20022002                   kk = k - k_wall  !- lad arrays are defined flat
    2003                    tend(k,j,i) = tend(k,j,i) + pc_heating_rate(kk,j,i) - pc_latent_rate(kk,j,i)
     2003                   tend(k,j,i) = tend(k,j,i) + pc_heating_rate(kk,j,i) -       &
     2004                                 pc_latent_rate(kk,j,i)
    20042005                ENDDO
    20052006             ELSE
     
    20242025                   ! to include also the dependecy to the radiation
    20252026                   ! in the plant canopy box
    2026                    pc_transpiration_rate(kk,j,i) = - lsec                         &
    2027                                     * lad_s(kk,j,i) *                             &
    2028                                     SQRT( ( 0.5_wp * ( u(k,j,i) +                 &
    2029                                                        u(k,j,i+1) )               &
    2030                                           )**2  +                                 &
    2031                                           ( 0.5_wp * ( v(k,j,i) +                 &
    2032                                                        v(k,j+1,i) )               &
    2033                                           )**2 +                                  &
    2034                                           ( 0.5_wp * ( w(k-1,j,i) +               &
    2035                                                        w(k,j,i) )                 &
    2036                                           )**2                                    &
    2037                                         ) *                                       &
     2027                   pc_transpiration_rate(kk,j,i) = - lsec                      &
     2028                                    * lad_s(kk,j,i) *                          &
     2029                                    SQRT( ( 0.5_wp * ( u(k,j,i) +              &
     2030                                                       u(k,j,i+1) )            &
     2031                                          )**2  +                              &
     2032                                          ( 0.5_wp * ( v(k,j,i) +              &
     2033                                                       v(k,j+1,i) )            &
     2034                                          )**2 +                               &
     2035                                          ( 0.5_wp * ( w(k-1,j,i) +            &
     2036                                                       w(k,j,i) )              &
     2037                                          )**2                                 &
     2038                                        ) *                                    &
    20382039                                    ( q(k,j,i) - lsc )
    20392040                ENDIF
  • palm/trunk/SOURCE/prognostic_equations.f90

    r3467 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    373374               use_upstream_for_tke, wind_turbine, ws_scheme_mom,              &
    374375               ws_scheme_sca, urban_surface, land_surface,                     &
    375                time_since_reference_point
     376               time_since_reference_point, salsa
    376377
    377378    USE coriolis_mod,                                                          &
     
    415416    USE salsa_mod,                                                             &
    416417        ONLY:  aerosol_mass, aerosol_number, dt_salsa, last_salsa_time, nbins, &
    417                ncc_tot, ngast, salsa, salsa_boundary_conds, salsa_diagnostics, &
     418               ncc_tot, ngast, salsa_boundary_conds, salsa_diagnostics,        &
    418419               salsa_driver, salsa_gas, salsa_gases_from_chem, salsa_tendency, &
    419420               skip_time_do_salsa
     
    548549
    549550    ENDIF       
    550 
    551551!
    552552!-- Run SALSA and aerosol dynamic processes. SALSA is run with a longer time
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r3467 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    10871088   
    10881089    USE salsa_mod,                                                             &
    1089         ONLY:  salsa, salsa_rrd_local
     1090        ONLY:  salsa_rrd_local
    10901091
    10911092    USE surface_mod,                                                           &
     
    19101911                                           nyn_on_file, nysf, nysc,            &
    19111912                                           nys_on_file, found )
    1912 !
    1913 !--                Read salsa restart data
    1914                    IF ( .NOT. found  .AND.  salsa )  THEN
    1915                       CALL salsa_rrd_local
    1916                    ENDIF                                               
     1913
     1914                   IF ( .NOT. found  .AND.  salsa )  CALL salsa_rrd_local( i,  &
     1915                                           k, nxlf, nxlc, nxl_on_file, nxrf,   &
     1916                                           nxrc, nxr_on_file, nynf, nync,      &
     1917                                           nyn_on_file, nysf, nysc,            &
     1918                                           nys_on_file, tmp_3d, found )                                       
    19171919
    19181920!
  • palm/trunk/SOURCE/salsa_mod.f90

    r3524 r3582  
    1515! PALM. If not, see <http://www.gnu.org/licenses/>.
    1616!
     17! Copyright 2018-2018 University of Helsinki
    1718! Copyright 1997-2018 Leibniz Universitaet Hannover
    1819!--------------------------------------------------------------------------------!
     
    2021! Current revisions:
    2122! -----------------
    22 !
    23 !
     23! - Moved the control parameter "salsa" from salsa_mod.f90 to control_parameters
     24! - Updated salsa_rrd_local and salsa_wrd_local
     25! - Add target attribute
     26! - Revise initialization in case of restarts
     27! - Revise masked data output
     28!
    2429! Former revisions:
    2530! -----------------
     
    4449! Authors:
    4550! --------
    46 ! @author monakurppa
    47 !
     51! @author Mona Kurppa (University of Helsinki)
     52! 
    4853!
    4954! Description:
     
    6065!>
    6166!> @todo Implement turbulent inflow of aerosols in inflow_turbulence.
    62 !> @todo Deposition on walls and horizontal surfaces calculated from the aerosol
    63 !>       dry radius, not wet
    6467!> @todo Deposition on subgrid scale vegetation
    6568!> @todo Deposition on vegetation calculated by default for deciduous broadleaf
     
    197200                                                !< chemical components
    198201    LOGICAL ::  read_restart_data_salsa = .FALSE. !< read restart data for salsa
    199     LOGICAL ::  salsa                 = .FALSE.   !< SALSA master switch
    200202    LOGICAL ::  salsa_gases_from_chem = .FALSE.   !< Transfer the gaseous
    201203                                                  !< components to SALSA from 
     
    420422                                                                    !< OC
    421423!-- Integrated:                                                                   
    422     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  LDSA_av  !< lung deposited
    423                                                          !< surface area                                                   
    424     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  Ntot_av  !< total number conc.
    425     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  PM25_av  !< PM2.5
    426     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  PM10_av  !< PM10
     424    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  LDSA_av  !< lung-
     425                                                                 !< deposited
     426                                                                 !< surface area                                                   
     427    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  Ntot_av  !< total number
     428                                                                 !< conc.
     429    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  PM25_av  !< PM2.5
     430    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  PM10_av  !< PM10
    427431!-- In the particle phase:   
    428432    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  s_BC_av  !< black carbon
     
    435439    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  s_SS_av  !< sea salt
    436440!-- Bins:   
    437     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::  mbins_av  !< bin mass
    438                                                             !< concentration
    439     REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::  Nbins_av  !< bin number
    440                                                             !< concentration 
    441        
     441    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:), TARGET ::  mbins_av !< bin mass 
     442    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:), TARGET ::  Nbins_av !< bin number
     443
     444   
    442445!
    443446!-- PALM interfaces:
     
    564567           mconc_2, nbins, ncc, ncc_tot, nclim, nconc_2, ngast, prtcl, Ra_dry, &
    565568           salsa_gas, sedim_vd
     569           
    566570
    567571 CONTAINS
     
    688692
    689693!
    690 !-- Set flag that indicates that the new module is switched on
    691 !-- Note that this parameter needs to be declared in modules.f90
     694!-- Enable salsa (salsa switch in modules.f90)
    692695    salsa = .TRUE.
    693696
     
    12301233    ENDDO
    12311234   
    1232     IF ( nldepo )  sedim_vd = 0.0_wp
     1235    IF ( nldepo )  sedim_vd = 0.0_wp 
     1236   
     1237    DO  b = 1, nbins
     1238       IF ( .NOT. read_restart_data_salsa )  aerosol_number(b)%conc = nclim
     1239       aerosol_number(b)%conc_p    = 0.0_wp
     1240       aerosol_number(b)%tconc_m   = 0.0_wp
     1241       aerosol_number(b)%flux_s    = 0.0_wp
     1242       aerosol_number(b)%diss_s    = 0.0_wp
     1243       aerosol_number(b)%flux_l    = 0.0_wp
     1244       aerosol_number(b)%diss_l    = 0.0_wp
     1245       aerosol_number(b)%init      = nclim
     1246       aerosol_number(b)%sums_ws_l = 0.0_wp
     1247    ENDDO
     1248    DO  c = 1, ncc_tot*nbins
     1249       IF ( .NOT. read_restart_data_salsa )  aerosol_mass(c)%conc = mclim
     1250       aerosol_mass(c)%conc_p    = 0.0_wp
     1251       aerosol_mass(c)%tconc_m   = 0.0_wp
     1252       aerosol_mass(c)%flux_s    = 0.0_wp
     1253       aerosol_mass(c)%diss_s    = 0.0_wp
     1254       aerosol_mass(c)%flux_l    = 0.0_wp
     1255       aerosol_mass(c)%diss_l    = 0.0_wp
     1256       aerosol_mass(c)%init      = mclim
     1257       aerosol_mass(c)%sums_ws_l = 0.0_wp
     1258    ENDDO
     1259   
     1260    IF ( .NOT. salsa_gases_from_chem )  THEN
     1261       DO  g = 1, ngast
     1262          salsa_gas(g)%conc_p    = 0.0_wp
     1263          salsa_gas(g)%tconc_m   = 0.0_wp
     1264          salsa_gas(g)%flux_s    = 0.0_wp
     1265          salsa_gas(g)%diss_s    = 0.0_wp
     1266          salsa_gas(g)%flux_l    = 0.0_wp
     1267          salsa_gas(g)%diss_l    = 0.0_wp
     1268          salsa_gas(g)%sums_ws_l = 0.0_wp
     1269       ENDDO
     1270       IF ( .NOT. read_restart_data_salsa )  THEN
     1271          salsa_gas(1)%conc = H2SO4_init
     1272          salsa_gas(2)%conc = HNO3_init
     1273          salsa_gas(3)%conc = NH3_init
     1274          salsa_gas(4)%conc = OCNV_init
     1275          salsa_gas(5)%conc = OCSV_init
     1276       ENDIF
     1277!
     1278!--    Set initial value for gas compound tracers and initial values
     1279       salsa_gas(1)%init = H2SO4_init
     1280       salsa_gas(2)%init = HNO3_init
     1281       salsa_gas(3)%init = NH3_init
     1282       salsa_gas(4)%init = OCNV_init
     1283       salsa_gas(5)%init = OCSV_init     
     1284    ENDIF
     1285!
     1286!-- Aerosol radius in each bin: dry and wet (m)
     1287    Ra_dry = 1.0E-10_wp
    12331288!   
    1234 !-- Initilisation actions that are NOT conducted for restart runs
    1235     IF ( .NOT. read_restart_data_salsa )  THEN   
    1236    
    1237        DO  b = 1, nbins
    1238           aerosol_number(b)%conc      = nclim
    1239           aerosol_number(b)%conc_p    = 0.0_wp
    1240           aerosol_number(b)%tconc_m   = 0.0_wp
    1241           aerosol_number(b)%flux_s    = 0.0_wp
    1242           aerosol_number(b)%diss_s    = 0.0_wp
    1243           aerosol_number(b)%flux_l    = 0.0_wp
    1244           aerosol_number(b)%diss_l    = 0.0_wp
    1245           aerosol_number(b)%init      = nclim
    1246           aerosol_number(b)%sums_ws_l = 0.0_wp
     1289!-- Initialise aerosol tracers   
     1290    aero(:)%vhilim   = 0.0_wp
     1291    aero(:)%vlolim   = 0.0_wp
     1292    aero(:)%vratiohi = 0.0_wp
     1293    aero(:)%vratiolo = 0.0_wp
     1294    aero(:)%dmid     = 0.0_wp
     1295!
     1296!-- Initialise the sectional particle size distribution
     1297    CALL set_sizebins()
     1298!
     1299!-- Initialise location-dependent aerosol size distributions and
     1300!-- chemical compositions:
     1301    CALL aerosol_init
     1302!
     1303!-- Initalisation run of SALSA
     1304    DO  i = nxl, nxr
     1305       DO  j = nys, nyn
     1306          CALL salsa_driver( i, j, 1 )
     1307          CALL salsa_diagnostics( i, j )
    12471308       ENDDO
    1248        DO  c = 1, ncc_tot*nbins
    1249           aerosol_mass(c)%conc      = mclim
    1250           aerosol_mass(c)%conc_p    = 0.0_wp
    1251           aerosol_mass(c)%tconc_m   = 0.0_wp
    1252           aerosol_mass(c)%flux_s    = 0.0_wp
    1253           aerosol_mass(c)%diss_s    = 0.0_wp
    1254           aerosol_mass(c)%flux_l    = 0.0_wp
    1255           aerosol_mass(c)%diss_l    = 0.0_wp
    1256           aerosol_mass(c)%init      = mclim
    1257           aerosol_mass(c)%sums_ws_l = 0.0_wp
    1258        ENDDO
    1259        
    1260        IF ( .NOT. salsa_gases_from_chem )  THEN
    1261           DO  g = 1, ngast
    1262              salsa_gas(g)%conc_p    = 0.0_wp
    1263              salsa_gas(g)%tconc_m   = 0.0_wp
    1264              salsa_gas(g)%flux_s    = 0.0_wp
    1265              salsa_gas(g)%diss_s    = 0.0_wp
    1266              salsa_gas(g)%flux_l    = 0.0_wp
    1267              salsa_gas(g)%diss_l    = 0.0_wp
    1268              salsa_gas(g)%sums_ws_l = 0.0_wp
    1269           ENDDO
    1270        
    1271 !
    1272 !--       Set initial value for gas compound tracers and initial values
    1273           salsa_gas(1)%conc = H2SO4_init
    1274           salsa_gas(1)%init = H2SO4_init
    1275           salsa_gas(2)%conc = HNO3_init
    1276           salsa_gas(2)%init = HNO3_init
    1277           salsa_gas(3)%conc = NH3_init
    1278           salsa_gas(3)%init = NH3_init
    1279           salsa_gas(4)%conc = OCNV_init
    1280           salsa_gas(4)%init = OCNV_init
    1281           salsa_gas(5)%conc = OCSV_init
    1282           salsa_gas(5)%init = OCSV_init     
    1283        ENDIF
    1284 !
    1285 !--    Aerosol radius in each bin: dry and wet (m)
    1286        Ra_dry = 1.0E-10_wp
    1287 !   
    1288 !--    Initialise aerosol tracers   
    1289        aero(:)%vhilim   = 0.0_wp
    1290        aero(:)%vlolim   = 0.0_wp
    1291        aero(:)%vratiohi = 0.0_wp
    1292        aero(:)%vratiolo = 0.0_wp
    1293        aero(:)%dmid     = 0.0_wp
    1294 !
    1295 !--    Initialise the sectional particle size distribution
    1296        CALL set_sizebins()
    1297 !
    1298 !--    Initialise location-dependent aerosol size distributions and
    1299 !--    chemical compositions:
    1300        CALL aerosol_init
    1301 !
    1302 !--    Initalisation run of SALSA
    1303        DO  i = nxl, nxr
    1304           DO  j = nys, nyn
    1305              CALL salsa_driver( i, j, 1 )
    1306              CALL salsa_diagnostics( i, j )
    1307           ENDDO
    1308        ENDDO
    1309     ENDIF
     1309    ENDDO
    13101310!
    13111311!-- Set the aerosol and gas sources
     
    14191419   
    14201420    USE netcdf_data_input_mod,                                                 &
    1421         ONLY:  get_attribute, netcdf_data_input_get_dimension_length,          &
    1422                get_variable, open_read_file
     1421        ONLY:  get_attribute, get_variable,                                    &
     1422               netcdf_data_input_get_dimension_length, open_read_file
    14231423   
    14241424    IMPLICIT NONE
     
    14851485!
    14861486!--       Input heights   
    1487           CALL netcdf_data_input_get_dimension_length( id_faero, nz_file, "profile_z" )
     1487          CALL netcdf_data_input_get_dimension_length( id_faero, nz_file,      &
     1488                                                       "profile_z" )
    14881489         
    14891490          ALLOCATE( pr_z(nz_file), pr_mass_fracs_a(maxspec,nz_file),           &
     
    16281629!
    16291630!--       Input heights   
    1630           CALL netcdf_data_input_get_dimension_length( id_fchem, nz_file, "profile_z" )
     1631          CALL netcdf_data_input_get_dimension_length( id_fchem, nz_file,      &
     1632                                                       "profile_z" )
    16311633          ALLOCATE( pr_z(nz_file), pr_gas(ngast,nz_file) )
    16321634          CALL get_variable( id_fchem, 'profile_z', pr_z )
     
    20252027!> This routine reads the respective restart data.
    20262028!------------------------------------------------------------------------------!
    2027  SUBROUTINE salsa_rrd_local 
     2029 SUBROUTINE salsa_rrd_local( i, k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,        &
     2030                             nxr_on_file, nynf, nync, nyn_on_file, nysf,       &
     2031                             nysc, nys_on_file, tmp_3d, found )
    20282032
    20292033   
     
    20352039    INTEGER(iwp) ::  g  !<
    20362040    INTEGER(iwp) ::  i  !<
    2037     INTEGER(iwp) ::  j  !<
    2038     INTEGER(iwp) ::  k  !<   
     2041    INTEGER(iwp) ::  k  !<
     2042    INTEGER(iwp) ::  nxlc            !<
     2043    INTEGER(iwp) ::  nxlf            !<
     2044    INTEGER(iwp) ::  nxl_on_file     !<
     2045    INTEGER(iwp) ::  nxrc            !<
     2046    INTEGER(iwp) ::  nxrf            !<
     2047    INTEGER(iwp) ::  nxr_on_file     !<
     2048    INTEGER(iwp) ::  nync            !<
     2049    INTEGER(iwp) ::  nynf            !<
     2050    INTEGER(iwp) ::  nyn_on_file     !<
     2051    INTEGER(iwp) ::  nysc            !<
     2052    INTEGER(iwp) ::  nysf            !<
     2053    INTEGER(iwp) ::  nys_on_file     !<
     2054
     2055    LOGICAL, INTENT(OUT)  ::  found
     2056
     2057    REAL(wp), &
     2058       DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d   !<
     2059       
     2060    found = .FALSE.
    20392061   
    20402062    IF ( read_restart_data_salsa )  THEN
    2041        READ ( 13 )  field_char
    2042 
    2043        DO  WHILE ( TRIM( field_char ) /= '*** end salsa ***' )
     2063   
     2064       SELECT CASE ( restart_string(1:length) )
    20442065       
    2045           DO b = 1, nbins
    2046              READ ( 13 )  aero(b)%vlolim
    2047              READ ( 13 )  aero(b)%vhilim
    2048              READ ( 13 )  aero(b)%dmid
    2049              READ ( 13 )  aero(b)%vratiohi
    2050              READ ( 13 )  aero(b)%vratiolo
    2051           ENDDO
    2052 
    2053           DO  i = nxl, nxr
    2054              DO  j = nys, nyn
    2055                 DO k = nzb+1, nzt
    2056                    DO  b = 1, nbins
    2057                       READ ( 13 )  aerosol_number(b)%conc(k,j,i)
    2058                       DO  c = 1, ncc_tot
    2059                          READ ( 13 )  aerosol_mass((c-1)*nbins+b)%conc(k,j,i)
    2060                       ENDDO
    2061                    ENDDO
    2062                    IF ( .NOT. salsa_gases_from_chem )  THEN
    2063                       DO  g = 1, ngast
    2064                          READ ( 13 )  salsa_gas(g)%conc(k,j,i)
    2065                       ENDDO
    2066                    ENDIF
    2067                 ENDDO
     2066          CASE ( 'aerosol_number' )
     2067             DO  b = 1, nbins
     2068                IF ( k == 1 )  READ ( 13 ) tmp_3d
     2069                aerosol_number(b)%conc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     2070                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2071                found = .TRUE.
    20682072             ENDDO
    2069           ENDDO
    2070 
    2071           READ ( 13 )  field_char
    2072 
    2073        ENDDO
    20742073       
     2074          CASE ( 'aerosol_mass' )
     2075             DO  c = 1, ncc_tot * nbins
     2076                IF ( k == 1 )  READ ( 13 ) tmp_3d
     2077                aerosol_mass(c)%conc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     2078                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2079                found = .TRUE.
     2080             ENDDO
     2081         
     2082          CASE ( 'salsa_gas' )
     2083             DO  g = 1, ngast
     2084                IF ( k == 1 )  READ ( 13 ) tmp_3d
     2085                salsa_gas(g)%conc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =  &
     2086                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2087                found = .TRUE.
     2088             ENDDO
     2089             
     2090          CASE DEFAULT
     2091             found = .FALSE.
     2092             
     2093       END SELECT
    20752094    ENDIF
    20762095
     
    20932112    INTEGER(iwp) ::  c  !<
    20942113    INTEGER(iwp) ::  g  !<
    2095     INTEGER(iwp) ::  i  !<
    2096     INTEGER(iwp) ::  j  !<
    2097     INTEGER(iwp) ::  k  !<
    20982114   
    20992115    IF ( write_binary  .AND.  write_binary_salsa )  THEN
    2100        
    2101        DO b = 1, nbins
    2102           WRITE ( 14 )  aero(b)%vlolim
    2103           WRITE ( 14 )  aero(b)%vhilim
    2104           WRITE ( 14 )  aero(b)%dmid
    2105           WRITE ( 14 )  aero(b)%vratiohi
    2106           WRITE ( 14 )  aero(b)%vratiolo
     2116   
     2117       CALL wrd_write_string( 'aerosol_number' )
     2118       DO  b = 1, nbins
     2119          WRITE ( 14 )  aerosol_number(b)%conc
    21072120       ENDDO
    21082121       
    2109        DO  i = nxl, nxr
    2110           DO  j = nys, nyn
    2111              DO  k = nzb+1, nzt
    2112                 DO  b = 1, nbins
    2113                    WRITE ( 14 )  aerosol_number(b)%conc(k,j,i)
    2114                    DO  c = 1, ncc_tot
    2115                       WRITE ( 14 )  aerosol_mass((c-1)*nbins+b)%conc(k,j,i)
    2116                    ENDDO
    2117                 ENDDO
    2118                 IF ( .NOT. salsa_gases_from_chem )  THEN
    2119                    DO  g = 1, ngast
    2120                       WRITE ( 14 )  salsa_gas(g)%conc(k,j,i)
    2121                    ENDDO
    2122                 ENDIF
    2123              ENDDO
    2124           ENDDO
     2122       CALL wrd_write_string( 'aerosol_mass' )
     2123       DO  c = 1, nbins*ncc_tot
     2124          WRITE ( 14 )  aerosol_mass(c)%conc
    21252125       ENDDO
    21262126       
    2127        WRITE ( 14 )  '*** end salsa ***   '
     2127       CALL wrd_write_string( 'salsa_gas' )
     2128       DO  g = 1, ngast
     2129          WRITE ( 14 )  salsa_gas(g)%conc
     2130       ENDDO
    21282131         
    21292132    ENDIF
     
    27652768    USE arrays_3d,                                                             &
    27662769        ONLY: p, pt, q, zu
    2767         
     2770       
    27682771    USE basic_constants_and_equations_mod,                                     &
    2769         ONLY:  barometric_formula, exner_function, ideal_gas_law_rho, magnus 
    2770         
     2772        ONLY:  barometric_formula, exner_function, ideal_gas_law_rho, magnus
     2773       
    27712774    USE control_parameters,                                                    &
    27722775        ONLY: pt_surface, surface_pressure
    2773         
     2776       
    27742777    IMPLICIT NONE
    27752778   
    27762779    INTEGER(iwp), INTENT(in) ::  i
    2777     INTEGER(iwp), INTENT(in) ::  j 
     2780    INTEGER(iwp), INTENT(in) ::  j
    27782781    REAL(wp), DIMENSION(:), INTENT(inout) ::  adn_ij
    2779     REAL(wp), DIMENSION(:), INTENT(inout) ::  p_ij        
     2782    REAL(wp), DIMENSION(:), INTENT(inout) ::  p_ij       
    27802783    REAL(wp), DIMENSION(:), INTENT(inout) ::  temp_ij
    27812784    REAL(wp), DIMENSION(:), INTENT(inout), OPTIONAL ::  cw_ij
    2782     REAL(wp), DIMENSION(:), INTENT(inout), OPTIONAL ::  cs_ij 
    2783     REAL(wp), DIMENSION(nzb:nzt+1) ::  e_s !< saturation vapour pressure 
     2785    REAL(wp), DIMENSION(:), INTENT(inout), OPTIONAL ::  cs_ij
     2786    REAL(wp), DIMENSION(nzb:nzt+1) ::  e_s !< saturation vapour pressure
    27842787                                           !< over water (Pa)
    27852788    REAL(wp) ::  t_surface !< absolute surface temperature (K)
    27862789!
    27872790!-- Pressure p_ijk (Pa) = hydrostatic pressure + perturbation pressure (p)
    2788     t_surface = pt_surface * exner_function( surface_pressure )
    2789     p_ij(:) = 100.0_wp * barometric_formula( zu, t_surface, surface_pressure ) &
     2791    t_surface = pt_surface * exner_function( surface_pressure * 100.0_wp )
     2792    p_ij(:) = barometric_formula( zu, t_surface, surface_pressure * 100.0_wp ) &
    27902793              + p(:,j,i)
    27912794!             
    27922795!-- Absolute ambient temperature (K)
    2793     temp_ij(:) = pt(:,j,i) * exner_function( p_ij(:) )        
    2794 !
    2795 !-- Air density 
     2796    temp_ij(:) = pt(:,j,i) * exner_function( p_ij(:) )       
     2797!
     2798!-- Air density
    27962799    adn_ij(:) = ideal_gas_law_rho( p_ij(:), temp_ij(:) )
    27972800!
     
    28032806!-- Saturation mixing ratio r_s (kg/kg) from vapour pressure at temp (Pa)
    28042807    IF ( PRESENT( cs_ij ) )  THEN
    2805        e_s(:) = magnus( temp_ij(:) )
    2806        cs_ij(:) = ( 0.622_wp * e_s / ( p_ij(:) - e_s(:) ) ) * adn_ij(:) 
     2808       e_s(:) = 611.0_wp * EXP( alv_d_rv * ( 3.6609E-3_wp - 1.0_wp /           &
     2809                temp_ij(:) ) )! magnus( temp_ij(:) )
     2810       cs_ij(:) = ( 0.622_wp * e_s / ( p_ij(:) - e_s(:) ) ) * adn_ij(:)
    28072811    ENDIF
    2808    
     2812
    28092813 END SUBROUTINE salsa_thrm_ij
    28102814
     
    78777881   
    78787882    USE netcdf_data_input_mod,                                                 &
    7879         ONLY:  get_attribute, netcdf_data_input_get_dimension_length,          &
    7880                get_variable, open_read_file
     7883        ONLY:  get_attribute, get_variable,                                    &
     7884               netcdf_data_input_get_dimension_length, open_read_file
    78817885   
    78827886    USE surface_mod,                                                           &
     
    79857989!                             
    79867990!--       Index of gaseous compounds
    7987           CALL netcdf_data_input_get_dimension_length( id_fchem, ng_file, "nspecies" ) 
     7991          CALL netcdf_data_input_get_dimension_length( id_fchem, ng_file,      &
     7992                                                       "nspecies" ) 
    79887993          IF ( ng_file < 5 )  THEN
    79897994             message_string = 'Some gaseous emissions missing.'
     
    82008205!
    82018206!--    Emission time step
    8202        CALL netcdf_data_input_get_dimension_length( id_faero, n_dt, 'dt_emission' )
     8207       CALL netcdf_data_input_get_dimension_length( id_faero, n_dt,            &
     8208                                                    'dt_emission' )
    82038209       IF ( n_dt > 1 )  THEN
    82048210          CALL location_message( '    salsa_set_source: hourly emission data'//&
     
    84108416       DO  n = 1, ncat_emission
    84118417          DO  g = 1, ngast
    8412              IF ( .NOT. salsa_gas(g)%source(n,j,i) > 0.0_wp )  THEN
     8418             IF ( salsa_gas(g)%source(n,j,i) < 0.0_wp )  THEN
    84138419                salsa_gas(g)%source(n,j,i) = 0.0_wp
    84148420                CYCLE
     
    91389144                DO  j = nysg, nyng
    91399145                   DO  k = nzb, nzt+1
    9140                       PM25_av(k,j,i) = PM25_av(k,j,i)                          &
    9141                                         / REAL( average_count_3d, KIND=wp )
     9146                      PM25_av(k,j,i) = PM25_av(k,j,i) /                        &
     9147                                       REAL( average_count_3d, KIND=wp )
    91429148                   ENDDO
    91439149                ENDDO
     
    91489154                DO  j = nysg, nyng
    91499155                   DO  k = nzb, nzt+1
    9150                       PM10_av(k,j,i) = PM10_av(k,j,i)                          &
    9151                                         / REAL( average_count_3d, KIND=wp )
     9156                      PM10_av(k,j,i) = PM10_av(k,j,i) /                        &
     9157                                       REAL( average_count_3d, KIND=wp )
    91529158                   ENDDO
    91539159                ENDDO
     
    91689174                   DO  j = nysg, nyng
    91699175                      DO  k = nzb, nzt+1
    9170                          to_be_resorted(k,j,i) = to_be_resorted(k,j,i)         &
    9171                                              / REAL( average_count_3d, KIND=wp )
     9176                         to_be_resorted(k,j,i) = to_be_resorted(k,j,i) /       &
     9177                                                 REAL( average_count_3d, KIND=wp )
    91729178                      ENDDO
    91739179                   ENDDO
     
    91889194!> Subroutine defining 2D output variables
    91899195!------------------------------------------------------------------------------!
    9190  SUBROUTINE salsa_data_output_2d( av, variable, found, grid, mode,             &
    9191                                       local_pf, two_d )
     9196 SUBROUTINE salsa_data_output_2d( av, variable, found, grid, mode, local_pf,   &
     9197                                  two_d, nzb_do, nzt_do )
    91929198 
    91939199    USE indices
    91949200
    91959201    USE kinds
     9202
    91969203
    91979204    IMPLICIT NONE
     
    92029209    CHARACTER (LEN=5) ::  vari       !<  trimmed format of variable
    92039210
    9204     INTEGER(iwp) ::  av   !<
    9205     INTEGER(iwp) ::  b    !<
    9206     INTEGER(iwp) ::  c    !<
    9207     INTEGER(iwp) ::  i    !<
    9208     INTEGER(iwp) ::  icc  !< index of a chemical compound
    9209     INTEGER(iwp) ::  j    !<
    9210     INTEGER(iwp) ::  k    !<
    9211 
    9212     LOGICAL ::  found   !<
    9213     LOGICAL ::  two_d   !< flag parameter that indicates 2D variables
    9214                         !< (horizontal cross sections)
    9215    
    9216     REAL(wp) ::  df       !< For calculating LDSA: fraction of particles
    9217                           !< depositing in the alveolar (or tracheobronchial)
    9218                           !< region of the lung. Depends on the particle size
    9219     REAL(wp) ::  mean_d   !< Particle diameter in micrometres
    9220     REAL(wp) ::  nc       !< Particle number concentration in units 1/cm**3
    9221     REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb:nzt+1) ::  local_pf !< local
    9222        !< array to which output data is resorted to
    9223     REAL(wp) ::  temp_bin !<
    9224     REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to
    9225                                                      !< selected output variable
     9211    INTEGER(iwp) ::  av      !<
     9212    INTEGER(iwp) ::  b       !< running index: size bins
     9213    INTEGER(iwp) ::  c       !< running index: mass bins
     9214    INTEGER(iwp) ::  i       !<
     9215    INTEGER(iwp) ::  icc     !< index of a chemical compound
     9216    INTEGER(iwp) ::  j       !<
     9217    INTEGER(iwp) ::  k       !<
     9218    INTEGER(iwp) ::  nzb_do  !<
     9219    INTEGER(iwp) ::  nzt_do  !<
     9220
     9221    LOGICAL ::  found        !<
     9222    LOGICAL ::  two_d        !< flag parameter that indicates 2D variables
     9223                             !< (horizontal cross sections)
     9224   
     9225    REAL(wp) ::  df          !< For calculating LDSA: fraction of particles
     9226                             !< depositing in the alveolar (or tracheobronchial)
     9227                             !< region of the lung. Depends on the particle size
     9228    REAL(wp) ::  fill_value = -9999.0_wp  !< value for the _FillValue attribute                         
     9229    REAL(wp) ::  mean_d      !< Particle diameter in micrometres
     9230    REAL(wp) ::  nc          !< Particle number concentration in units 1/cm**3
     9231    REAL(wp) ::  temp_bin    !< temporary array for calculating output variables
     9232   
     9233    REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf  !< output
     9234   
     9235    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted           !< pointer
     9236   
    92269237   
    92279238    found = .TRUE.
     
    92389249          DO  i = nxl, nxr
    92399250             DO  j = nys, nyn
    9240                 DO  k = nzb, nzt+1
     9251                DO  k = nzb_do, nzt_do
    92419252                   local_pf(i,j,k) = MERGE( salsa_gas(icc)%conc(k,j,i),        &
    9242                                             REAL( -999.0_wp, KIND = wp ),      &
     9253                                            REAL( fill_value, KIND = wp ),     &
    92439254                                            BTEST( wall_flags_0(k,j,i), 0 ) )
    92449255                ENDDO
     
    92539264          DO  i = nxl, nxr
    92549265             DO  j = nys, nyn
    9255                 DO  k = nzb, nzt+1
     9266                DO  k = nzb_do, nzt_do
    92569267                   local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),             &
    9257                                             REAL( -999.0_wp, KIND = wp ),      &
     9268                                            REAL( fill_value, KIND = wp ),     &
    92589269                                            BTEST( wall_flags_0(k,j,i), 0 ) )
    92599270                ENDDO
     
    92689279          DO  i = nxl, nxr
    92699280             DO  j = nys, nyn
    9270                 DO  k = nzb, nzt+1
     9281                DO  k = nzb_do, nzt_do
    92719282                   temp_bin = 0.0_wp
    92729283                   DO  b = 1, nbins
     
    92869297                      temp_bin = temp_bin + pi * mean_d**2.0_wp * df * nc
    92879298                   ENDDO
    9288                    local_pf(i,j,k) = MERGE( temp_bin,  REAL( -999.0_wp,        &
    9289                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9299                   local_pf(i,j,k) = MERGE( temp_bin, REAL( fill_value, KIND = &
     9300                                            wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    92909301                ENDDO
    92919302             ENDDO
     
    92949305          DO  i = nxl, nxr
    92959306             DO  j = nys, nyn
    9296                 DO  k = nzb, nzt+1
    9297                    local_pf(i,j,k) = MERGE( LDSA_av(k,j,i), REAL( -999.0_wp,   &
    9298                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9307                DO  k = nzb_do, nzt_do
     9308                   local_pf(i,j,k) = MERGE( LDSA_av(k,j,i), REAL( fill_value,  &
     9309                                            KIND = wp ), BTEST(                &
     9310                                            wall_flags_0(k,j,i), 0 ) )
    92999311                ENDDO
    93009312             ENDDO
     
    93039315
    93049316       IF ( mode == 'xy' )  grid = 'zu'
    9305    
    9306     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin1' )  THEN
     9317       
     9318    ELSEIF ( TRIM( variable(1:5) ) == 'N_bin' )  THEN
     9319       
     9320       vari = TRIM( variable( 6:LEN( TRIM( variable ) ) - 3 ) )
     9321   
     9322       IF ( TRIM( vari ) == '1' ) b = 1
     9323       IF ( TRIM( vari ) == '2' ) b = 2
     9324       IF ( TRIM( vari ) == '3' ) b = 3
     9325       IF ( TRIM( vari ) == '4' ) b = 4
     9326       IF ( TRIM( vari ) == '5' ) b = 5
     9327       IF ( TRIM( vari ) == '6' ) b = 6
     9328       IF ( TRIM( vari ) == '7' ) b = 7
     9329       IF ( TRIM( vari ) == '8' ) b = 8
     9330       IF ( TRIM( vari ) == '9' ) b = 9
     9331       IF ( TRIM( vari ) == '10' ) b = 10
     9332       IF ( TRIM( vari ) == '11' ) b = 11
     9333       IF ( TRIM( vari ) == '12' ) b = 12
     9334       
    93079335       IF ( av == 0 )  THEN
    93089336          DO  i = nxl, nxr
    93099337             DO  j = nys, nyn
    9310                 DO  k = nzb, nzt+1                     
    9311                    local_pf(i,j,k) = MERGE( aerosol_number(1)%conc(k,j,i),     &
    9312                                             REAL( -999.0_wp, KIND = wp ),      &
     9338                DO  k = nzb_do, nzt_do                     
     9339                   local_pf(i,j,k) = MERGE( aerosol_number(b)%conc(k,j,i),     &
     9340                                            REAL( fill_value, KIND = wp ),     &
    93139341                                            BTEST( wall_flags_0(k,j,i), 0 ) )
    93149342                ENDDO
     
    93189346          DO  i = nxl, nxr
    93199347             DO  j = nys, nyn
    9320                 DO  k = nzb, nzt+1                     
    9321                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,1),                 &
    9322                                             REAL( -999.0_wp, KIND = wp ),      &
     9348                DO  k = nzb_do, nzt_do                     
     9349                   local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,b),                 &
     9350                                            REAL( fill_value, KIND = wp ),     &
    93239351                                            BTEST( wall_flags_0(k,j,i), 0 ) )
    93249352                ENDDO
     
    93269354          ENDDO
    93279355       ENDIF
    9328    
    9329     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin2' )  THEN
     9356       
     9357       IF ( mode == 'xy' )  grid = 'zu'
     9358   
     9359    ELSEIF ( TRIM( variable(1:4) ) == 'Ntot' )  THEN
    93309360       IF ( av == 0 )  THEN
    93319361          DO  i = nxl, nxr
    93329362             DO  j = nys, nyn
    9333                 DO  k = nzb, nzt+1                     
    9334                    local_pf(i,j,k) = MERGE( aerosol_number(2)%conc(k,j,i),     &
    9335                                             REAL( -999.0_wp, KIND = wp ),      &
    9336                                             BTEST( wall_flags_0(k,j,i), 0 ) )
     9363                DO  k = nzb_do, nzt_do
     9364                   temp_bin = 0.0_wp
     9365                   DO  b = 1, nbins
     9366                      temp_bin = temp_bin + aerosol_number(b)%conc(k,j,i)
     9367                   ENDDO
     9368                   local_pf(i,j,k) = MERGE( temp_bin, REAL( fill_value, KIND = &
     9369                                            wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    93379370                ENDDO
    93389371             ENDDO
     
    93419374          DO  i = nxl, nxr
    93429375             DO  j = nys, nyn
    9343                 DO  k = nzb, nzt+1                     
    9344                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,2),                 &
    9345                                             REAL( -999.0_wp, KIND = wp ),      &
    9346                                             BTEST( wall_flags_0(k,j,i), 0 ) )
     9376                DO  k = nzb_do, nzt_do
     9377                   local_pf(i,j,k) = MERGE( Ntot_av(k,j,i), REAL( fill_value,  &
     9378                                            KIND = wp ), BTEST(                &
     9379                                            wall_flags_0(k,j,i), 0 ) )
    93479380                ENDDO
    93489381             ENDDO
    93499382          ENDDO
    93509383       ENDIF
     9384
     9385       IF ( mode == 'xy' )  grid = 'zu'
     9386   
     9387   
     9388    ELSEIF ( TRIM( variable(1:5) ) == 'm_bin' )  THEN
    93519389       
    9352     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin3' )  THEN
     9390       vari = TRIM( variable( 6:LEN( TRIM( variable ) ) - 3 ) )
     9391   
     9392       IF ( TRIM( vari ) == '1' ) b = 1
     9393       IF ( TRIM( vari ) == '2' ) b = 2
     9394       IF ( TRIM( vari ) == '3' ) b = 3
     9395       IF ( TRIM( vari ) == '4' ) b = 4
     9396       IF ( TRIM( vari ) == '5' ) b = 5
     9397       IF ( TRIM( vari ) == '6' ) b = 6
     9398       IF ( TRIM( vari ) == '7' ) b = 7
     9399       IF ( TRIM( vari ) == '8' ) b = 8
     9400       IF ( TRIM( vari ) == '9' ) b = 9
     9401       IF ( TRIM( vari ) == '10' ) b = 10
     9402       IF ( TRIM( vari ) == '11' ) b = 11
     9403       IF ( TRIM( vari ) == '12' ) b = 12
     9404       
    93539405       IF ( av == 0 )  THEN
    93549406          DO  i = nxl, nxr
    93559407             DO  j = nys, nyn
    9356                 DO  k = nzb, nzt+1                     
    9357                    local_pf(i,j,k) = MERGE( aerosol_number(3)%conc(k,j,i),     &
    9358                                             REAL( -999.0_wp, KIND = wp ),      &
    9359                                             BTEST( wall_flags_0(k,j,i), 0 ) )
     9408                DO  k = nzb_do, nzt_do   
     9409                   temp_bin = 0.0_wp
     9410                   DO  c = b, ncc_tot * nbins, nbins
     9411                      temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
     9412                   ENDDO
     9413                   local_pf(i,j,k) = MERGE( temp_bin, REAL( fill_value,        &
     9414                                            KIND = wp ), BTEST(                &
     9415                                            wall_flags_0(k,j,i), 0 ) )
    93609416                ENDDO
    93619417             ENDDO
     
    93649420          DO  i = nxl, nxr
    93659421             DO  j = nys, nyn
    9366                 DO  k = nzb, nzt+1                     
    9367                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,3),                 &
    9368                                             REAL( -999.0_wp, KIND = wp ),      &
    9369                                             BTEST( wall_flags_0(k,j,i), 0 ) )
     9422                DO  k = nzb_do, nzt_do                     
     9423                   local_pf(i,j,k) = MERGE( mbins_av(k,j,i,b), REAL( fill_value,&
     9424                                            KIND = wp ), BTEST(                &
     9425                                            wall_flags_0(k,j,i), 0 ) )
    93709426                ENDDO
    93719427             ENDDO
    93729428          ENDDO
    93739429       ENDIF
    9374    
    9375     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin4' )  THEN
    9376        IF ( av == 0 )  THEN
    9377           DO  i = nxl, nxr
    9378              DO  j = nys, nyn
    9379                 DO  k = nzb, nzt+1                     
    9380                    local_pf(i,j,k) = MERGE( aerosol_number(4)%conc(k,j,i),     &
    9381                                             REAL( -999.0_wp, KIND = wp ),      &
    9382                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9383                 ENDDO
    9384              ENDDO
    9385           ENDDO
    9386        ELSE
    9387           DO  i = nxl, nxr
    9388              DO  j = nys, nyn
    9389                 DO  k = nzb, nzt+1                     
    9390                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,4),                 &
    9391                                             REAL( -999.0_wp, KIND = wp ),      &
    9392                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9393                 ENDDO
    9394              ENDDO
    9395           ENDDO
    9396        ENDIF
    93979430       
    9398     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin5' )  THEN
    9399        IF ( av == 0 )  THEN
    9400           DO  i = nxl, nxr
    9401              DO  j = nys, nyn
    9402                 DO  k = nzb, nzt+1                     
    9403                    local_pf(i,j,k) = MERGE( aerosol_number(5)%conc(k,j,i),     &
    9404                                             REAL( -999.0_wp, KIND = wp ),      &
    9405                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9406                 ENDDO
    9407              ENDDO
    9408           ENDDO
    9409        ELSE
    9410           DO  i = nxl, nxr
    9411              DO  j = nys, nyn
    9412                 DO  k = nzb, nzt+1                     
    9413                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,5),                 &
    9414                                             REAL( -999.0_wp, KIND = wp ),      &
    9415                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9416                 ENDDO
    9417              ENDDO
    9418           ENDDO
    9419        ENDIF
    9420        
    9421     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin6' )  THEN
    9422        IF ( av == 0 )  THEN
    9423           DO  i = nxl, nxr
    9424              DO  j = nys, nyn
    9425                 DO  k = nzb, nzt+1                     
    9426                    local_pf(i,j,k) = MERGE( aerosol_number(6)%conc(k,j,i),     &
    9427                                             REAL( -999.0_wp, KIND = wp ),      &
    9428                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9429                 ENDDO
    9430              ENDDO
    9431           ENDDO
    9432        ELSE
    9433           DO  i = nxl, nxr
    9434              DO  j = nys, nyn
    9435                 DO  k = nzb, nzt+1                     
    9436                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,6),                 &
    9437                                             REAL( -999.0_wp, KIND = wp ),      &
    9438                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9439                 ENDDO
    9440              ENDDO
    9441           ENDDO
    9442        ENDIF
    9443        
    9444     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin7' )  THEN
    9445        IF ( av == 0 )  THEN
    9446           DO  i = nxl, nxr
    9447              DO  j = nys, nyn
    9448                 DO  k = nzb, nzt+1                     
    9449                    local_pf(i,j,k) = MERGE( aerosol_number(7)%conc(k,j,i),     &
    9450                                             REAL( -999.0_wp, KIND = wp ),      &
    9451                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9452                 ENDDO
    9453              ENDDO
    9454           ENDDO
    9455        ELSE
    9456           DO  i = nxl, nxr
    9457              DO  j = nys, nyn
    9458                 DO  k = nzb, nzt+1                     
    9459                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,7),                 &
    9460                                             REAL( -999.0_wp, KIND = wp ),      &
    9461                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9462                 ENDDO
    9463              ENDDO
    9464           ENDDO
    9465        ENDIF
    9466        
    9467     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin8' )  THEN
    9468        IF ( av == 0 )  THEN
    9469           DO  i = nxl, nxr
    9470              DO  j = nys, nyn
    9471                 DO  k = nzb, nzt+1                     
    9472                    local_pf(i,j,k) = MERGE( aerosol_number(8)%conc(k,j,i),     &
    9473                                             REAL( -999.0_wp, KIND = wp ),      &
    9474                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9475                 ENDDO
    9476              ENDDO
    9477           ENDDO
    9478        ELSE
    9479           DO  i = nxl, nxr
    9480              DO  j = nys, nyn
    9481                 DO  k = nzb, nzt+1                     
    9482                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,8),                 &
    9483                                             REAL( -999.0_wp, KIND = wp ),      &
    9484                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9485                 ENDDO
    9486              ENDDO
    9487           ENDDO
    9488        ENDIF
    9489        
    9490     ELSEIF ( TRIM( variable(1:6) ) == 'N_bin9' )  THEN
    9491        IF ( av == 0 )  THEN
    9492           DO  i = nxl, nxr
    9493              DO  j = nys, nyn
    9494                 DO  k = nzb, nzt+1                     
    9495                    local_pf(i,j,k) = MERGE( aerosol_number(9)%conc(k,j,i),     &
    9496                                             REAL( -999.0_wp, KIND = wp ),      &
    9497                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9498                 ENDDO
    9499              ENDDO
    9500           ENDDO
    9501        ELSE
    9502           DO  i = nxl, nxr
    9503              DO  j = nys, nyn
    9504                 DO  k = nzb, nzt+1                     
    9505                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,9),                 &
    9506                                             REAL( -999.0_wp, KIND = wp ),      &
    9507                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9508                 ENDDO
    9509              ENDDO
    9510           ENDDO
    9511        ENDIF
    9512    
    9513     ELSEIF ( TRIM( variable(1:7) ) == 'N_bin10' )  THEN
    9514        IF ( av == 0 )  THEN
    9515           DO  i = nxl, nxr
    9516              DO  j = nys, nyn
    9517                 DO  k = nzb, nzt+1                     
    9518                    local_pf(i,j,k) = MERGE( aerosol_number(10)%conc(k,j,i),    &
    9519                                             REAL( -999.0_wp, KIND = wp ),      &
    9520                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9521                 ENDDO
    9522              ENDDO
    9523           ENDDO
    9524        ELSE
    9525           DO  i = nxl, nxr
    9526              DO  j = nys, nyn
    9527                 DO  k = nzb, nzt+1                     
    9528                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,10),                &
    9529                                             REAL( -999.0_wp, KIND = wp ),      &
    9530                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9531                 ENDDO
    9532              ENDDO
    9533           ENDDO
    9534        ENDIF
    9535        
    9536     ELSEIF ( TRIM( variable(1:7) ) == 'N_bin11' )  THEN
    9537        IF ( av == 0 )  THEN
    9538           DO  i = nxl, nxr
    9539              DO  j = nys, nyn
    9540                 DO  k = nzb, nzt+1                     
    9541                    local_pf(i,j,k) = MERGE( aerosol_number(11)%conc(k,j,i),    &
    9542                                             REAL( -999.0_wp, KIND = wp ),      &
    9543                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9544                 ENDDO
    9545              ENDDO
    9546           ENDDO
    9547        ELSE
    9548           DO  i = nxl, nxr
    9549              DO  j = nys, nyn
    9550                 DO  k = nzb, nzt+1                     
    9551                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,11),                &
    9552                                             REAL( -999.0_wp, KIND = wp ),      &
    9553                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9554                 ENDDO
    9555              ENDDO
    9556           ENDDO
    9557        ENDIF
    9558        
    9559     ELSEIF ( TRIM( variable(1:7) ) == 'N_bin12' )  THEN
    9560        IF ( av == 0 )  THEN
    9561           DO  i = nxl, nxr
    9562              DO  j = nys, nyn
    9563                 DO  k = nzb, nzt+1                     
    9564                    local_pf(i,j,k) = MERGE( aerosol_number(12)%conc(k,j,i),    &
    9565                                             REAL( -999.0_wp, KIND = wp ),      &
    9566                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9567                 ENDDO
    9568              ENDDO
    9569           ENDDO
    9570        ELSE
    9571           DO  i = nxl, nxr
    9572              DO  j = nys, nyn
    9573                 DO  k = nzb, nzt+1                     
    9574                    local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,12),                &
    9575                                             REAL( -999.0_wp, KIND = wp ),      &
    9576                                             BTEST( wall_flags_0(k,j,i), 0 ) )
    9577                 ENDDO
    9578              ENDDO
    9579           ENDDO
    9580        ENDIF
    9581    
    9582     ELSEIF ( TRIM( variable(1:4) ) == 'Ntot' )  THEN
    9583        IF ( av == 0 )  THEN
    9584           DO  i = nxl, nxr
    9585              DO  j = nys, nyn
    9586                 DO  k = nzb, nzt+1
    9587                    temp_bin = 0.0_wp
    9588                    DO  b = 1, nbins
    9589                       temp_bin = temp_bin + aerosol_number(b)%conc(k,j,i)
    9590                    ENDDO
    9591                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9592                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9593                 ENDDO
    9594              ENDDO
    9595           ENDDO
    9596        ELSE
    9597           DO  i = nxl, nxr
    9598              DO  j = nys, nyn
    9599                 DO  k = nzb, nzt+1
    9600                    local_pf(i,j,k) = MERGE( Ntot_av(k,j,i), REAL( -999.0_wp,   &
    9601                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9602                 ENDDO
    9603              ENDDO
    9604           ENDDO
    9605        ENDIF
    9606 
    96079431       IF ( mode == 'xy' )  grid = 'zu'
    9608    
    9609    
    9610     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin1' )  THEN
    9611        IF ( av == 0 )  THEN
    9612           DO  i = nxl, nxr
    9613              DO  j = nys, nyn
    9614                 DO  k = nzb, nzt+1   
    9615                    temp_bin = 0.0_wp
    9616                    DO  c = 1, ncc_tot*nbins, nbins
    9617                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9618                    ENDDO
    9619                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9620                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9621                 ENDDO
    9622              ENDDO
    9623           ENDDO
    9624        ELSE
    9625           DO  i = nxl, nxr
    9626              DO  j = nys, nyn
    9627                 DO  k = nzb, nzt+1                     
    9628                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,1), REAL( -999.0_wp,&
    9629                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9630                 ENDDO
    9631              ENDDO
    9632           ENDDO
    9633        ENDIF
    9634    
    9635     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin2' )  THEN
    9636        IF ( av == 0 )  THEN
    9637           DO  i = nxl, nxr
    9638              DO  j = nys, nyn
    9639                 DO  k = nzb, nzt+1   
    9640                    temp_bin = 0.0_wp
    9641                    DO  c = 2, ncc_tot*nbins, nbins
    9642                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9643                    ENDDO
    9644                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9645                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9646                 ENDDO
    9647              ENDDO
    9648           ENDDO
    9649        ELSE
    9650           DO  i = nxl, nxr
    9651              DO  j = nys, nyn
    9652                 DO  k = nzb, nzt+1                     
    9653                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,2), REAL( -999.0_wp,&
    9654                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9655                 ENDDO
    9656              ENDDO
    9657           ENDDO
    9658        ENDIF
    9659        
    9660     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin3' )  THEN
    9661        IF ( av == 0 )  THEN
    9662           DO  i = nxl, nxr
    9663              DO  j = nys, nyn
    9664                 DO  k = nzb, nzt+1   
    9665                    temp_bin = 0.0_wp
    9666                    DO  c = 3, ncc_tot*nbins, nbins
    9667                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9668                    ENDDO
    9669                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9670                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9671                 ENDDO
    9672              ENDDO
    9673           ENDDO
    9674        ELSE
    9675           DO  i = nxl, nxr
    9676              DO  j = nys, nyn
    9677                 DO  k = nzb, nzt+1                     
    9678                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,3), REAL( -999.0_wp,&
    9679                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9680                 ENDDO
    9681              ENDDO
    9682           ENDDO
    9683        ENDIF
    9684        
    9685     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin4' )  THEN
    9686        IF ( av == 0 )  THEN
    9687           DO  i = nxl, nxr
    9688              DO  j = nys, nyn
    9689                 DO  k = nzb, nzt+1   
    9690                    temp_bin = 0.0_wp
    9691                    DO  c = 4, ncc_tot*nbins, nbins
    9692                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9693                    ENDDO
    9694                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9695                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9696                 ENDDO
    9697              ENDDO
    9698           ENDDO
    9699        ELSE
    9700           DO  i = nxl, nxr
    9701              DO  j = nys, nyn
    9702                 DO  k = nzb, nzt+1                     
    9703                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,4), REAL( -999.0_wp,&
    9704                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9705                 ENDDO
    9706              ENDDO
    9707           ENDDO
    9708        ENDIF
    9709        
    9710     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin5' )  THEN
    9711        IF ( av == 0 )  THEN
    9712           DO  i = nxl, nxr
    9713              DO  j = nys, nyn
    9714                 DO  k = nzb, nzt+1   
    9715                    temp_bin = 0.0_wp
    9716                    DO  c = 5, ncc_tot*nbins, nbins
    9717                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9718                    ENDDO
    9719                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9720                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9721                 ENDDO
    9722              ENDDO
    9723           ENDDO
    9724        ELSE
    9725           DO  i = nxl, nxr
    9726              DO  j = nys, nyn
    9727                 DO  k = nzb, nzt+1                     
    9728                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,5), REAL( -999.0_wp,&
    9729                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9730                 ENDDO
    9731              ENDDO
    9732           ENDDO
    9733        ENDIF
    9734        
    9735     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin6' )  THEN
    9736        IF ( av == 0 )  THEN
    9737           DO  i = nxl, nxr
    9738              DO  j = nys, nyn
    9739                 DO  k = nzb, nzt+1   
    9740                    temp_bin = 0.0_wp
    9741                    DO  c = 6, ncc_tot*nbins, nbins
    9742                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9743                    ENDDO
    9744                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9745                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9746                 ENDDO
    9747              ENDDO
    9748           ENDDO
    9749        ELSE
    9750           DO  i = nxl, nxr
    9751              DO  j = nys, nyn
    9752                 DO  k = nzb, nzt+1                     
    9753                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,6), REAL( -999.0_wp,&
    9754                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9755                 ENDDO
    9756              ENDDO
    9757           ENDDO
    9758        ENDIF
    9759        
    9760     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin7' )  THEN
    9761        IF ( av == 0 )  THEN
    9762           DO  i = nxl, nxr
    9763              DO  j = nys, nyn
    9764                 DO  k = nzb, nzt+1   
    9765                    temp_bin = 0.0_wp
    9766                    DO  c = 7, ncc_tot*nbins, nbins
    9767                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9768                    ENDDO
    9769                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9770                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9771                 ENDDO
    9772              ENDDO
    9773           ENDDO
    9774        ELSE
    9775           DO  i = nxl, nxr
    9776              DO  j = nys, nyn
    9777                 DO  k = nzb, nzt+1                     
    9778                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,7), REAL( -999.0_wp,&
    9779                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9780                 ENDDO
    9781              ENDDO
    9782           ENDDO
    9783        ENDIF
    9784        
    9785     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin8' )  THEN
    9786        IF ( av == 0 )  THEN
    9787           DO  i = nxl, nxr
    9788              DO  j = nys, nyn
    9789                 DO  k = nzb, nzt+1   
    9790                    temp_bin = 0.0_wp
    9791                    DO  c = 8, ncc_tot*nbins, nbins
    9792                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9793                    ENDDO
    9794                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9795                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9796                 ENDDO
    9797              ENDDO
    9798           ENDDO
    9799        ELSE
    9800           DO  i = nxl, nxr
    9801              DO  j = nys, nyn
    9802                 DO  k = nzb, nzt+1                     
    9803                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,8), REAL( -999.0_wp,&
    9804                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9805                 ENDDO
    9806              ENDDO
    9807           ENDDO
    9808        ENDIF
    9809        
    9810     ELSEIF ( TRIM( variable(1:6) ) == 'm_bin9' )  THEN
    9811        IF ( av == 0 )  THEN
    9812           DO  i = nxl, nxr
    9813              DO  j = nys, nyn
    9814                 DO  k = nzb, nzt+1   
    9815                    temp_bin = 0.0_wp
    9816                    DO  c = 9, ncc_tot*nbins, nbins
    9817                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9818                    ENDDO
    9819                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9820                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9821                 ENDDO
    9822              ENDDO
    9823           ENDDO
    9824        ELSE
    9825           DO  i = nxl, nxr
    9826              DO  j = nys, nyn
    9827                 DO  k = nzb, nzt+1                     
    9828                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,9), REAL( -999.0_wp,&
    9829                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9830                 ENDDO
    9831              ENDDO
    9832           ENDDO
    9833        ENDIF
    9834        
    9835     ELSEIF ( TRIM( variable(1:7) ) == 'm_bin10' )  THEN
    9836        IF ( av == 0 )  THEN
    9837           DO  i = nxl, nxr
    9838              DO  j = nys, nyn
    9839                 DO  k = nzb, nzt+1   
    9840                    temp_bin = 0.0_wp
    9841                    DO  c = 10, ncc_tot*nbins, nbins
    9842                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9843                    ENDDO
    9844                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9845                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9846                 ENDDO
    9847              ENDDO
    9848           ENDDO
    9849        ELSE
    9850           DO  i = nxl, nxr
    9851              DO  j = nys, nyn
    9852                 DO  k = nzb, nzt+1                     
    9853                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,10), REAL(          &
    9854                        -999.0_wp, KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9855                 ENDDO
    9856              ENDDO
    9857           ENDDO
    9858        ENDIF
    9859        
    9860     ELSEIF ( TRIM( variable(1:7) ) == 'm_bin11' )  THEN
    9861        IF ( av == 0 )  THEN
    9862           DO  i = nxl, nxr
    9863              DO  j = nys, nyn
    9864                 DO  k = nzb, nzt+1   
    9865                    temp_bin = 0.0_wp
    9866                    DO  c = 11, ncc_tot*nbins, nbins
    9867                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9868                    ENDDO
    9869                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9870                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9871                 ENDDO
    9872              ENDDO
    9873           ENDDO
    9874        ELSE
    9875           DO  i = nxl, nxr
    9876              DO  j = nys, nyn
    9877                 DO  k = nzb, nzt+1                     
    9878                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,11), REAL(          &
    9879                        -999.0_wp, KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9880                 ENDDO
    9881              ENDDO
    9882           ENDDO
    9883        ENDIF
    9884        
    9885     ELSEIF ( TRIM( variable(1:7) ) == 'm_bin12' )  THEN
    9886        IF ( av == 0 )  THEN
    9887           DO  i = nxl, nxr
    9888              DO  j = nys, nyn
    9889                 DO  k = nzb, nzt+1   
    9890                    temp_bin = 0.0_wp
    9891                    DO  c = 12, ncc_tot*nbins, nbins
    9892                       temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    9893                    ENDDO
    9894                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9895                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9896                 ENDDO
    9897              ENDDO
    9898           ENDDO
    9899        ELSE
    9900           DO  i = nxl, nxr
    9901              DO  j = nys, nyn
    9902                 DO  k = nzb, nzt+1                     
    9903                    local_pf(i,j,k) = MERGE( mbins_av(k,j,i,12), REAL(          &
    9904                        -999.0_wp, KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
    9905                 ENDDO
    9906              ENDDO
    9907           ENDDO
    9908        ENDIF
    99099432   
    99109433    ELSEIF ( TRIM( variable(1:5) ) == 'PM2.5' )  THEN
     
    99129435          DO  i = nxl, nxr
    99139436             DO  j = nys, nyn
    9914                 DO  k = nzb, nzt+1
     9437                DO  k = nzb_do, nzt_do
    99159438                   temp_bin = 0.0_wp
    99169439                   DO  b = 1, nbins
     
    99219444                      ENDIF
    99229445                   ENDDO
    9923                    local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,         &
    9924                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9446                   local_pf(i,j,k) = MERGE( temp_bin, REAL( fill_value,        &
     9447                                            KIND = wp ), BTEST(                &
     9448                                            wall_flags_0(k,j,i), 0 ) )
    99259449                ENDDO
    99269450             ENDDO
     
    99299453          DO  i = nxl, nxr
    99309454             DO  j = nys, nyn
    9931                 DO  k = nzb, nzt+1
    9932                    local_pf(i,j,k) = MERGE( PM25_av(k,j,i), REAL( -999.0_wp,   &
    9933                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9455                DO  k = nzb_do, nzt_do
     9456                   local_pf(i,j,k) = MERGE( PM25_av(k,j,i), REAL( fill_value,  &
     9457                                            KIND = wp ), BTEST(                &
     9458                                            wall_flags_0(k,j,i), 0 ) )
    99349459                ENDDO
    99359460             ENDDO
     
    99449469          DO  i = nxl, nxr
    99459470             DO  j = nys, nyn
    9946                 DO  k = nzb, nzt+1
     9471                DO  k = nzb_do, nzt_do
    99479472                   temp_bin = 0.0_wp
    99489473                   DO  b = 1, nbins
     
    99539478                      ENDIF
    99549479                   ENDDO
    9955                    local_pf(i,j,k) = MERGE( temp_bin,  REAL( -999.0_wp,        &
    9956                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9480                   local_pf(i,j,k) = MERGE( temp_bin,  REAL( fill_value,       &
     9481                                            KIND = wp ), BTEST(                &
     9482                                            wall_flags_0(k,j,i), 0 ) )
    99579483                ENDDO
    99589484             ENDDO
     
    99619487          DO  i = nxl, nxr
    99629488             DO  j = nys, nyn
    9963                 DO  k = nzb, nzt+1
    9964                    local_pf(i,j,k) = MERGE( PM10_av(k,j,i), REAL( -999.0_wp,   &
    9965                                  KIND = wp ),  BTEST( wall_flags_0(k,j,i), 0 ) )
     9489                DO  k = nzb_do, nzt_do
     9490                   local_pf(i,j,k) = MERGE( PM10_av(k,j,i), REAL( fill_value,  &
     9491                                            KIND = wp ), BTEST(                &
     9492                                            wall_flags_0(k,j,i), 0 ) )
    99669493                ENDDO
    99679494             ENDDO
     
    99789505             DO  i = nxl, nxr
    99799506                DO  j = nys, nyn
    9980                    DO  k = nzb, nzt+1
     9507                   DO  k = nzb_do, nzt_do
    99819508                      temp_bin = 0.0_wp
    99829509                      DO  c = ( icc-1 )*nbins+1, icc*nbins, 1
    99839510                         temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    99849511                      ENDDO
    9985                       local_pf(i,j,k) = MERGE( temp_bin, REAL( -999.0_wp,      &
    9986                                   KIND = wp ), BTEST( wall_flags_0(k,j,i), 0 ) )
     9512                      local_pf(i,j,k) = MERGE( temp_bin, REAL( fill_value,     &
     9513                                               KIND = wp ), BTEST(             &
     9514                                               wall_flags_0(k,j,i), 0 ) )
    99879515                   ENDDO
    99889516                ENDDO
     
    99989526             DO  i = nxl, nxr
    99999527                DO  j = nys, nyn
    10000                    DO  k = nzb, nzt+1
     9528                   DO  k = nzb_do, nzt_do
    100019529                      local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),          &
    10002                                                REAL( -999.0_wp, KIND = wp ),   &
     9530                                               REAL( fill_value, KIND = wp ),  &
    100039531                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    100049532                   ENDDO
     
    100079535          ENDIF
    100089536       ELSE
    10009           local_pf = 0.0_wp
     9537          local_pf = fill_value
    100109538       ENDIF
    100119539
     
    100279555!> Subroutine defining 3D output variables
    100289556!------------------------------------------------------------------------------!
    10029  SUBROUTINE salsa_data_output_3d( av, variable, found, local_pf )
     9557 SUBROUTINE salsa_data_output_3d( av, variable, found, local_pf, nzb_do,       &
     9558                                  nzt_do )
    100309559
    100319560    USE indices
    100329561
    100339562    USE kinds
     9563   
    100349564
    100359565    IMPLICIT NONE
     
    100379567    CHARACTER (LEN=*), INTENT(in) ::  variable   !<
    100389568   
    10039     INTEGER(iwp) ::  av   !<
    10040     INTEGER(iwp) ::  c    !<
    10041     INTEGER(iwp) ::  i    !<
    10042     INTEGER(iwp) ::  icc  !< index of a chemical compound
    10043     INTEGER(iwp) ::  j    !<
    10044     INTEGER(iwp) ::  k    !<
    10045     INTEGER(iwp) ::  n    !<
    10046 
    10047     LOGICAL ::  found   !<
    10048     REAL(wp) ::  df       !< For calculating LDSA: fraction of particles
    10049                           !< depositing in the alveolar (or tracheobronchial)
    10050                           !< region of the lung. Depends on the particle size
    10051     REAL(wp) ::  mean_d   !< Particle diameter in micrometres
    10052     REAL(wp) ::  nc       !< Particle number concentration in units 1/cm**3
    10053 
    10054     REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb:nzt+1) ::  local_pf  !< local
    10055                                   !< array to which output data is resorted to
    10056     REAL(wp) ::  temp_bin  !<
    10057     REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to
    10058                                                      !< selected output variable
     9569    INTEGER(iwp) ::  av      !<
     9570    INTEGER(iwp) ::  b       !< running index: size bins   
     9571    INTEGER(iwp) ::  c       !< running index: mass bins
     9572    INTEGER(iwp) ::  i       !<
     9573    INTEGER(iwp) ::  icc     !< index of a chemical compound
     9574    INTEGER(iwp) ::  j       !<
     9575    INTEGER(iwp) ::  k       !<
     9576    INTEGER(iwp) ::  nzb_do  !<
     9577    INTEGER(iwp) ::  nzt_do  !<   
     9578
     9579    LOGICAL ::  found      !<
     9580   
     9581    REAL(wp) ::  df        !< For calculating LDSA: fraction of particles
     9582                           !< depositing in the alveolar (or tracheobronchial)
     9583                           !< region of the lung. Depends on the particle size
     9584    REAL(wp) ::  fill_value = -9999.0_wp   !< value for the _FillValue attribute
     9585    REAL(wp) ::  mean_d    !< Particle diameter in micrometres
     9586    REAL(wp) ::  nc        !< Particle number concentration in units 1/cm**3
     9587    REAL(wp) ::  temp_bin  !< temporary array for calculating output variables   
     9588
     9589    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf  !< local
     9590   
     9591    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< pointer
     9592                                                     
    100599593       
    100609594    found     = .TRUE.
     
    100739607             DO  i = nxl, nxr
    100749608                DO  j = nys, nyn
    10075                    DO  k = nzb, nzt+1
     9609                   DO  k = nzb_do, nzt_do
    100769610                      local_pf(i,j,k) = MERGE( salsa_gas(icc)%conc(k,j,i),     &
    10077                                                REAL( -999.0_wp, KIND = wp ),   &
     9611                                               REAL( fill_value, KIND = wp ),  &
    100789612                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    100799613                   ENDDO
     
    100889622             DO  i = nxl, nxr
    100899623                DO  j = nys, nyn
    10090                    DO  k = nzb, nzt+1
     9624                   DO  k = nzb_do, nzt_do
    100919625                      local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),          &
    10092                                                REAL( -999.0_wp, KIND = wp ),   &
     9626                                               REAL( fill_value, KIND = wp ),  &
    100939627                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    100949628                   ENDDO
     
    101019635             DO  i = nxl, nxr
    101029636                DO  j = nys, nyn
    10103                    DO  k = nzb, nzt+1
     9637                   DO  k = nzb_do, nzt_do
    101049638                      temp_bin = 0.0_wp
    10105                       DO  n = 1, nbins
     9639                      DO  b = 1, nbins
    101069640!                     
    101079641!--                      Diameter in micrometres
    10108                          mean_d = 1.0E+6_wp * Ra_dry(k,j,i,n) * 2.0_wp
     9642                         mean_d = 1.0E+6_wp * Ra_dry(k,j,i,b) * 2.0_wp
    101099643!                               
    101109644!--                      Deposition factor: alveolar                             
    101119645                         df = ( 0.01555_wp / mean_d ) * ( EXP( -0.416_wp *     &
    10112                                 ( LOG( mean_d ) + 2.84_wp )**2.0_wp )          &
    10113                                   + 19.11_wp * EXP( -0.482_wp *                &
    10114                                   ( LOG( mean_d ) - 1.362_wp )**2.0_wp ) )
     9646                              ( LOG( mean_d ) + 2.84_wp )**2.0_wp ) + 19.11_wp &
     9647                              * EXP( -0.482_wp * ( LOG( mean_d ) - 1.362_wp    &
     9648                                )**2.0_wp ) )
    101159649!                                   
    101169650!--                      Number concentration in 1/cm3
    10117                          nc = 1.0E-6_wp * aerosol_number(n)%conc(k,j,i)
     9651                         nc = 1.0E-6_wp * aerosol_number(b)%conc(k,j,i)
    101189652!                         
    101199653!--                      Lung-deposited surface area LDSA (units mum2/cm3)
     
    101219655                      ENDDO
    101229656                      local_pf(i,j,k) = MERGE( temp_bin,                       &
    10123                                                REAL( -999.0_wp, KIND = wp ),   &
     9657                                               REAL( fill_value, KIND = wp ),  &
    101249658                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101259659                   ENDDO
     
    101299663             DO  i = nxl, nxr
    101309664                DO  j = nys, nyn
    10131                    DO  k = nzb, nzt+1
     9665                   DO  k = nzb_do, nzt_do
    101329666                      local_pf(i,j,k) = MERGE( LDSA_av(k,j,i),                 &
    10133                                                REAL( -999.0_wp, KIND = wp ),   &
     9667                                               REAL( fill_value, KIND = wp ),  &
     9668                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     9669                   ENDDO
     9670                ENDDO
     9671             ENDDO
     9672          ENDIF
     9673         
     9674       CASE ( 'N_bin1', 'N_bin2', 'N_bin3', 'N_bin4',   'N_bin5',  'N_bin6',   &
     9675              'N_bin7', 'N_bin8', 'N_bin9', 'N_bin10' , 'N_bin11', 'N_bin12' )
     9676          IF ( TRIM( variable(6:) ) == '1' ) b = 1
     9677          IF ( TRIM( variable(6:) ) == '2' ) b = 2
     9678          IF ( TRIM( variable(6:) ) == '3' ) b = 3
     9679          IF ( TRIM( variable(6:) ) == '4' ) b = 4
     9680          IF ( TRIM( variable(6:) ) == '5' ) b = 5
     9681          IF ( TRIM( variable(6:) ) == '6' ) b = 6
     9682          IF ( TRIM( variable(6:) ) == '7' ) b = 7
     9683          IF ( TRIM( variable(6:) ) == '8' ) b = 8
     9684          IF ( TRIM( variable(6:) ) == '9' ) b = 9
     9685          IF ( TRIM( variable(6:) ) == '10' ) b = 10
     9686          IF ( TRIM( variable(6:) ) == '11' ) b = 11
     9687          IF ( TRIM( variable(6:) ) == '12' ) b = 12
     9688         
     9689          IF ( av == 0 )  THEN
     9690             DO  i = nxl, nxr
     9691                DO  j = nys, nyn
     9692                   DO  k = nzb_do, nzt_do                     
     9693                      local_pf(i,j,k) = MERGE( aerosol_number(b)%conc(k,j,i),  &
     9694                                               REAL( fill_value, KIND = wp ),  &
     9695                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     9696                   ENDDO
     9697                ENDDO
     9698             ENDDO
     9699          ELSE
     9700             DO  i = nxl, nxr
     9701                DO  j = nys, nyn
     9702                   DO  k = nzb_do, nzt_do                     
     9703                      local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,b),              &
     9704                                               REAL( fill_value, KIND = wp ),  &
    101349705                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101359706                   ENDDO
     
    101429713             DO  i = nxl, nxr
    101439714                DO  j = nys, nyn
    10144                    DO  k = nzb, nzt+1
     9715                   DO  k = nzb_do, nzt_do
    101459716                      temp_bin = 0.0_wp
    10146                       DO  n = 1, nbins                         
    10147                          temp_bin = temp_bin + aerosol_number(n)%conc(k,j,i)
     9717                      DO  b = 1, nbins                         
     9718                         temp_bin = temp_bin + aerosol_number(b)%conc(k,j,i)
    101489719                      ENDDO
    101499720                      local_pf(i,j,k) = MERGE( temp_bin,                       &
    10150                                                REAL( -999.0_wp, KIND = wp ),   &
     9721                                               REAL( fill_value, KIND = wp ),  &
    101519722                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101529723                   ENDDO
     
    101569727             DO  i = nxl, nxr
    101579728                DO  j = nys, nyn
    10158                    DO  k = nzb, nzt+1
     9729                   DO  k = nzb_do, nzt_do
    101599730                      local_pf(i,j,k) = MERGE( Ntot_av(k,j,i),                 &
    10160                                                REAL( -999.0_wp, KIND = wp ),   &
     9731                                               REAL( fill_value, KIND = wp ),  &
     9732                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     9733                   ENDDO
     9734                ENDDO
     9735             ENDDO
     9736          ENDIF
     9737         
     9738       CASE ( 'm_bin1', 'm_bin2', 'm_bin3', 'm_bin4',   'm_bin5',  'm_bin6',   &
     9739              'm_bin7', 'm_bin8', 'm_bin9', 'm_bin10' , 'm_bin11', 'm_bin12' )
     9740          IF ( TRIM( variable(6:) ) == '1' ) b = 1
     9741          IF ( TRIM( variable(6:) ) == '2' ) b = 2
     9742          IF ( TRIM( variable(6:) ) == '3' ) b = 3
     9743          IF ( TRIM( variable(6:) ) == '4' ) b = 4
     9744          IF ( TRIM( variable(6:) ) == '5' ) b = 5
     9745          IF ( TRIM( variable(6:) ) == '6' ) b = 6
     9746          IF ( TRIM( variable(6:) ) == '7' ) b = 7
     9747          IF ( TRIM( variable(6:) ) == '8' ) b = 8
     9748          IF ( TRIM( variable(6:) ) == '9' ) b = 9
     9749          IF ( TRIM( variable(6:) ) == '10' ) b = 10
     9750          IF ( TRIM( variable(6:) ) == '11' ) b = 11
     9751          IF ( TRIM( variable(6:) ) == '12' ) b = 12
     9752         
     9753          IF ( av == 0 )  THEN
     9754             DO  i = nxl, nxr
     9755                DO  j = nys, nyn
     9756                   DO  k = nzb_do, nzt_do   
     9757                      temp_bin = 0.0_wp
     9758                      DO  c = b, ncc_tot * nbins, nbins
     9759                         temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
     9760                      ENDDO
     9761                      local_pf(i,j,k) = MERGE( temp_bin,                       &
     9762                                               REAL( fill_value, KIND = wp ),  &
     9763                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     9764                   ENDDO
     9765                ENDDO
     9766             ENDDO
     9767          ELSE
     9768             DO  i = nxl, nxr
     9769                DO  j = nys, nyn
     9770                   DO  k = nzb_do, nzt_do                     
     9771                      local_pf(i,j,k) = MERGE( mbins_av(k,j,i,b),              &
     9772                                               REAL( fill_value, KIND = wp ),  &
    101619773                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101629774                   ENDDO
     
    101699781             DO  i = nxl, nxr
    101709782                DO  j = nys, nyn
    10171                    DO  k = nzb, nzt+1
     9783                   DO  k = nzb_do, nzt_do
    101729784                      temp_bin = 0.0_wp
    10173                       DO  n = 1, nbins
    10174                          IF ( 2.0_wp * Ra_dry(k,j,i,n) <= 2.5E-6_wp )  THEN
    10175                             DO  c = n, nbins*ncc, nbins
     9785                      DO  b = 1, nbins
     9786                         IF ( 2.0_wp * Ra_dry(k,j,i,b) <= 2.5E-6_wp )  THEN
     9787                            DO  c = b, nbins * ncc, nbins
    101769788                               temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    101779789                            ENDDO
     
    101799791                      ENDDO
    101809792                      local_pf(i,j,k) = MERGE( temp_bin,                       &
    10181                                                REAL( -999.0_wp, KIND = wp ),   &
     9793                                               REAL( fill_value, KIND = wp ),  &
    101829794                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101839795                   ENDDO
     
    101879799             DO  i = nxl, nxr
    101889800                DO  j = nys, nyn
    10189                    DO  k = nzb, nzt+1
     9801                   DO  k = nzb_do, nzt_do
    101909802                      local_pf(i,j,k) = MERGE( PM25_av(k,j,i),                 &
    10191                                                REAL( -999.0_wp, KIND = wp ),   &
     9803                                               REAL( fill_value, KIND = wp ),  &
    101929804                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    101939805                   ENDDO
     
    102009812             DO  i = nxl, nxr
    102019813                DO  j = nys, nyn
    10202                    DO  k = nzb, nzt+1
     9814                   DO  k = nzb_do, nzt_do
    102039815                      temp_bin = 0.0_wp
    10204                       DO  n = 1, nbins
    10205                          IF ( 2.0_wp * Ra_dry(k,j,i,n) <= 10.0E-6_wp )  THEN
    10206                             DO  c = n, nbins*ncc, nbins
     9816                      DO  b = 1, nbins
     9817                         IF ( 2.0_wp * Ra_dry(k,j,i,b) <= 10.0E-6_wp )  THEN
     9818                            DO  c = b, nbins * ncc, nbins
    102079819                               temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    102089820                            ENDDO
     
    102109822                      ENDDO
    102119823                      local_pf(i,j,k) = MERGE( temp_bin,                       &
    10212                                                REAL( -999.0_wp, KIND = wp ),   &
     9824                                               REAL( fill_value, KIND = wp ),  &
    102139825                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    102149826                   ENDDO
     
    102189830             DO  i = nxl, nxr
    102199831                DO  j = nys, nyn
    10220                    DO  k = nzb, nzt+1
     9832                   DO  k = nzb_do, nzt_do
    102219833                      local_pf(i,j,k) = MERGE( PM10_av(k,j,i),                 &
    10222                                                REAL( -999.0_wp, KIND = wp ),   &
    10223                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10224                    ENDDO
    10225                 ENDDO
    10226              ENDDO
    10227           ENDIF
    10228          
    10229        CASE ( 'N_bin1' )
    10230           IF ( av == 0 )  THEN
    10231              DO  i = nxl, nxr
    10232                 DO  j = nys, nyn
    10233                    DO  k = nzb, nzt+1                     
    10234                       local_pf(i,j,k) = MERGE( aerosol_number(1)%conc(k,j,i),  &
    10235                                                REAL( -999.0_wp, KIND = wp ),   &
    10236                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10237                    ENDDO
    10238                 ENDDO
    10239              ENDDO
    10240           ELSE
    10241              DO  i = nxl, nxr
    10242                 DO  j = nys, nyn
    10243                    DO  k = nzb, nzt+1                     
    10244                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,1),              &
    10245                                                REAL( -999.0_wp, KIND = wp ),   &
    10246                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10247                    ENDDO
    10248                 ENDDO
    10249              ENDDO
    10250           ENDIF
    10251        
    10252        CASE ( 'N_bin2' )
    10253           IF ( av == 0 )  THEN
    10254              DO  i = nxl, nxr
    10255                 DO  j = nys, nyn
    10256                    DO  k = nzb, nzt+1
    10257                       local_pf(i,j,k) = MERGE( aerosol_number(2)%conc(k,j,i),  &
    10258                                                REAL( -999.0_wp, KIND = wp ),   &
    10259                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10260                    ENDDO
    10261                 ENDDO
    10262              ENDDO
    10263           ELSE
    10264              DO  i = nxl, nxr
    10265                 DO  j = nys, nyn
    10266                    DO  k = nzb, nzt+1                     
    10267                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,2),              &
    10268                                                REAL( -999.0_wp, KIND = wp ),   &
    10269                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10270                    ENDDO
    10271                 ENDDO
    10272              ENDDO
    10273           ENDIF
    10274          
    10275        CASE ( 'N_bin3' )
    10276           IF ( av == 0 )  THEN
    10277              DO  i = nxl, nxr
    10278                 DO  j = nys, nyn
    10279                    DO  k = nzb, nzt+1                     
    10280                       local_pf(i,j,k) = MERGE( aerosol_number(3)%conc(k,j,i),  &
    10281                                                REAL( -999.0_wp, KIND = wp ),   &
    10282                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10283                    ENDDO
    10284                 ENDDO
    10285              ENDDO
    10286           ELSE
    10287              DO  i = nxl, nxr
    10288                 DO  j = nys, nyn
    10289                    DO  k = nzb, nzt+1                     
    10290                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,3),              &
    10291                                                REAL( -999.0_wp, KIND = wp ),   &
    10292                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10293                    ENDDO
    10294                 ENDDO
    10295              ENDDO
    10296           ENDIF
    10297        
    10298        CASE ( 'N_bin4' )
    10299           IF ( av == 0 )  THEN
    10300              DO  i = nxl, nxr
    10301                 DO  j = nys, nyn
    10302                    DO  k = nzb, nzt+1   
    10303                       local_pf(i,j,k) = MERGE( aerosol_number(4)%conc(k,j,i),  &
    10304                                                REAL( -999.0_wp, KIND = wp ),   &
    10305                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10306                    ENDDO
    10307                 ENDDO
    10308              ENDDO
    10309           ELSE
    10310              DO  i = nxl, nxr
    10311                 DO  j = nys, nyn
    10312                    DO  k = nzb, nzt+1                     
    10313                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,4),              &
    10314                                                REAL( -999.0_wp, KIND = wp ),   &
    10315                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10316                    ENDDO
    10317                 ENDDO
    10318              ENDDO
    10319           ENDIF
    10320          
    10321        CASE ( 'N_bin5' )
    10322           IF ( av == 0 )  THEN
    10323              DO  i = nxl, nxr
    10324                 DO  j = nys, nyn
    10325                    DO  k = nzb, nzt+1                     
    10326                       local_pf(i,j,k) = MERGE( aerosol_number(5)%conc(k,j,i),  &
    10327                                                REAL( -999.0_wp, KIND = wp ),   &
    10328                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10329                    ENDDO
    10330                 ENDDO
    10331              ENDDO
    10332           ELSE
    10333              DO  i = nxl, nxr
    10334                 DO  j = nys, nyn
    10335                    DO  k = nzb, nzt+1                     
    10336                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,5),              &
    10337                                                REAL( -999.0_wp, KIND = wp ),   &
    10338                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10339                    ENDDO
    10340                 ENDDO
    10341              ENDDO
    10342           ENDIF
    10343        
    10344        CASE ( 'N_bin6' )
    10345           IF ( av == 0 )  THEN
    10346              DO  i = nxl, nxr
    10347                 DO  j = nys, nyn
    10348                    DO  k = nzb, nzt+1                     
    10349                       local_pf(i,j,k) = MERGE( aerosol_number(6)%conc(k,j,i),  &
    10350                                                REAL( -999.0_wp, KIND = wp ),   &
    10351                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10352                    ENDDO
    10353                 ENDDO
    10354              ENDDO
    10355           ELSE
    10356              DO  i = nxl, nxr
    10357                 DO  j = nys, nyn
    10358                    DO  k = nzb, nzt+1                     
    10359                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,6),              &
    10360                                                REAL( -999.0_wp, KIND = wp ),   &
    10361                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10362                    ENDDO
    10363                 ENDDO
    10364              ENDDO
    10365           ENDIF
    10366          
    10367        CASE ( 'N_bin7' )
    10368           IF ( av == 0 )  THEN
    10369              DO  i = nxl, nxr
    10370                 DO  j = nys, nyn
    10371                    DO  k = nzb, nzt+1                     
    10372                       local_pf(i,j,k) = MERGE( aerosol_number(7)%conc(k,j,i),  &
    10373                                                REAL( -999.0_wp, KIND = wp ),   &
    10374                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10375                    ENDDO
    10376                 ENDDO
    10377              ENDDO
    10378           ELSE
    10379              DO  i = nxl, nxr
    10380                 DO  j = nys, nyn
    10381                    DO  k = nzb, nzt+1                     
    10382                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,7),              &
    10383                                                REAL( -999.0_wp, KIND = wp ),   &
    10384                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10385                    ENDDO
    10386                 ENDDO
    10387              ENDDO
    10388           ENDIF
    10389        
    10390        CASE ( 'N_bin8' )
    10391           IF ( av == 0 )  THEN
    10392              DO  i = nxl, nxr
    10393                 DO  j = nys, nyn
    10394                    DO  k = nzb, nzt+1                 
    10395                       local_pf(i,j,k) = MERGE( aerosol_number(8)%conc(k,j,i),  &
    10396                                                REAL( -999.0_wp, KIND = wp ),   &
    10397                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10398                    ENDDO
    10399                 ENDDO
    10400              ENDDO
    10401           ELSE
    10402              DO  i = nxl, nxr
    10403                 DO  j = nys, nyn
    10404                    DO  k = nzb, nzt+1                     
    10405                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,8),              &
    10406                                                REAL( -999.0_wp, KIND = wp ),   &
    10407                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10408                    ENDDO
    10409                 ENDDO
    10410              ENDDO
    10411           ENDIF
    10412          
    10413        CASE ( 'N_bin9' )
    10414           IF ( av == 0 )  THEN
    10415              DO  i = nxl, nxr
    10416                 DO  j = nys, nyn
    10417                    DO  k = nzb, nzt+1                     
    10418                       local_pf(i,j,k) = MERGE( aerosol_number(9)%conc(k,j,i),  &
    10419                                                REAL( -999.0_wp, KIND = wp ),   &
    10420                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10421                    ENDDO
    10422                 ENDDO
    10423              ENDDO
    10424           ELSE
    10425              DO  i = nxl, nxr
    10426                 DO  j = nys, nyn
    10427                    DO  k = nzb, nzt+1                     
    10428                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,9),              &
    10429                                                REAL( -999.0_wp, KIND = wp ),   &
    10430                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10431                    ENDDO
    10432                 ENDDO
    10433              ENDDO
    10434           ENDIF
    10435        
    10436        CASE ( 'N_bin10' )
    10437           IF ( av == 0 )  THEN
    10438              DO  i = nxl, nxr
    10439                 DO  j = nys, nyn
    10440                    DO  k = nzb, nzt+1                     
    10441                       local_pf(i,j,k) = MERGE( aerosol_number(10)%conc(k,j,i), &
    10442                                                REAL( -999.0_wp, KIND = wp ),   &
    10443                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10444                    ENDDO
    10445                 ENDDO
    10446              ENDDO
    10447           ELSE
    10448              DO  i = nxl, nxr
    10449                 DO  j = nys, nyn
    10450                    DO  k = nzb, nzt+1                     
    10451                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,10),             &
    10452                                                REAL( -999.0_wp, KIND = wp ),   &
    10453                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10454                    ENDDO
    10455                 ENDDO
    10456              ENDDO
    10457           ENDIF
    10458          
    10459        CASE ( 'N_bin11' )
    10460           IF ( av == 0 )  THEN
    10461              DO  i = nxl, nxr
    10462                 DO  j = nys, nyn
    10463                    DO  k = nzb, nzt+1                     
    10464                       local_pf(i,j,k) = MERGE( aerosol_number(11)%conc(k,j,i), &
    10465                                                REAL( -999.0_wp, KIND = wp ),   &
    10466                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10467                    ENDDO
    10468                 ENDDO
    10469              ENDDO
    10470           ELSE
    10471              DO  i = nxl, nxr
    10472                 DO  j = nys, nyn
    10473                    DO  k = nzb, nzt+1                     
    10474                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,11),             &
    10475                                                REAL( -999.0_wp, KIND = wp ),   &
    10476                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10477                    ENDDO
    10478                 ENDDO
    10479              ENDDO
    10480           ENDIF
    10481          
    10482        CASE ( 'N_bin12' )
    10483           IF ( av == 0 )  THEN
    10484              DO  i = nxl, nxr
    10485                 DO  j = nys, nyn
    10486                    DO  k = nzb, nzt+1                     
    10487                       local_pf(i,j,k) = MERGE( aerosol_number(12)%conc(k,j,i), &
    10488                                                REAL( -999.0_wp, KIND = wp ),   &
    10489                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10490                    ENDDO
    10491                 ENDDO
    10492              ENDDO
    10493           ELSE
    10494              DO  i = nxl, nxr
    10495                 DO  j = nys, nyn
    10496                    DO  k = nzb, nzt+1                     
    10497                       local_pf(i,j,k) = MERGE( Nbins_av(k,j,i,12),             &
    10498                                                REAL( -999.0_wp, KIND = wp ),   &
    10499                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10500                    ENDDO
    10501                 ENDDO
    10502              ENDDO
    10503           ENDIF
    10504          
    10505        CASE ( 'm_bin1' )
    10506           IF ( av == 0 )  THEN
    10507              DO  i = nxl, nxr
    10508                 DO  j = nys, nyn
    10509                    DO  k = nzb, nzt+1   
    10510                       temp_bin = 0.0_wp
    10511                       DO  c = 1, ncc_tot*nbins, nbins
    10512                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10513                       ENDDO
    10514                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10515                                                REAL( -999.0_wp, KIND = wp ),   &
    10516                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10517                    ENDDO
    10518                 ENDDO
    10519              ENDDO
    10520           ELSE
    10521              DO  i = nxl, nxr
    10522                 DO  j = nys, nyn
    10523                    DO  k = nzb, nzt+1                     
    10524                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,1),              &
    10525                                                REAL( -999.0_wp, KIND = wp ),   &
    10526                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10527                    ENDDO
    10528                 ENDDO
    10529              ENDDO
    10530           ENDIF
    10531        
    10532        CASE ( 'm_bin2' )
    10533           IF ( av == 0 )  THEN
    10534              DO  i = nxl, nxr
    10535                 DO  j = nys, nyn
    10536                    DO  k = nzb, nzt+1   
    10537                       temp_bin = 0.0_wp
    10538                       DO  c = 2, ncc_tot*nbins, nbins
    10539                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10540                       ENDDO
    10541                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10542                                                REAL( -999.0_wp, KIND = wp ),   &
    10543                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10544                    ENDDO
    10545                 ENDDO
    10546              ENDDO
    10547           ELSE
    10548              DO  i = nxl, nxr
    10549                 DO  j = nys, nyn
    10550                    DO  k = nzb, nzt+1                     
    10551                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,2),              &
    10552                                                REAL( -999.0_wp, KIND = wp ),   &
    10553                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10554                    ENDDO
    10555                 ENDDO
    10556              ENDDO
    10557           ENDIF
    10558          
    10559        CASE ( 'm_bin3' )
    10560           IF ( av == 0 )  THEN
    10561              DO  i = nxl, nxr
    10562                 DO  j = nys, nyn
    10563                    DO  k = nzb, nzt+1   
    10564                       temp_bin = 0.0_wp
    10565                       DO  c = 3, ncc_tot*nbins, nbins
    10566                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10567                       ENDDO
    10568                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10569                                                REAL( -999.0_wp, KIND = wp ),   &
    10570                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10571                    ENDDO
    10572                 ENDDO
    10573              ENDDO
    10574           ELSE
    10575              DO  i = nxl, nxr
    10576                 DO  j = nys, nyn
    10577                    DO  k = nzb, nzt+1                     
    10578                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,3),              &
    10579                                                REAL( -999.0_wp, KIND = wp ),   &
    10580                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10581                    ENDDO
    10582                 ENDDO
    10583              ENDDO
    10584           ENDIF
    10585        
    10586        CASE ( 'm_bin4' )
    10587           IF ( av == 0 )  THEN
    10588              DO  i = nxl, nxr
    10589                 DO  j = nys, nyn
    10590                    DO  k = nzb, nzt+1   
    10591                       temp_bin = 0.0_wp
    10592                       DO  c = 4, ncc_tot*nbins, nbins
    10593                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10594                       ENDDO
    10595                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10596                                                REAL( -999.0_wp, KIND = wp ),   &
    10597                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10598                    ENDDO
    10599                 ENDDO
    10600              ENDDO
    10601           ELSE
    10602              DO  i = nxl, nxr
    10603                 DO  j = nys, nyn
    10604                    DO  k = nzb, nzt+1                     
    10605                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,4),              &
    10606                                                REAL( -999.0_wp, KIND = wp ),   &
    10607                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10608                    ENDDO
    10609                 ENDDO
    10610              ENDDO
    10611           ENDIF
    10612          
    10613        CASE ( 'm_bin5' )
    10614           IF ( av == 0 )  THEN
    10615              DO  i = nxl, nxr
    10616                 DO  j = nys, nyn
    10617                    DO  k = nzb, nzt+1   
    10618                       temp_bin = 0.0_wp
    10619                       DO  c = 5, ncc_tot*nbins, nbins
    10620                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10621                       ENDDO
    10622                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10623                                                REAL( -999.0_wp, KIND = wp ),   &
    10624                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10625                    ENDDO
    10626                 ENDDO
    10627              ENDDO
    10628           ELSE
    10629              DO  i = nxl, nxr
    10630                 DO  j = nys, nyn
    10631                    DO  k = nzb, nzt+1                     
    10632                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,5),              &
    10633                                                REAL( -999.0_wp, KIND = wp ),   &
    10634                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10635                    ENDDO
    10636                 ENDDO
    10637              ENDDO
    10638           ENDIF
    10639        
    10640        CASE ( 'm_bin6' )
    10641           IF ( av == 0 )  THEN
    10642              DO  i = nxl, nxr
    10643                 DO  j = nys, nyn
    10644                    DO  k = nzb, nzt+1   
    10645                       temp_bin = 0.0_wp
    10646                       DO  c = 6, ncc_tot*nbins, nbins
    10647                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10648                       ENDDO
    10649                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10650                                                REAL( -999.0_wp, KIND = wp ),   &
    10651                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10652                    ENDDO
    10653                 ENDDO
    10654              ENDDO
    10655           ELSE
    10656              DO  i = nxl, nxr
    10657                 DO  j = nys, nyn
    10658                    DO  k = nzb, nzt+1                     
    10659                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,6),              &
    10660                                                REAL( -999.0_wp, KIND = wp ),   &
    10661                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10662                    ENDDO
    10663                 ENDDO
    10664              ENDDO
    10665           ENDIF
    10666          
    10667        CASE ( 'm_bin7' )
    10668           IF ( av == 0 )  THEN
    10669              DO  i = nxl, nxr
    10670                 DO  j = nys, nyn
    10671                    DO  k = nzb, nzt+1   
    10672                       temp_bin = 0.0_wp
    10673                       DO  c = 7, ncc_tot*nbins, nbins
    10674                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10675                       ENDDO
    10676                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10677                                                REAL( -999.0_wp, KIND = wp ),   &
    10678                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10679                    ENDDO
    10680                 ENDDO
    10681              ENDDO
    10682           ELSE
    10683              DO  i = nxl, nxr
    10684                 DO  j = nys, nyn
    10685                    DO  k = nzb, nzt+1                     
    10686                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,7),              &
    10687                                                REAL( -999.0_wp, KIND = wp ),   &
    10688                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10689                    ENDDO
    10690                 ENDDO
    10691              ENDDO
    10692           ENDIF
    10693        
    10694        CASE ( 'm_bin8' )
    10695           IF ( av == 0 )  THEN
    10696              DO  i = nxl, nxr
    10697                 DO  j = nys, nyn
    10698                    DO  k = nzb, nzt+1   
    10699                       temp_bin = 0.0_wp
    10700                       DO  c = 8, ncc_tot*nbins, nbins
    10701                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10702                       ENDDO
    10703                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10704                                                REAL( -999.0_wp, KIND = wp ),   &
    10705                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10706                    ENDDO
    10707                 ENDDO
    10708              ENDDO
    10709           ELSE
    10710              DO  i = nxl, nxr
    10711                 DO  j = nys, nyn
    10712                    DO  k = nzb, nzt+1                     
    10713                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,8),              &
    10714                                                REAL( -999.0_wp, KIND = wp ),   &
    10715                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10716                    ENDDO
    10717                 ENDDO
    10718              ENDDO
    10719           ENDIF
    10720          
    10721        CASE ( 'm_bin9' )
    10722           IF ( av == 0 )  THEN
    10723              DO  i = nxl, nxr
    10724                 DO  j = nys, nyn
    10725                    DO  k = nzb, nzt+1   
    10726                       temp_bin = 0.0_wp
    10727                       DO  c = 9, ncc_tot*nbins, nbins
    10728                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10729                       ENDDO
    10730                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10731                                                REAL( -999.0_wp, KIND = wp ),   &
    10732                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10733                    ENDDO
    10734                 ENDDO
    10735              ENDDO
    10736           ELSE
    10737              DO  i = nxl, nxr
    10738                 DO  j = nys, nyn
    10739                    DO  k = nzb, nzt+1                     
    10740                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,9),              &
    10741                                                REAL( -999.0_wp, KIND = wp ),   &
    10742                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10743                    ENDDO
    10744                 ENDDO
    10745              ENDDO
    10746           ENDIF
    10747        
    10748        CASE ( 'm_bin10' )
    10749           IF ( av == 0 )  THEN
    10750              DO  i = nxl, nxr
    10751                 DO  j = nys, nyn
    10752                    DO  k = nzb, nzt+1   
    10753                       temp_bin = 0.0_wp
    10754                       DO  c = 10, ncc_tot*nbins, nbins
    10755                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10756                       ENDDO
    10757                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10758                                                REAL( -999.0_wp, KIND = wp ),   &
    10759                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10760                    ENDDO
    10761                 ENDDO
    10762              ENDDO
    10763           ELSE
    10764              DO  i = nxl, nxr
    10765                 DO  j = nys, nyn
    10766                    DO  k = nzb, nzt+1                     
    10767                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,10),             &
    10768                                                REAL( -999.0_wp, KIND = wp ),   &
    10769                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10770                    ENDDO
    10771                 ENDDO
    10772              ENDDO
    10773           ENDIF
    10774          
    10775        CASE ( 'm_bin11' )
    10776           IF ( av == 0 )  THEN
    10777              DO  i = nxl, nxr
    10778                 DO  j = nys, nyn
    10779                    DO  k = nzb, nzt+1   
    10780                       temp_bin = 0.0_wp
    10781                       DO  c = 11, ncc_tot*nbins, nbins
    10782                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10783                       ENDDO
    10784                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10785                                                REAL( -999.0_wp, KIND = wp ),   &
    10786                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10787                    ENDDO
    10788                 ENDDO
    10789              ENDDO
    10790           ELSE
    10791              DO  i = nxl, nxr
    10792                 DO  j = nys, nyn
    10793                    DO  k = nzb, nzt+1                     
    10794                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,11),             &
    10795                                                REAL( -999.0_wp, KIND = wp ),   &
    10796                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10797                    ENDDO
    10798                 ENDDO
    10799              ENDDO
    10800           ENDIF
    10801          
    10802        CASE ( 'm_bin12' )
    10803           IF ( av == 0 )  THEN
    10804              DO  i = nxl, nxr
    10805                 DO  j = nys, nyn
    10806                    DO  k = nzb, nzt+1   
    10807                       temp_bin = 0.0_wp
    10808                       DO  c = 12, ncc_tot*nbins, nbins
    10809                          temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    10810                       ENDDO
    10811                       local_pf(i,j,k) = MERGE( temp_bin,                       &
    10812                                                REAL( -999.0_wp, KIND = wp ),   &
    10813                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    10814                    ENDDO
    10815                 ENDDO
    10816              ENDDO
    10817           ELSE
    10818              DO  i = nxl, nxr
    10819                 DO  j = nys, nyn
    10820                    DO  k = nzb, nzt+1                     
    10821                       local_pf(i,j,k) = MERGE( mbins_av(k,j,i,12),             &
    10822                                                REAL( -999.0_wp, KIND = wp ),   &
     9834                                               REAL( fill_value, KIND = wp ),  &
    108239835                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    108249836                   ENDDO
     
    108339845                DO  i = nxl, nxr
    108349846                   DO  j = nys, nyn
    10835                       DO  k = nzb, nzt+1
     9847                      DO  k = nzb_do, nzt_do
    108369848                         temp_bin = 0.0_wp
    108379849                         DO  c = ( icc-1 )*nbins+1, icc*nbins                         
     
    108399851                         ENDDO
    108409852                         local_pf(i,j,k) = MERGE( temp_bin,                    &
    10841                                                REAL( -999.0_wp, KIND = wp ),   &
     9853                                               REAL( fill_value, KIND = wp ),  &
    108429854                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    108439855                      ENDDO
     
    108549866                DO  i = nxl, nxr
    108559867                   DO  j = nys, nyn
    10856                       DO  k = nzb, nzt+1                     
     9868                      DO  k = nzb_do, nzt_do                     
    108579869                         local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),       &
    10858                                                REAL( -999.0_wp, KIND = wp ),   &
     9870                                               REAL( fill_value, KIND = wp ),  &
    108599871                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    108609872                      ENDDO
     
    108789890 SUBROUTINE salsa_data_output_mask( av, variable, found, local_pf )
    108799891 
     9892    USE arrays_3d,                                                             &
     9893        ONLY:  tend
     9894 
    108809895    USE control_parameters,                                                    &
    10881         ONLY:  mask_size_l, mid
     9896        ONLY:  mask_size_l, mask_surface, mid
     9897       
     9898    USE surface_mod,                                                           &
     9899        ONLY:  get_topography_top_index_ji       
    108829900 
    108839901    IMPLICIT NONE
    108849902   
    10885     CHARACTER (LEN=*) ::  variable   !<
    10886 
    10887     INTEGER(iwp) ::  av   !<
    10888     INTEGER(iwp) ::  c    !<
    10889     INTEGER(iwp) ::  i    !<
    10890     INTEGER(iwp) ::  icc  !< index of a chemical compound
    10891     INTEGER(iwp) ::  j    !<
    10892     INTEGER(iwp) ::  k    !<
    10893     INTEGER(iwp) ::  n    !<
    10894 
    10895     LOGICAL  ::  found    !<
    10896     REAL(wp) ::  df       !< For calculating LDSA: fraction of particles
    10897                           !< depositing in the alveolar (or tracheobronchial)
    10898                           !< region of the lung. Depends on the particle size
    10899     REAL(wp) ::  mean_d       !< Particle diameter in micrometres
    10900     REAL(wp) ::  nc       !< Particle number concentration in units 1/cm**3
    10901 
    10902     REAL(wp),                                                                  &
    10903        DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  &
    10904           local_pf   !<
    10905     REAL(wp) ::  temp_bin   !<
    10906     REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to
    10907                                                      !< selected output variable
     9903    CHARACTER(LEN=5) ::  grid      !< flag to distinquish between staggered grid
     9904    CHARACTER(LEN=*) ::  variable  !<
     9905    CHARACTER(LEN=7) ::  vari      !< trimmed format of variable
     9906
     9907    INTEGER(iwp) ::  av              !<
     9908    INTEGER(iwp) ::  b               !< loop index for aerosol size number bins
     9909    INTEGER(iwp) ::  c               !< loop index for chemical components
     9910    INTEGER(iwp) ::  i               !< loop index in x-direction
     9911    INTEGER(iwp) ::  icc             !< index of a chemical compound
     9912    INTEGER(iwp) ::  j               !< loop index in y-direction
     9913    INTEGER(iwp) ::  k               !< loop index in z-direction
     9914    INTEGER(iwp) ::  topo_top_ind    !< k index of highest horizontal surface
     9915   
     9916    LOGICAL ::  found      !<
     9917    LOGICAL ::  resorted   !<
     9918   
     9919    REAL(wp) ::  df        !< For calculating LDSA: fraction of particles
     9920                           !< depositing in the alveolar (or tracheobronchial)
     9921                           !< region of the lung. Depends on the particle size
     9922    REAL(wp) ::  mean_d    !< Particle diameter in micrometres
     9923    REAL(wp) ::  nc        !< Particle number concentration in units 1/cm**3
     9924    REAL(wp) ::  temp_bin  !< temporary array for calculating output variables   
     9925
     9926    REAL(wp), DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  local_pf   !<
     9927   
     9928    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< pointer
    109089929
    109099930    found     = .TRUE.
     9931    resorted  = .FALSE.
     9932    grid      = 's'
    109109933    temp_bin  = 0.0_wp
    109119934
     
    109139936   
    109149937       CASE ( 'g_H2SO4', 'g_HNO3', 'g_NH3', 'g_OCNV',  'g_OCSV' )
     9938          vari = TRIM( variable )
    109159939          IF ( av == 0 )  THEN
    10916              IF ( TRIM( variable ) == 'g_H2SO4')  icc = 1
    10917              IF ( TRIM( variable ) == 'g_HNO3')   icc = 2
    10918              IF ( TRIM( variable ) == 'g_NH3')    icc = 3
    10919              IF ( TRIM( variable ) == 'g_OCNV')   icc = 4
    10920              IF ( TRIM( variable ) == 'g_OCSV')   icc = 5
    10921              
    10922              DO  i = 1, mask_size_l(mid,1)
    10923                 DO  j = 1, mask_size_l(mid,2)
    10924                    DO  k = 1, mask_size_l(mid,3)
    10925                       local_pf(i,j,k) = salsa_gas(icc)%conc(mask_k(mid,k),     &
    10926                                                     mask_j(mid,j),mask_i(mid,i))
    10927                    ENDDO
    10928                 ENDDO
    10929              ENDDO
     9940             IF ( vari == 'g_H2SO4')  to_be_resorted => salsa_gas(1)%conc
     9941             IF ( vari == 'g_HNO3')   to_be_resorted => salsa_gas(2)%conc
     9942             IF ( vari == 'g_NH3')    to_be_resorted => salsa_gas(3)%conc
     9943             IF ( vari == 'g_OCNV')   to_be_resorted => salsa_gas(4)%conc
     9944             IF ( vari == 'g_OCSV')   to_be_resorted => salsa_gas(5)%conc
    109309945          ELSE
    10931              IF ( TRIM( variable(3:) ) == 'H2SO4' ) to_be_resorted => g_H2SO4_av
    10932              IF ( TRIM( variable(3:) ) == 'HNO3' )  to_be_resorted => g_HNO3_av   
    10933              IF ( TRIM( variable(3:) ) == 'NH3' )   to_be_resorted => g_NH3_av   
    10934              IF ( TRIM( variable(3:) ) == 'OCNV' )  to_be_resorted => g_OCNV_av   
    10935              IF ( TRIM( variable(3:) ) == 'OCSV' )  to_be_resorted => g_OCSV_av
    10936              DO  i = 1, mask_size_l(mid,1)
    10937                 DO  j = 1, mask_size_l(mid,2)
    10938                    DO  k = 1, mask_size_l(mid,3)
    10939                       local_pf(i,j,k) = to_be_resorted(mask_k(mid,k),          &
    10940                                                     mask_j(mid,j),mask_i(mid,i))
    10941                    ENDDO
    10942                 ENDDO
    10943              ENDDO
     9946             IF ( vari == 'g_H2SO4') to_be_resorted => g_H2SO4_av
     9947             IF ( vari == 'g_HNO3')  to_be_resorted => g_HNO3_av   
     9948             IF ( vari == 'g_NH3')   to_be_resorted => g_NH3_av   
     9949             IF ( vari == 'g_OCNV')  to_be_resorted => g_OCNV_av   
     9950             IF ( vari == 'g_OCSV')  to_be_resorted => g_OCSV_av
    109449951          ENDIF
    10945        
     9952          
    109469953       CASE ( 'LDSA' )
    109479954          IF ( av == 0 )  THEN
    10948              DO  i = 1, mask_size_l(mid,1)
    10949                 DO  j = 1, mask_size_l(mid,2)
    10950                    DO  k = 1, mask_size_l(mid,3)
     9955             DO  i = nxl, nxr
     9956                DO  j = nys, nyn
     9957                   DO  k = nzb, nz_do3d
    109519958                      temp_bin = 0.0_wp
    10952                       DO  n = 1, nbins
     9959                      DO  b = 1, nbins
    109539960!                     
    109549961!--                      Diameter in micrometres
    10955                          mean_d = 1.0E+6_wp * Ra_dry(mask_k(mid,k),            &
    10956                                        mask_j(mid,j),mask_i(mid,i),n) * 2.0_wp
     9962                         mean_d = 1.0E+6_wp * Ra_dry(k,j,i,b) * 2.0_wp
    109579963!                               
    10958 !--                      Deposition factor: alveolar (use Ra_dry for the size??)                                
     9964!--                      Deposition factor: alveolar                                
    109599965                         df = ( 0.01555_wp / mean_d ) * ( EXP( -0.416_wp *     &
    10960                                 ( LOG( mean_d ) + 2.84_wp )**2.0_wp )          &
    10961                                   + 19.11_wp * EXP( -0.482_wp *                &
    10962                                   ( LOG( mean_d ) - 1.362_wp )**2.0_wp ) )
     9966                              ( LOG( mean_d ) + 2.84_wp )**2.0_wp ) + 19.11_wp &
     9967                              * EXP( -0.482_wp * ( LOG( mean_d ) - 1.362_wp    &
     9968                                )**2.0_wp ) )
    109639969!                                   
    109649970!--                      Number concentration in 1/cm3
    10965                          nc = 1.0E-6_wp * aerosol_number(n)%conc(mask_k(mid,k),&
    10966                                                     mask_j(mid,j),mask_i(mid,i))
     9971                         nc = 1.0E-6_wp * aerosol_number(b)%conc(k,j,i)
    109679972!                         
    109689973!--                      Lung-deposited surface area LDSA (units mum2/cm3)
    109699974                         temp_bin = temp_bin + pi * mean_d**2.0_wp * df * nc
    109709975                      ENDDO
    10971                       local_pf(i,j,k) = temp_bin
     9976                      tend(k,j,i) = temp_bin
    109729977                   ENDDO
    109739978                ENDDO
    109749979             ENDDO
    10975           ELSE
    10976              DO  i = 1, mask_size_l(mid,1)
    10977                 DO  j = 1, mask_size_l(mid,2)
    10978                    DO  k = 1, mask_size_l(mid,3)
    10979                        local_pf(i,j,k) = LDSA_av(mask_k(mid,k),                &
    10980                                                  mask_j(mid,j),mask_i(mid,i))
     9980             IF ( .NOT. mask_surface(mid) )  THEN   
     9981                DO  i = 1, mask_size_l(mid,1)
     9982                   DO  j = 1, mask_size_l(mid,2)
     9983                      DO  k = 1, mask_size_l(mid,3)
     9984                         local_pf(i,j,k) = tend( mask_k(mid,k),  mask_j(mid,j),&
     9985                                                 mask_i(mid,i) )
     9986                      ENDDO
    109819987                   ENDDO
    109829988                ENDDO
    10983              ENDDO
     9989             ELSE
     9990                DO  i = 1, mask_size_l(mid,1)
     9991                   DO  j = 1, mask_size_l(mid,2)
     9992                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     9993                                                                  mask_i(mid,i),&
     9994                                                                  grid )
     9995                      DO  k = 1, mask_size_l(mid,3)
     9996                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     9997                                                      nzt+1 ),                 &
     9998                                                 mask_j(mid,j), mask_i(mid,i) )
     9999                      ENDDO
     10000                   ENDDO
     10001                ENDDO
     10002             ENDIF
     10003             resorted = .TRUE.
     10004          ELSE
     10005             to_be_resorted => LDSA_av
    1098410006          ENDIF
    10985        
     10007         
     10008       CASE ( 'N_bin1', 'N_bin2', 'N_bin3', 'N_bin4',   'N_bin5',  'N_bin6',   &
     10009              'N_bin7', 'N_bin8', 'N_bin9', 'N_bin10' , 'N_bin11', 'N_bin12' )
     10010          IF ( TRIM( variable(6:) ) == '1' ) b = 1
     10011          IF ( TRIM( variable(6:) ) == '2' ) b = 2
     10012          IF ( TRIM( variable(6:) ) == '3' ) b = 3
     10013          IF ( TRIM( variable(6:) ) == '4' ) b = 4
     10014          IF ( TRIM( variable(6:) ) == '5' ) b = 5
     10015          IF ( TRIM( variable(6:) ) == '6' ) b = 6
     10016          IF ( TRIM( variable(6:) ) == '7' ) b = 7
     10017          IF ( TRIM( variable(6:) ) == '8' ) b = 8
     10018          IF ( TRIM( variable(6:) ) == '9' ) b = 9
     10019          IF ( TRIM( variable(6:) ) == '10' ) b = 10
     10020          IF ( TRIM( variable(6:) ) == '11' ) b = 11
     10021          IF ( TRIM( variable(6:) ) == '12' ) b = 12
     10022         
     10023          IF ( av == 0 )  THEN
     10024             IF ( .NOT. mask_surface(mid) )  THEN   
     10025                DO  i = 1, mask_size_l(mid,1)
     10026                   DO  j = 1, mask_size_l(mid,2)
     10027                      DO  k = 1, mask_size_l(mid,3)
     10028                         local_pf(i,j,k) = aerosol_number(b)%conc( mask_k(mid,k),&
     10029                                                                   mask_j(mid,j),&
     10030                                                                   mask_i(mid,i) )
     10031                      ENDDO
     10032                   ENDDO
     10033                ENDDO
     10034             ELSE
     10035                DO  i = 1, mask_size_l(mid,1)
     10036                   DO  j = 1, mask_size_l(mid,2)
     10037                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10038                                                                  mask_i(mid,i),&
     10039                                                                  grid )
     10040                      DO  k = 1, mask_size_l(mid,3)
     10041                         local_pf(i,j,k) = aerosol_number(b)%conc(             &
     10042                                           MIN( topo_top_ind+mask_k(mid,k),    &
     10043                                                nzt+1 ),                 &
     10044                                           mask_j(mid,j), mask_i(mid,i) )
     10045                      ENDDO
     10046                   ENDDO
     10047                ENDDO
     10048             ENDIF
     10049             resorted = .TRUE.
     10050          ELSE
     10051             to_be_resorted => Nbins_av(:,:,:,b)
     10052          ENDIF
     10053         
    1098610054       CASE ( 'Ntot' )
    1098710055          IF ( av == 0 )  THEN
    10988              DO  i = 1, mask_size_l(mid,1)
    10989                 DO  j = 1, mask_size_l(mid,2)
    10990                    DO  k = 1, mask_size_l(mid,3)
     10056             DO  i = nxl, nxr
     10057                DO  j = nys, nyn
     10058                   DO  k = nzb, nz_do3d
    1099110059                      temp_bin = 0.0_wp
    10992                       DO  n = 1, nbins
    10993                          temp_bin = temp_bin + aerosol_number(n)%conc(         &
    10994                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
     10060                      DO  b = 1, nbins
     10061                         temp_bin = temp_bin + aerosol_number(b)%conc(k,j,i)
    1099510062                      ENDDO
    10996                       local_pf(i,j,k) = temp_bin
     10063                      tend(k,j,i) = temp_bin
    1099710064                   ENDDO
    1099810065                ENDDO
    10999              ENDDO
    11000           ELSE
    11001              DO  i = 1, mask_size_l(mid,1)
    11002                 DO  j = 1, mask_size_l(mid,2)
    11003                    DO  k = 1, mask_size_l(mid,3)
    11004                        local_pf(i,j,k) = Ntot_av(mask_k(mid,k),                &
    11005                                                  mask_j(mid,j),mask_i(mid,i))
     10066             ENDDO
     10067             IF ( .NOT. mask_surface(mid) )  THEN   
     10068                DO  i = 1, mask_size_l(mid,1)
     10069                   DO  j = 1, mask_size_l(mid,2)
     10070                      DO  k = 1, mask_size_l(mid,3)
     10071                         local_pf(i,j,k) = tend( mask_k(mid,k),  mask_j(mid,j),&
     10072                                                 mask_i(mid,i) )
     10073                      ENDDO
    1100610074                   ENDDO
    1100710075                ENDDO
    11008              ENDDO
     10076             ELSE
     10077                DO  i = 1, mask_size_l(mid,1)
     10078                   DO  j = 1, mask_size_l(mid,2)
     10079                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10080                                                                  mask_i(mid,i),&
     10081                                                                  grid )
     10082                      DO  k = 1, mask_size_l(mid,3)
     10083                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     10084                                                      nzt+1 ),                 &
     10085                                                 mask_j(mid,j), mask_i(mid,i) )
     10086                      ENDDO
     10087                   ENDDO
     10088                ENDDO
     10089             ENDIF
     10090             resorted = .TRUE.
     10091          ELSE
     10092             to_be_resorted => Ntot_av
     10093          ENDIF
     10094         
     10095       CASE ( 'm_bin1', 'm_bin2', 'm_bin3', 'm_bin4',   'm_bin5',  'm_bin6',   &
     10096              'm_bin7', 'm_bin8', 'm_bin9', 'm_bin10' , 'm_bin11', 'm_bin12' )
     10097          IF ( TRIM( variable(6:) ) == '1' ) b = 1
     10098          IF ( TRIM( variable(6:) ) == '2' ) b = 2
     10099          IF ( TRIM( variable(6:) ) == '3' ) b = 3
     10100          IF ( TRIM( variable(6:) ) == '4' ) b = 4
     10101          IF ( TRIM( variable(6:) ) == '5' ) b = 5
     10102          IF ( TRIM( variable(6:) ) == '6' ) b = 6
     10103          IF ( TRIM( variable(6:) ) == '7' ) b = 7
     10104          IF ( TRIM( variable(6:) ) == '8' ) b = 8
     10105          IF ( TRIM( variable(6:) ) == '9' ) b = 9
     10106          IF ( TRIM( variable(6:) ) == '10' ) b = 10
     10107          IF ( TRIM( variable(6:) ) == '11' ) b = 11
     10108          IF ( TRIM( variable(6:) ) == '12' ) b = 12
     10109         
     10110          IF ( av == 0 )  THEN
     10111             DO  i = nxl, nxr
     10112                DO  j = nys, nyn
     10113                   DO  k = nzb, nz_do3d
     10114                      temp_bin = 0.0_wp
     10115                      DO  c = b, ncc_tot*nbins, nbins
     10116                         temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
     10117                      ENDDO
     10118                      tend(k,j,i) = temp_bin
     10119                   ENDDO
     10120                ENDDO
     10121             ENDDO   
     10122             IF ( .NOT. mask_surface(mid) )  THEN   
     10123                DO  i = 1, mask_size_l(mid,1)
     10124                   DO  j = 1, mask_size_l(mid,2)
     10125                      DO  k = 1, mask_size_l(mid,3)
     10126                         local_pf(i,j,k) = tend( mask_k(mid,k),  mask_j(mid,j),&
     10127                                                 mask_i(mid,i) )
     10128                      ENDDO
     10129                   ENDDO
     10130                ENDDO
     10131             ELSE
     10132                DO  i = 1, mask_size_l(mid,1)
     10133                   DO  j = 1, mask_size_l(mid,2)
     10134                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10135                                                                  mask_i(mid,i),&
     10136                                                                  grid )
     10137                      DO  k = 1, mask_size_l(mid,3)
     10138                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     10139                                                      nzt+1 ),                 &
     10140                                                 mask_j(mid,j), mask_i(mid,i) )
     10141                      ENDDO
     10142                   ENDDO
     10143                ENDDO
     10144             ENDIF
     10145             resorted = .TRUE.
     10146          ELSE
     10147             to_be_resorted => mbins_av(:,:,:,b)
    1100910148          ENDIF
    1101010149       
    1101110150       CASE ( 'PM2.5' )
    1101210151          IF ( av == 0 )  THEN
    11013              DO  i = 1, mask_size_l(mid,1)
    11014                 DO  j = 1, mask_size_l(mid,2)
    11015                    DO  k = 1, mask_size_l(mid,3)
     10152             DO  i = nxl, nxr
     10153                DO  j = nys, nyn
     10154                   DO  k = nzb, nz_do3d
    1101610155                      temp_bin = 0.0_wp
    11017                       DO  n = 1, nbins
    11018                          IF ( 2.0_wp * Ra_dry(mask_k(mid,k),mask_j(mid,j),     &
    11019                               mask_i(mid,i),n) <= 2.5E-6_wp )  THEN
    11020                             DO  c = n, nbins*ncc, nbins
    11021                                temp_bin = temp_bin + aerosol_mass(c)%conc(     &
    11022                                      mask_k(mid,k), mask_j(mid,j),mask_i(mid,i))
     10156                      DO  b = 1, nbins
     10157                         IF ( 2.0_wp * Ra_dry(k,j,i,b) <= 2.5E-6_wp )  THEN
     10158                            DO  c = b, nbins * ncc, nbins
     10159                               temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    1102310160                            ENDDO
    1102410161                         ENDIF
    1102510162                      ENDDO
    11026                       local_pf(i,j,k) = temp_bin
     10163                      tend(k,j,i) = temp_bin
    1102710164                   ENDDO
    1102810165                ENDDO
    11029              ENDDO
    11030           ELSE
    11031              DO  i = 1, mask_size_l(mid,1)
    11032                 DO  j = 1, mask_size_l(mid,2)
    11033                    DO  k = 1, mask_size_l(mid,3)
    11034                        local_pf(i,j,k) = PM25_av(mask_k(mid,k),                &
    11035                                                  mask_j(mid,j),mask_i(mid,i))
     10166             ENDDO
     10167             IF ( .NOT. mask_surface(mid) )  THEN   
     10168                DO  i = 1, mask_size_l(mid,1)
     10169                   DO  j = 1, mask_size_l(mid,2)
     10170                      DO  k = 1, mask_size_l(mid,3)
     10171                         local_pf(i,j,k) = tend( mask_k(mid,k),  mask_j(mid,j),&
     10172                                                 mask_i(mid,i) )
     10173                      ENDDO
    1103610174                   ENDDO
    1103710175                ENDDO
    11038              ENDDO
     10176             ELSE
     10177                DO  i = 1, mask_size_l(mid,1)
     10178                   DO  j = 1, mask_size_l(mid,2)
     10179                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10180                                                                  mask_i(mid,i),&
     10181                                                                  grid )
     10182                      DO  k = 1, mask_size_l(mid,3)
     10183                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     10184                                                      nzt+1 ),                 &
     10185                                                 mask_j(mid,j), mask_i(mid,i) )
     10186                      ENDDO
     10187                   ENDDO
     10188                ENDDO
     10189             ENDIF
     10190             resorted = .TRUE.
     10191          ELSE
     10192             to_be_resorted => PM25_av
    1103910193          ENDIF
    11040        
     10194          
    1104110195       CASE ( 'PM10' )
    1104210196          IF ( av == 0 )  THEN
    11043              DO  i = 1, mask_size_l(mid,1)
    11044                 DO  j = 1, mask_size_l(mid,2)
    11045                    DO  k = 1, mask_size_l(mid,3)
     10197             DO  i = nxl, nxr
     10198                DO  j = nys, nyn
     10199                   DO  k = nzb, nz_do3d
    1104610200                      temp_bin = 0.0_wp
    11047                       DO  n = 1, nbins
    11048                          IF ( 2.0_wp * Ra_dry(mask_k(mid,k),mask_j(mid,j),     &
    11049                               mask_i(mid,i),n) <= 10.0E-6_wp )  THEN
    11050                             DO  c = n, nbins*ncc, nbins
    11051                                temp_bin = temp_bin + aerosol_mass(c)%conc(     &
    11052                                       mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
     10201                      DO  b = 1, nbins
     10202                         IF ( 2.0_wp * Ra_dry(k,j,i,b) <= 10.0E-6_wp )  THEN
     10203                            DO  c = b, nbins * ncc, nbins
     10204                               temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    1105310205                            ENDDO
    1105410206                         ENDIF
    1105510207                      ENDDO
    11056                       local_pf(i,j,k) = temp_bin
     10208                      tend(k,j,i) = temp_bin
    1105710209                   ENDDO
    1105810210                ENDDO
    11059              ENDDO
    11060           ELSE
    11061              DO  i = 1, mask_size_l(mid,1)
    11062                 DO  j = 1, mask_size_l(mid,2)
    11063                    DO  k = 1, mask_size_l(mid,3)
    11064                        local_pf(i,j,k) = PM10_av(mask_k(mid,k),                &
    11065                                                  mask_j(mid,j),mask_i(mid,i))
     10211             ENDDO
     10212             IF ( .NOT. mask_surface(mid) )  THEN   
     10213                DO  i = 1, mask_size_l(mid,1)
     10214                   DO  j = 1, mask_size_l(mid,2)
     10215                      DO  k = 1, mask_size_l(mid,3)
     10216                         local_pf(i,j,k) = tend( mask_k(mid,k),  mask_j(mid,j),&
     10217                                                 mask_i(mid,i) )
     10218                      ENDDO
    1106610219                   ENDDO
    1106710220                ENDDO
    11068              ENDDO
    11069           ENDIF
    11070          
    11071        CASE ( 'N_bin1' )
    11072           IF ( av == 0 )  THEN
    11073              DO  i = 1, mask_size_l(mid,1)
    11074                 DO  j = 1, mask_size_l(mid,2)
    11075                    DO  k = 1, mask_size_l(mid,3)                     
    11076                       local_pf(i,j,k) = aerosol_number(1)%conc(mask_k(mid,k),  &
    11077                                                  mask_j(mid,j),mask_i(mid,i))
     10221             ELSE
     10222                DO  i = 1, mask_size_l(mid,1)
     10223                   DO  j = 1, mask_size_l(mid,2)
     10224                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10225                                                                  mask_i(mid,i),&
     10226                                                                  grid )
     10227                      DO  k = 1, mask_size_l(mid,3)
     10228                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     10229                                                      nzt+1 ),                 &
     10230                                                 mask_j(mid,j), mask_i(mid,i) )
     10231                      ENDDO
    1107810232                   ENDDO
    1107910233                ENDDO
    11080              ENDDO
     10234             ENDIF
     10235             resorted = .TRUE.
    1108110236          ELSE
    11082              DO  i = 1, mask_size_l(mid,1)
    11083                 DO  j = 1, mask_size_l(mid,2)
    11084                    DO  k = 1, mask_size_l(mid,3)
    11085                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11086                                                   mask_j(mid,j),mask_i(mid,i),1)
    11087                    ENDDO
    11088                 ENDDO
    11089              ENDDO
    11090           ENDIF
    11091        
    11092        CASE ( 'N_bin2' )
    11093           IF ( av == 0 )  THEN
    11094              DO  i = 1, mask_size_l(mid,1)
    11095                 DO  j = 1, mask_size_l(mid,2)
    11096                    DO  k = 1, mask_size_l(mid,3)                     
    11097                       local_pf(i,j,k) = aerosol_number(2)%conc(mask_k(mid,k),  &
    11098                                                  mask_j(mid,j),mask_i(mid,i))
    11099                    ENDDO
    11100                 ENDDO
    11101              ENDDO
    11102           ELSE
    11103              DO  i = 1, mask_size_l(mid,1)
    11104                 DO  j = 1, mask_size_l(mid,2)
    11105                    DO  k = 1, mask_size_l(mid,3)
    11106                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11107                                                   mask_j(mid,j),mask_i(mid,i),2)
    11108                    ENDDO
    11109                 ENDDO
    11110              ENDDO
    11111           ENDIF
    11112          
    11113        CASE ( 'N_bin3' )
    11114           IF ( av == 0 )  THEN
    11115              DO  i = 1, mask_size_l(mid,1)
    11116                 DO  j = 1, mask_size_l(mid,2)
    11117                    DO  k = 1, mask_size_l(mid,3)                     
    11118                       local_pf(i,j,k) = aerosol_number(3)%conc(mask_k(mid,k),  &
    11119                                                  mask_j(mid,j),mask_i(mid,i))
    11120                    ENDDO
    11121                 ENDDO
    11122              ENDDO
    11123           ELSE
    11124              DO  i = 1, mask_size_l(mid,1)
    11125                 DO  j = 1, mask_size_l(mid,2)
    11126                    DO  k = 1, mask_size_l(mid,3)
    11127                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11128                                                   mask_j(mid,j),mask_i(mid,i),3)
    11129                    ENDDO
    11130                 ENDDO
    11131              ENDDO
    11132           ENDIF
    11133        
    11134        CASE ( 'N_bin4' )
    11135           IF ( av == 0 )  THEN
    11136              DO  i = 1, mask_size_l(mid,1)
    11137                 DO  j = 1, mask_size_l(mid,2)
    11138                    DO  k = 1, mask_size_l(mid,3)                     
    11139                       local_pf(i,j,k) = aerosol_number(4)%conc(mask_k(mid,k),  &
    11140                                                  mask_j(mid,j),mask_i(mid,i))
    11141                    ENDDO
    11142                 ENDDO
    11143              ENDDO
    11144           ELSE
    11145              DO  i = 1, mask_size_l(mid,1)
    11146                 DO  j = 1, mask_size_l(mid,2)
    11147                    DO  k = 1, mask_size_l(mid,3)
    11148                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11149                                                   mask_j(mid,j),mask_i(mid,i),4)
    11150                    ENDDO
    11151                 ENDDO
    11152              ENDDO
    11153           ENDIF
    11154        
    11155        CASE ( 'N_bin5' )
    11156           IF ( av == 0 )  THEN
    11157              DO  i = 1, mask_size_l(mid,1)
    11158                 DO  j = 1, mask_size_l(mid,2)
    11159                    DO  k = 1, mask_size_l(mid,3)                     
    11160                       local_pf(i,j,k) = aerosol_number(5)%conc(mask_k(mid,k),  &
    11161                                                  mask_j(mid,j),mask_i(mid,i))
    11162                    ENDDO
    11163                 ENDDO
    11164              ENDDO
    11165           ELSE
    11166              DO  i = 1, mask_size_l(mid,1)
    11167                 DO  j = 1, mask_size_l(mid,2)
    11168                    DO  k = 1, mask_size_l(mid,3)
    11169                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11170                                                   mask_j(mid,j),mask_i(mid,i),5)
    11171                    ENDDO
    11172                 ENDDO
    11173              ENDDO
    11174           ENDIF
    11175        
    11176        CASE ( 'N_bin6' )
    11177           IF ( av == 0 )  THEN
    11178              DO  i = 1, mask_size_l(mid,1)
    11179                 DO  j = 1, mask_size_l(mid,2)
    11180                    DO  k = 1, mask_size_l(mid,3)                     
    11181                       local_pf(i,j,k) = aerosol_number(6)%conc(mask_k(mid,k),  &
    11182                                                  mask_j(mid,j),mask_i(mid,i))
    11183                    ENDDO
    11184                 ENDDO
    11185              ENDDO
    11186           ELSE
    11187              DO  i = 1, mask_size_l(mid,1)
    11188                 DO  j = 1, mask_size_l(mid,2)
    11189                    DO  k = 1, mask_size_l(mid,3)
    11190                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11191                                                   mask_j(mid,j),mask_i(mid,i),6)
    11192                    ENDDO
    11193                 ENDDO
    11194              ENDDO
    11195           ENDIF
    11196          
    11197        CASE ( 'N_bin7' )
    11198           IF ( av == 0 )  THEN
    11199              DO  i = 1, mask_size_l(mid,1)
    11200                 DO  j = 1, mask_size_l(mid,2)
    11201                    DO  k = 1, mask_size_l(mid,3)                     
    11202                       local_pf(i,j,k) = aerosol_number(7)%conc(mask_k(mid,k),  &
    11203                                                  mask_j(mid,j),mask_i(mid,i))
    11204                    ENDDO
    11205                 ENDDO
    11206              ENDDO
    11207           ELSE
    11208              DO  i = 1, mask_size_l(mid,1)
    11209                 DO  j = 1, mask_size_l(mid,2)
    11210                    DO  k = 1, mask_size_l(mid,3)
    11211                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11212                                                   mask_j(mid,j),mask_i(mid,i),7)
    11213                    ENDDO
    11214                 ENDDO
    11215              ENDDO
    11216           ENDIF
    11217        
    11218        CASE ( 'N_bin8' )
    11219           IF ( av == 0 )  THEN
    11220              DO  i = 1, mask_size_l(mid,1)
    11221                 DO  j = 1, mask_size_l(mid,2)
    11222                    DO  k = 1, mask_size_l(mid,3)                     
    11223                       local_pf(i,j,k) = aerosol_number(8)%conc(mask_k(mid,k),  &
    11224                                                  mask_j(mid,j),mask_i(mid,i))
    11225                    ENDDO
    11226                 ENDDO
    11227              ENDDO
    11228           ELSE
    11229              DO  i = 1, mask_size_l(mid,1)
    11230                 DO  j = 1, mask_size_l(mid,2)
    11231                    DO  k = 1, mask_size_l(mid,3)
    11232                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11233                                                   mask_j(mid,j),mask_i(mid,i),8)
    11234                    ENDDO
    11235                 ENDDO
    11236              ENDDO
    11237           ENDIF
    11238          
    11239        CASE ( 'N_bin9' )
    11240           IF ( av == 0 )  THEN
    11241              DO  i = 1, mask_size_l(mid,1)
    11242                 DO  j = 1, mask_size_l(mid,2)
    11243                    DO  k = 1, mask_size_l(mid,3)                     
    11244                       local_pf(i,j,k) = aerosol_number(9)%conc(mask_k(mid,k),  &
    11245                                                  mask_j(mid,j),mask_i(mid,i))
    11246                    ENDDO
    11247                 ENDDO
    11248              ENDDO
    11249           ELSE
    11250              DO  i = 1, mask_size_l(mid,1)
    11251                 DO  j = 1, mask_size_l(mid,2)
    11252                    DO  k = 1, mask_size_l(mid,3)
    11253                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11254                                                   mask_j(mid,j),mask_i(mid,i),9)
    11255                    ENDDO
    11256                 ENDDO
    11257              ENDDO
    11258           ENDIF
    11259        
    11260        CASE ( 'N_bin10' )
    11261           IF ( av == 0 )  THEN
    11262              DO  i = 1, mask_size_l(mid,1)
    11263                 DO  j = 1, mask_size_l(mid,2)
    11264                    DO  k = 1, mask_size_l(mid,3)                     
    11265                       local_pf(i,j,k) = aerosol_number(10)%conc(mask_k(mid,k), &
    11266                                                  mask_j(mid,j),mask_i(mid,i))
    11267                    ENDDO
    11268                 ENDDO
    11269              ENDDO
    11270           ELSE
    11271              DO  i = 1, mask_size_l(mid,1)
    11272                 DO  j = 1, mask_size_l(mid,2)
    11273                    DO  k = 1, mask_size_l(mid,3)
    11274                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11275                                                  mask_j(mid,j),mask_i(mid,i),10)
    11276                    ENDDO
    11277                 ENDDO
    11278              ENDDO
    11279           ENDIF
    11280        
    11281        CASE ( 'N_bin11' )
    11282           IF ( av == 0 )  THEN
    11283              DO  i = 1, mask_size_l(mid,1)
    11284                 DO  j = 1, mask_size_l(mid,2)
    11285                    DO  k = 1, mask_size_l(mid,3)                     
    11286                       local_pf(i,j,k) = aerosol_number(11)%conc(mask_k(mid,k), &
    11287                                                  mask_j(mid,j),mask_i(mid,i))
    11288                    ENDDO
    11289                 ENDDO
    11290              ENDDO
    11291           ELSE
    11292              DO  i = 1, mask_size_l(mid,1)
    11293                 DO  j = 1, mask_size_l(mid,2)
    11294                    DO  k = 1, mask_size_l(mid,3)
    11295                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11296                                                  mask_j(mid,j),mask_i(mid,i),11)
    11297                    ENDDO
    11298                 ENDDO
    11299              ENDDO
    11300           ENDIF
    11301          
    11302        CASE ( 'N_bin12' )
    11303           IF ( av == 0 )  THEN
    11304              DO  i = 1, mask_size_l(mid,1)
    11305                 DO  j = 1, mask_size_l(mid,2)
    11306                    DO  k = 1, mask_size_l(mid,3)                     
    11307                       local_pf(i,j,k) = aerosol_number(12)%conc(mask_k(mid,k), &
    11308                                                  mask_j(mid,j),mask_i(mid,i))
    11309                    ENDDO
    11310                 ENDDO
    11311              ENDDO
    11312           ELSE
    11313              DO  i = 1, mask_size_l(mid,1)
    11314                 DO  j = 1, mask_size_l(mid,2)
    11315                    DO  k = 1, mask_size_l(mid,3)
    11316                        local_pf(i,j,k) = Nbins_av(mask_k(mid,k),               &
    11317                                                  mask_j(mid,j),mask_i(mid,i),12)
    11318                    ENDDO
    11319                 ENDDO
    11320              ENDDO
    11321           ENDIF
    11322          
    11323        CASE ( 'm_bin1' )
    11324           IF ( av == 0 )  THEN
    11325              DO  i = 1, mask_size_l(mid,1)
    11326                 DO  j = 1, mask_size_l(mid,2)
    11327                    DO  k = 1, mask_size_l(mid,3)
    11328                       temp_bin = 0.0_wp
    11329                       DO  c = 1, ncc_tot*nbins, nbins
    11330                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11331                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11332                       ENDDO
    11333                       local_pf(i,j,k) = temp_bin
    11334                    ENDDO
    11335                 ENDDO
    11336              ENDDO
    11337           ELSE
    11338              DO  i = 1, mask_size_l(mid,1)
    11339                 DO  j = 1, mask_size_l(mid,2)
    11340                    DO  k = 1, mask_size_l(mid,3)
    11341                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11342                                                   mask_j(mid,j),mask_i(mid,i),1)
    11343                    ENDDO
    11344                 ENDDO
    11345              ENDDO
    11346           ENDIF
    11347        
    11348        CASE ( 'm_bin2' )
    11349           IF ( av == 0 )  THEN
    11350              DO  i = 1, mask_size_l(mid,1)
    11351                 DO  j = 1, mask_size_l(mid,2)
    11352                    DO  k = 1, mask_size_l(mid,3)
    11353                       temp_bin = 0.0_wp
    11354                       DO  c = 2, ncc_tot*nbins, nbins
    11355                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11356                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11357                       ENDDO
    11358                       local_pf(i,j,k) = temp_bin
    11359                    ENDDO
    11360                 ENDDO
    11361              ENDDO
    11362           ELSE
    11363              DO  i = 1, mask_size_l(mid,1)
    11364                 DO  j = 1, mask_size_l(mid,2)
    11365                    DO  k = 1, mask_size_l(mid,3)
    11366                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11367                                                   mask_j(mid,j),mask_i(mid,i),2)
    11368                    ENDDO
    11369                 ENDDO
    11370              ENDDO
    11371           ENDIF
    11372          
    11373        CASE ( 'm_bin3' )
    11374           IF ( av == 0 )  THEN
    11375              DO  i = 1, mask_size_l(mid,1)
    11376                 DO  j = 1, mask_size_l(mid,2)
    11377                    DO  k = 1, mask_size_l(mid,3)
    11378                       temp_bin = 0.0_wp
    11379                       DO  c = 3, ncc_tot*nbins, nbins
    11380                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11381                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11382                       ENDDO
    11383                       local_pf(i,j,k) = temp_bin
    11384                    ENDDO
    11385                 ENDDO
    11386              ENDDO
    11387           ELSE
    11388              DO  i = 1, mask_size_l(mid,1)
    11389                 DO  j = 1, mask_size_l(mid,2)
    11390                    DO  k = 1, mask_size_l(mid,3)
    11391                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11392                                                   mask_j(mid,j),mask_i(mid,i),3)
    11393                    ENDDO
    11394                 ENDDO
    11395              ENDDO
    11396           ENDIF
    11397        
    11398        CASE ( 'm_bin4' )
    11399           IF ( av == 0 )  THEN
    11400              DO  i = 1, mask_size_l(mid,1)
    11401                 DO  j = 1, mask_size_l(mid,2)
    11402                    DO  k = 1, mask_size_l(mid,3)
    11403                       temp_bin = 0.0_wp
    11404                       DO  c = 4, ncc_tot*nbins, nbins
    11405                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11406                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11407                       ENDDO
    11408                       local_pf(i,j,k) = temp_bin
    11409                    ENDDO
    11410                 ENDDO
    11411              ENDDO
    11412           ELSE
    11413              DO  i = 1, mask_size_l(mid,1)
    11414                 DO  j = 1, mask_size_l(mid,2)
    11415                    DO  k = 1, mask_size_l(mid,3)
    11416                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11417                                                   mask_j(mid,j),mask_i(mid,i),4)
    11418                    ENDDO
    11419                 ENDDO
    11420              ENDDO
    11421           ENDIF
    11422        
    11423        CASE ( 'm_bin5' )
    11424           IF ( av == 0 )  THEN
    11425              DO  i = 1, mask_size_l(mid,1)
    11426                 DO  j = 1, mask_size_l(mid,2)
    11427                    DO  k = 1, mask_size_l(mid,3)
    11428                       temp_bin = 0.0_wp
    11429                       DO  c = 5, ncc_tot*nbins, nbins
    11430                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11431                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11432                       ENDDO
    11433                       local_pf(i,j,k) = temp_bin
    11434                    ENDDO
    11435                 ENDDO
    11436              ENDDO
    11437           ELSE
    11438              DO  i = 1, mask_size_l(mid,1)
    11439                 DO  j = 1, mask_size_l(mid,2)
    11440                    DO  k = 1, mask_size_l(mid,3)
    11441                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11442                                                   mask_j(mid,j),mask_i(mid,i),5)
    11443                    ENDDO
    11444                 ENDDO
    11445              ENDDO
    11446           ENDIF
    11447        
    11448        CASE ( 'm_bin6' )
    11449           IF ( av == 0 )  THEN
    11450              DO  i = 1, mask_size_l(mid,1)
    11451                 DO  j = 1, mask_size_l(mid,2)
    11452                    DO  k = 1, mask_size_l(mid,3)
    11453                       temp_bin = 0.0_wp
    11454                       DO  c = 6, ncc_tot*nbins, nbins
    11455                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11456                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11457                       ENDDO
    11458                       local_pf(i,j,k) = temp_bin
    11459                    ENDDO
    11460                 ENDDO
    11461              ENDDO
    11462           ELSE
    11463              DO  i = 1, mask_size_l(mid,1)
    11464                 DO  j = 1, mask_size_l(mid,2)
    11465                    DO  k = 1, mask_size_l(mid,3)
    11466                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11467                                                   mask_j(mid,j),mask_i(mid,i),6)
    11468                    ENDDO
    11469                 ENDDO
    11470              ENDDO
    11471           ENDIF
    11472          
    11473        CASE ( 'm_bin7' )
    11474           IF ( av == 0 )  THEN
    11475              DO  i = 1, mask_size_l(mid,1)
    11476                 DO  j = 1, mask_size_l(mid,2)
    11477                    DO  k = 1, mask_size_l(mid,3)
    11478                       temp_bin = 0.0_wp
    11479                       DO  c = 7, ncc_tot*nbins, nbins
    11480                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11481                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11482                       ENDDO
    11483                       local_pf(i,j,k) = temp_bin
    11484                    ENDDO
    11485                 ENDDO
    11486              ENDDO
    11487           ELSE
    11488              DO  i = 1, mask_size_l(mid,1)
    11489                 DO  j = 1, mask_size_l(mid,2)
    11490                    DO  k = 1, mask_size_l(mid,3)
    11491                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11492                                                   mask_j(mid,j),mask_i(mid,i),7)
    11493                    ENDDO
    11494                 ENDDO
    11495              ENDDO
    11496           ENDIF
    11497        
    11498        CASE ( 'm_bin8' )
    11499           IF ( av == 0 )  THEN
    11500              DO  i = 1, mask_size_l(mid,1)
    11501                 DO  j = 1, mask_size_l(mid,2)
    11502                    DO  k = 1, mask_size_l(mid,3)
    11503                       temp_bin = 0.0_wp
    11504                       DO  c = 8, ncc_tot*nbins, nbins
    11505                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11506                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11507                       ENDDO
    11508                       local_pf(i,j,k) = temp_bin
    11509                    ENDDO
    11510                 ENDDO
    11511              ENDDO
    11512           ELSE
    11513              DO  i = 1, mask_size_l(mid,1)
    11514                 DO  j = 1, mask_size_l(mid,2)
    11515                    DO  k = 1, mask_size_l(mid,3)
    11516                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11517                                                   mask_j(mid,j),mask_i(mid,i),8)
    11518                    ENDDO
    11519                 ENDDO
    11520              ENDDO
    11521           ENDIF
    11522          
    11523        CASE ( 'm_bin9' )
    11524           IF ( av == 0 )  THEN
    11525              DO  i = 1, mask_size_l(mid,1)
    11526                 DO  j = 1, mask_size_l(mid,2)
    11527                    DO  k = 1, mask_size_l(mid,3)
    11528                       temp_bin = 0.0_wp
    11529                       DO  c = 9, ncc_tot*nbins, nbins
    11530                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11531                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11532                       ENDDO
    11533                       local_pf(i,j,k) = temp_bin
    11534                    ENDDO
    11535                 ENDDO
    11536              ENDDO
    11537           ELSE
    11538              DO  i = 1, mask_size_l(mid,1)
    11539                 DO  j = 1, mask_size_l(mid,2)
    11540                    DO  k = 1, mask_size_l(mid,3)
    11541                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11542                                                   mask_j(mid,j),mask_i(mid,i),9)
    11543                    ENDDO
    11544                 ENDDO
    11545              ENDDO
    11546           ENDIF
    11547        
    11548        CASE ( 'm_bin10' )
    11549           IF ( av == 0 )  THEN
    11550              DO  i = 1, mask_size_l(mid,1)
    11551                 DO  j = 1, mask_size_l(mid,2)
    11552                    DO  k = 1, mask_size_l(mid,3)
    11553                       temp_bin = 0.0_wp
    11554                       DO  c = 10, ncc_tot*nbins, nbins
    11555                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11556                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11557                       ENDDO
    11558                       local_pf(i,j,k) = temp_bin
    11559                    ENDDO
    11560                 ENDDO
    11561              ENDDO
    11562           ELSE
    11563              DO  i = 1, mask_size_l(mid,1)
    11564                 DO  j = 1, mask_size_l(mid,2)
    11565                    DO  k = 1, mask_size_l(mid,3)
    11566                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11567                                                  mask_j(mid,j),mask_i(mid,i),10)
    11568                    ENDDO
    11569                 ENDDO
    11570              ENDDO
    11571           ENDIF
    11572          
    11573        CASE ( 'm_bin11' )
    11574          IF ( av == 0 )  THEN
    11575              DO  i = 1, mask_size_l(mid,1)
    11576                 DO  j = 1, mask_size_l(mid,2)
    11577                    DO  k = 1, mask_size_l(mid,3)
    11578                       temp_bin = 0.0_wp
    11579                       DO  c = 11, ncc_tot*nbins, nbins
    11580                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11581                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11582                       ENDDO
    11583                       local_pf(i,j,k) = temp_bin
    11584                    ENDDO
    11585                 ENDDO
    11586              ENDDO
    11587           ELSE
    11588              DO  i = 1, mask_size_l(mid,1)
    11589                 DO  j = 1, mask_size_l(mid,2)
    11590                    DO  k = 1, mask_size_l(mid,3)
    11591                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11592                                                  mask_j(mid,j),mask_i(mid,i),11)
    11593                    ENDDO
    11594                 ENDDO
    11595              ENDDO
    11596           ENDIF
    11597          
    11598        CASE ( 'm_bin12' )
    11599           IF ( av == 0 )  THEN
    11600              DO  i = 1, mask_size_l(mid,1)
    11601                 DO  j = 1, mask_size_l(mid,2)
    11602                    DO  k = 1, mask_size_l(mid,3)
    11603                       temp_bin = 0.0_wp
    11604                       DO  c = 12, ncc_tot*nbins, nbins
    11605                          temp_bin = temp_bin + aerosol_mass(c)%conc(           &
    11606                                     mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    11607                       ENDDO
    11608                       local_pf(i,j,k) = temp_bin
    11609                    ENDDO
    11610                 ENDDO
    11611              ENDDO
    11612           ELSE
    11613              DO  i = 1, mask_size_l(mid,1)
    11614                 DO  j = 1, mask_size_l(mid,2)
    11615                    DO  k = 1, mask_size_l(mid,3)
    11616                        local_pf(i,j,k) = mbins_av(mask_k(mid,k),               &
    11617                                                  mask_j(mid,j),mask_i(mid,i),12)
    11618                    ENDDO
    11619                 ENDDO
    11620              ENDDO
     10237             to_be_resorted => PM10_av
    1162110238          ENDIF
    1162210239         
    1162310240       CASE ( 's_BC', 's_DU', 's_NH', 's_NO', 's_OC', 's_SO4', 's_SS' )
    11624           IF ( is_used( prtcl, TRIM( variable(3:) ) ) )  THEN
    11625              icc = get_index( prtcl, TRIM( variable(3:) ) )
    11626              IF ( av == 0 )  THEN
    11627                 DO  i = 1, mask_size_l(mid,1)
    11628                    DO  j = 1, mask_size_l(mid,2)
    11629                       DO  k = 1, mask_size_l(mid,3)
     10241          IF ( av == 0 )  THEN
     10242             IF ( is_used( prtcl, TRIM( variable(3:) ) ) )  THEN
     10243                icc = get_index( prtcl, TRIM( variable(3:) ) )
     10244                DO  i = nxl, nxr
     10245                   DO  j = nys, nyn
     10246                      DO  k = nzb, nz_do3d
    1163010247                         temp_bin = 0.0_wp
    1163110248                         DO  c = ( icc-1 )*nbins+1, icc*nbins
    11632                             temp_bin = temp_bin + aerosol_mass(c)%conc(        &
    11633                                       mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
     10249                            temp_bin = temp_bin + aerosol_mass(c)%conc(k,j,i)
    1163410250                         ENDDO
    11635                          local_pf(i,j,k) = temp_bin
     10251                         tend(k,j,i) = temp_bin
    1163610252                      ENDDO
    1163710253                   ENDDO
    1163810254                ENDDO
    1163910255             ELSE
    11640                 IF ( TRIM( variable(3:) ) == 'BC' )   to_be_resorted => s_BC_av
    11641                 IF ( TRIM( variable(3:) ) == 'DU' )   to_be_resorted => s_DU_av   
    11642                 IF ( TRIM( variable(3:) ) == 'NH' )   to_be_resorted => s_NH_av   
    11643                 IF ( TRIM( variable(3:) ) == 'NO' )   to_be_resorted => s_NO_av   
    11644                 IF ( TRIM( variable(3:) ) == 'OC' )   to_be_resorted => s_OC_av   
    11645                 IF ( TRIM( variable(3:) ) == 'SO4' )  to_be_resorted => s_SO4_av   
    11646                 IF ( TRIM( variable(3:) ) == 'SS' )   to_be_resorted => s_SS_av
     10256                tend = 0.0_wp
     10257             ENDIF
     10258             IF ( .NOT. mask_surface(mid) )  THEN   
    1164710259                DO  i = 1, mask_size_l(mid,1)
    1164810260                   DO  j = 1, mask_size_l(mid,2)
    11649                       DO  k = 1, mask_size_l(mid,3)                   
    11650                          local_pf(i,j,k) = to_be_resorted(mask_k(mid,k),       &
    11651                                                     mask_j(mid,j),mask_i(mid,i))
     10261                      DO  k = 1, mask_size_l(mid,3)
     10262                         local_pf(i,j,k) = tend( mask_k(mid,k), mask_j(mid,j), &
     10263                                                 mask_i(mid,i) )
     10264                      ENDDO
     10265                   ENDDO
     10266                ENDDO
     10267             ELSE     
     10268                DO  i = 1, mask_size_l(mid,1)
     10269                   DO  j = 1, mask_size_l(mid,2)
     10270                      topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),&
     10271                                                                  mask_i(mid,i),&
     10272                                                                  grid )
     10273                      DO  k = 1, mask_size_l(mid,3)
     10274                         local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k),&
     10275                                                      nzt+1 ),&
     10276                                                 mask_j(mid,j), mask_i(mid,i) )
    1165210277                      ENDDO
    1165310278                   ENDDO
    1165410279                ENDDO
    1165510280             ENDIF
     10281             resorted = .TRUE.
     10282          ELSE
     10283             IF ( TRIM( variable(3:) ) == 'BC' )   to_be_resorted => s_BC_av
     10284             IF ( TRIM( variable(3:) ) == 'DU' )   to_be_resorted => s_DU_av   
     10285             IF ( TRIM( variable(3:) ) == 'NH' )   to_be_resorted => s_NH_av   
     10286             IF ( TRIM( variable(3:) ) == 'NO' )   to_be_resorted => s_NO_av   
     10287             IF ( TRIM( variable(3:) ) == 'OC' )   to_be_resorted => s_OC_av   
     10288             IF ( TRIM( variable(3:) ) == 'SO4' )  to_be_resorted => s_SO4_av   
     10289             IF ( TRIM( variable(3:) ) == 'SS' )   to_be_resorted => s_SS_av
    1165610290          ENDIF
    1165710291       
     
    1166110295    END SELECT
    1166210296   
     10297   
     10298    IF ( .NOT. resorted )  THEN
     10299       IF ( .NOT. mask_surface(mid) )  THEN
     10300!
     10301!--       Default masked output   
     10302          DO  i = 1, mask_size_l(mid,1)
     10303             DO  j = 1, mask_size_l(mid,2)
     10304                DO  k = 1, mask_size_l(mid,3)
     10305                   local_pf(i,j,k) = to_be_resorted( mask_k(mid,k),            &
     10306                                                     mask_j(mid,j),mask_i(mid,i) )
     10307                ENDDO
     10308             ENDDO
     10309          ENDDO
     10310       ELSE
     10311!
     10312!--       Terrain-following masked output     
     10313          DO  i = 1, mask_size_l(mid,1)
     10314             DO  j = 1, mask_size_l(mid,2)
     10315!
     10316!--             Get k index of highest horizontal surface
     10317                topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),     &
     10318                                                            mask_i(mid,i), grid )
     10319!
     10320!--             Save output array
     10321                DO  k = 1, mask_size_l(mid,3)
     10322                   local_pf(i,j,k) = to_be_resorted( MIN( topo_top_ind+mask_k(mid,k),&
     10323                                                          nzt+1 ),             &
     10324                                                     mask_j(mid,j), mask_i(mid,i) )
     10325                ENDDO
     10326             ENDDO
     10327          ENDDO
     10328       ENDIF
     10329    ENDIF
     10330   
    1166310331 END SUBROUTINE salsa_data_output_mask
    1166410332 
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r3569 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    122123! - Workaround for sum-up usm arrays in case of restart runs, to avoid program
    123124!   crash (MS)
    124 ! 
     125!
    125126! 2292 2017-06-20 09:51:42Z schwenkel
    126127! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
     
    263264    USE control_parameters,                                                    &
    264265        ONLY:  air_chemistry, average_count_3d, biometeorology, doav, doav_n,  &
    265                land_surface, ocean_mode, rho_surface, urban_surface,           &
     266               land_surface, ocean_mode, rho_surface, salsa, urban_surface,    &
    266267               varnamelength
    267268
     
    290291         
    291292    USE salsa_mod,                                                             &
    292         ONLY:  salsa, salsa_3d_data_averaging         
     293        ONLY:  salsa_3d_data_averaging         
    293294
    294295    USE surface_mod,                                                           &
     
    552553                   CALL radiation_3d_data_averaging( 'allocate', doav(ii) )
    553554                ENDIF
    554                
    555 !
    556 !--             SALSA quantity
     555
    557556                IF ( salsa )  THEN
    558557                   CALL salsa_3d_data_averaging( 'allocate', doav(ii) )
     
    12021201                CALL radiation_3d_data_averaging( 'sum', doav(ii) )
    12031202             ENDIF
    1204              
    1205 !
    1206 !--          SALSA quantity
     1203
    12071204             IF ( salsa )  THEN
    12081205                CALL salsa_3d_data_averaging( 'sum', doav(ii) )
  • palm/trunk/SOURCE/swap_timelevel.f90

    r3467 r3582  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    162163        ONLY:  air_chemistry, humidity, land_surface, neutral, ocean_mode,     &
    163164               passive_scalar, simulated_time, timestep_count, urban_surface,  &
    164                time_since_reference_point
     165               time_since_reference_point, salsa
    165166
    166167    USE gust_mod,                                                              &
     
    182183         
    183184    USE salsa_mod,                                                             &
    184         ONLY:  salsa, salsa_swap_timelevel, skip_time_do_salsa             
     185        ONLY:  salsa_swap_timelevel, skip_time_do_salsa             
    185186
    186187    USE turbulence_closure_mod,                                                &
     
    295296    IF ( salsa  .AND.  simulated_time >= time_since_reference_point )  THEN
    296297       CALL salsa_swap_timelevel(  MOD( timestep_count, 2 ) )
    297     ENDIF 
     298    ENDIF     
    298299
    299300    CALL tcm_swap_timelevel( MOD( timestep_count, 2) )
  • palm/trunk/SOURCE/time_integration.f90

    r3569 r3582  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2324!
    2425! Former revisions:
     
    460461               ocean_mode, passive_scalar, pt_reference,                       &
    461462               pt_slope_offset, random_heatflux, rans_mode,                    &
    462                rans_tke_e, run_coupled, simulated_time, simulated_time_chr,    &
     463               rans_tke_e, run_coupled, salsa,                                 &
     464               simulated_time, simulated_time_chr,                             &
    463465               skip_time_do2d_xy, skip_time_do2d_xz, skip_time_do2d_yz,        &
    464466               skip_time_do3d, skip_time_domask, skip_time_dopr,               &
     
    475477               use_single_reference_value, u_gtrans, v_gtrans,                 &
    476478               virtual_flight, virtual_measurement, wind_turbine,              &
    477                ws_scheme_mom, ws_scheme_sca
     479               ws_scheme_mom, ws_scheme_sca 
    478480
    479481    USE cpulog,                                                                &
     
    542544              radiation_interaction, radiation_interactions,                   &
    543545              skip_time_do_radiation, time_radiation
     546         
     547    USE salsa_mod,                                                             &
     548        ONLY: aerosol_number, aerosol_mass, nbins, ncc_tot, ngast,             &
     549              salsa_boundary_conds, salsa_gas, salsa_gases_from_chem,          &
     550              skip_time_do_salsa                     
    544551
    545552    USE spectra_mod,                                                           &
     
    574581        ONLY:  dt_stg_call, dt_stg_adjust, parametrize_inflow_turbulence,      &
    575582               stg_adjust, stg_main, time_stg_adjust, time_stg_call,           &
    576                use_syn_turb_gen
    577          
    578     USE salsa_mod,                                                             &
    579         ONLY: aerosol_number, aerosol_mass, nbins, ncc_tot, ngast, salsa,      &
    580               salsa_boundary_conds, salsa_gas, salsa_gases_from_chem,          &
    581               skip_time_do_salsa           
     583               use_syn_turb_gen   
    582584
    583585    USE user_actions_mod,                                                      &
     
    916918             CALL cpu_log( log_point_s(91), 'salsa exch-horiz ', 'stop' )
    917919          ENDIF         
    918 
    919920          CALL cpu_log( log_point(26), 'exchange-horiz-progn', 'stop' )
    920921
  • palm/trunk/SOURCE/write_restart_data_mod.f90

    r3467 r3582  
    2020! Current revisions:
    2121! -----------------
     22! Move the control parameter "salsa" from salsa_mod to control_parameters
     23! (M. Kurppa)
    2224!
    2325!
     
    945947             
    946948       USE salsa_mod,                                                          &
    947            ONLY:  salsa, salsa_wrd_local         
     949           ONLY:  salsa_wrd_local         
    948950
    949951       USE surface_mod,                                                        &
     
    12731275       IF ( land_surface )         CALL lsm_wrd_local
    12741276       IF ( ocean_mode )           CALL ocean_wrd_local
    1275        CALL surface_wrd_local
    12761277       IF ( radiation )            CALL radiation_wrd_local
    12771278       IF ( salsa )                CALL salsa_wrd_local
     1279       CALL surface_wrd_local
    12781280       IF ( urban_surface )        CALL usm_wrd_local
    12791281
  • palm/trunk/UTIL

    • Property svn:mergeinfo set to False
      /palm/branches/salsa/UTIL2503-3581
Note: See TracChangeset for help on using the changeset viewer.