Changeset 2232 for palm/trunk


Ignore:
Timestamp:
May 30, 2017 5:47:52 PM (8 years ago)
Author:
suehring
Message:

Adjustments according new topography and surface-modelling concept implemented

Location:
palm/trunk/SOURCE
Files:
1 added
1 deleted
73 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r2176 r2232  
    2020# Current revisions:
    2121# ------------------
    22 #
     22# +dependencies for surface_mod
     23# -wall_fluxes
    2324#
    2425# Former revisions:
     
    351352        read_3d_binary.f90 read_var_list.f90 run_control.f90 \
    352353        set_slicer_attributes_dvrp.f90 singleton_mod.f90 sor.f90 spectra_mod.f90 \
    353         subsidence_mod.f90 sum_up_3d_data.f90 \
     354        subsidence_mod.f90 sum_up_3d_data.f90 surface_mod.f90 \
    354355        surface_coupler.f90 surface_layer_fluxes_mod.f90 swap_timelevel.f90 temperton_fft_mod.f90 \
    355356        time_integration.f90 time_to_string.f90 timestep.f90 \
     
    369370        user_lpm_init.f90 user_lpm_set_attributes.f90 user_module.f90 \
    370371        user_parin.f90 user_read_restart_data.f90 \
    371         user_spectra.f90 user_statistics.f90 virtual_flight_mod.f90 wall_fluxes.f90 \
     372        user_spectra.f90 user_statistics.f90 virtual_flight_mod.f90 \
    372373        wind_turbine_model_mod.f90 write_3d_binary.f90 write_var_list.f90
    373374
     
    413414advec_w_pw.o: modules.o mod_kinds.o
    414415advec_w_up.o: modules.o mod_kinds.o
    415 average_3d_data.o: modules.o cpulog_mod.o mod_kinds.o land_surface_model_mod.o \
     416average_3d_data.o: modules.o cpulog_mod.o mod_kinds.o exchange_horiz_2d.o land_surface_model_mod.o \
    416417        radiation_model_mod.o urban_surface_mod.o
    417 boundary_conds.o: modules.o mod_kinds.o pmc_interface_mod.o
     418boundary_conds.o: modules.o mod_kinds.o pmc_interface_mod.o surface_mod.o
    418419buoyancy.o: modules.o mod_kinds.o
    419420calc_mean_profile.o: modules.o mod_kinds.o
     
    445446data_output_2d.o: modules.o cpulog_mod.o mod_kinds.o mod_particle_attributes.o \
    446447   netcdf_interface_mod.o land_surface_model_mod.o radiation_model_mod.o \
    447    urban_surface_mod.o
     448   surface_mod.o urban_surface_mod.o
    448449data_output_3d.o: modules.o cpulog_mod.o mod_kinds.o mod_particle_attributes.o \
    449450   netcdf_interface_mod.o land_surface_model_mod.o urban_surface_mod.o
    450451diffusion_e.o: modules.o mod_kinds.o microphysics_mod.o \
    451    mod_particle_attributes.o
    452 diffusion_s.o: modules.o mod_kinds.o
    453 diffusion_u.o: modules.o mod_kinds.o wall_fluxes.o
    454 diffusion_v.o: modules.o mod_kinds.o wall_fluxes.o
    455 diffusion_w.o: modules.o mod_kinds.o wall_fluxes.o
    456 diffusivities.o: modules.o mod_kinds.o
     452   mod_particle_attributes.o surface_mod.o
     453diffusion_s.o: modules.o mod_kinds.o surface_mod.o
     454diffusion_u.o: modules.o mod_kinds.o surface_mod.o
     455diffusion_v.o: modules.o mod_kinds.o surface_mod.o
     456diffusion_w.o: modules.o mod_kinds.o surface_mod.o
     457diffusivities.o: modules.o mod_kinds.o surface_mod.o
    457458disturb_field.o: modules.o cpulog_mod.o mod_kinds.o random_function_mod.o \
    458459                 random_generator_parallel_mod.o
    459 disturb_heatflux.o: modules.o cpulog_mod.o mod_kinds.o
    460 eqn_state_seawater.o: modules.o mod_kinds.o
     460disturb_heatflux.o: modules.o cpulog_mod.o mod_kinds.o random_generator_parallel_mod.o surface_mod.o
     461eqn_state_seawater.o: modules.o mod_kinds.o surface_mod.o
    461462exchange_horiz.o: modules.o cpulog_mod.o mod_kinds.o
    462463exchange_horiz_2d.o: modules.o cpulog_mod.o mod_kinds.o pmc_interface_mod.o
    463464fft_xy_mod.o: modules.o mod_kinds.o singleton_mod.o temperton_fft_mod.o
    464465flow_statistics.o: modules.o cpulog_mod.o mod_kinds.o land_surface_model_mod.o \
    465    netcdf_interface_mod.o radiation_model_mod.o
     466   netcdf_interface_mod.o radiation_model_mod.o surface_mod.o
    466467global_min_max.o: modules.o mod_kinds.o
    467468header.o: modules.o cpulog_mod.o mod_kinds.o netcdf_interface_mod.o land_surface_model_mod.o\
     
    470471inflow_turbulence.o: modules.o cpulog_mod.o mod_kinds.o
    471472init_1d_model.o: modules.o mod_kinds.o
    472 init_3d_model.o: modules.o mod_kinds.o advec_ws.o cpulog_mod.o land_surface_model_mod.o \
     473init_3d_model.o: modules.o mod_kinds.o advec_ws.o cpulog_mod.o disturb_heatflux.o land_surface_model_mod.o \
    473474   lpm_init.o ls_forcing_mod.o netcdf_interface_mod.o plant_canopy_model_mod.o \
    474475   radiation_model_mod.o random_function_mod.o random_generator_parallel_mod.o \
    475    surface_layer_fluxes_mod.o microphysics_mod.o mod_particle_attributes.o \
    476    urban_surface_mod.o virtual_flight_mod.o wind_turbine_model_mod.o
     476   microphysics_mod.o mod_particle_attributes.o surface_layer_fluxes_mod.o \
     477   urban_surface_mod.o virtual_flight_mod.o surface_mod.o wind_turbine_model_mod.o
    477478init_advec.o: modules.o mod_kinds.o
    478479init_cloud_physics.o: modules.o mod_kinds.o
    479480init_coupling.o: modules.o mod_kinds.o
    480481init_dvrp.o: modules.o mod_kinds.o
    481 init_grid.o: modules.o mod_kinds.o advec_ws.o
     482init_grid.o: modules.o mod_kinds.o advec_ws.o netcdf_interface_mod.o surface_mod.o
    482483init_masks.o: modules.o mod_kinds.o netcdf_interface_mod.o
    483484init_ocean.o: modules.o eqn_state_seawater.o mod_kinds.o
     
    487488init_slope.o: modules.o mod_kinds.o
    488489interaction_droplets_ptq.o: modules.o mod_kinds.o
    489 land_surface_model_mod.o: modules.o mod_kinds.o radiation_model_mod.o
     490land_surface_model_mod.o: modules.o mod_kinds.o radiation_model_mod.o surface_mod.o
    490491local_stop.o: modules.o mod_kinds.o pmc_interface_mod.o
    491492local_tremain.o: modules.o cpulog_mod.o mod_kinds.o
     
    519520ls_forcing_mod.o: modules.o cpulog_mod.o mod_kinds.o
    520521message.o: modules.o mod_kinds.o pmc_interface_mod.o
    521 microphysics_mod.o: modules.o cpulog_mod.o mod_kinds.o
     522microphysics_mod.o: modules.o cpulog_mod.o mod_kinds.o surface_mod.o
    522523modules.o: modules.f90 mod_kinds.o
    523524mod_kinds.o: mod_kinds.f90
     
    546547poismg_noopt.o: modules.o cpulog_mod.o mod_kinds.o
    547548posix_calls_from_fortran.o: posix_calls_from_fortran.f90
    548 pres.o: modules.o cpulog_mod.o mod_kinds.o poisfft_mod.o poismg_mod.o pmc_interface_mod.o
     549pres.o: modules.o cpulog_mod.o mod_kinds.o poisfft_mod.o poismg_mod.o pmc_interface_mod.o \
     550   surface_mod.o
    549551print_1d.o: modules.o cpulog_mod.o mod_kinds.o
    550 production_e.o: modules.o mod_kinds.o wall_fluxes.o
     552production_e.o: modules.o mod_kinds.o surface_mod.o
    551553prognostic_equations.o: modules.o advec_s_pw.o advec_s_up.o advec_s_bc.o advec_u_pw.o \
    552554        advec_u_up.o advec_v_pw.o advec_v_up.o advec_w_pw.o advec_w_up.o \
     
    555557        eqn_state_seawater.o mod_kinds.o microphysics_mod.o \
    556558        nudging_mod.o plant_canopy_model_mod.o production_e.o radiation_model_mod.o \
    557         subsidence_mod.o urban_surface_mod.o user_actions.o wind_turbine_model_mod.o
     559        subsidence_mod.o surface_mod.o user_actions.o wind_turbine_model_mod.o
    558560progress_bar_mod.o: modules.o mod_kinds.o
    559561radiation_model_mod.o : modules.o mod_particle_attributes.o microphysics_mod.o
     
    563565read_3d_binary.o: modules.o cpulog_mod.o mod_kinds.o \
    564566   land_surface_model_mod.o radiation_model_mod.o random_function_mod.o random_generator_parallel_mod.o \
    565    spectra_mod.o
     567   spectra_mod.o surface_mod.o
    566568read_var_list.o: modules.o mod_kinds.o netcdf_interface_mod.o plant_canopy_model_mod.o \
    567569   spectra_mod.o microphysics_mod.o urban_surface_mod.o virtual_flight_mod.o
     
    573575subsidence_mod.o: modules.o mod_kinds.o
    574576sum_up_3d_data.o: modules.o cpulog_mod.o mod_kinds.o land_surface_model_mod.o \
    575                   radiation_model_mod.o urban_surface_mod.o
     577                  radiation_model_mod.o surface_mod.o urban_surface_mod.o
    576578surface_coupler.o: modules.o cpulog_mod.o mod_kinds.o
    577 surface_layer_fluxes_mod.o: modules.o mod_kinds.o land_surface_model_mod.o \
    578         urban_surface_mod.o
     579surface_layer_fluxes_mod.o: modules.o mod_kinds.o exchange_horiz_2d.o land_surface_model_mod.o \
     580        urban_surface_mod.o surface_mod.o
     581surface_mod.o: modules.o mod_kinds.o init_pegrid.o
    579582swap_timelevel.o: modules.o cpulog_mod.o mod_kinds.o land_surface_model_mod.o \
    580583   pmc_interface_mod.o urban_surface_mod.o
    581584temperton_fft_mod.o: modules.o mod_kinds.o
    582585time_integration.o: modules.o advec_ws.o buoyancy.o calc_mean_profile.o \
    583         cpulog_mod.o data_output_flight.o interaction_droplets_ptq.o land_surface_model_mod.o \
     586        cpulog_mod.o data_output_flight.o disturb_heatflux.o interaction_droplets_ptq.o land_surface_model_mod.o \
    584587        ls_forcing_mod.o mod_kinds.o nudging_mod.o pmc_interface_mod.o production_e.o \
    585588        prognostic_equations.o progress_bar_mod.o radiation_model_mod.o \
    586         spectra_mod.o user_actions.o surface_layer_fluxes_mod.o microphysics_mod.o \
     589        spectra_mod.o user_actions.o microphysics_mod.o surface_layer_fluxes_mod.o surface_mod.o \
    587590        urban_surface_mod.o virtual_flight_mod.o wind_turbine_model_mod.o
    588591time_to_string.o: mod_kinds.o
     
    600603   netcdf_interface_mod.o
    601604user_check_parameters.o: modules.o mod_kinds.o user_module.o
    602 user_data_output_2d.o: modules.o mod_kinds.o user_module.o
     605user_data_output_2d.o: modules.o mod_kinds.o surface_mod.o user_module.o
    603606user_data_output_3d.o: modules.o mod_kinds.o user_module.o
    604607user_data_output_mask.o: modules.o mod_kinds.o user_module.o
     
    609612user_header.o: modules.o mod_kinds.o user_module.o
    610613user_init.o: modules.o mod_kinds.o netcdf_interface_mod.o user_module.o
    611 user_init_3d_model.o: modules.o mod_kinds.o user_module.o
     614user_init_3d_model.o: modules.o mod_kinds.o surface_mod.o user_module.o
    612615user_init_flight.o: modules.o mod_kinds.o netcdf_interface_mod.o user_module.o
    613616user_init_grid.o: modules.o mod_kinds.o user_module.o
    614 user_init_land_surface.o: modules.o mod_kinds.o user_module.o land_surface_model_mod.o netcdf_interface_mod.o
     617user_init_land_surface.o: modules.o mod_kinds.o surface_mod.o user_module.o land_surface_model_mod.o netcdf_interface_mod.o
    615618user_init_plant_canopy.o: modules.o mod_kinds.o user_module.o plant_canopy_model_mod.o
    616619user_init_radiation.o: modules.o mod_kinds.o user_module.o radiation_model_mod.o
    617 user_init_urban_surface.o: modules.o mod_kinds.o user_module.o urban_surface_mod.o
     620user_init_urban_surface.o: modules.o mod_kinds.o surface_mod.o user_module.o urban_surface_mod.o
    618621user_last_actions.o: modules.o mod_kinds.o user_module.o
    619622user_lpm_advec.o: modules.o mod_kinds.o user_module.o
     
    626629user_statistics.o: modules.o mod_kinds.o netcdf_interface_mod.o user_module.o
    627630virtual_flight_mod.o: modules.o cpulog_mod.o mod_kinds.o netcdf_interface_mod.o user_init_flight.o user_flight.o
    628 wall_fluxes.o: modules.o mod_kinds.o
    629631wind_turbine_model_mod.o: modules.o cpulog_mod.o mod_kinds.o
    630632write_3d_binary.o: modules.o cpulog_mod.o mod_kinds.o \
    631633        radiation_model_mod.o random_function_mod.o random_generator_parallel_mod.o \
    632         spectra_mod.o
     634        spectra_mod.o surface_mod.o
    633635write_var_list.o: modules.o mod_kinds.o netcdf_interface_mod.o plant_canopy_model_mod.o\
    634636   spectra_mod.o microphysics_mod.o urban_surface_mod.o virtual_flight_mod.o
  • palm/trunk/SOURCE/advec_s_pw.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    104104
    105105       USE indices,                                                            &
    106            ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_s_inner,&
    107                   nzt
     106           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb,             &
     107                  nzt, wall_flags_0
    108108
    109109       USE kinds
     
    125125       DO  i = nxl, nxr
    126126          DO  j = nys, nyn
    127              DO  k = nzb_s_inner(j,i)+1, nzt
    128                 tend(k,j,i) = tend(k,j,i)                                      &
    129               -0.5_wp * ( ( u(k,j,i+1) - u_gtrans ) * ( sk(k,j,i+1) - sk(k,j,i) ) &
     127             DO  k = nzb+1, nzt
     128                tend(k,j,i) = tend(k,j,i)                                      &
     129            ( -0.5_wp * ( ( u(k,j,i+1) - u_gtrans ) * ( sk(k,j,i+1) - sk(k,j,i) ) &
    130130                        - ( u(k,j,i)   - u_gtrans ) * ( sk(k,j,i-1) - sk(k,j,i) ) &
    131131                        ) * ddx                                                   &
     
    135135              -         (   w(k,j,i)                * ( sk(k+1,j,i) - sk(k,j,i) ) &
    136136                        -   w(k-1,j,i)              * ( sk(k-1,j,i) - sk(k,j,i) ) &
    137                         ) * dd2zu(k)
     137                        ) * dd2zu(k)                                              &
     138            ) * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
    138139             ENDDO
    139140          ENDDO
     
    160161
    161162       USE indices,                                                            &
    162            ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner, nzt
     163           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt, wall_flags_0
    163164
    164165       USE kinds
     
    178179
    179180
    180        DO  k = nzb_s_inner(j,i)+1, nzt
    181           tend(k,j,i) = tend(k,j,i)                                            &
    182               -0.5_wp * ( ( u(k,j,i+1) - u_gtrans ) * ( sk(k,j,i+1) - sk(k,j,i) ) &
     181       DO  k = nzb+1, nzt
     182          tend(k,j,i) = tend(k,j,i)                                            &
     183            ( -0.5_wp * ( ( u(k,j,i+1) - u_gtrans ) * ( sk(k,j,i+1) - sk(k,j,i) ) &
    183184                        - ( u(k,j,i)   - u_gtrans ) * ( sk(k,j,i-1) - sk(k,j,i) ) &
    184185                        ) * ddx                                                   &
     
    188189              -         (   w(k,j,i)                * ( sk(k+1,j,i) - sk(k,j,i) ) &
    189190                        -   w(k-1,j,i)              * ( sk(k-1,j,i) - sk(k,j,i) ) &
    190                         ) * dd2zu(k)
     191                        ) * dd2zu(k)                                              &
     192            ) * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
    191193       ENDDO
    192194
  • palm/trunk/SOURCE/advec_s_up.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    104104
    105105       USE indices,                                                            &
    106            ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_s_inner,&
    107                   nzt
     106           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,        &
     107                  wall_flags_0
    108108
    109109       USE kinds
     
    128128       DO  i = nxl, nxr
    129129          DO  j = nys, nyn
    130              DO  k = nzb_s_inner(j,i)+1, nzt
     130             DO  k = nzb+1, nzt
    131131!
    132132!--             x-direction
     
    134134                IF ( ukomp > 0.0_wp )  THEN
    135135                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    136                                          ( sk(k,j,i) - sk(k,j,i-1) ) * ddx
     136                                         ( sk(k,j,i) - sk(k,j,i-1) ) * ddx     &
     137                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     138                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    137139                ELSE
    138140                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    139                                          ( sk(k,j,i+1) - sk(k,j,i) ) * ddx
     141                                         ( sk(k,j,i+1) - sk(k,j,i) ) * ddx     &
     142                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     143                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    140144                ENDIF
    141145!
     
    144148                IF ( vkomp > 0.0_wp )  THEN
    145149                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    146                                          ( sk(k,j,i) - sk(k,j-1,i) ) * ddy
     150                                         ( sk(k,j,i) - sk(k,j-1,i) ) * ddy     &
     151                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     152                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    147153                ELSE
    148154                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    149                                          ( sk(k,j+1,i) - sk(k,j,i) ) * ddy
     155                                         ( sk(k,j+1,i) - sk(k,j,i) ) * ddy     &
     156                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     157                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    150158                ENDIF
    151159!
     
    154162                IF ( wkomp > 0.0_wp )  THEN
    155163                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    156                                          ( sk(k,j,i) - sk(k-1,j,i) ) * ddzu(k)
     164                                         ( sk(k,j,i) - sk(k-1,j,i) ) * ddzu(k) &
     165                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     166                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    157167                ELSE
    158168                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    159                                          ( sk(k+1,j,i)-sk(k,j,i) ) * ddzu(k+1)
     169                                         ( sk(k+1,j,i)-sk(k,j,i) ) * ddzu(k+1) &
     170                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     171                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    160172                ENDIF
    161173
     
    184196
    185197       USE indices,                                                            &
    186            ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner, nzt
     198           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt, wall_flags_0
    187199
    188200       USE kinds
     
    206218
    207219
    208        DO  k = nzb_s_inner(j,i)+1, nzt
     220       DO  k = nzb+1, nzt
    209221!
    210222!--       x-direction
     
    212224          IF ( ukomp > 0.0_wp )  THEN
    213225             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    214                                          ( sk(k,j,i) - sk(k,j,i-1) ) * ddx
     226                                         ( sk(k,j,i) - sk(k,j,i-1) ) * ddx     &
     227                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     228                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    215229          ELSE
    216230             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    217                                          ( sk(k,j,i+1) - sk(k,j,i) ) * ddx
     231                                         ( sk(k,j,i+1) - sk(k,j,i) ) * ddx     &
     232                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     233                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    218234          ENDIF
    219235!
     
    222238          IF ( vkomp > 0.0_wp )  THEN
    223239             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    224                                          ( sk(k,j,i) - sk(k,j-1,i) ) * ddy
     240                                         ( sk(k,j,i) - sk(k,j-1,i) ) * ddy     &
     241                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     242                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    225243          ELSE
    226244             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    227                                          ( sk(k,j+1,i) - sk(k,j,i) ) * ddy
     245                                         ( sk(k,j+1,i) - sk(k,j,i) ) * ddy     &
     246                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     247                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    228248          ENDIF
    229249!
     
    232252          IF ( wkomp > 0.0_wp )  THEN
    233253             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    234                                          ( sk(k,j,i) - sk(k-1,j,i) ) * ddzu(k)
     254                                         ( sk(k,j,i) - sk(k-1,j,i) ) * ddzu(k) &
     255                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     256                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    235257          ELSE
    236258             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    237                                          ( sk(k+1,j,i)-sk(k,j,i) ) * ddzu(k+1)
     259                                         ( sk(k+1,j,i)-sk(k,j,i) ) * ddzu(k+1) &
     260                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     261                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    238262          ENDIF
    239263
  • palm/trunk/SOURCE/advec_u_pw.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9696
    9797       USE indices,                                                            &
    98            ONLY:  nxlu, nxr, nyn, nys, nzb_u_inner, nzt
     98           ONLY:  nxlu, nxr, nyn, nys, nzb, nzt, wall_flags_0
    9999
    100100       USE kinds
     
    114114       DO  i = nxlu, nxr
    115115          DO  j = nys, nyn
    116              DO  k = nzb_u_inner(j,i)+1, nzt
     116             DO  k = nzb+1, nzt
    117117                tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                        &
    118118                         ( u(k,j,i+1) * ( u(k,j,i+1) + u(k,j,i) - gu )         &
     
    123123                         - u(k-1,j,i) * ( w(k-1,j,i) + w(k-1,j,i-1) ) )        &
    124124                                                                  * ddzw(k)    &
    125                                                       )
     125                                                      )                        &
     126                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     127                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    126128             ENDDO
    127129          ENDDO
     
    148150
    149151       USE indices,                                                            &
    150            ONLY:  nzb_u_inner, nzt
     152           ONLY:  nzb, nzt, wall_flags_0
    151153
    152154       USE kinds
     
    164166       gu = 2.0_wp * u_gtrans
    165167       gv = 2.0_wp * v_gtrans
    166        DO  k = nzb_u_inner(j,i)+1, nzt
     168       DO  k = nzb+1, nzt
    167169          tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                              &
    168170                         ( u(k,j,i+1) * ( u(k,j,i+1) + u(k,j,i) - gu )         &
     
    173175                         - u(k-1,j,i) * ( w(k-1,j,i) + w(k-1,j,i-1) ) )        &
    174176                                                                  * ddzw(k)    &
    175                                                 )
     177                                                )                              &
     178                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     179                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    176180       ENDDO
    177181
  • palm/trunk/SOURCE/advec_u_up.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9595
    9696       USE indices,                                                            &
    97            ONLY:  nxlu, nxr, nyn, nys, nzb_u_inner, nzt
     97           ONLY:  nxlu, nxr, nyn, nys, nzb, nzt, wall_flags_0
    9898
    9999       USE kinds
     
    113113       DO  i = nxlu, nxr
    114114          DO  j = nys, nyn
    115              DO  k = nzb_u_inner(j,i)+1, nzt
     115             DO  k = nzb+1, nzt
    116116!
    117117!--             x-direction
     
    119119                IF ( ukomp > 0.0_wp )  THEN
    120120                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    121                                          ( u(k,j,i) - u(k,j,i-1) ) * ddx
     121                                         ( u(k,j,i) - u(k,j,i-1) ) * ddx       &
     122                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     123                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    122124                ELSE
    123125                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    124                                           ( u(k,j,i+1) - u(k,j,i) ) * ddx
     126                                          ( u(k,j,i+1) - u(k,j,i) ) * ddx      &
     127                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     128                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    125129                ENDIF
    126130!
     
    130134                IF ( vkomp > 0.0_wp )  THEN
    131135                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    132                                          ( u(k,j,i) - u(k,j-1,i) ) * ddy
     136                                         ( u(k,j,i) - u(k,j-1,i) ) * ddy       &
     137                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     138                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    133139                ELSE
    134140                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    135                                          ( u(k,j+1,i) - u(k,j,i) ) * ddy
     141                                         ( u(k,j+1,i) - u(k,j,i) ) * ddy       &
     142                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     143                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    136144                ENDIF
    137145!
     
    141149                IF ( wkomp > 0.0_wp )  THEN
    142150                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    143                                          ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)
     151                                         ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)   &
     152                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     153                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    144154                ELSE
    145155                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    146                                          ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1)
     156                                         ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1) &
     157                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     158                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    147159                ENDIF
    148160
     
    171183
    172184       USE indices,                                                            &
    173            ONLY:  nzb_u_inner, nzt
     185           ONLY:  nzb, nzt, wall_flags_0
    174186
    175187       USE kinds
     
    187199
    188200
    189        DO  k = nzb_u_inner(j,i)+1, nzt
     201       DO  k = nzb+1, nzt
    190202!
    191203!--       x-direction
     
    193205          IF ( ukomp > 0.0_wp )  THEN
    194206             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    195                                          ( u(k,j,i) - u(k,j,i-1) ) * ddx
     207                                         ( u(k,j,i) - u(k,j,i-1) ) * ddx       &
     208                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     209                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    196210          ELSE
    197211             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    198                                          ( u(k,j,i+1) - u(k,j,i) ) * ddx
     212                                         ( u(k,j,i+1) - u(k,j,i) ) * ddx       &
     213                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     214                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    199215          ENDIF
    200216!
     
    204220          IF ( vkomp > 0.0_wp )  THEN
    205221             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    206                                          ( u(k,j,i) - u(k,j-1,i) ) * ddy
     222                                         ( u(k,j,i) - u(k,j-1,i) ) * ddy       &
     223                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     224                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    207225          ELSE
    208226             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    209                                          ( u(k,j+1,i) - u(k,j,i) ) * ddy
     227                                         ( u(k,j+1,i) - u(k,j,i) ) * ddy       &
     228                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     229                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    210230          ENDIF
    211231!
     
    214234          IF ( wkomp > 0.0_wp )  THEN
    215235             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    216                                          ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)
     236                                         ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)   &
     237                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     238                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    217239          ELSE
    218240             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    219                                          ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1)
     241                                         ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1) &
     242                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     243                                               BTEST( wall_flags_0(k,j,i), 1 ) )
    220244          ENDIF
    221245
  • palm/trunk/SOURCE/advec_v_pw.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9696
    9797       USE indices,                                                            &
    98            ONLY:  nxl, nxr, nyn, nysv, nzb_v_inner, nzt
     98           ONLY:  nxl, nxr, nyn, nysv, nzb, nzt, wall_flags_0
    9999
    100100       USE kinds
     
    115115       DO  i = nxl, nxr
    116116          DO  j = nysv, nyn
    117              DO  k = nzb_v_inner(j,i)+1, nzt
     117             DO  k = nzb+1, nzt
    118118                tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                        &
    119119                         ( v(k,j,i+1) * ( u(k,j-1,i+1) + u(k,j,i+1) - gu )     &
     
    124124                         - v(k-1,j,i) * ( w(k-1,j-1,i) + w(k-1,j,i) ) )        &
    125125                                                                  * ddzw(k)    &
    126                                                       )
     126                                                      )                        &
     127                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     128                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    127129             ENDDO
    128130          ENDDO
     
    149151
    150152       USE indices,                                                            &
    151            ONLY:  nzb_v_inner, nzt
     153           ONLY:  nzb, nzt, wall_flags_0
    152154
    153155       USE kinds
     
    166168       gu = 2.0_wp * u_gtrans
    167169       gv = 2.0_wp * v_gtrans
    168        DO  k = nzb_v_inner(j,i)+1, nzt
     170       DO  k = nzb+1, nzt
    169171          tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                              &
    170172                         ( v(k,j,i+1) * ( u(k,j-1,i+1) + u(k,j,i+1) - gu )     &
     
    175177                         - v(k-1,j,i) * ( w(k-1,j-1,i) + w(k-1,j,i) ) )        &
    176178                                                                  * ddzw(k)    &
    177                                                 )
     179                                                )                              &
     180                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     181                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    178182       ENDDO
    179183 
  • palm/trunk/SOURCE/advec_v_up.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9595
    9696       USE indices,                                                            &
    97            ONLY:  nxl, nxr, nyn, nysv, nzb_v_inner, nzt
     97           ONLY:  nxl, nxr, nyn, nysv, nzb, nzt, wall_flags_0
    9898
    9999       USE kinds
     
    113113       DO  i = nxl, nxr
    114114          DO  j = nysv, nyn
    115              DO  k = nzb_v_inner(j,i)+1, nzt
     115             DO  k = nzb+1, nzt
    116116!
    117117!--             x-direction
     
    120120                IF ( ukomp > 0.0_wp )  THEN
    121121                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    122                                          ( v(k,j,i) - v(k,j,i-1) ) * ddx
     122                                         ( v(k,j,i) - v(k,j,i-1) ) * ddx       &
     123                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     124                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    123125                ELSE
    124126                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    125                                          ( v(k,j,i+1) - v(k,j,i) ) * ddx
     127                                         ( v(k,j,i+1) - v(k,j,i) ) * ddx       &
     128                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     129                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    126130                ENDIF
    127131!
     
    130134                IF ( vkomp > 0.0_wp )  THEN
    131135                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    132                                          ( v(k,j,i) - v(k,j-1,i) ) * ddy
     136                                         ( v(k,j,i) - v(k,j-1,i) ) * ddy       &
     137                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     138                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    133139                ELSE
    134140                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    135                                          ( v(k,j+1,i) - v(k,j,i) ) * ddy
     141                                         ( v(k,j+1,i) - v(k,j,i) ) * ddy       &
     142                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     143                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    136144                ENDIF
    137145!
     
    141149                IF ( wkomp > 0.0_wp )  THEN
    142150                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    143                                          ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k)
     151                                         ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k)   &
     152                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     153                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    144154                ELSE
    145155                   tend(k,j,i) = tend(k,j,i) - wkomp *                         &
    146                                          ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1)
     156                                         ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
     157                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     158                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    147159                ENDIF
    148160
     
    171183
    172184       USE indices,                                                            &
    173            ONLY:  nzb_v_inner, nzt
     185           ONLY:  nzb, nzt, wall_flags_0
    174186
    175187       USE kinds
     
    187199
    188200
    189        DO  k = nzb_v_inner(j,i)+1, nzt
     201       DO  k = nzb+1, nzt
    190202!
    191203!--       x-direction
     
    194206          IF ( ukomp > 0.0_wp )  THEN
    195207             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    196                                          ( v(k,j,i) - v(k,j,i-1) ) * ddx
     208                                         ( v(k,j,i) - v(k,j,i-1) ) * ddx       &
     209                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     210                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    197211          ELSE
    198212             tend(k,j,i) = tend(k,j,i) - ukomp *                               &
    199                                          ( v(k,j,i+1) - v(k,j,i) ) * ddx
     213                                         ( v(k,j,i+1) - v(k,j,i) ) * ddx       &
     214                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     215                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    200216          ENDIF
    201217!
     
    204220          IF ( vkomp > 0.0_wp )  THEN
    205221             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    206                                          ( v(k,j,i) - v(k,j-1,i) ) * ddy
     222                                         ( v(k,j,i) - v(k,j-1,i) ) * ddy       &
     223                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     224                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    207225          ELSE
    208226             tend(k,j,i) = tend(k,j,i) - vkomp *                               &
    209                                          ( v(k,j+1,i) - v(k,j,i) ) * ddy
     227                                         ( v(k,j+1,i) - v(k,j,i) ) * ddy       &
     228                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     229                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    210230          ENDIF
    211231!
     
    214234          IF ( wkomp > 0.0_wp )  THEN
    215235             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    216                                          ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k)
     236                                         ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k)   &
     237                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     238                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    217239          ELSE
    218240             tend(k,j,i) = tend(k,j,i) - wkomp *                               &
    219                                          ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1)
     241                                         ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
     242                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     243                                               BTEST( wall_flags_0(k,j,i), 2 ) )
    220244          ENDIF
    221245
  • palm/trunk/SOURCE/advec_w_pw.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9696
    9797       USE indices,                                                            &
    98            ONLY:  nxl, nxr, nyn, nys, nzb_w_inner, nzt
     98           ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
    9999
    100100       USE kinds
     
    115115       DO  i = nxl, nxr
    116116          DO  j = nys, nyn
    117              DO  k = nzb_w_inner(j,i)+1, nzt
     117             DO  k = nzb+1, nzt
    118118                tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                        &
    119119                         ( w(k,j,i+1) * ( u(k+1,j,i+1) + u(k,j,i+1) - gu )     &
     
    124124                         - w(k-1,j,i) * ( w(k,j,i) + w(k-1,j,i) ) )            &
    125125                                                                  * ddzu(k+1)  &
    126                                                       )
     126                                                      )                        &
     127                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     128                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    127129             ENDDO
    128130          ENDDO
     
    149151
    150152       USE indices,                                                            &
    151            ONLY:  nzb_w_inner, nzt
     153           ONLY:  nzb, nzt, wall_flags_0
    152154
    153155       USE kinds
     
    165167       gu = 2.0_wp * u_gtrans
    166168       gv = 2.0_wp * v_gtrans
    167        DO  k = nzb_w_inner(j,i)+1, nzt
     169       DO  k = nzb+1, nzt
    168170          tend(k,j,i) = tend(k,j,i) - 0.25_wp * (                              &
    169171                         ( w(k,j,i+1) * ( u(k+1,j,i+1) + u(k,j,i+1) - gu )     &
     
    174176                         - w(k-1,j,i) * ( w(k,j,i) + w(k-1,j,i) ) )            &
    175177                                                                  * ddzu(k+1)  &
    176                                                 )
     178                                                )                              &
     179                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     180                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    177181       ENDDO
    178182    END SUBROUTINE advec_w_pw_ij
  • palm/trunk/SOURCE/advec_w_up.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! topography representation via flags
    2323!
    2424! Former revisions:
     
    9595
    9696       USE indices,                                                            &
    97            ONLY:  nxl, nxr, nyn, nys, nzb_w_inner, nzt
     97           ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
    9898
    9999       USE kinds
     
    112112       DO  i = nxl, nxr
    113113          DO  j = nys, nyn
    114              DO  k = nzb_w_inner(j,i)+1, nzt-1
     114             DO  k = nzb+1, nzt-1
    115115!
    116116!--             x-direction
     
    119119                IF ( ukomp > 0.0_wp )  THEN
    120120                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    121                                          ( w(k,j,i) - w(k,j,i-1) ) * ddx
     121                                         ( w(k,j,i) - w(k,j,i-1) ) * ddx       &
     122                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     123                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    122124                ELSE
    123125                   tend(k,j,i) = tend(k,j,i) - ukomp *                         &
    124                                          ( w(k,j,i+1) - w(k,j,i) ) * ddx
     126                                         ( w(k,j,i+1) - w(k,j,i) ) * ddx       &
     127                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     128                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    125129                ENDIF
    126130!
     
    130134                IF ( vkomp > 0.0_wp )  THEN
    131135                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    132                                          ( w(k,j,i) - w(k,j-1,i) ) * ddy
     136                                         ( w(k,j,i) - w(k,j-1,i) ) * ddy       &
     137                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     138                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    133139                ELSE
    134140                   tend(k,j,i) = tend(k,j,i) - vkomp *                         &
    135                                          ( w(k,j+1,i) - w(k,j,i) ) * ddy
     141                                         ( w(k,j+1,i) - w(k,j,i) ) * ddy       &
     142                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     143                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    136144                ENDIF
    137145!
     
    139147                IF ( w(k,j,i) > 0.0_wp )  THEN
    140148                   tend(k,j,i) = tend(k,j,i) - w(k,j,i) *                      &
    141                                          ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k)
     149                                         ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k)   &
     150                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     151                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    142152                ELSE
    143153                   tend(k,j,i) = tend(k,j,i) - w(k,j,i) *                      &
    144                                          ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1)
     154                                         ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1) &
     155                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     156                                               BTEST( wall_flags_0(k,j,i), 3 ) )
    145157                ENDIF
    146158
     
    169181
    170182       USE indices,                                                            &
    171            ONLY:  nzb_w_inner, nzt
     183           ONLY:  nzb, nzt, wall_flags_0
    172184
    173185       USE kinds
     
    184196
    185197
    186        DO  k = nzb_w_inner(j,i)+1, nzt-1
     198       DO  k = nzb+1, nzt-1
    187199!
    188200!--       x-direction
  • palm/trunk/SOURCE/advec_ws.f90

    r2201 r2232  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Rename wall_flags_0 and wall_flags_00 into advc_flags_1 and advc_flags_2,
     23! respectively.
     24! Set advc_flags_1/2 on basis of wall_flags_0/00 instead of nzb_s/u/v/w_inner.
     25! Setting advc_flags_1/2 also for downward-facing walls
    2326!
    2427! Former revisions:
     
    147150! vector version.
    148151! Degradation of the applied order of scheme is now steered by multiplying with
    149 ! Integer wall_flags_0. 2nd order scheme, WS3 and WS5 are calculated on each
     152! Integer advc_flags_1. 2nd order scheme, WS3 and WS5 are calculated on each
    150153! grid point and mulitplied with the appropriate flag.
    151154! 2nd order numerical dissipation term changed. Now the appropriate 2nd order
     
    406409
    407410       USE indices,                                                            &
    408            ONLY:  nbgp, nxl, nxlu, nxr, nyn, nys, nysv, nzb, nzb_s_inner,      &
    409                   nzb_u_inner, nzb_v_inner, nzb_w_inner, nzt, wall_flags_0,    &
    410                   wall_flags_00
     411           ONLY:  advc_flags_1, advc_flags_2, nbgp, nxl, nxlu, nxr, nyn, nys,  &
     412                  nysv, nzb, nzt, wall_flags_0
    411413
    412414       USE kinds
     
    414416       IMPLICIT NONE
    415417
    416        INTEGER(iwp) ::  i  !< index variable along x
    417        INTEGER(iwp) ::  j  !< index variable along y
    418        INTEGER(iwp) ::  k  !< index variable along z
    419 
     418       INTEGER(iwp) ::  i     !< index variable along x
     419       INTEGER(iwp) ::  j     !< index variable along y
     420       INTEGER(iwp) ::  k     !< index variable along z
     421       INTEGER(iwp) ::  k_mm  !< dummy index along z
     422       INTEGER(iwp) ::  k_pp  !< dummy index along z
     423       INTEGER(iwp) ::  k_ppp !< dummy index along z
     424       
    420425       LOGICAL      ::  flag_set !< steering variable for advection flags
    421426   
     
    425430!--       Set flags to steer the degradation of the advection scheme in advec_ws
    426431!--       near topography, inflow- and outflow boundaries as well as bottom and
    427 !--       top of model domain. wall_flags_0 remains zero for all non-prognostic
     432!--       top of model domain. advc_flags_1 remains zero for all non-prognostic
    428433!--       grid points.
    429434          DO  i = nxl, nxr
    430435             DO  j = nys, nyn
    431                 DO  k = nzb_s_inner(j,i)+1, nzt
     436                DO  k = nzb+1, nzt
    432437!
    433438!--                scalar - x-direction
    434439!--                WS1 (0), WS3 (1), WS5 (2)
    435                    IF ( ( k <= nzb_s_inner(j,i+1) .OR. k <= nzb_s_inner(j,i+2) &   
    436                      .OR. k <= nzb_s_inner(j,i-1) )                            &
    437                        .OR. ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
    438                               .AND. i == nxl   )    .OR.                       &
     440                   IF ( ( .NOT. BTEST(wall_flags_0(k,j,i+1),0)                 &
     441                    .OR.  .NOT. BTEST(wall_flags_0(k,j,i+2),0)                 &   
     442                    .OR.  .NOT. BTEST(wall_flags_0(k,j,i-1),0) )               &
     443                      .OR.  ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     444                            .AND.  i == nxl   )                                &
     445                      .OR.  ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     446                            .AND.  i == nxr   ) )                              &
     447                   THEN
     448                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 0 )
     449                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j,i+3),0)             &
     450                       .AND.        BTEST(wall_flags_0(k,j,i+1),0)             &
     451                       .AND.        BTEST(wall_flags_0(k,j,i+2),0)             &
     452                       .AND.        BTEST(wall_flags_0(k,j,i-1),0)             &
     453                            )                       .OR.                       &
     454                            ( .NOT. BTEST(wall_flags_0(k,j,i-2),0)             &
     455                       .AND.        BTEST(wall_flags_0(k,j,i+1),0)             &
     456                       .AND.        BTEST(wall_flags_0(k,j,i+2),0)             &
     457                       .AND.        BTEST(wall_flags_0(k,j,i-1),0)             &
     458                            )                                                  &
     459                                                    .OR.                       &
    439460                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
    440                               .AND. i == nxr   ) )                             &
     461                              .AND. i == nxr-1 )    .OR.                       &
     462                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     463                              .AND. i == nxlu  ) )                             &
    441464                   THEN
    442                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 0 )
    443                    ELSEIF ( ( k <= nzb_s_inner(j,i+3) .AND. k > nzb_s_inner(j,i+1)&
    444                                                       .AND. k > nzb_s_inner(j,i+2)&
    445                                                       .AND. k > nzb_s_inner(j,i-1)&
    446                             )                       .OR.                          &
    447                             ( k <= nzb_s_inner(j,i-2) .AND. k > nzb_s_inner(j,i+1)&
    448                                                       .AND. k > nzb_s_inner(j,i+2)&
    449                                                       .AND. k > nzb_s_inner(j,i-1)&
    450                             )                                                     &
    451                                                     .OR.                          &
    452                             ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )       &
    453                               .AND. i == nxr-1 )    .OR.                          &
    454                             ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )       &
    455                               .AND. i == nxlu  ) )                                &
    456                    THEN
    457                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 1 )
    458                    ELSEIF ( k > nzb_s_inner(j,i+1) .AND. k > nzb_s_inner(j,i+2)&
    459                       .AND. k > nzb_s_inner(j,i+3) .AND. k > nzb_s_inner(j,i-1)&
    460                       .AND. k > nzb_s_inner(j,i-2) )                           &
     465                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 1 )
     466                   ELSEIF ( BTEST(wall_flags_0(k,j,i+1),0)                     &
     467                      .AND. BTEST(wall_flags_0(k,j,i+2),0)                     &
     468                      .AND. BTEST(wall_flags_0(k,j,i+3),0)                     &
     469                      .AND. BTEST(wall_flags_0(k,j,i-1),0)                     &
     470                      .AND. BTEST(wall_flags_0(k,j,i-2),0) )                   &
    461471                   THEN
    462                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 2 )
     472                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 2 )
    463473                   ENDIF
    464474!
    465475!--                scalar - y-direction
    466476!--                WS1 (3), WS3 (4), WS5 (5)
    467                    IF ( ( k <= nzb_s_inner(j+1,i)  .OR. k <= nzb_s_inner(j+2,i)   &   
    468                                                    .OR. k <= nzb_s_inner(j-1,i) ) &
    469                                                     .OR.                          &
    470                             ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )       &
    471                               .AND. j == nys   )    .OR.                          &
    472                             ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )       &
    473                               .AND. j == nyn   ) )                                &
     477                   IF ( ( .NOT. BTEST(wall_flags_0(k,j+1,i),0)                 &
     478                    .OR.  .NOT. BTEST(wall_flags_0(k,j+2,i),0)                 &   
     479                    .OR.  .NOT. BTEST(wall_flags_0(k,j-1,i),0))                &
     480                      .OR.  ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     481                            .AND.  j == nys   )                                &
     482                      .OR.  ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     483                            .AND.  j == nyn   ) )                              &
    474484                   THEN
    475                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 3 )
     485                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 3 )
    476486!
    477487!--                WS3
    478                    ELSEIF ( ( k <= nzb_s_inner(j+3,i) .AND. k > nzb_s_inner(j+1,i)&
    479                                                       .AND. k > nzb_s_inner(j+2,i)&
    480                                                       .AND. k > nzb_s_inner(j-1,i)&
    481                             )                           .OR.                      &
    482                             ( k <= nzb_s_inner(j-2,i) .AND. k > nzb_s_inner(j+1,i)&
    483                                                       .AND. k > nzb_s_inner(j+2,i)&
    484                                                       .AND. k > nzb_s_inner(j-1,i)&
    485                             )                                                     &
    486                                                         .OR.                      &
    487                             ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )       &
    488                               .AND. j == nysv  )    .OR.                          &
    489                             ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )       &
    490                               .AND. j == nyn-1 ) )                                &
     488                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j+3,i),0)             &
     489                       .AND.        BTEST(wall_flags_0(k,j+1,i),0)             &
     490                       .AND.        BTEST(wall_flags_0(k,j+2,i),0)             &
     491                       .AND.        BTEST(wall_flags_0(k,j-1,i),0)             &
     492                            )                       .OR.                       &
     493                            ( .NOT. BTEST(wall_flags_0(k,j-2,i),0)             &
     494                       .AND.        BTEST(wall_flags_0(k,j+1,i),0)             &
     495                       .AND.        BTEST(wall_flags_0(k,j+2,i),0)             &
     496                       .AND.        BTEST(wall_flags_0(k,j-1,i),0)             &
     497                            )                                                  &
     498                                                    .OR.                       &
     499                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     500                              .AND. j == nysv  )    .OR.                       &
     501                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     502                              .AND. j == nyn-1 ) )                             &         
    491503                   THEN
    492                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 4 )
     504                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 4 )
    493505!
    494506!--                WS5
    495                    ELSEIF ( k > nzb_s_inner(j+1,i) .AND. k > nzb_s_inner(j+2,i)&
    496                       .AND. k > nzb_s_inner(j+3,i) .AND. k > nzb_s_inner(j-1,i)&
    497                       .AND. k > nzb_s_inner(j-2,i) )                           &
     507                   ELSEIF ( BTEST(wall_flags_0(k,j+1,i),0)                     &
     508                      .AND. BTEST(wall_flags_0(k,j+2,i),0)                     &
     509                      .AND. BTEST(wall_flags_0(k,j+3,i),0)                     &
     510                      .AND. BTEST(wall_flags_0(k,j-1,i),0)                     &
     511                      .AND. BTEST(wall_flags_0(k,j-2,i),0) )                   &
    498512                   THEN
    499                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 5 )
     513                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 5 )
    500514                   ENDIF
    501515!
    502516!--                scalar - z-direction
    503517!--                WS1 (6), WS3 (7), WS5 (8)
     518                   IF ( k == nzb+1 )  THEN
     519                      k_mm = nzb
     520                   ELSE
     521                      k_mm = k - 2
     522                   ENDIF
     523                   IF ( k > nzt-1 )  THEN
     524                      k_pp = nzt+1
     525                   ELSE
     526                      k_pp = k + 2
     527                   ENDIF
     528                   IF ( k > nzt-2 )  THEN
     529                      k_ppp = nzt+1
     530                   ELSE
     531                      k_ppp = k + 3
     532                   ENDIF
     533
    504534                   flag_set = .FALSE.
    505                    IF ( k == nzb_s_inner(j,i) + 1 .OR. k == nzt )  THEN
    506                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 6 )
     535                   IF ( .NOT. BTEST(wall_flags_0(k-1,j,i),0)  .AND.            &
     536                              BTEST(wall_flags_0(k,j,i),0)    .OR.             &
     537                        .NOT. BTEST(wall_flags_0(k_pp,j,i),0) .AND.            &                             
     538                              BTEST(wall_flags_0(k,j,i),0)    .OR.             &
     539                        k == nzt )                                             &
     540                   THEN
     541                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 6 )
    507542                      flag_set = .TRUE.
    508                    ELSEIF ( k == nzb_s_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
    509                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 7 )
     543                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),0)    .OR.    &
     544                              .NOT. BTEST(wall_flags_0(k_ppp,j,i),0) ) .AND.   &
     545                                  BTEST(wall_flags_0(k-1,j,i),0)  .AND.        &
     546                                  BTEST(wall_flags_0(k,j,i),0)    .AND.        &
     547                                  BTEST(wall_flags_0(k+1,j,i),0)  .AND.        &
     548                                  BTEST(wall_flags_0(k_pp,j,i),0) .OR.         &   
     549                            k == nzt - 1 )                                     &
     550                   THEN
     551                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 7 )
    510552                      flag_set = .TRUE.
    511                    ELSEIF ( k > nzb_s_inner(j,i) .AND. .NOT. flag_set )  THEN
    512                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 8 )
     553                   ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),0)                    &
     554                     .AND.  BTEST(wall_flags_0(k-1,j,i),0)                     &
     555                     .AND.  BTEST(wall_flags_0(k,j,i),0)                       &
     556                     .AND.  BTEST(wall_flags_0(k+1,j,i),0)                     &
     557                     .AND.  BTEST(wall_flags_0(k_pp,j,i),0)                    &
     558                     .AND.  BTEST(wall_flags_0(k_ppp,j,i),0)                   &
     559                     .AND. .NOT. flag_set )                                    &
     560                   THEN
     561                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 8 )
    513562                   ENDIF
    514563
     
    520569       IF ( momentum_advec == 'ws-scheme' )  THEN
    521570!
    522 !--       Set wall_flags_0 to steer the degradation of the advection scheme in advec_ws
     571!--       Set advc_flags_1 to steer the degradation of the advection scheme in advec_ws
    523572!--       near topography, inflow- and outflow boundaries as well as bottom and
    524 !--       top of model domain. wall_flags_0 remains zero for all non-prognostic
     573!--       top of model domain. advc_flags_1 remains zero for all non-prognostic
    525574!--       grid points.
    526575          DO  i = nxl, nxr
     
    532581!--                in order to handle the left/south flux.
    533582!--                near vertical walls.
    534                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
    535                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
     583                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 9 )
     584                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 12 )
    536585!
    537586!--                u component - x-direction
    538587!--                WS1 (9), WS3 (10), WS5 (11)
    539                    IF ( k <= nzb_u_inner(j,i+1)     .OR.                       &
     588                   IF ( .NOT. BTEST(wall_flags_0(k,j,i+1),1)  .OR.             &
    540589                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
    541590                              .AND. i <= nxlu  )    .OR.                       &
     
    543592                              .AND. i == nxr   ) )                             &
    544593                   THEN
    545                        wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
    546                    ELSEIF ( ( k <= nzb_u_inner(j,i+2) .AND.                    &
    547                               k >  nzb_u_inner(j,i+1) ) .OR.                   &
    548                               k <= nzb_u_inner(j,i-1)                          &
     594                       advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 9 )
     595                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j,i+2),1)  .AND.      &
     596                                    BTEST(wall_flags_0(k,j,i+1),1)  .OR.       &
     597                              .NOT. BTEST(wall_flags_0(k,j,i-1),1) )           &
    549598                                                        .OR.                   &
    550599                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     
    553602                              .AND. i == nxlu+1) )                             &
    554603                   THEN
    555                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 10 )
     604                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 10 )
    556605!
    557606!--                   Clear flag for WS1
    558                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
    559                    ELSEIF ( k > nzb_u_inner(j,i+1) .AND. k > nzb_u_inner(j,i+2)   &
    560                                                    .AND. k > nzb_u_inner(j,i-1) ) &
     607                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 9 )
     608                   ELSEIF ( BTEST(wall_flags_0(k,j,i+1),1)  .AND.              &
     609                            BTEST(wall_flags_0(k,j,i+2),1)  .AND.              &
     610                            BTEST(wall_flags_0(k,j,i-1),1) )                   &
    561611                   THEN   
    562                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 11 )
     612                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 11 )
    563613!
    564614!--                   Clear flag for WS1
    565                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
     615                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 9 )
    566616                   ENDIF
    567617!
    568618!--                u component - y-direction
    569619!--                WS1 (12), WS3 (13), WS5 (14)
    570                    IF ( k <= nzb_u_inner(j+1,i) .OR.                           &
     620                   IF ( .NOT. BTEST(wall_flags_0(k,j+1,i),1)   .OR.            &
    571621                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
    572622                              .AND. j == nys   )    .OR.                       &
     
    574624                              .AND. j == nyn   ) )                             &
    575625                   THEN
    576                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
    577                    ELSEIF ( ( k <= nzb_u_inner(j+2,i) .AND.                    &
    578                               k >  nzb_u_inner(j+1,i) ) .OR.                   &
    579                               k <= nzb_u_inner(j-1,i)                          &
     626                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 12 )
     627                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j+2,i),1)  .AND.      &
     628                                    BTEST(wall_flags_0(k,j+1,i),1)  .OR.       &
     629                              .NOT. BTEST(wall_flags_0(k,j-1,i),1) )           &
    580630                                                        .OR.                   &
    581631                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     
    584634                              .AND. j == nyn-1 ) )                             &
    585635                   THEN
    586                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 13 )
     636                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 13 )
    587637!
    588638!--                   Clear flag for WS1
    589                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
    590                    ELSEIF ( k > nzb_u_inner(j+1,i) .AND. k > nzb_u_inner(j+2,i)   &
    591                                                    .AND. k > nzb_u_inner(j-1,i) ) &
     639                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 12 )
     640                   ELSEIF ( BTEST(wall_flags_0(k,j+1,i),1)  .AND.              &
     641                            BTEST(wall_flags_0(k,j+2,i),1)  .AND.              &
     642                            BTEST(wall_flags_0(k,j-1,i),1) )                   &
    592643                   THEN
    593                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 14 )
     644                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 14 )
    594645!
    595646!--                   Clear flag for WS1
    596                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
     647                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 12 )
    597648                   ENDIF
    598649!
    599650!--                u component - z-direction
    600651!--                WS1 (15), WS3 (16), WS5 (17)
     652                   IF ( k == nzb+1 )  THEN
     653                      k_mm = nzb
     654                   ELSE
     655                      k_mm = k - 2
     656                   ENDIF
     657                   IF ( k > nzt-1 )  THEN
     658                      k_pp = nzt+1
     659                   ELSE
     660                      k_pp = k + 2
     661                   ENDIF
     662                   IF ( k > nzt-2 )  THEN
     663                      k_ppp = nzt+1
     664                   ELSE
     665                      k_ppp = k + 3
     666                   ENDIF                   
     667
    601668                   flag_set = .FALSE.
    602                    IF ( k == nzb_u_inner(j,i) + 1 .OR. k == nzt )  THEN
    603                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 15 )
     669                   IF ( .NOT. BTEST(wall_flags_0(k-1,j,i),1)  .AND.            &
     670                              BTEST(wall_flags_0(k,j,i),1)    .OR.             &
     671                        .NOT. BTEST(wall_flags_0(k_pp,j,i),1) .AND.            &                             
     672                              BTEST(wall_flags_0(k,j,i),1)    .OR.             &
     673                        k == nzt )                                             &
     674                   THEN
     675                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 15 )
     676                      flag_set = .TRUE.                     
     677                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),1)    .OR.    &
     678                              .NOT. BTEST(wall_flags_0(k_ppp,j,i),1) ) .AND.   &
     679                                  BTEST(wall_flags_0(k-1,j,i),1)  .AND.        &
     680                                  BTEST(wall_flags_0(k,j,i),1)    .AND.        &
     681                                  BTEST(wall_flags_0(k+1,j,i),1)  .AND.        &
     682                                  BTEST(wall_flags_0(k_pp,j,i),1) .OR.         &
     683                                  k == nzt - 1 )                               &
     684                   THEN
     685                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 16 )
    604686                      flag_set = .TRUE.
    605                    ELSEIF ( k == nzb_u_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
    606                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 16 )
    607                       flag_set = .TRUE.
    608                    ELSEIF ( k > nzb_u_inner(j,i) .AND. .NOT. flag_set )  THEN
    609                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 17 )
     687                   ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),1)  .AND.             &
     688                            BTEST(wall_flags_0(k-1,j,i),1)   .AND.             &
     689                            BTEST(wall_flags_0(k,j,i),1)     .AND.             &
     690                            BTEST(wall_flags_0(k+1,j,i),1)   .AND.             &
     691                            BTEST(wall_flags_0(k_pp,j,i),1)  .AND.             &
     692                            BTEST(wall_flags_0(k_ppp,j,i),1) .AND.             &
     693                            .NOT. flag_set )                                   &
     694                   THEN
     695                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 17 )
    610696                   ENDIF
    611697
     
    621707!--                Since fluxes are swapped in advec_ws.f90, this is necessary to
    622708!--                in order to handle the left/south flux.
    623                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
    624                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
     709                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 18 )
     710                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 21 )
    625711!
    626712!--                v component - x-direction
    627713!--                WS1 (18), WS3 (19), WS5 (20)
    628                    IF ( k <= nzb_v_inner(j,i+1) .OR.                           &
     714                   IF ( .NOT. BTEST(wall_flags_0(k,j,i+1),2)  .OR.             &
    629715                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
    630716                              .AND. i == nxl   )    .OR.                       &
     
    632718                              .AND. i == nxr   ) )                             &
    633719                  THEN
    634                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
     720                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 18 )
    635721!
    636722!--                WS3
    637                    ELSEIF ( ( k <= nzb_v_inner(j,i+2) .AND.                    &
    638                               k >  nzb_v_inner(j,i+1) ) .OR.                   &
    639                               k <= nzb_v_inner(j,i-1)                          &
     723                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j,i+2),2)   .AND.     &
     724                                    BTEST(wall_flags_0(k,j,i+1),2) ) .OR.      &
     725                              .NOT. BTEST(wall_flags_0(k,j,i-1),2)             &
    640726                                                    .OR.                       &
    641727                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     
    644730                              .AND. i == nxlu  ) )                             &
    645731                   THEN
    646                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 19 )
     732                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 19 )
    647733!
    648734!--                   Clear flag for WS1
    649                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
    650                    ELSEIF ( k > nzb_v_inner(j,i+1) .AND. k > nzb_v_inner(j,i+2)   &
    651                                                    .AND. k > nzb_v_inner(j,i-1) ) &
     735                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 18 )
     736                   ELSEIF ( BTEST(wall_flags_0(k,j,i+1),2)  .AND.              &
     737                            BTEST(wall_flags_0(k,j,i+2),2)  .AND.              &
     738                            BTEST(wall_flags_0(k,j,i-1),2) )                   &
    652739                   THEN
    653                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 20 )
     740                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 20 )
    654741!
    655742!--                   Clear flag for WS1
    656                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
     743                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 18 )
    657744                   ENDIF
    658745!
    659746!--                v component - y-direction
    660747!--                WS1 (21), WS3 (22), WS5 (23)
    661                    IF ( k <= nzb_v_inner(j+1,i) .OR.                           &
     748                   IF ( .NOT. BTEST(wall_flags_0(k,j+1,i),2) .OR.              &
    662749                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
    663750                              .AND. j <= nysv  )    .OR.                       &
     
    665752                              .AND. j == nyn   ) )                             &
    666753                   THEN
    667                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
    668                    ELSEIF ( ( k <= nzb_v_inner(j+2,i) .AND.                    &
    669                               k >  nzb_v_inner(j+1,i) ) .OR.                   &
    670                               k <= nzb_v_inner(j-1,i)                          &
     754                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 21 )
     755                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j+2,i),2)  .AND.      &
     756                                    BTEST(wall_flags_0(k,j+1,i),2)  .OR.       &
     757                              .NOT. BTEST(wall_flags_0(k,j-1,i),2) )           &
    671758                                                        .OR.                   &
    672759                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     
    675762                              .AND. j == nyn-1 ) )                             &
    676763                   THEN
    677                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 22 )
     764                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 22 )
    678765!
    679766!--                   Clear flag for WS1
    680                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
    681                    ELSEIF ( k > nzb_v_inner(j+1,i) .AND. k > nzb_v_inner(j+2,i)   &
    682                                                    .AND. k > nzb_v_inner(j-1,i) ) &
     767                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 21 )
     768                   ELSEIF ( BTEST(wall_flags_0(k,j+1,i),2)  .AND.              &
     769                            BTEST(wall_flags_0(k,j+2,i),2)  .AND.              &
     770                            BTEST(wall_flags_0(k,j-1,i),2) )                   &
    683771                   THEN
    684                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 23 )
     772                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 23 )
    685773!
    686774!--                   Clear flag for WS1
    687                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
     775                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 21 )
    688776                   ENDIF
    689777!
    690778!--                v component - z-direction
    691779!--                WS1 (24), WS3 (25), WS5 (26)
     780                   IF ( k == nzb+1 )  THEN
     781                      k_mm = nzb
     782                   ELSE
     783                      k_mm = k - 2
     784                   ENDIF
     785                   IF ( k > nzt-1 )  THEN
     786                      k_pp = nzt+1
     787                   ELSE
     788                      k_pp = k + 2
     789                   ENDIF
     790                   IF ( k > nzt-2 )  THEN
     791                      k_ppp = nzt+1
     792                   ELSE
     793                      k_ppp = k + 3
     794                   ENDIF 
     795                   
    692796                   flag_set = .FALSE.
    693                    IF ( k == nzb_v_inner(j,i) + 1 .OR. k == nzt )  THEN
    694                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 24 )
     797                   IF ( .NOT. BTEST(wall_flags_0(k-1,j,i),2)  .AND.            &
     798                              BTEST(wall_flags_0(k,j,i),2)    .OR.             &
     799                        .NOT. BTEST(wall_flags_0(k_pp,j,i),2) .AND.            &                             
     800                              BTEST(wall_flags_0(k,j,i),2)    .OR.             &
     801                        k == nzt )                                             &
     802                   THEN
     803                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 24 )
    695804                      flag_set = .TRUE.
    696                    ELSEIF ( k == nzb_v_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
    697                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 25 )
     805                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),2)    .OR.    &
     806                              .NOT. BTEST(wall_flags_0(k_ppp,j,i),2) ) .AND.   &
     807                                  BTEST(wall_flags_0(k-1,j,i),2)  .AND.        &
     808                                  BTEST(wall_flags_0(k,j,i),2)    .AND.        &
     809                                  BTEST(wall_flags_0(k+1,j,i),2)  .AND.        &
     810                                  BTEST(wall_flags_0(k_pp,j,i),2)  .OR.        &
     811                                  k == nzt - 1 )                               &
     812                   THEN
     813                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 25 )
    698814                      flag_set = .TRUE.
    699                    ELSEIF ( k > nzb_v_inner(j,i) .AND. .NOT. flag_set )  THEN
    700                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 26 )
     815                   ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),2)  .AND.             &
     816                            BTEST(wall_flags_0(k-1,j,i),2)   .AND.             &
     817                            BTEST(wall_flags_0(k,j,i),2)     .AND.             &
     818                            BTEST(wall_flags_0(k+1,j,i),2)   .AND.             &
     819                            BTEST(wall_flags_0(k_pp,j,i),2)  .AND.             &
     820                            BTEST(wall_flags_0(k_ppp,j,i),2) .AND.             &
     821                            .NOT. flag_set )                                   &
     822                   THEN
     823                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 26 )
    701824                   ENDIF
    702825
     
    711834!--                Since fluxes are swapped in advec_ws.f90, this is necessary to
    712835!--                in order to handle the left/south flux.
    713                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
    714                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
     836                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 27 )
     837                   advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 30 )
    715838!
    716839!--                w component - x-direction
    717840!--                WS1 (27), WS3 (28), WS5 (29)
    718                    IF ( k <= nzb_w_inner(j,i+1) .OR.                           &
     841                   IF ( .NOT. BTEST(wall_flags_0(k,j,i+1),3) .OR.              &
    719842                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
    720843                              .AND. i == nxl   )    .OR.                       &
     
    722845                              .AND. i == nxr   ) )                             &
    723846                   THEN
    724                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
    725                    ELSEIF ( ( k <= nzb_w_inner(j,i+2) .AND.                    &
    726                               k >  nzb_w_inner(j,i+1) ) .OR.                   &
    727                               k <= nzb_w_inner(j,i-1)                          &
     847                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 27 )
     848                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j,i+2),3)  .AND.      &
     849                                    BTEST(wall_flags_0(k,j,i+1),3)  .OR.       &
     850                              .NOT. BTEST(wall_flags_0(k,j,i-1),3) )           &
    728851                                                        .OR.                   &
    729852                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     
    732855                              .AND. i == nxlu  ) )                             &
    733856                   THEN
    734                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 28 )
     857                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 28 )
    735858!   
    736859!--                   Clear flag for WS1
    737                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
    738                    ELSEIF ( k > nzb_w_inner(j,i+1) .AND. k > nzb_w_inner(j,i+2)   &
    739                                                    .AND. k > nzb_w_inner(j,i-1) ) &
     860                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 27 )
     861                   ELSEIF ( BTEST(wall_flags_0(k,j,i+1),3)  .AND.              &
     862                            BTEST(wall_flags_0(k,j,i+2),3)  .AND.              &
     863                            BTEST(wall_flags_0(k,j,i-1),3) )                   &
    740864                   THEN
    741                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i),29 )
     865                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i),29 )
    742866!   
    743867!--                   Clear flag for WS1
    744                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
     868                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 27 )
    745869                   ENDIF
    746870!
    747871!--                w component - y-direction
    748872!--                WS1 (30), WS3 (31), WS5 (32)
    749                    IF ( k <= nzb_w_inner(j+1,i) .OR.                           &
     873                   IF ( .NOT. BTEST(wall_flags_0(k,j+1,i),3) .OR.              &
    750874                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
    751875                              .AND. j == nys   )    .OR.                       &
     
    753877                              .AND. j == nyn   ) )                             &
    754878                   THEN
    755                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
    756                    ELSEIF ( ( k <= nzb_w_inner(j+2,i) .AND.                    &
    757                               k >  nzb_w_inner(j+1,i) ) .OR.                   &
    758                                k <= nzb_w_inner(j-1,i)                         &
     879                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 30 )
     880                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k,j+2,i),3)  .AND.      &
     881                                    BTEST(wall_flags_0(k,j+1,i),3)  .OR.       &
     882                              .NOT. BTEST(wall_flags_0(k,j-1,i),3) )           &
    759883                                                        .OR.                   &
    760884                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     
    763887                              .AND. j == nyn-1 ) )                             &
    764888                   THEN
    765                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 31 )
     889                      advc_flags_1(k,j,i) = IBSET( advc_flags_1(k,j,i), 31 )
    766890!
    767891!--                   Clear flag for WS1
    768                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
    769                    ELSEIF ( k > nzb_w_inner(j+1,i) .AND. k > nzb_w_inner(j+2,i)   &
    770                                                    .AND. k > nzb_w_inner(j-1,i) ) &
     892                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 30 )
     893                   ELSEIF ( BTEST(wall_flags_0(k,j+1,i),3)  .AND.              &
     894                            BTEST(wall_flags_0(k,j+2,i),3)  .AND.              &
     895                            BTEST(wall_flags_0(k,j-1,i),3) )                   &
    771896                   THEN
    772                       wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 0 )
     897                      advc_flags_2(k,j,i) = IBSET( advc_flags_2(k,j,i), 0 )
    773898!
    774899!--                   Clear flag for WS1
    775                       wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
     900                      advc_flags_1(k,j,i) = IBCLR( advc_flags_1(k,j,i), 30 )
    776901                   ENDIF
    777902!
     
    779904!--                WS1 (33), WS3 (34), WS5 (35)
    780905                   flag_set = .FALSE.
    781                    IF ( k == nzb_w_inner(j,i) .OR. k == nzb_w_inner(j,i) + 1   &
    782                                               .OR. k == nzt )  THEN
     906                   IF ( k == nzb+1 )  THEN
     907                      k_mm = nzb
     908                   ELSE
     909                      k_mm = k - 2
     910                   ENDIF
     911                   IF ( k > nzt-1 )  THEN
     912                      k_pp = nzt+1
     913                   ELSE
     914                      k_pp = k + 2
     915                   ENDIF
     916                   IF ( k > nzt-2 )  THEN
     917                      k_ppp = nzt+1
     918                   ELSE
     919                      k_ppp = k + 3
     920                   ENDIF 
     921                   
     922                   IF ( ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)  .AND.          &
     923                          .NOT. BTEST(wall_flags_0(k,j,i),3)    .AND.          &
     924                                BTEST(wall_flags_0(k+1,j,i),3) )  .OR.         &
     925                        ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)  .AND.          &
     926                                BTEST(wall_flags_0(k,j,i),3) )  .OR.           &
     927                        ( .NOT. BTEST(wall_flags_0(k+1,j,i),3)  .AND.          &
     928                                BTEST(wall_flags_0(k,j,i),3) )  .OR.           &       
     929                        k == nzt )                                             &
     930                   THEN
    783931!
    784932!--                   Please note, at k == nzb_w_inner(j,i) a flag is explictely
     
    787935!--                   because flux_t(nzb_w_inner(j,i)) is used for the tendency
    788936!--                   at k == nzb_w_inner(j,i)+1.
    789                       wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 1 )
     937                      advc_flags_2(k,j,i) = IBSET( advc_flags_2(k,j,i), 1 )
    790938                      flag_set = .TRUE.
    791                    ELSEIF ( k == nzb_w_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
    792                       wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 2 )
     939                   ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),3)     .OR.   &
     940                              .NOT. BTEST(wall_flags_0(k_ppp,j,i),3) ) .AND.   &
     941                                    BTEST(wall_flags_0(k-1,j,i),3)  .AND.      &
     942                                    BTEST(wall_flags_0(k,j,i),3)    .AND.      &
     943                                    BTEST(wall_flags_0(k+1,j,i),3)  .OR.       &
     944                            k == nzt - 1 )                                     &
     945                   THEN
     946                      advc_flags_2(k,j,i) = IBSET( advc_flags_2(k,j,i), 2 )
    793947                      flag_set = .TRUE.
    794                    ELSEIF ( k > nzb_w_inner(j,i) .AND. .NOT. flag_set )  THEN
    795                       wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 3 )
     948                   ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),3)  .AND.             &
     949                            BTEST(wall_flags_0(k-1,j,i),3)   .AND.             &
     950                            BTEST(wall_flags_0(k,j,i),3)     .AND.             &
     951                            BTEST(wall_flags_0(k+1,j,i),3)   .AND.             &
     952                            BTEST(wall_flags_0(k_pp,j,i),3)  .AND.             &
     953                            BTEST(wall_flags_0(k_ppp,j,i),3) .AND.             &
     954                            .NOT. flag_set )                                   &
     955                   THEN
     956                      advc_flags_2(k,j,i) = IBSET( advc_flags_2(k,j,i), 3 )
    796957                   ENDIF
    797958
     
    809970!
    810971!--       Exchange ghost points for advection flags
    811           CALL exchange_horiz_int( wall_flags_0, nbgp )
    812           CALL exchange_horiz_int( wall_flags_00, nbgp )
     972          CALL exchange_horiz_int( advc_flags_1, nbgp )
     973          CALL exchange_horiz_int( advc_flags_2, nbgp )
    813974!
    814975!--       Set boundary flags at inflow and outflow boundary in case of
    815976!--       non-cyclic boundary conditions.
    816977         IF ( inflow_l .OR. outflow_l .OR. nest_bound_l )  THEN
    817              wall_flags_0(:,:,nxl-1)  = wall_flags_0(:,:,nxl)
    818              wall_flags_00(:,:,nxl-1) = wall_flags_00(:,:,nxl)
     978             advc_flags_1(:,:,nxl-1) = advc_flags_1(:,:,nxl)
     979             advc_flags_2(:,:,nxl-1) = advc_flags_2(:,:,nxl)
    819980         ENDIF
    820981
    821982         IF ( inflow_r .OR. outflow_r .OR. nest_bound_r )  THEN
    822             wall_flags_0(:,:,nxr+1)  = wall_flags_0(:,:,nxr)
    823             wall_flags_00(:,:,nxr+1) = wall_flags_00(:,:,nxr)
     983            advc_flags_1(:,:,nxr+1) = advc_flags_1(:,:,nxr)
     984            advc_flags_2(:,:,nxr+1) = advc_flags_2(:,:,nxr)
    824985          ENDIF
    825986
    826987          IF ( inflow_n .OR. outflow_n .OR. nest_bound_n )  THEN
    827              wall_flags_0(:,nyn+1,:)  = wall_flags_0(:,nyn,:)
    828              wall_flags_00(:,nyn+1,:) = wall_flags_00(:,nyn,:)
     988             advc_flags_1(:,nyn+1,:) = advc_flags_1(:,nyn,:)
     989             advc_flags_2(:,nyn+1,:) = advc_flags_2(:,nyn,:)
    829990          ENDIF
    830991
    831992          IF ( inflow_s .OR. outflow_s  .OR. nest_bound_s )  THEN
    832              wall_flags_0(:,nys-1,:)  = wall_flags_0(:,nys,:)
    833              wall_flags_00(:,nys-1,:) = wall_flags_00(:,nys,:)
     993             advc_flags_1(:,nys-1,:) = advc_flags_1(:,nys,:)
     994             advc_flags_2(:,nys-1,:) = advc_flags_2(:,nys,:)
    834995          ENDIF
    835996 
     
    9101071       USE indices,                                                            &
    9111072           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_max,    &
    912                   nzt, wall_flags_0
     1073                  nzt, advc_flags_1
    9131074
    9141075       USE kinds
     
    9761137          DO  k = nzb+1, nzb_max
    9771138
    978              ibit5 = IBITS(wall_flags_0(k,j-1,i),5,1)
    979              ibit4 = IBITS(wall_flags_0(k,j-1,i),4,1)
    980              ibit3 = IBITS(wall_flags_0(k,j-1,i),3,1)
     1139             ibit5 = IBITS(advc_flags_1(k,j-1,i),5,1)
     1140             ibit4 = IBITS(advc_flags_1(k,j-1,i),4,1)
     1141             ibit3 = IBITS(advc_flags_1(k,j-1,i),3,1)
    9811142
    9821143             v_comp                  = v(k,j,i) - v_gtrans
     
    10371198          DO  k = nzb+1, nzb_max
    10381199
    1039              ibit2 = IBITS(wall_flags_0(k,j,i-1),2,1)
    1040              ibit1 = IBITS(wall_flags_0(k,j,i-1),1,1)
    1041              ibit0 = IBITS(wall_flags_0(k,j,i-1),0,1)
     1200             ibit2 = IBITS(advc_flags_1(k,j,i-1),2,1)
     1201             ibit1 = IBITS(advc_flags_1(k,j,i-1),1,1)
     1202             ibit0 = IBITS(advc_flags_1(k,j,i-1),0,1)
    10421203
    10431204             u_comp                     = u(k,j,i) - u_gtrans
     
    11061267!--       flux at the end.
    11071268
    1108           ibit2 = IBITS(wall_flags_0(k,j,i),2,1)
    1109           ibit1 = IBITS(wall_flags_0(k,j,i),1,1)
    1110           ibit0 = IBITS(wall_flags_0(k,j,i),0,1)
     1269          ibit2 = IBITS(advc_flags_1(k,j,i),2,1)
     1270          ibit1 = IBITS(advc_flags_1(k,j,i),1,1)
     1271          ibit0 = IBITS(advc_flags_1(k,j,i),0,1)
    11111272
    11121273          u_comp    = u(k,j,i+1) - u_gtrans
     
    11411302                                       )
    11421303
    1143           ibit5 = IBITS(wall_flags_0(k,j,i),5,1)
    1144           ibit4 = IBITS(wall_flags_0(k,j,i),4,1)
    1145           ibit3 = IBITS(wall_flags_0(k,j,i),3,1)
     1304          ibit5 = IBITS(advc_flags_1(k,j,i),5,1)
     1305          ibit4 = IBITS(advc_flags_1(k,j,i),4,1)
     1306          ibit3 = IBITS(advc_flags_1(k,j,i),3,1)
    11461307
    11471308          v_comp    = v(k,j+1,i) - v_gtrans
     
    11781339!--       k index has to be modified near bottom and top, else array
    11791340!--       subscripts will be exceeded.
    1180           ibit8 = IBITS(wall_flags_0(k,j,i),8,1)
    1181           ibit7 = IBITS(wall_flags_0(k,j,i),7,1)
    1182           ibit6 = IBITS(wall_flags_0(k,j,i),6,1)
     1341          ibit8 = IBITS(advc_flags_1(k,j,i),8,1)
     1342          ibit7 = IBITS(advc_flags_1(k,j,i),7,1)
     1343          ibit6 = IBITS(advc_flags_1(k,j,i),6,1)
    11831344
    11841345          k_ppp = k + 3 * ibit8
     
    12201381!--       by a not sufficient reduction of divergences near topography.
    12211382          div         =   ( u(k,j,i+1) * ( ibit0 + ibit1 + ibit2 )             &
    1222                           - u(k,j,i)   * ( IBITS(wall_flags_0(k,j,i-1),0,1)    &
    1223                                          + IBITS(wall_flags_0(k,j,i-1),1,1)    &
    1224                                          + IBITS(wall_flags_0(k,j,i-1),2,1)    &
     1383                          - u(k,j,i)   * ( IBITS(advc_flags_1(k,j,i-1),0,1)    &
     1384                                         + IBITS(advc_flags_1(k,j,i-1),1,1)    &
     1385                                         + IBITS(advc_flags_1(k,j,i-1),2,1)    &
    12251386                                         )                                     &
    12261387                          ) * rho_air(k) * ddx                                 &
    12271388                        + ( v(k,j+1,i) * ( ibit3 + ibit4 + ibit5 )             &
    1228                           - v(k,j,i)   * ( IBITS(wall_flags_0(k,j-1,i),3,1)    &
    1229                                          + IBITS(wall_flags_0(k,j-1,i),4,1)    &
    1230                                          + IBITS(wall_flags_0(k,j-1,i),5,1)    &
     1389                          - v(k,j,i)   * ( IBITS(advc_flags_1(k,j-1,i),3,1)    &
     1390                                         + IBITS(advc_flags_1(k,j-1,i),4,1)    &
     1391                                         + IBITS(advc_flags_1(k,j-1,i),5,1)    &
    12311392                                         )                                     &
    12321393                          ) * rho_air(k) * ddy                                 &
     
    12341395                                         ( ibit6 + ibit7 + ibit8 )             &
    12351396                          - w(k-1,j,i) * rho_air_zw(k-1) *                     &
    1236                                          ( IBITS(wall_flags_0(k-1,j,i),6,1)    &
    1237                                          + IBITS(wall_flags_0(k-1,j,i),7,1)    &
    1238                                          + IBITS(wall_flags_0(k-1,j,i),8,1)    &
     1397                                         ( IBITS(advc_flags_1(k-1,j,i),6,1)    &
     1398                                         + IBITS(advc_flags_1(k-1,j,i),7,1)    &
     1399                                         + IBITS(advc_flags_1(k-1,j,i),8,1)    &
    12391400                                         )                                     &     
    12401401                          ) * ddzw(k)
     
    12871448!--       k index has to be modified near bottom and top, else array
    12881449!--       subscripts will be exceeded.
    1289           ibit8 = IBITS(wall_flags_0(k,j,i),8,1)
    1290           ibit7 = IBITS(wall_flags_0(k,j,i),7,1)
    1291           ibit6 = IBITS(wall_flags_0(k,j,i),6,1)
     1450          ibit8 = IBITS(advc_flags_1(k,j,i),8,1)
     1451          ibit7 = IBITS(advc_flags_1(k,j,i),7,1)
     1452          ibit6 = IBITS(advc_flags_1(k,j,i),6,1)
    12921453
    12931454          k_ppp = k + 3 * ibit8
     
    14501611
    14511612       USE indices,                                                           &
    1452            ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, wall_flags_0
     1613           ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, advc_flags_1
    14531614
    14541615       USE kinds
     
    15021663          DO  k = nzb+1, nzb_max
    15031664
    1504              ibit14 = IBITS(wall_flags_0(k,j-1,i),14,1)
    1505              ibit13 = IBITS(wall_flags_0(k,j-1,i),13,1)
    1506              ibit12 = IBITS(wall_flags_0(k,j-1,i),12,1)
     1665             ibit14 = IBITS(advc_flags_1(k,j-1,i),14,1)
     1666             ibit13 = IBITS(advc_flags_1(k,j-1,i),13,1)
     1667             ibit12 = IBITS(advc_flags_1(k,j-1,i),12,1)
    15071668
    15081669             v_comp      = v(k,j,i) + v(k,j,i-1) - gv
     
    15601721          DO  k = nzb+1, nzb_max
    15611722
    1562              ibit11 = IBITS(wall_flags_0(k,j,i-1),11,1)
    1563              ibit10 = IBITS(wall_flags_0(k,j,i-1),10,1)
    1564              ibit9  = IBITS(wall_flags_0(k,j,i-1),9,1)
     1723             ibit11 = IBITS(advc_flags_1(k,j,i-1),11,1)
     1724             ibit10 = IBITS(advc_flags_1(k,j,i-1),10,1)
     1725             ibit9  = IBITS(advc_flags_1(k,j,i-1),9,1)
    15651726
    15661727             u_comp_l         = u(k,j,i) + u(k,j,i-1) - gu
     
    16221783       DO  k = nzb+1, nzb_max
    16231784
    1624           ibit11 = IBITS(wall_flags_0(k,j,i),11,1)
    1625           ibit10 = IBITS(wall_flags_0(k,j,i),10,1)
    1626           ibit9  = IBITS(wall_flags_0(k,j,i),9,1)
     1785          ibit11 = IBITS(advc_flags_1(k,j,i),11,1)
     1786          ibit10 = IBITS(advc_flags_1(k,j,i),10,1)
     1787          ibit9  = IBITS(advc_flags_1(k,j,i),9,1)
    16271788
    16281789          u_comp(k) = u(k,j,i+1) + u(k,j,i)
     
    16571818                                                )
    16581819
    1659           ibit14 = IBITS(wall_flags_0(k,j,i),14,1)
    1660           ibit13 = IBITS(wall_flags_0(k,j,i),13,1)
    1661           ibit12 = IBITS(wall_flags_0(k,j,i),12,1)
     1820          ibit14 = IBITS(advc_flags_1(k,j,i),14,1)
     1821          ibit13 = IBITS(advc_flags_1(k,j,i),13,1)
     1822          ibit12 = IBITS(advc_flags_1(k,j,i),12,1)
    16621823
    16631824          v_comp    = v(k,j+1,i) + v(k,j+1,i-1) - gv
     
    16941855!--       k index has to be modified near bottom and top, else array
    16951856!--       subscripts will be exceeded.
    1696           ibit17 = IBITS(wall_flags_0(k,j,i),17,1)
    1697           ibit16 = IBITS(wall_flags_0(k,j,i),16,1)
    1698           ibit15 = IBITS(wall_flags_0(k,j,i),15,1)
     1857          ibit17 = IBITS(advc_flags_1(k,j,i),17,1)
     1858          ibit16 = IBITS(advc_flags_1(k,j,i),16,1)
     1859          ibit15 = IBITS(advc_flags_1(k,j,i),15,1)
    16991860
    17001861          k_ppp = k + 3 * ibit17
     
    17381899          div = ( ( u_comp(k)       * ( ibit9 + ibit10 + ibit11 )             &
    17391900                - ( u(k,j,i)   + u(k,j,i-1)   )                               &
    1740                                     * ( IBITS(wall_flags_0(k,j,i-1),9,1)      &
    1741                                       + IBITS(wall_flags_0(k,j,i-1),10,1)     &
    1742                                       + IBITS(wall_flags_0(k,j,i-1),11,1)     &
     1901                                    * ( IBITS(advc_flags_1(k,j,i-1),9,1)      &
     1902                                      + IBITS(advc_flags_1(k,j,i-1),10,1)     &
     1903                                      + IBITS(advc_flags_1(k,j,i-1),11,1)     &
    17431904                                      )                                       &
    17441905                  ) * rho_air(k) * ddx                                        &
    17451906               +  ( ( v_comp + gv ) * ( ibit12 + ibit13 + ibit14 )            &
    17461907                  - ( v(k,j,i)   + v(k,j,i-1 )  )                             &
    1747                                     * ( IBITS(wall_flags_0(k,j-1,i),12,1)     &
    1748                                       + IBITS(wall_flags_0(k,j-1,i),13,1)     &
    1749                                       + IBITS(wall_flags_0(k,j-1,i),14,1)     &
     1908                                    * ( IBITS(advc_flags_1(k,j-1,i),12,1)     &
     1909                                      + IBITS(advc_flags_1(k,j-1,i),13,1)     &
     1910                                      + IBITS(advc_flags_1(k,j-1,i),14,1)     &
    17501911                                      )                                       &
    17511912                  ) * rho_air(k) * ddy                                        &
    17521913               +  ( w_comp * rho_air_zw(k) * ( ibit15 + ibit16 + ibit17 )     &
    17531914                - ( w(k-1,j,i) + w(k-1,j,i-1) ) * rho_air_zw(k-1)             &
    1754                                     * ( IBITS(wall_flags_0(k-1,j,i),15,1)     &
    1755                                       + IBITS(wall_flags_0(k-1,j,i),16,1)     &
    1756                                       + IBITS(wall_flags_0(k-1,j,i),17,1)     &
     1915                                    * ( IBITS(advc_flags_1(k-1,j,i),15,1)     &
     1916                                      + IBITS(advc_flags_1(k-1,j,i),16,1)     &
     1917                                      + IBITS(advc_flags_1(k-1,j,i),17,1)     &
    17571918                                      )                                       & 
    17581919                  ) * ddzw(k)   &
     
    18231984!--       k index has to be modified near bottom and top, else array
    18241985!--       subscripts will be exceeded.
    1825           ibit17 = IBITS(wall_flags_0(k,j,i),17,1)
    1826           ibit16 = IBITS(wall_flags_0(k,j,i),16,1)
    1827           ibit15 = IBITS(wall_flags_0(k,j,i),15,1)
     1986          ibit17 = IBITS(advc_flags_1(k,j,i),17,1)
     1987          ibit16 = IBITS(advc_flags_1(k,j,i),16,1)
     1988          ibit15 = IBITS(advc_flags_1(k,j,i),15,1)
    18281989
    18291990          k_ppp = k + 3 * ibit17
     
    19422103
    19432104       USE indices,                                                            &
    1944            ONLY:  nxl, nxr, nyn, nys, nysv, nzb, nzb_max, nzt, wall_flags_0
     2105           ONLY:  nxl, nxr, nyn, nys, nysv, nzb, nzb_max, nzt, advc_flags_1
    19452106
    19462107       USE kinds
     
    19952156          DO  k = nzb+1, nzb_max
    19962157
    1997              ibit20 = IBITS(wall_flags_0(k,j,i-1),20,1)
    1998              ibit19 = IBITS(wall_flags_0(k,j,i-1),19,1)
    1999              ibit18 = IBITS(wall_flags_0(k,j,i-1),18,1)
     2158             ibit20 = IBITS(advc_flags_1(k,j,i-1),20,1)
     2159             ibit19 = IBITS(advc_flags_1(k,j,i-1),19,1)
     2160             ibit18 = IBITS(advc_flags_1(k,j,i-1),18,1)
    20002161
    20012162             u_comp           = u(k,j-1,i) + u(k,j,i) - gu
     
    20532214          DO  k = nzb+1, nzb_max
    20542215
    2055              ibit23 = IBITS(wall_flags_0(k,j-1,i),23,1)
    2056              ibit22 = IBITS(wall_flags_0(k,j-1,i),22,1)
    2057              ibit21 = IBITS(wall_flags_0(k,j-1,i),21,1)
     2216             ibit23 = IBITS(advc_flags_1(k,j-1,i),23,1)
     2217             ibit22 = IBITS(advc_flags_1(k,j-1,i),22,1)
     2218             ibit21 = IBITS(advc_flags_1(k,j-1,i),21,1)
    20582219
    20592220             v_comp_l       = v(k,j,i) + v(k,j-1,i) - gv
     
    21152276       DO  k = nzb+1, nzb_max
    21162277
    2117           ibit20 = IBITS(wall_flags_0(k,j,i),20,1)
    2118           ibit19 = IBITS(wall_flags_0(k,j,i),19,1)
    2119           ibit18 = IBITS(wall_flags_0(k,j,i),18,1)
     2278          ibit20 = IBITS(advc_flags_1(k,j,i),20,1)
     2279          ibit19 = IBITS(advc_flags_1(k,j,i),19,1)
     2280          ibit18 = IBITS(advc_flags_1(k,j,i),18,1)
    21202281 
    21212282          u_comp    = u(k,j-1,i+1) + u(k,j,i+1) - gu
     
    21502311                                        )
    21512312
    2152           ibit23 = IBITS(wall_flags_0(k,j,i),23,1)
    2153           ibit22 = IBITS(wall_flags_0(k,j,i),22,1)
    2154           ibit21 = IBITS(wall_flags_0(k,j,i),21,1)
     2313          ibit23 = IBITS(advc_flags_1(k,j,i),23,1)
     2314          ibit22 = IBITS(advc_flags_1(k,j,i),22,1)
     2315          ibit21 = IBITS(advc_flags_1(k,j,i),21,1)
    21552316
    21562317
     
    21882349!--       k index has to be modified near bottom and top, else array
    21892350!--       subscripts will be exceeded.
    2190           ibit26 = IBITS(wall_flags_0(k,j,i),26,1)
    2191           ibit25 = IBITS(wall_flags_0(k,j,i),25,1)
    2192           ibit24 = IBITS(wall_flags_0(k,j,i),24,1)
     2351          ibit26 = IBITS(advc_flags_1(k,j,i),26,1)
     2352          ibit25 = IBITS(advc_flags_1(k,j,i),25,1)
     2353          ibit24 = IBITS(advc_flags_1(k,j,i),24,1)
    21932354
    21942355          k_ppp = k + 3 * ibit26
     
    22332394                                       * ( ibit18 + ibit19 + ibit20 )         &
    22342395                  - ( u(k,j-1,i) + u(k,j,i) )                                 &
    2235                                        * ( IBITS(wall_flags_0(k,j,i-1),18,1)  &
    2236                                          + IBITS(wall_flags_0(k,j,i-1),19,1)  &
    2237                                          + IBITS(wall_flags_0(k,j,i-1),20,1)  &
     2396                                       * ( IBITS(advc_flags_1(k,j,i-1),18,1)  &
     2397                                         + IBITS(advc_flags_1(k,j,i-1),19,1)  &
     2398                                         + IBITS(advc_flags_1(k,j,i-1),20,1)  &
    22382399                                         )                                    &
    22392400                  ) * rho_air(k) * ddx                                        &
     
    22412402                                       * ( ibit21 + ibit22 + ibit23 )         &
    22422403                - ( v(k,j,i)     + v(k,j-1,i) )                               &
    2243                                        * ( IBITS(wall_flags_0(k,j-1,i),21,1)  &
    2244                                          + IBITS(wall_flags_0(k,j-1,i),22,1)  &
    2245                                          + IBITS(wall_flags_0(k,j-1,i),23,1)  &
     2404                                       * ( IBITS(advc_flags_1(k,j-1,i),21,1)  &
     2405                                         + IBITS(advc_flags_1(k,j-1,i),22,1)  &
     2406                                         + IBITS(advc_flags_1(k,j-1,i),23,1)  &
    22462407                                         )                                    &
    22472408                  ) * rho_air(k) * ddy                                        &
    22482409               +  ( w_comp * rho_air_zw(k) * ( ibit24 + ibit25 + ibit26 )     &
    22492410                - ( w(k-1,j-1,i) + w(k-1,j,i) ) * rho_air_zw(k-1)             &
    2250                                        * ( IBITS(wall_flags_0(k-1,j,i),24,1)  &
    2251                                          + IBITS(wall_flags_0(k-1,j,i),25,1)  &
    2252                                          + IBITS(wall_flags_0(k-1,j,i),26,1)  &
     2411                                       * ( IBITS(advc_flags_1(k-1,j,i),24,1)  &
     2412                                         + IBITS(advc_flags_1(k-1,j,i),25,1)  &
     2413                                         + IBITS(advc_flags_1(k-1,j,i),26,1)  &
    22532414                                         )                                    &
    22542415                   ) * ddzw(k)   &
     
    23242485!--       k index has to be modified near bottom and top, else array
    23252486!--       subscripts will be exceeded.
    2326           ibit26 = IBITS(wall_flags_0(k,j,i),26,1)
    2327           ibit25 = IBITS(wall_flags_0(k,j,i),25,1)
    2328           ibit24 = IBITS(wall_flags_0(k,j,i),24,1)
     2487          ibit26 = IBITS(advc_flags_1(k,j,i),26,1)
     2488          ibit25 = IBITS(advc_flags_1(k,j,i),25,1)
     2489          ibit24 = IBITS(advc_flags_1(k,j,i),24,1)
    23292490
    23302491          k_ppp = k + 3 * ibit26
     
    24432604
    24442605       USE indices,                                                           &
    2445            ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, wall_flags_0,        &
    2446                   wall_flags_00
     2606           ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, advc_flags_1,        &
     2607                  advc_flags_2
    24472608
    24482609       USE kinds
     
    24952656
    24962657          DO  k = nzb+1, nzb_max
    2497              ibit32 = IBITS(wall_flags_00(k,j-1,i),0,1)
    2498              ibit31 = IBITS(wall_flags_0(k,j-1,i),31,1)
    2499              ibit30 = IBITS(wall_flags_0(k,j-1,i),30,1)
     2658             ibit32 = IBITS(advc_flags_2(k,j-1,i),0,1)
     2659             ibit31 = IBITS(advc_flags_1(k,j-1,i),31,1)
     2660             ibit30 = IBITS(advc_flags_1(k,j-1,i),30,1)
    25002661
    25012662             v_comp         = v(k+1,j,i) + v(k,j,i) - gv
     
    25532714          DO  k = nzb+1, nzb_max
    25542715
    2555              ibit29 = IBITS(wall_flags_0(k,j,i-1),29,1)
    2556              ibit28 = IBITS(wall_flags_0(k,j,i-1),28,1)
    2557              ibit27 = IBITS(wall_flags_0(k,j,i-1),27,1)
     2716             ibit29 = IBITS(advc_flags_1(k,j,i-1),29,1)
     2717             ibit28 = IBITS(advc_flags_1(k,j,i-1),28,1)
     2718             ibit27 = IBITS(advc_flags_1(k,j,i-1),27,1)
    25582719
    25592720             u_comp           = u(k+1,j,i) + u(k,j,i) - gu
     
    26082769!--    The lower flux has to be calculated explicetely for the tendency at
    26092770!--    the first w-level. For topography wall this is done implicitely by
    2610 !--    wall_flags_0.
     2771!--    advc_flags_1.
    26112772       k         = nzb + 1
    26122773       w_comp    = w(k,j,i) + w(k-1,j,i)
     
    26202781       DO  k = nzb+1, nzb_max
    26212782
    2622           ibit29 = IBITS(wall_flags_0(k,j,i),29,1)
    2623           ibit28 = IBITS(wall_flags_0(k,j,i),28,1)
    2624           ibit27 = IBITS(wall_flags_0(k,j,i),27,1)
     2783          ibit29 = IBITS(advc_flags_1(k,j,i),29,1)
     2784          ibit28 = IBITS(advc_flags_1(k,j,i),28,1)
     2785          ibit27 = IBITS(advc_flags_1(k,j,i),27,1)
    26252786
    26262787          u_comp    = u(k+1,j,i+1) + u(k,j,i+1) - gu
     
    26552816                                        )
    26562817
    2657           ibit32 = IBITS(wall_flags_00(k,j,i),0,1)
    2658           ibit31 = IBITS(wall_flags_0(k,j,i),31,1)
    2659           ibit30 = IBITS(wall_flags_0(k,j,i),30,1)
     2818          ibit32 = IBITS(advc_flags_2(k,j,i),0,1)
     2819          ibit31 = IBITS(advc_flags_1(k,j,i),31,1)
     2820          ibit30 = IBITS(advc_flags_1(k,j,i),30,1)
    26602821
    26612822          v_comp    = v(k+1,j+1,i) + v(k,j+1,i) - gv
     
    26922853!--       k index has to be modified near bottom and top, else array
    26932854!--       subscripts will be exceeded.
    2694           ibit35 = IBITS(wall_flags_00(k,j,i),3,1)
    2695           ibit34 = IBITS(wall_flags_00(k,j,i),2,1)
    2696           ibit33 = IBITS(wall_flags_00(k,j,i),1,1)
     2855          ibit35 = IBITS(advc_flags_2(k,j,i),3,1)
     2856          ibit34 = IBITS(advc_flags_2(k,j,i),2,1)
     2857          ibit33 = IBITS(advc_flags_2(k,j,i),1,1)
    26972858
    26982859          k_ppp = k + 3 * ibit35
     
    27372898          div = ( ( ( u_comp + gu ) * ( ibit27 + ibit28 + ibit29 )            &
    27382899                  - ( u(k+1,j,i) + u(k,j,i)   )                               &
    2739                                     * ( IBITS(wall_flags_0(k,j,i-1),27,1)     &
    2740                                       + IBITS(wall_flags_0(k,j,i-1),28,1)     &
    2741                                       + IBITS(wall_flags_0(k,j,i-1),29,1)     &
     2900                                    * ( IBITS(advc_flags_1(k,j,i-1),27,1)     &
     2901                                      + IBITS(advc_flags_1(k,j,i-1),28,1)     &
     2902                                      + IBITS(advc_flags_1(k,j,i-1),29,1)     &
    27422903                                      )                                       &
    27432904                  ) * rho_air_zw(k) * ddx                                     &
    27442905              +   ( ( v_comp + gv ) * ( ibit30 + ibit31 + ibit32 )            &
    27452906                  - ( v(k+1,j,i) + v(k,j,i)   )                               &
    2746                                     * ( IBITS(wall_flags_0(k,j-1,i),30,1)     &
    2747                                       + IBITS(wall_flags_0(k,j-1,i),31,1)     &
    2748                                       + IBITS(wall_flags_00(k,j-1,i),0,1)     &
     2907                                    * ( IBITS(advc_flags_1(k,j-1,i),30,1)     &
     2908                                      + IBITS(advc_flags_1(k,j-1,i),31,1)     &
     2909                                      + IBITS(advc_flags_2(k,j-1,i),0,1)      &
    27492910                                      )                                       &
    27502911                  ) * rho_air_zw(k) * ddy                                     &
    27512912              +   ( w_comp * rho_air(k+1) * ( ibit33 + ibit34 + ibit35 )      &
    27522913                - ( w(k,j,i)   + w(k-1,j,i)   ) * rho_air(k)                  &
    2753                                     * ( IBITS(wall_flags_00(k-1,j,i),1,1)     &
    2754                                       + IBITS(wall_flags_00(k-1,j,i),2,1)     &
    2755                                       + IBITS(wall_flags_00(k-1,j,i),3,1)     &
     2914                                    * ( IBITS(advc_flags_2(k-1,j,i),1,1)      &
     2915                                      + IBITS(advc_flags_2(k-1,j,i),2,1)      &
     2916                                      + IBITS(advc_flags_2(k-1,j,i),3,1)      &
    27562917                                      )                                       &
    27572918                  ) * ddzu(k+1)   &
     
    28142975!--       k index has to be modified near bottom and top, else array
    28152976!--       subscripts will be exceeded.
    2816           ibit35 = IBITS(wall_flags_00(k,j,i),3,1)
    2817           ibit34 = IBITS(wall_flags_00(k,j,i),2,1)
    2818           ibit33 = IBITS(wall_flags_00(k,j,i),1,1)
     2977          ibit35 = IBITS(advc_flags_2(k,j,i),3,1)
     2978          ibit34 = IBITS(advc_flags_2(k,j,i),2,1)
     2979          ibit33 = IBITS(advc_flags_2(k,j,i),1,1)
    28192980
    28202981          k_ppp = k + 3 * ibit35
     
    29193080       USE indices,                                                           &
    29203081           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_max,   &
    2921                   nzt, wall_flags_0
     3082                  nzt, advc_flags_1
    29223083           
    29233084       USE kinds
     
    29833144          DO  k = nzb+1, nzb_max
    29843145
    2985              ibit2 = IBITS(wall_flags_0(k,j,i-1),2,1)
    2986              ibit1 = IBITS(wall_flags_0(k,j,i-1),1,1)
    2987              ibit0 = IBITS(wall_flags_0(k,j,i-1),0,1)
     3146             ibit2 = IBITS(advc_flags_1(k,j,i-1),2,1)
     3147             ibit1 = IBITS(advc_flags_1(k,j,i-1),1,1)
     3148             ibit0 = IBITS(advc_flags_1(k,j,i-1),0,1)
    29883149
    29893150             u_comp                 = u(k,j,i) - u_gtrans
     
    30443205          DO  k = nzb+1, nzb_max
    30453206
    3046              ibit5 = IBITS(wall_flags_0(k,j-1,i),5,1)
    3047              ibit4 = IBITS(wall_flags_0(k,j-1,i),4,1)
    3048              ibit3 = IBITS(wall_flags_0(k,j-1,i),3,1)
     3207             ibit5 = IBITS(advc_flags_1(k,j-1,i),5,1)
     3208             ibit4 = IBITS(advc_flags_1(k,j-1,i),4,1)
     3209             ibit3 = IBITS(advc_flags_1(k,j-1,i),3,1)
    30493210
    30503211             v_comp               = v(k,j,i) - v_gtrans
     
    31073268             DO  k = nzb+1, nzb_max
    31083269
    3109                 ibit2 = IBITS(wall_flags_0(k,j,i),2,1)
    3110                 ibit1 = IBITS(wall_flags_0(k,j,i),1,1)
    3111                 ibit0 = IBITS(wall_flags_0(k,j,i),0,1)
     3270                ibit2 = IBITS(advc_flags_1(k,j,i),2,1)
     3271                ibit1 = IBITS(advc_flags_1(k,j,i),1,1)
     3272                ibit0 = IBITS(advc_flags_1(k,j,i),0,1)
    31123273
    31133274                u_comp    = u(k,j,i+1) - u_gtrans
     
    31423303                                             )
    31433304
    3144                 ibit5 = IBITS(wall_flags_0(k,j,i),5,1)
    3145                 ibit4 = IBITS(wall_flags_0(k,j,i),4,1)
    3146                 ibit3 = IBITS(wall_flags_0(k,j,i),3,1)
     3305                ibit5 = IBITS(advc_flags_1(k,j,i),5,1)
     3306                ibit4 = IBITS(advc_flags_1(k,j,i),4,1)
     3307                ibit3 = IBITS(advc_flags_1(k,j,i),3,1)
    31473308
    31483309                v_comp    = v(k,j+1,i) - v_gtrans
     
    31793340!--             k index has to be modified near bottom and top, else array
    31803341!--             subscripts will be exceeded.
    3181                 ibit8 = IBITS(wall_flags_0(k,j,i),8,1)
    3182                 ibit7 = IBITS(wall_flags_0(k,j,i),7,1)
    3183                 ibit6 = IBITS(wall_flags_0(k,j,i),6,1)
     3342                ibit8 = IBITS(advc_flags_1(k,j,i),8,1)
     3343                ibit7 = IBITS(advc_flags_1(k,j,i),7,1)
     3344                ibit6 = IBITS(advc_flags_1(k,j,i),6,1)
    31843345
    31853346                k_ppp = k + 3 * ibit8
     
    32213382!--             by a not sufficient reduction of divergences near topography.
    32223383                div   =   ( u(k,j,i+1) * ( ibit0 + ibit1 + ibit2 )             &
    3223                           - u(k,j,i)   * ( IBITS(wall_flags_0(k,j,i-1),0,1)    &
    3224                                          + IBITS(wall_flags_0(k,j,i-1),1,1)    &
    3225                                          + IBITS(wall_flags_0(k,j,i-1),2,1)    &
     3384                          - u(k,j,i)   * ( IBITS(advc_flags_1(k,j,i-1),0,1)    &
     3385                                         + IBITS(advc_flags_1(k,j,i-1),1,1)    &
     3386                                         + IBITS(advc_flags_1(k,j,i-1),2,1)    &
    32263387                                         )                                     &
    32273388                          ) * rho_air(k) * ddx                                 &
    32283389                        + ( v(k,j+1,i) * ( ibit3 + ibit4 + ibit5 )             &
    3229                           - v(k,j,i)   * ( IBITS(wall_flags_0(k,j-1,i),3,1)    &
    3230                                          + IBITS(wall_flags_0(k,j-1,i),4,1)    &
    3231                                          + IBITS(wall_flags_0(k,j-1,i),5,1)    &
     3390                          - v(k,j,i)   * ( IBITS(advc_flags_1(k,j-1,i),3,1)    &
     3391                                         + IBITS(advc_flags_1(k,j-1,i),4,1)    &
     3392                                         + IBITS(advc_flags_1(k,j-1,i),5,1)    &
    32323393                                         )                                     &
    32333394                          ) * rho_air(k) * ddy                                 &
     
    32353396                                         ( ibit6 + ibit7 + ibit8 )             &
    32363397                          - w(k-1,j,i) * rho_air_zw(k-1) *                     &
    3237                                          ( IBITS(wall_flags_0(k-1,j,i),6,1)    &
    3238                                          + IBITS(wall_flags_0(k-1,j,i),7,1)    &
    3239                                          + IBITS(wall_flags_0(k-1,j,i),8,1)    &
     3398                                         ( IBITS(advc_flags_1(k-1,j,i),6,1)    &
     3399                                         + IBITS(advc_flags_1(k-1,j,i),7,1)    &
     3400                                         + IBITS(advc_flags_1(k-1,j,i),8,1)    &
    32403401                                         )                                     &     
    32413402                          ) * ddzw(k)
     
    32853446!--             k index has to be modified near bottom and top, else array
    32863447!--             subscripts will be exceeded.
    3287                 ibit8 = IBITS(wall_flags_0(k,j,i),8,1)
    3288                 ibit7 = IBITS(wall_flags_0(k,j,i),7,1)
    3289                 ibit6 = IBITS(wall_flags_0(k,j,i),6,1)
     3448                ibit8 = IBITS(advc_flags_1(k,j,i),8,1)
     3449                ibit7 = IBITS(advc_flags_1(k,j,i),7,1)
     3450                ibit6 = IBITS(advc_flags_1(k,j,i),6,1)
    32903451
    32913452                k_ppp = k + 3 * ibit8
     
    34293590
    34303591
    3431 
    34323592!------------------------------------------------------------------------------!
    34333593! Description:
     
    34503610
    34513611       USE indices,                                                            &
    3452            ONLY:  nxl, nxlu, nxr, nyn, nys, nzb, nzb_max, nzt, wall_flags_0
     3612           ONLY:  nxl, nxlu, nxr, nyn, nys, nzb, nzb_max, nzt, advc_flags_1
    34533613           
    34543614       USE kinds
     
    35073667          DO  k = nzb+1, nzb_max
    35083668
    3509              ibit11 = IBITS(wall_flags_0(k,j,i-1),11,1)
    3510              ibit10 = IBITS(wall_flags_0(k,j,i-1),10,1)
    3511              ibit9  = IBITS(wall_flags_0(k,j,i-1),9,1)
     3669             ibit11 = IBITS(advc_flags_1(k,j,i-1),11,1)
     3670             ibit10 = IBITS(advc_flags_1(k,j,i-1),10,1)
     3671             ibit9  = IBITS(advc_flags_1(k,j,i-1),9,1)
    35123672
    35133673             u_comp(k)                = u(k,j,i) + u(k,j,i-1) - gu
     
    35653725          DO  k = nzb+1, nzb_max
    35663726
    3567              ibit14 = IBITS(wall_flags_0(k,j-1,i),14,1)
    3568              ibit13 = IBITS(wall_flags_0(k,j-1,i),13,1)
    3569              ibit12 = IBITS(wall_flags_0(k,j-1,i),12,1)
     3727             ibit14 = IBITS(advc_flags_1(k,j-1,i),14,1)
     3728             ibit13 = IBITS(advc_flags_1(k,j-1,i),13,1)
     3729             ibit12 = IBITS(advc_flags_1(k,j-1,i),12,1)
    35703730
    35713731             v_comp                 = v(k,j,i) + v(k,j,i-1) - gv
     
    36263786             DO  k = nzb+1, nzb_max
    36273787
    3628                 ibit11 = IBITS(wall_flags_0(k,j,i),11,1)
    3629                 ibit10 = IBITS(wall_flags_0(k,j,i),10,1)
    3630                 ibit9  = IBITS(wall_flags_0(k,j,i),9,1)
     3788                ibit11 = IBITS(advc_flags_1(k,j,i),11,1)
     3789                ibit10 = IBITS(advc_flags_1(k,j,i),10,1)
     3790                ibit9  = IBITS(advc_flags_1(k,j,i),9,1)
    36313791
    36323792                u_comp(k) = u(k,j,i+1) + u(k,j,i)
     
    36613821                                                     )
    36623822
    3663                 ibit14 = IBITS(wall_flags_0(k,j,i),14,1)
    3664                 ibit13 = IBITS(wall_flags_0(k,j,i),13,1)
    3665                 ibit12 = IBITS(wall_flags_0(k,j,i),12,1)
     3823                ibit14 = IBITS(advc_flags_1(k,j,i),14,1)
     3824                ibit13 = IBITS(advc_flags_1(k,j,i),13,1)
     3825                ibit12 = IBITS(advc_flags_1(k,j,i),12,1)
    36663826
    36673827                v_comp    = v(k,j+1,i) + v(k,j+1,i-1) - gv
     
    36983858!--             k index has to be modified near bottom and top, else array
    36993859!--             subscripts will be exceeded.
    3700                 ibit17 = IBITS(wall_flags_0(k,j,i),17,1)
    3701                 ibit16 = IBITS(wall_flags_0(k,j,i),16,1)
    3702                 ibit15 = IBITS(wall_flags_0(k,j,i),15,1)
     3860                ibit17 = IBITS(advc_flags_1(k,j,i),17,1)
     3861                ibit16 = IBITS(advc_flags_1(k,j,i),16,1)
     3862                ibit15 = IBITS(advc_flags_1(k,j,i),15,1)
    37033863
    37043864                k_ppp = k + 3 * ibit17
     
    37423902                div = ( ( u_comp(k) * ( ibit9 + ibit10 + ibit11 )             &
    37433903                - ( u(k,j,i)   + u(k,j,i-1)   )                               &
    3744                                     * ( IBITS(wall_flags_0(k,j,i-1),9,1)      &
    3745                                       + IBITS(wall_flags_0(k,j,i-1),10,1)     &
    3746                                       + IBITS(wall_flags_0(k,j,i-1),11,1)     &
     3904                                    * ( IBITS(advc_flags_1(k,j,i-1),9,1)      &
     3905                                      + IBITS(advc_flags_1(k,j,i-1),10,1)     &
     3906                                      + IBITS(advc_flags_1(k,j,i-1),11,1)     &
    37473907                                      )                                       &
    37483908                  ) * rho_air(k) * ddx                                        &
    37493909               +  ( ( v_comp + gv ) * ( ibit12 + ibit13 + ibit14 )            &
    37503910                  - ( v(k,j,i)   + v(k,j,i-1 )  )                             &
    3751                                     * ( IBITS(wall_flags_0(k,j-1,i),12,1)     &
    3752                                       + IBITS(wall_flags_0(k,j-1,i),13,1)     &
    3753                                       + IBITS(wall_flags_0(k,j-1,i),14,1)     &
     3911                                    * ( IBITS(advc_flags_1(k,j-1,i),12,1)     &
     3912                                      + IBITS(advc_flags_1(k,j-1,i),13,1)     &
     3913                                      + IBITS(advc_flags_1(k,j-1,i),14,1)     &
    37543914                                      )                                       &
    37553915                  ) * rho_air(k) * ddy                                        &
    37563916               +  ( w_comp * rho_air_zw(k) * ( ibit15 + ibit16 + ibit17 )     &
    37573917                - ( w(k-1,j,i) + w(k-1,j,i-1) ) * rho_air_zw(k-1)             &
    3758                                     * ( IBITS(wall_flags_0(k-1,j,i),15,1)     &
    3759                                       + IBITS(wall_flags_0(k-1,j,i),16,1)     &
    3760                                       + IBITS(wall_flags_0(k-1,j,i),17,1)     &
     3918                                    * ( IBITS(advc_flags_1(k-1,j,i),15,1)     &
     3919                                      + IBITS(advc_flags_1(k-1,j,i),16,1)     &
     3920                                      + IBITS(advc_flags_1(k-1,j,i),17,1)     &
    37613921                                      )                                       & 
    37623922                  ) * ddzw(k)   &
     
    38293989!--             k index has to be modified near bottom and top, else array
    38303990!--             subscripts will be exceeded.
    3831                 ibit17 = IBITS(wall_flags_0(k,j,i),17,1)
    3832                 ibit16 = IBITS(wall_flags_0(k,j,i),16,1)
    3833                 ibit15 = IBITS(wall_flags_0(k,j,i),15,1)
     3991                ibit17 = IBITS(advc_flags_1(k,j,i),17,1)
     3992                ibit16 = IBITS(advc_flags_1(k,j,i),16,1)
     3993                ibit15 = IBITS(advc_flags_1(k,j,i),15,1)
    38343994
    38353995                k_ppp = k + 3 * ibit17
     
    39254085    END SUBROUTINE advec_u_ws
    39264086   
    3927    
     4087
    39284088!------------------------------------------------------------------------------!
    39294089! Description:
     
    39464106
    39474107       USE indices,                                                            &
    3948            ONLY:  nxl, nxr, nyn, nys, nysv, nzb, nzb_max, nzt, wall_flags_0
     4108           ONLY:  nxl, nxr, nyn, nys, nysv, nzb, nzb_max, nzt, advc_flags_1
    39494109
    39504110       USE kinds
     
    40034163          DO  k = nzb+1, nzb_max
    40044164
    4005              ibit20 = IBITS(wall_flags_0(k,j,i-1),20,1)
    4006              ibit19 = IBITS(wall_flags_0(k,j,i-1),19,1)
    4007              ibit18 = IBITS(wall_flags_0(k,j,i-1),18,1)
     4165             ibit20 = IBITS(advc_flags_1(k,j,i-1),20,1)
     4166             ibit19 = IBITS(advc_flags_1(k,j,i-1),19,1)
     4167             ibit18 = IBITS(advc_flags_1(k,j,i-1),18,1)
    40084168
    40094169             u_comp                   = u(k,j-1,i) + u(k,j,i) - gu
     
    40614221          DO  k = nzb+1, nzb_max
    40624222
    4063              ibit23 = IBITS(wall_flags_0(k,j-1,i),23,1)
    4064              ibit22 = IBITS(wall_flags_0(k,j-1,i),22,1)
    4065              ibit21 = IBITS(wall_flags_0(k,j-1,i),21,1)
     4223             ibit23 = IBITS(advc_flags_1(k,j-1,i),23,1)
     4224             ibit22 = IBITS(advc_flags_1(k,j-1,i),22,1)
     4225             ibit21 = IBITS(advc_flags_1(k,j-1,i),21,1)
    40664226
    40674227             v_comp(k)              = v(k,j,i) + v(k,j-1,i) - gv
     
    41214281             DO  k = nzb+1, nzb_max
    41224282
    4123                 ibit20 = IBITS(wall_flags_0(k,j,i),20,1)
    4124                 ibit19 = IBITS(wall_flags_0(k,j,i),19,1)
    4125                 ibit18 = IBITS(wall_flags_0(k,j,i),18,1)
     4283                ibit20 = IBITS(advc_flags_1(k,j,i),20,1)
     4284                ibit19 = IBITS(advc_flags_1(k,j,i),19,1)
     4285                ibit18 = IBITS(advc_flags_1(k,j,i),18,1)
    41264286
    41274287                u_comp    = u(k,j-1,i+1) + u(k,j,i+1) - gu
     
    41564316                                              )
    41574317
    4158                 ibit23 = IBITS(wall_flags_0(k,j,i),23,1)
    4159                 ibit22 = IBITS(wall_flags_0(k,j,i),22,1)
    4160                 ibit21 = IBITS(wall_flags_0(k,j,i),21,1)
     4318                ibit23 = IBITS(advc_flags_1(k,j,i),23,1)
     4319                ibit22 = IBITS(advc_flags_1(k,j,i),22,1)
     4320                ibit21 = IBITS(advc_flags_1(k,j,i),21,1)
    41614321
    41624322                v_comp(k) = v(k,j+1,i) + v(k,j,i)
     
    41934353!--             k index has to be modified near bottom and top, else array
    41944354!--             subscripts will be exceeded.
    4195                 ibit26 = IBITS(wall_flags_0(k,j,i),26,1)
    4196                 ibit25 = IBITS(wall_flags_0(k,j,i),25,1)
    4197                 ibit24 = IBITS(wall_flags_0(k,j,i),24,1)
     4355                ibit26 = IBITS(advc_flags_1(k,j,i),26,1)
     4356                ibit25 = IBITS(advc_flags_1(k,j,i),25,1)
     4357                ibit24 = IBITS(advc_flags_1(k,j,i),24,1)
    41984358
    41994359                k_ppp = k + 3 * ibit26
     
    42384398                                       * ( ibit18 + ibit19 + ibit20 )         &
    42394399                - ( u(k,j-1,i)   + u(k,j,i) )                                 &
    4240                                        * ( IBITS(wall_flags_0(k,j,i-1),18,1)  &
    4241                                          + IBITS(wall_flags_0(k,j,i-1),19,1)  &
    4242                                          + IBITS(wall_flags_0(k,j,i-1),20,1)  &
     4400                                       * ( IBITS(advc_flags_1(k,j,i-1),18,1)  &
     4401                                         + IBITS(advc_flags_1(k,j,i-1),19,1)  &
     4402                                         + IBITS(advc_flags_1(k,j,i-1),20,1)  &
    42434403                                         )                                    &
    42444404                  ) * rho_air(k) * ddx                                        &
     
    42464406                                       * ( ibit21 + ibit22 + ibit23 )         &
    42474407                - ( v(k,j,i)     + v(k,j-1,i) )                               &
    4248                                        * ( IBITS(wall_flags_0(k,j-1,i),21,1)  &
    4249                                          + IBITS(wall_flags_0(k,j-1,i),22,1)  &
    4250                                          + IBITS(wall_flags_0(k,j-1,i),23,1)  &
     4408                                       * ( IBITS(advc_flags_1(k,j-1,i),21,1)  &
     4409                                         + IBITS(advc_flags_1(k,j-1,i),22,1)  &
     4410                                         + IBITS(advc_flags_1(k,j-1,i),23,1)  &
    42514411                                         )                                    &
    42524412                  ) * rho_air(k) * ddy                                        &
     
    42544414                                       * ( ibit24 + ibit25 + ibit26 )         &
    42554415                - ( w(k-1,j-1,i) + w(k-1,j,i) ) * rho_air_zw(k-1)             &
    4256                                        * ( IBITS(wall_flags_0(k-1,j,i),24,1)  &
    4257                                          + IBITS(wall_flags_0(k-1,j,i),25,1)  &
    4258                                          + IBITS(wall_flags_0(k-1,j,i),26,1)  &
     4416                                       * ( IBITS(advc_flags_1(k-1,j,i),24,1)  &
     4417                                         + IBITS(advc_flags_1(k-1,j,i),25,1)  &
     4418                                         + IBITS(advc_flags_1(k-1,j,i),26,1)  &
    42594419                                         )                                    &
    42604420                   ) * ddzw(k)   &
     
    43324492!--             k index has to be modified near bottom and top, else array
    43334493!--             subscripts will be exceeded.
    4334                 ibit26 = IBITS(wall_flags_0(k,j,i),26,1)
    4335                 ibit25 = IBITS(wall_flags_0(k,j,i),25,1)
    4336                 ibit24 = IBITS(wall_flags_0(k,j,i),24,1)
     4494                ibit26 = IBITS(advc_flags_1(k,j,i),26,1)
     4495                ibit25 = IBITS(advc_flags_1(k,j,i),25,1)
     4496                ibit24 = IBITS(advc_flags_1(k,j,i),24,1)
    43374497
    43384498                k_ppp = k + 3 * ibit26
     
    44334593   
    44344594   
    4435    
    4436    
    44374595!------------------------------------------------------------------------------!
    44384596! Description:
     
    44554613
    44564614       USE indices,                                                            &
    4457            ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, wall_flags_0,         &
    4458                   wall_flags_00
     4615           ONLY:  nxl, nxr, nyn, nys, nzb, nzb_max, nzt, advc_flags_1,         &
     4616                  advc_flags_2
    44594617
    44604618       USE kinds
     
    45124670          DO  k = nzb+1, nzb_max
    45134671
    4514              ibit29 = IBITS(wall_flags_0(k,j,i-1),29,1)
    4515              ibit28 = IBITS(wall_flags_0(k,j,i-1),28,1)
    4516              ibit27 = IBITS(wall_flags_0(k,j,i-1),27,1)
     4672             ibit29 = IBITS(advc_flags_1(k,j,i-1),29,1)
     4673             ibit28 = IBITS(advc_flags_1(k,j,i-1),28,1)
     4674             ibit27 = IBITS(advc_flags_1(k,j,i-1),27,1)
    45174675
    45184676             u_comp                   = u(k+1,j,i) + u(k,j,i) - gu
     
    45704728          DO  k = nzb+1, nzb_max
    45714729
    4572              ibit32 = IBITS(wall_flags_00(k,j-1,i),0,1)
    4573              ibit31 = IBITS(wall_flags_0(k,j-1,i),31,1)
    4574              ibit30 = IBITS(wall_flags_0(k,j-1,i),30,1)
     4730             ibit32 = IBITS(advc_flags_2(k,j-1,i),0,1)
     4731             ibit31 = IBITS(advc_flags_1(k,j-1,i),31,1)
     4732             ibit30 = IBITS(advc_flags_1(k,j-1,i),30,1)
    45754733
    45764734             v_comp                 = v(k+1,j,i) + v(k,j,i) - gv
     
    46264784!--          The lower flux has to be calculated explicetely for the tendency
    46274785!--          at the first w-level. For topography wall this is done implicitely
    4628 !--          by wall_flags_0.
     4786!--          by advc_flags_1.
    46294787             k         = nzb + 1
    46304788             w_comp    = w(k,j,i) + w(k-1,j,i)
     
    46364794             DO  k = nzb+1, nzb_max
    46374795
    4638                 ibit29 = IBITS(wall_flags_0(k,j,i),29,1)
    4639                 ibit28 = IBITS(wall_flags_0(k,j,i),28,1)
    4640                 ibit27 = IBITS(wall_flags_0(k,j,i),27,1)
     4796                ibit29 = IBITS(advc_flags_1(k,j,i),29,1)
     4797                ibit28 = IBITS(advc_flags_1(k,j,i),28,1)
     4798                ibit27 = IBITS(advc_flags_1(k,j,i),27,1)
    46414799
    46424800                u_comp    = u(k+1,j,i+1) + u(k,j,i+1) - gu
     
    46714829                                              )
    46724830
    4673                 ibit32 = IBITS(wall_flags_00(k,j,i),0,1)
    4674                 ibit31 = IBITS(wall_flags_0(k,j,i),31,1)
    4675                 ibit30 = IBITS(wall_flags_0(k,j,i),30,1)
     4831                ibit32 = IBITS(advc_flags_2(k,j,i),0,1)
     4832                ibit31 = IBITS(advc_flags_1(k,j,i),31,1)
     4833                ibit30 = IBITS(advc_flags_1(k,j,i),30,1)
    46764834
    46774835                v_comp    = v(k+1,j+1,i) + v(k,j+1,i) - gv
     
    47084866!--             k index has to be modified near bottom and top, else array
    47094867!--             subscripts will be exceeded.
    4710                 ibit35 = IBITS(wall_flags_00(k,j,i),3,1)
    4711                 ibit34 = IBITS(wall_flags_00(k,j,i),2,1)
    4712                 ibit33 = IBITS(wall_flags_00(k,j,i),1,1)
     4868                ibit35 = IBITS(advc_flags_2(k,j,i),3,1)
     4869                ibit34 = IBITS(advc_flags_2(k,j,i),2,1)
     4870                ibit33 = IBITS(advc_flags_2(k,j,i),1,1)
    47134871
    47144872                k_ppp = k + 3 * ibit35
     
    47524910                div = ( ( ( u_comp + gu ) * ( ibit27 + ibit28 + ibit29 )      &
    47534911                  - ( u(k+1,j,i) + u(k,j,i)   )                               &
    4754                                     * ( IBITS(wall_flags_0(k,j,i-1),27,1)     &
    4755                                       + IBITS(wall_flags_0(k,j,i-1),28,1)     &
    4756                                       + IBITS(wall_flags_0(k,j,i-1),29,1)     &
     4912                                    * ( IBITS(advc_flags_1(k,j,i-1),27,1)     &
     4913                                      + IBITS(advc_flags_1(k,j,i-1),28,1)     &
     4914                                      + IBITS(advc_flags_1(k,j,i-1),29,1)     &
    47574915                                      )                                       &
    47584916                  ) * rho_air_zw(k) * ddx                                     &
    47594917              +   ( ( v_comp + gv ) * ( ibit30 + ibit31 + ibit32 )            &
    47604918                  - ( v(k+1,j,i) + v(k,j,i)   )                               &
    4761                                     * ( IBITS(wall_flags_0(k,j-1,i),30,1)     &
    4762                                       + IBITS(wall_flags_0(k,j-1,i),31,1)     &
    4763                                       + IBITS(wall_flags_00(k,j-1,i),0,1)     &
     4919                                    * ( IBITS(advc_flags_1(k,j-1,i),30,1)     &
     4920                                      + IBITS(advc_flags_1(k,j-1,i),31,1)     &
     4921                                      + IBITS(advc_flags_2(k,j-1,i),0,1)      &
    47644922                                      )                                       &
    47654923                  ) * rho_air_zw(k) * ddy                                     &
    47664924              +   ( w_comp * rho_air(k+1) * ( ibit33 + ibit34 + ibit35 )      &
    47674925                - ( w(k,j,i)   + w(k-1,j,i)   ) * rho_air(k)                  &
    4768                                     * ( IBITS(wall_flags_00(k-1,j,i),1,1)     &
    4769                                       + IBITS(wall_flags_00(k-1,j,i),2,1)     &
    4770                                       + IBITS(wall_flags_00(k-1,j,i),3,1)     &
     4926                                    * ( IBITS(advc_flags_2(k-1,j,i),1,1)      &
     4927                                      + IBITS(advc_flags_2(k-1,j,i),2,1)      &
     4928                                      + IBITS(advc_flags_2(k-1,j,i),3,1)      &
    47714929                                      )                                       &
    47724930                  ) * ddzu(k+1)   &
     
    48314989!--             k index has to be modified near bottom and top, else array
    48324990!--             subscripts will be exceeded.
    4833                 ibit35 = IBITS(wall_flags_00(k,j,i),3,1)
    4834                 ibit34 = IBITS(wall_flags_00(k,j,i),2,1)
    4835                 ibit33 = IBITS(wall_flags_00(k,j,i),1,1)
     4991                ibit35 = IBITS(advc_flags_2(k,j,i),3,1)
     4992                ibit34 = IBITS(advc_flags_2(k,j,i),2,1)
     4993                ibit33 = IBITS(advc_flags_2(k,j,i),1,1)
    48364994
    48374995                k_ppp = k + 3 * ibit35
     
    49165074    END SUBROUTINE advec_w_ws
    49175075
    4918 
    49195076 END MODULE advec_ws
  • palm/trunk/SOURCE/average_3d_data.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new surface concept - additional ghost point exchange
     23! of surface variable required
    2324!
    2425! Former revisions:
     
    104105
    105106    USE control_parameters,                                                    &
    106         ONLY:  average_count_3d, doav, doav_n, urban_surface, varnamelength
     107        ONLY:  average_count_3d, doav, doav_n, land_surface, urban_surface,    &
     108               varnamelength
    107109
    108110    USE cpulog,                                                                &
     
    110112
    111113    USE indices,                                                               &
    112         ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
     114        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
    113115
    114116    USE kinds
    115117
    116118    USE land_surface_model_mod,                                                &
    117         ONLY:  land_surface, lsm_3d_data_averaging
     119        ONLY:  lsm_3d_data_averaging
    118120
    119121    USE radiation_model_mod,                                                   &
     
    171173                ENDDO
    172174             ENDDO
     175             CALL exchange_horiz_2d( qsws_av, nbgp )
    173176
    174177          CASE ( 'lpt' )
     
    203206                ENDDO
    204207             ENDDO
     208             CALL exchange_horiz_2d( ol_av, nbgp )
    205209
    206210          CASE ( 'p' )
     
    354358                ENDDO
    355359             ENDDO
     360             CALL exchange_horiz_2d( shf_av, nbgp )
    356361
    357362          CASE ( 'ssws*' )
     
    361366                ENDDO
    362367             ENDDO
     368             CALL exchange_horiz_2d( ssws_av, nbgp )
    363369
    364370          CASE ( 't*' )
     
    368374                ENDDO
    369375             ENDDO
     376             CALL exchange_horiz_2d( ts_av, nbgp )
    370377
    371378          CASE ( 'u' )
     
    384391                ENDDO
    385392             ENDDO
     393             CALL exchange_horiz_2d( us_av, nbgp )
    386394
    387395          CASE ( 'v' )
     
    418426                ENDDO
    419427             ENDDO
     428             CALL exchange_horiz_2d( z0_av, nbgp )
    420429
    421430          CASE ( 'z0h*' )
     
    425434                ENDDO
    426435             ENDDO
     436             CALL exchange_horiz_2d( z0h_av, nbgp )
    427437!             
    428438!--       Block of urban surface model outputs   
  • palm/trunk/SOURCE/boundary_conds.f90

    r2119 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Set boundary conditions on topography top using flag method.
    2323!
    2424! Former revisions:
     
    168168    USE indices,                                                               &
    169169        ONLY:  nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,             &
    170                nzb, nzb_s_inner, nzb_w_inner, nzt
     170               nzb, nzt, wall_flags_0
    171171
    172172    USE kinds
     
    177177        ONLY : nesting_mode
    178178
     179    USE surface_mod,                                                           &
     180        ONLY :  bc_h
    179181
    180182    IMPLICIT NONE
    181183
    182     INTEGER(iwp) ::  i !<
    183     INTEGER(iwp) ::  j !<
    184     INTEGER(iwp) ::  k !<
     184    INTEGER(iwp) ::  i  !< grid index x direction
     185    INTEGER(iwp) ::  j  !< grid index y direction
     186    INTEGER(iwp) ::  k  !< grid index z direction
     187    INTEGER(iwp) ::  kb !< variable to set respective boundary value, depends on facing.
     188    INTEGER(iwp) ::  l  !< running index boundary type, for up- and downward-facing walls
     189    INTEGER(iwp) ::  m  !< running index surface elements
    185190
    186191    REAL(wp)    ::  c_max !<
     
    194199       v_p(nzb,:,:) = v_p(nzb+1,:,:)
    195200    ENDIF
    196 
    197     DO  i = nxlg, nxrg
    198        DO  j = nysg, nyng
    199           w_p(nzb_w_inner(j,i),j,i) = 0.0_wp
     201!
     202!-- Set zero vertical velocity at topography top (l=0), or bottom (l=1) in case
     203!-- of downward-facing surfaces.
     204    DO  l = 0, 1
     205!
     206!--    Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     207!--    for downward-facing surfaces at topography bottom (k+1).
     208       kb = MERGE( -1, 1, l == 0 )
     209       !$OMP PARALLEL DO PRIVATE( i, j, k )
     210       DO  m = 1, bc_h(l)%ns
     211          i = bc_h(l)%i(m)           
     212          j = bc_h(l)%j(m)
     213          k = bc_h(l)%k(m)
     214          w_p(k+kb,j,i) = 0.0_wp
    200215       ENDDO
    201216    ENDDO
     
    216231
    217232!
    218 !-- Temperature at bottom boundary.
     233!-- Temperature at bottom and top boundary.
    219234!-- In case of coupled runs (ibc_pt_b = 2) the temperature is given by
    220235!-- the sea surface temperature of the coupled ocean model.
     236!-- Dirichlet
    221237    IF ( ibc_pt_b == 0 )  THEN
    222        DO  i = nxlg, nxrg
    223           DO  j = nysg, nyng
    224              pt_p(nzb_s_inner(j,i),j,i) = pt(nzb_s_inner(j,i),j,i)
     238       DO  l = 0, 1
     239!
     240!--       Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     241!--       for downward-facing surfaces at topography bottom (k+1).
     242          kb = MERGE( -1, 1, l == 0 )
     243          !$OMP PARALLEL DO PRIVATE( i, j, k )
     244          DO  m = 1, bc_h(l)%ns
     245             i = bc_h(l)%i(m)           
     246             j = bc_h(l)%j(m)
     247             k = bc_h(l)%k(m)
     248             pt_p(k+kb,j,i) = pt(k+kb,j,i)
    225249          ENDDO
    226250       ENDDO
     251!
     252!-- Neumann, zero-gradient
    227253    ELSEIF ( ibc_pt_b == 1 )  THEN
    228        DO  i = nxlg, nxrg
    229           DO  j = nysg, nyng
    230              pt_p(nzb_s_inner(j,i),j,i) = pt_p(nzb_s_inner(j,i)+1,j,i)
     254       DO  l = 0, 1
     255!
     256!--       Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     257!--       for downward-facing surfaces at topography bottom (k+1).
     258          kb = MERGE( -1, 1, l == 0 )
     259          !$OMP PARALLEL DO PRIVATE( i, j, k )
     260          DO  m = 1, bc_h(l)%ns
     261             i = bc_h(l)%i(m)           
     262             j = bc_h(l)%j(m)
     263             k = bc_h(l)%k(m)
     264             pt_p(k+kb,j,i) = pt_p(k,j,i)
    231265          ENDDO
    232266       ENDDO
     
    253287!-- Generally Neumann conditions with de/dz=0 are assumed
    254288    IF ( .NOT. constant_diffusion )  THEN
    255        DO  i = nxlg, nxrg
    256           DO  j = nysg, nyng
    257              e_p(nzb_s_inner(j,i),j,i) = e_p(nzb_s_inner(j,i)+1,j,i)
     289
     290       DO  l = 0, 1
     291!
     292!--       Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     293!--       for downward-facing surfaces at topography bottom (k+1).
     294          kb = MERGE( -1, 1, l == 0 )
     295          !$OMP PARALLEL DO PRIVATE( i, j, k )
     296          DO  m = 1, bc_h(l)%ns
     297             i = bc_h(l)%i(m)           
     298             j = bc_h(l)%j(m)
     299             k = bc_h(l)%k(m)
     300             e_p(k+kb,j,i) = e_p(k,j,i)
    258301          ENDDO
    259302       ENDDO
     303
    260304       IF ( .NOT. nest_domain )  THEN
    261305          e_p(nzt+1,:,:) = e_p(nzt,:,:)
     
    268312!
    269313!--    Bottom boundary: Neumann condition because salinity flux is always
    270 !--    given
    271        DO  i = nxlg, nxrg
    272           DO  j = nysg, nyng
    273              sa_p(nzb_s_inner(j,i),j,i) = sa_p(nzb_s_inner(j,i)+1,j,i)
     314!--    given.
     315       DO  l = 0, 1
     316!
     317!--       Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     318!--       for downward-facing surfaces at topography bottom (k+1).
     319          kb = MERGE( -1, 1, l == 0 )
     320          !$OMP PARALLEL DO PRIVATE( i, j, k )
     321          DO  m = 1, bc_h(l)%ns
     322             i = bc_h(l)%i(m)           
     323             j = bc_h(l)%j(m)
     324             k = bc_h(l)%k(m)
     325             sa_p(k+kb,j,i) = sa_p(k,j,i)
    274326          ENDDO
    275327       ENDDO
    276 
    277328!
    278329!--    Top boundary: Dirichlet or Neumann
     
    291342!
    292343!--    Surface conditions for constant_humidity_flux
     344!--    Run loop over all non-natural and natural walls. Note, in wall-datatype
     345!--    the k coordinate belongs to the atmospheric grid point, therefore, set
     346!--    q_p at k-1
    293347       IF ( ibc_q_b == 0 ) THEN
    294           DO  i = nxlg, nxrg
    295              DO  j = nysg, nyng
    296                 q_p(nzb_s_inner(j,i),j,i) = q(nzb_s_inner(j,i),j,i)
     348
     349          DO  l = 0, 1
     350!
     351!--          Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     352!--          for downward-facing surfaces at topography bottom (k+1).
     353             kb = MERGE( -1, 1, l == 0 )
     354             !$OMP PARALLEL DO PRIVATE( i, j, k )
     355             DO  m = 1, bc_h(l)%ns
     356                i = bc_h(l)%i(m)           
     357                j = bc_h(l)%j(m)
     358                k = bc_h(l)%k(m)
     359                q_p(k+kb,j,i) = q(k+kb,j,i)
    297360             ENDDO
    298361          ENDDO
     362         
    299363       ELSE
    300           DO  i = nxlg, nxrg
    301              DO  j = nysg, nyng
    302                 q_p(nzb_s_inner(j,i),j,i) = q_p(nzb_s_inner(j,i)+1,j,i)
     364          !$OMP PARALLEL DO PRIVATE( i, j, k )
     365          DO  m = 1, bc_h(0)%ns
     366             i = bc_h(0)%i(m)           
     367             j = bc_h(0)%j(m)
     368             k = bc_h(0)%k(m)
     369             q_p(k-1,j,i) = q_p(k,j,i)
     370          ENDDO
     371         
     372          DO  l = 0, 1
     373!
     374!--          Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     375!--          for downward-facing surfaces at topography bottom (k+1).
     376             kb = MERGE( -1, 1, l == 0 )
     377             !$OMP PARALLEL DO PRIVATE( i, j, k )
     378             DO  m = 1, bc_h(l)%ns
     379                i = bc_h(l)%i(m)           
     380                j = bc_h(l)%j(m)
     381                k = bc_h(l)%k(m)
     382                q_p(k+kb,j,i) = q_p(k,j,i)
    303383             ENDDO
    304384          ENDDO
     
    315395!             
    316396!--       Surface conditions rain water (Dirichlet)
    317           DO  i = nxlg, nxrg
    318              DO  j = nysg, nyng
    319                 qr_p(nzb_s_inner(j,i),j,i) = 0.0_wp
    320                 nr_p(nzb_s_inner(j,i),j,i) = 0.0_wp
    321              ENDDO
     397!--       Run loop over all non-natural and natural walls. Note, in wall-datatype
     398!--       the k coordinate belongs to the atmospheric grid point, therefore, set
     399!--       qr_p and nr_p at k-1
     400          !$OMP PARALLEL DO PRIVATE( i, j, k )
     401          DO  m = 1, bc_h(0)%ns
     402             i = bc_h(0)%i(m)           
     403             j = bc_h(0)%j(m)
     404             k = bc_h(0)%k(m)
     405             qr_p(k-1,j,i) = 0.0_wp
     406             nr_p(k-1,j,i) = 0.0_wp
    322407          ENDDO
    323408!
     
    334419!
    335420!--    Surface conditions for constant_humidity_flux
     421!--    Run loop over all non-natural and natural walls. Note, in wall-datatype
     422!--    the k coordinate belongs to the atmospheric grid point, therefore, set
     423!--    s_p at k-1
    336424       IF ( ibc_s_b == 0 ) THEN
    337           DO  i = nxlg, nxrg
    338              DO  j = nysg, nyng
    339                 s_p(nzb_s_inner(j,i),j,i) = s(nzb_s_inner(j,i),j,i)
     425         
     426          DO  l = 0, 1
     427!
     428!--          Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     429!--          for downward-facing surfaces at topography bottom (k+1).
     430             kb = MERGE( -1, 1, l == 0 )
     431             !$OMP PARALLEL DO PRIVATE( i, j, k )
     432             DO  m = 1, bc_h(l)%ns
     433                i = bc_h(l)%i(m)           
     434                j = bc_h(l)%j(m)
     435                k = bc_h(l)%k(m)
     436                s_p(k+kb,j,i) = s(k+kb,j,i)
    340437             ENDDO
    341438          ENDDO
     439         
    342440       ELSE
    343           DO  i = nxlg, nxrg
    344              DO  j = nysg, nyng
    345                 s_p(nzb_s_inner(j,i),j,i) = s_p(nzb_s_inner(j,i)+1,j,i)
     441          !$OMP PARALLEL DO PRIVATE( i, j, k )
     442          DO  m = 1, bc_h(0)%ns
     443             i = bc_h(0)%i(m)           
     444             j = bc_h(0)%j(m)
     445             k = bc_h(0)%k(m)
     446             s_p(k-1,j,i) = s_p(k,j,i)
     447          ENDDO
     448         
     449          DO  l = 0, 1
     450!
     451!--          Set kb, for upward-facing surfaces value at topography top (k-1) is set,
     452!--          for downward-facing surfaces at topography bottom (k+1).
     453             kb = MERGE( -1, 1, l == 0 )
     454             !$OMP PARALLEL DO PRIVATE( i, j, k )
     455             DO  m = 1, bc_h(l)%ns
     456                i = bc_h(l)%i(m)           
     457                j = bc_h(l)%j(m)
     458                k = bc_h(l)%k(m)
     459                s_p(k+kb,j,i) = s_p(k,j,i)
    346460             ENDDO
    347461          ENDDO
     
    394508    IF ( outflow_s )  THEN
    395509       pt_p(:,nys-1,:)     = pt_p(:,nys,:)
    396        IF ( .NOT. constant_diffusion     )  e_p(:,nys-1,:) = e_p(:,nys,:)
     510       IF ( .NOT. constant_diffusion )  e_p(:,nys-1,:) = e_p(:,nys,:)
    397511       IF ( humidity )  THEN
    398512          q_p(:,nys-1,:) = q_p(:,nys,:)
  • palm/trunk/SOURCE/buoyancy.f90

    r2119 r2232  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    131131       USE indices,                                                            &
    132132           ONLY:  nxl, nxlg, nxlu, nxr, nxrg, nyn, nyng, nys, nysg, nzb,       &
    133                   nzb_s_inner, nzt
     133                  nzt, wall_flags_0
    134134
    135135       USE kinds
     
    157157          DO  i = nxl, nxr
    158158             DO  j = nys, nyn
    159                 DO  k = nzb_s_inner(j,i)+1, nzt-1
    160                    tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5_wp * &
    161                           (                                                    &
     159                DO  k = nzb+1, nzt-1
     160                   tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5_wp *  &
     161                          (                                                     &
    162162                             ( var(k,j,i)   - ref_state(k) )   / ref_state(k) + &
    163163                             ( var(k+1,j,i) - ref_state(k+1) ) / ref_state(k+1) &
    164                           )
     164                          ) * MERGE( 1.0_wp, 0.0_wp,                            &
     165                                     BTEST( wall_flags_0(k,j,i), 0 ) )
    165166                ENDDO
    166167             ENDDO
     
    178179             DO  i = nxlu, nxr
    179180                DO  j = nys, nyn
    180                    DO  k = nzb_s_inner(j,i)+1, nzt-1
    181                       tend(k,j,i) = tend(k,j,i) + g * sin_alpha_surface *      &
     181                   DO  k = nzb+1, nzt-1
     182                      tend(k,j,i) = tend(k,j,i) + g * sin_alpha_surface *         &
    182183                           0.5_wp * ( ( pt(k,j,i-1)         + pt(k,j,i)         ) &
    183184                                    - ( pt_slope_ref(k,i-1) + pt_slope_ref(k,i) ) &
    184                                     ) / pt_surface
     185                                    ) / pt_surface                                &
     186                                      * MERGE( 1.0_wp, 0.0_wp,                    &
     187                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    185188                   ENDDO
    186189                ENDDO
     
    191194             DO  i = nxl, nxr
    192195                DO  j = nys, nyn
    193                    DO  k = nzb_s_inner(j,i)+1, nzt-1
    194                       tend(k,j,i) = tend(k,j,i) + g * cos_alpha_surface *      &
     196                   DO  k = nzb+1, nzt-1
     197                      tend(k,j,i) = tend(k,j,i) + g * cos_alpha_surface *         &
    195198                           0.5_wp * ( ( pt(k,j,i)         + pt(k+1,j,i)         ) &
    196199                                    - ( pt_slope_ref(k,i) + pt_slope_ref(k+1,i) ) &
    197                                     ) / pt_surface
     200                                    ) / pt_surface                                &
     201                                      * MERGE( 1.0_wp, 0.0_wp,                    &
     202                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    198203                   ENDDO
    199204                ENDDO
     
    231236
    232237       USE indices,                                                            &
    233            ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner, nzt
     238           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt, wall_flags_0
    234239
    235240       USE kinds
     
    256261!
    257262!--       Normal case: horizontal surface
    258           DO  k = nzb_s_inner(j,i)+1, nzt-1
     263          DO  k = nzb+1, nzt-1
    259264              tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5_wp * (    &
    260265                        ( var(k,j,i)   - ref_state(k)   ) / ref_state(k)   +   &
    261266                        ( var(k+1,j,i) - ref_state(k+1) ) / ref_state(k+1)     &
    262                                                                           )
     267                                                                          )    &
     268                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     269                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    263270          ENDDO
    264271
     
    272279          IF ( wind_component == 1 )  THEN
    273280
    274              DO  k = nzb_s_inner(j,i)+1, nzt-1
    275                 tend(k,j,i) = tend(k,j,i) + g * sin_alpha_surface *            &
     281             DO  k = nzb+1, nzt-1
     282                tend(k,j,i) = tend(k,j,i) + g * sin_alpha_surface *               &
    276283                           0.5_wp * ( ( pt(k,j,i-1)         + pt(k,j,i)         ) &
    277284                                    - ( pt_slope_ref(k,i-1) + pt_slope_ref(k,i) ) &
    278                                     ) / pt_surface
     285                                    ) / pt_surface                                &
     286                                      * MERGE( 1.0_wp, 0.0_wp,                    &
     287                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    279288             ENDDO
    280289
    281290          ELSEIF ( wind_component == 3 )  THEN
    282291
    283              DO  k = nzb_s_inner(j,i)+1, nzt-1
    284                 tend(k,j,i) = tend(k,j,i) + g * cos_alpha_surface *            &
     292             DO  k = nzb+1, nzt-1
     293                tend(k,j,i) = tend(k,j,i) + g * cos_alpha_surface *               &
    285294                           0.5_wp * ( ( pt(k,j,i)         + pt(k+1,j,i)         ) &
    286295                                    - ( pt_slope_ref(k,i) + pt_slope_ref(k+1,i) ) &
    287                                     ) / pt_surface
     296                                    ) / pt_surface                                &
     297                                      * MERGE( 1.0_wp, 0.0_wp,                    &
     298                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    288299             ENDDO
    289300
  • palm/trunk/SOURCE/calc_liquid_water_content.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    8383
    8484    USE indices,                                                               &
    85         ONLY:  nxlg, nxrg, nyng, nysg, nzb_s_inner, nzt
     85        ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt, wall_flags_0
    8686
    8787    USE kinds
     
    103103    DO  i = nxlg, nxrg
    104104       DO  j = nysg, nyng
    105           DO  k = nzb_s_inner(j,i)+1, nzt
     105          DO  k = nzb+1, nzt
    106106
    107107!
     
    131131             IF ( microphysics_seifert )  THEN
    132132                IF ( ( q(k,j,i) - q_s - qr(k,j,i) ) > 0.0_wp ) THEN
    133                    qc(k,j,i) = q(k,j,i) - q_s - qr(k,j,i)
    134                    ql(k,j,i) = qc(k,j,i) + qr(k,j,i)
     133                   qc(k,j,i) = ( q(k,j,i) - q_s - qr(k,j,i) )                  &
     134                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     135                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     136                   ql(k,j,i) = ( qc(k,j,i) + qr(k,j,i) )                       &
     137                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     138                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    135139                ELSE
    136140                   IF ( q(k,j,i) < qr(k,j,i) )  q(k,j,i) = qr(k,j,i)
    137141                   qc(k,j,i) = 0.0_wp
    138                    ql(k,j,i) = qr(k,j,i)
     142                   ql(k,j,i) = qr(k,j,i)                                       &
     143                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     144                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    139145                ENDIF
    140146             ELSE
    141147                IF ( ( q(k,j,i) - q_s ) > 0.0_wp ) THEN
    142                    qc(k,j,i) = q(k,j,i) - q_s
    143                    ql(k,j,i) = qc(k,j,i)
     148                   qc(k,j,i) = ( q(k,j,i) - q_s )                              &
     149                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     150                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     151                   ql(k,j,i) = qc(k,j,i)                                       &
     152                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     153                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    144154                ELSE
    145155                   qc(k,j,i) = 0.0_wp
  • palm/trunk/SOURCE/calc_mean_profile.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    7575
    7676       USE indices,                                                            &
    77            ONLY:  ngp_2dh_s_inner, nxl, nxr, nyn, nys, nzb, nzb_s_inner, nzt
     77           ONLY:  ngp_2dh_s_inner, nxl, nxr, nyn, nys, nzb, nzb, nzt,          &
     78                  wall_flags_0
    7879
    7980       USE kinds
     
    118119          DO  i = nxl, nxr
    119120             DO  j =  nys, nyn
    120                 DO  k = nzb_s_inner(j,i), nzt+1
    121                    sums_l(k,pr,tn) = sums_l(k,pr,tn) + var(k,j,i)
     121                DO  k = nzb, nzt+1
     122                   sums_l(k,pr,tn) = sums_l(k,pr,tn) + var(k,j,i)              &
     123                                     * MERGE( 1.0_wp, 0.0_wp,                  &
     124                                              BTEST( wall_flags_0(k,j,i), 22 ) )
    122125                ENDDO
    123126             ENDDO
  • palm/trunk/SOURCE/calc_radiation.f90

    r2101 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    105105
    106106       USE indices,                                                            &
    107            ONLY:  nxl, nxr, nyn, nys, nzb, nzb_s_inner, nzt
     107           ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
    108108
    109109       USE kinds
     
    153153             blackbody_emission(nzb) = sigma * temperature**4
    154154
    155              DO  k = nzb_s_inner(j,i)+1, nzt
     155             DO  k = nzb+1, nzt
    156156
    157157                k_help = ( nzt+nzb+1 ) - k
     
    163163
    164164                temperature     = pt(k,j,i) * t_d_pt(k) + l_d_cp * ql(k,j,i)
    165                 blackbody_emission(k) = sigma * temperature**4
     165                blackbody_emission(k) = sigma * temperature**4                 &
     166                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     167                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    166168
    167169             ENDDO
     
    179181             impinging_flux_at_top = blackbody_emission(nzb) - 100.0_wp
    180182
    181              DO  k = nzb_s_inner(j,i)+1, nzt
     183             DO  k = nzb+1, nzt
    182184!
    183185!--             Save some computational time, but this may cause load
     
    222224                   tend(k,j,i) = tend(k,j,i) -                                 &
    223225                                ( pt_d_t(k) / ( rho_surface * cp ) *           &
    224                                   ( df_p - df_m ) / dzw(k) )
     226                                  ( df_p - df_m ) / dzw(k) )                   &
     227                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     228                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    225229
    226230                ENDIF
     
    250254
    251255       USE indices,                                                            &
    252            ONLY:  nzb, nzb_s_inner, nzt
     256           ONLY:  nzb, nzt, wall_flags_0
    253257
    254258       USE kinds
     
    295299       blackbody_emission(nzb) = sigma * temperature**4
    296300
    297        DO  k = nzb_s_inner(j,i)+1, nzt
     301       DO  k = nzb+1, nzt
    298302          k_help = ( nzt+nzb+1 ) - k
    299303          lwp_ground(k)   = lwp_ground(k-1) + rho_surface * ql(k,j,i) * dzw(k)
     
    303307
    304308          temperature     = pt(k,j,i) * t_d_pt(k) + l_d_cp * ql(k,j,i)
    305           blackbody_emission(k) = sigma * temperature**4
     309          blackbody_emission(k) = sigma * temperature**4                       &
     310                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     311                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    306312
    307313       ENDDO
     
    318324       impinging_flux_at_top = blackbody_emission(nzb) - 100.0_wp
    319325
    320        DO  k = nzb_s_inner(j,i)+1, nzt
     326       DO  k = nzb+1, nzt
    321327!
    322328!--       Store some computational time,
     
    356362!--          Compute tendency term         
    357363             tend(k,j,i) = tend(k,j,i) - ( pt_d_t(k) / ( rho_surface * cp ) *  &
    358                                          ( df_p - df_m ) / dzw(k) )
     364                                         ( df_p - df_m ) / dzw(k) )            &
     365                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     366                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    359367
    360368          ENDIF
  • palm/trunk/SOURCE/check_parameters.f90

    r2210 r2232  
    466466    USE indices
    467467    USE land_surface_model_mod,                                                &
    468         ONLY: land_surface, lsm_check_data_output, lsm_check_data_output_pr,   &
     468        ONLY: lsm_check_data_output, lsm_check_data_output_pr,                 &
    469469              lsm_check_parameters
    470470
     
    859859                        'momentum_advec = "ws-scheme"'
    860860       CALL message( 'check_parameters', 'PA0447', 1, 2, 0, 6, 0 )
     861    ENDIF
     862    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
     863         TRIM( psolver ) == 'multigrid' )  THEN
     864       message_string = 'Anelastic approximation currently only supports: ' // &
     865                        'psolver = "poisfft", ' // &
     866                        'psolver = "sor" and ' // &
     867                        'psolver = "multigrid_noopt"'
     868       CALL message( 'check_parameters', 'PA0448', 1, 2, 0, 6, 0 )
    861869    ENDIF
    862870    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
  • palm/trunk/SOURCE/coriolis.f90

    r2119 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    102102           
    103103       USE indices,                                                            &
    104            ONLY:  nxl, nxlu, nxr, nyn, nys, nysv, nzb_u_inner, nzb_v_inner,    &
    105                   nzb_w_inner, nzt
     104           ONLY:  nxl, nxlu, nxr, nyn, nys, nysv, nzb, nzt, wall_flags_0
    106105                   
    107106       USE kinds
     
    110109
    111110       INTEGER(iwp) ::  component  !<
    112        INTEGER(iwp) ::  i          !<
    113        INTEGER(iwp) ::  j          !<
    114        INTEGER(iwp) ::  k          !<
    115 
    116 
     111       INTEGER(iwp) ::  i          !< running index x direction
     112       INTEGER(iwp) ::  j          !< running index y direction
     113       INTEGER(iwp) ::  k          !< running index z direction
     114
     115       REAL(wp)     ::  flag       !< flag to mask topography
    117116!
    118117!--    Compute Coriolis terms for the three velocity components
     
    124123             DO  i = nxlu, nxr
    125124                DO  j = nys, nyn
    126                    DO  k = nzb_u_inner(j,i)+1, nzt
     125                   DO  k = nzb+1, nzt
     126!
     127!--                    Predetermine flag to mask topography
     128                      flag = MERGE( 1.0_wp, 0.0_wp,                            &
     129                                    BTEST( wall_flags_0(k,j,i), 1 ) )
     130
    127131                      tend(k,j,i) = tend(k,j,i) + f  *    ( 0.25_wp *          &
    128132                                   ( v(k,j,i-1) + v(k,j,i) + v(k,j+1,i-1) +    &
    129                                      v(k,j+1,i) ) - vg(k) )                    &
     133                                     v(k,j+1,i) ) - vg(k)   ) * flag           &
    130134                                                - fs *    ( 0.25_wp *          &
    131135                                   ( w(k-1,j,i-1) + w(k-1,j,i) + w(k,j,i-1) +  &
    132                                      w(k,j,i)   ) &
    133                                                           )
     136                                     w(k,j,i)   )                              &
     137                                                          )   * flag
    134138                   ENDDO
    135139                ENDDO
     
    141145             DO  i = nxl, nxr
    142146                DO  j = nysv, nyn
    143                    DO  k = nzb_v_inner(j,i)+1, nzt
     147                   DO  k = nzb+1, nzt
    144148                      tend(k,j,i) = tend(k,j,i) - f *     ( 0.25_wp *          &
    145149                                   ( u(k,j-1,i) + u(k,j,i) + u(k,j-1,i+1) +    &
    146                                      u(k,j,i+1) ) - ug(k) )
     150                                     u(k,j,i+1) ) - ug(k) ) *                  &
     151                                      MERGE( 1.0_wp, 0.0_wp,                   &
     152                                             BTEST( wall_flags_0(k,j,i), 2 ) )
    147153                   ENDDO
    148154                ENDDO
     
    154160             DO  i = nxl, nxr
    155161                DO  j = nys, nyn
    156                    DO  k = nzb_w_inner(j,i)+1, nzt
     162                   DO  k = nzb+1, nzt
    157163                      tend(k,j,i) = tend(k,j,i) + fs * 0.25_wp *               &
    158164                                   ( u(k,j,i) + u(k+1,j,i) + u(k,j,i+1) +      &
    159                                      u(k+1,j,i+1) )
     165                                     u(k+1,j,i+1) ) *                          &
     166                                      MERGE( 1.0_wp, 0.0_wp,                   &
     167                                             BTEST( wall_flags_0(k,j,i), 3 ) )
    160168                   ENDDO
    161169                ENDDO
     
    186194           
    187195       USE indices,                                                            &
    188            ONLY:  nzb_u_inner, nzb_v_inner, nzb_w_inner, nzt
     196           ONLY:  nzb, nzt, wall_flags_0
    189197           
    190198       USE kinds
     
    193201
    194202       INTEGER(iwp) ::  component  !<
    195        INTEGER(iwp) ::  i          !<
    196        INTEGER(iwp) ::  j          !<
    197        INTEGER(iwp) ::  k          !<
     203       INTEGER(iwp) ::  i          !< running index x direction
     204       INTEGER(iwp) ::  j          !< running index y direction
     205       INTEGER(iwp) ::  k          !< running index z direction
     206
     207       REAL(wp)     ::  flag       !< flag to mask topography
    198208
    199209!
     
    204214!--       u-component
    205215          CASE ( 1 )
    206              DO  k = nzb_u_inner(j,i)+1, nzt
    207                 tend(k,j,i) = tend(k,j,i) + f  *    ( 0.25_wp *                &
     216             DO  k = nzb+1, nzt
     217!
     218!--             Predetermine flag to mask topography
     219                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 1 ) )
     220
     221                tend(k,j,i) = tend(k,j,i) + f  *     ( 0.25_wp *               &
    208222                                ( v(k,j,i-1) + v(k,j,i) + v(k,j+1,i-1) +       &
    209                                   v(k,j+1,i) ) - vg(k) )                       &
     223                                  v(k,j+1,i) ) - vg(k) ) * flag                &
    210224                                          - fs *    ( 0.25_wp *                &
    211225                                ( w(k-1,j,i-1) + w(k-1,j,i) + w(k,j,i-1) +     &
    212                                   w(k,j,i)   ) )
     226                                  w(k,j,i)   )      ) * flag
    213227             ENDDO
    214228
     
    216230!--       v-component
    217231          CASE ( 2 )
    218              DO  k = nzb_v_inner(j,i)+1, nzt
    219                 tend(k,j,i) = tend(k,j,i) - f *     ( 0.25_wp *                &
     232             DO  k = nzb+1, nzt
     233                tend(k,j,i) = tend(k,j,i) - f *        ( 0.25_wp *             &
    220234                                ( u(k,j-1,i) + u(k,j,i) + u(k,j-1,i+1) +       &
    221                                   u(k,j,i+1) ) - ug(k) )
     235                                  u(k,j,i+1) ) - ug(k) ) *                     &
     236                                      MERGE( 1.0_wp, 0.0_wp,                   &
     237                                             BTEST( wall_flags_0(k,j,i), 2 ) )
    222238             ENDDO
    223239
     
    225241!--       w-component
    226242          CASE ( 3 )
    227              DO  k = nzb_w_inner(j,i)+1, nzt
     243             DO  k = nzb+1, nzt
    228244                tend(k,j,i) = tend(k,j,i) + fs * 0.25_wp *                     &
    229245                                ( u(k,j,i) + u(k+1,j,i) + u(k,j,i+1) +         &
    230                                   u(k+1,j,i+1) )
     246                                  u(k+1,j,i+1) ) *                             &
     247                                      MERGE( 1.0_wp, 0.0_wp,                   &
     248                                             BTEST( wall_flags_0(k,j,i), 3 ) )
    231249             ENDDO
    232250
  • palm/trunk/SOURCE/data_output_2d.f90

    r2191 r2232  
    2020! Current revisions:
    2121! -----------------
     22! Adjustments to new surface concept
    2223!
    2324!
     
    162163
    163164    USE arrays_3d,                                                             &
    164         ONLY:  dzw, e, nr, ol, p, pt, precipitation_amount, precipitation_rate,&
    165                prr,q, qc, ql, ql_c, ql_v, ql_vp, qr, qsws, rho_ocean, s, sa, shf,    &
    166                ssws, tend, ts, u, us, v, vpt, w, z0, z0h, z0q, zu, zw
     165        ONLY:  dzw, e, nr, p, pt, precipitation_amount, precipitation_rate,    &
     166               prr, q, qc, ql, ql_c, ql_v, ql_vp, qr, rho_ocean, s, sa,        &
     167               tend, u, v, vpt, w, zu, zw
    167168       
    168169    USE averaging
     
    177178               do2d_xz_last_time, do2d_xz_n, do2d_xz_time_count,               &
    178179               do2d_yz_last_time, do2d_yz_n, do2d_yz_time_count,               &
    179                ibc_uv_b, io_blocks, io_group, message_string,                  &
     180               ibc_uv_b, io_blocks, io_group, land_surface, message_string,    &
    180181               ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz,                          &
    181182               psolver, section, simulated_time, simulated_time_chr,           &
     
    195196   
    196197    USE land_surface_model_mod,                                                &
    197         ONLY:  land_surface, lsm_data_output_2d, zs
     198        ONLY:  lsm_data_output_2d, zs
    198199   
    199200#if defined( __netcdf )
     
    214215    USE radiation_model_mod,                                                   &
    215216        ONLY:  radiation, radiation_data_output_2d
     217
     218    USE surface_mod,                                                           &
     219        ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
    216220
    217221    IMPLICIT NONE
     
    234238    INTEGER(iwp) ::  l         !<
    235239    INTEGER(iwp) ::  layer_xy  !<
     240    INTEGER(iwp) ::  m         !<
    236241    INTEGER(iwp) ::  n         !<
    237242    INTEGER(iwp) ::  nis       !<
     
    255260    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d            !<
    256261    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d_l          !<
     262    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  tmp_2d              !< temporary field used to exchange surface-related quantities
     263
    257264    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_pf            !<
    258265    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_2d_sections   !<
     
    417424!-- Allocate a temporary array for resorting (kji -> ijk).
    418425    ALLOCATE( local_pf(nxlg:nxrg,nysg:nyng,nzb:nzt+1) )
     426    local_pf = 0.0
     427!
     428!-- Allocate temporary array used for exchanging ghoist points of surface-data
     429    ALLOCATE( tmp_2d(nysg:nyng,nxlg:nxrg) )
     430    tmp_2d = 0.0
    419431
    420432!
     
    485497             CASE ( 'ol*_xy' )        ! 2d-array
    486498                IF ( av == 0 ) THEN
    487                    DO  i = nxlg, nxrg
    488                       DO  j = nysg, nyng
    489                          local_pf(i,j,nzb+1) = ol(j,i)
    490                       ENDDO
    491                    ENDDO
     499                   DO  m = 1, surf_def_h(0)%ns
     500                      i = surf_def_h(0)%i(m)
     501                      j = surf_def_h(0)%j(m)
     502                      tmp_2d(j,i) = surf_def_h(0)%ol(m)
     503                   ENDDO
     504                   DO  m = 1, surf_lsm_h%ns
     505                      i = surf_lsm_h%i(m)
     506                      j = surf_lsm_h%j(m)
     507                      tmp_2d(j,i) = surf_lsm_h%ol(m)
     508                   ENDDO
     509                   DO  m = 1, surf_usm_h%ns
     510                      i = surf_usm_h%i(m)
     511                      j = surf_usm_h%j(m)
     512                      tmp_2d(j,i) = surf_usm_h%ol(m)
     513                   ENDDO
     514
     515                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     516
     517                   DO  i = nxlg, nxrg
     518                      DO  j = nysg, nyng
     519                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
     520                      ENDDO
     521                   ENDDO
     522
    492523                ELSE
    493524                   DO  i = nxlg, nxrg
     
    740771             CASE ( 'qsws*_xy' )        ! 2d-array
    741772                IF ( av == 0 ) THEN
    742                    DO  i = nxlg, nxrg
    743                       DO  j = nysg, nyng
    744                          local_pf(i,j,nzb+1) =  qsws(j,i)
     773                   DO  m = 1, surf_def_h(0)%ns
     774                      i = surf_def_h(0)%i(m)
     775                      j = surf_def_h(0)%j(m)
     776                      tmp_2d(j,i) = surf_def_h(0)%qsws(m)
     777                   ENDDO
     778                   DO  m = 1, surf_lsm_h%ns
     779                      i = surf_lsm_h%i(m)
     780                      j = surf_lsm_h%j(m)
     781                      tmp_2d(j,i) = surf_lsm_h%qsws(m)
     782                   ENDDO
     783                   DO  m = 1, surf_usm_h%ns
     784                      i = surf_usm_h%i(m)
     785                      j = surf_usm_h%j(m)
     786                      tmp_2d(j,i) = surf_usm_h%qsws(m)
     787                   ENDDO
     788
     789                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     790
     791                   DO  i = nxlg, nxrg
     792                      DO  j = nysg, nyng
     793                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    745794                      ENDDO
    746795                   ENDDO
     
    796845             CASE ( 'shf*_xy' )        ! 2d-array
    797846                IF ( av == 0 ) THEN
    798                    DO  i = nxlg, nxrg
    799                       DO  j = nysg, nyng
    800                          local_pf(i,j,nzb+1) =  shf(j,i)
     847                   DO  m = 1, surf_def_h(0)%ns
     848                      i = surf_def_h(0)%i(m)
     849                      j = surf_def_h(0)%j(m)
     850                      tmp_2d(j,i) = surf_def_h(0)%shf(m)
     851                   ENDDO
     852                   DO  m = 1, surf_lsm_h%ns
     853                      i = surf_lsm_h%i(m)
     854                      j = surf_lsm_h%j(m)
     855                      tmp_2d(j,i) = surf_lsm_h%shf(m)
     856                   ENDDO
     857                   DO  m = 1, surf_usm_h%ns
     858                      i = surf_usm_h%i(m)
     859                      j = surf_usm_h%j(m)
     860                      tmp_2d(j,i) = surf_usm_h%shf(m)
     861                   ENDDO
     862
     863                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     864
     865                   DO  i = nxlg, nxrg
     866                      DO  j = nysg, nyng
     867                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    801868                      ENDDO
    802869                   ENDDO
     
    814881             CASE ( 'ssws*_xy' )        ! 2d-array
    815882                IF ( av == 0 ) THEN
    816                    DO  i = nxlg, nxrg
    817                       DO  j = nysg, nyng
    818                          local_pf(i,j,nzb+1) =  ssws(j,i)
     883                   DO  m = 1, surf_def_h(0)%ns
     884                      i = surf_def_h(0)%i(m)
     885                      j = surf_def_h(0)%j(m)
     886                      tmp_2d(j,i) = surf_def_h(0)%ssws(m)
     887                   ENDDO
     888                   DO  m = 1, surf_lsm_h%ns
     889                      i = surf_lsm_h%i(m)
     890                      j = surf_lsm_h%j(m)
     891                      tmp_2d(j,i) = surf_lsm_h%ssws(m)
     892                   ENDDO
     893                   DO  m = 1, surf_usm_h%ns
     894                      i = surf_usm_h%i(m)
     895                      j = surf_usm_h%j(m)
     896                      tmp_2d(j,i) = surf_usm_h%ssws(m)
     897                   ENDDO
     898
     899                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     900
     901                   DO  i = nxlg, nxrg
     902                      DO  j = nysg, nyng
     903                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    819904                      ENDDO
    820905                   ENDDO
     
    832917             CASE ( 't*_xy' )        ! 2d-array
    833918                IF ( av == 0 )  THEN
    834                    DO  i = nxlg, nxrg
    835                       DO  j = nysg, nyng
    836                          local_pf(i,j,nzb+1) = ts(j,i)
    837                       ENDDO
    838                    ENDDO
     919                   DO  m = 1, surf_def_h(0)%ns
     920                      i = surf_def_h(0)%i(m)
     921                      j = surf_def_h(0)%j(m)
     922                      tmp_2d(j,i) = surf_def_h(0)%ts(m)
     923                   ENDDO
     924                   DO  m = 1, surf_lsm_h%ns
     925                      i = surf_lsm_h%i(m)
     926                      j = surf_lsm_h%j(m)
     927                      tmp_2d(j,i) = surf_lsm_h%ts(m)
     928                   ENDDO
     929                   DO  m = 1, surf_usm_h%ns
     930                      i = surf_usm_h%i(m)
     931                      j = surf_usm_h%j(m)
     932                      tmp_2d(j,i) = surf_usm_h%ts(m)
     933                   ENDDO
     934
     935                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     936
     937                   DO  i = nxlg, nxrg
     938                      DO  j = nysg, nyng
     939                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
     940                      ENDDO
     941                   ENDDO
     942
    839943                ELSE
    840944                   DO  i = nxlg, nxrg
     
    864968             CASE ( 'u*_xy' )        ! 2d-array
    865969                IF ( av == 0 )  THEN
    866                    DO  i = nxlg, nxrg
    867                       DO  j = nysg, nyng
    868                          local_pf(i,j,nzb+1) = us(j,i)
     970                   DO  m = 1, surf_def_h(0)%ns
     971                      i = surf_def_h(0)%i(m)
     972                      j = surf_def_h(0)%j(m)
     973                      tmp_2d(j,i) = surf_def_h(0)%us(m)
     974                   ENDDO
     975                   DO  m = 1, surf_lsm_h%ns
     976                      i = surf_lsm_h%i(m)
     977                      j = surf_lsm_h%j(m)
     978                      tmp_2d(j,i) = surf_lsm_h%us(m)
     979                   ENDDO
     980                   DO  m = 1, surf_usm_h%ns
     981                      i = surf_usm_h%i(m)
     982                      j = surf_usm_h%j(m)
     983                      tmp_2d(j,i) = surf_usm_h%us(m)
     984                   ENDDO
     985
     986                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     987
     988                   DO  i = nxlg, nxrg
     989                      DO  j = nysg, nyng
     990                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    869991                      ENDDO
    870992                   ENDDO
     
    9121034             CASE ( 'z0*_xy' )        ! 2d-array
    9131035                IF ( av == 0 ) THEN
    914                    DO  i = nxlg, nxrg
    915                       DO  j = nysg, nyng
    916                          local_pf(i,j,nzb+1) =  z0(j,i)
    917                       ENDDO
    918                    ENDDO
     1036                   DO  m = 1, surf_def_h(0)%ns
     1037                      i = surf_def_h(0)%i(m)
     1038                      j = surf_def_h(0)%j(m)
     1039                      tmp_2d(j,i) = surf_def_h(0)%z0(m)
     1040                   ENDDO
     1041                   DO  m = 1, surf_lsm_h%ns
     1042                      i = surf_lsm_h%i(m)
     1043                      j = surf_lsm_h%j(m)
     1044                      tmp_2d(j,i) = surf_lsm_h%z0(m)
     1045                   ENDDO
     1046                   DO  m = 1, surf_usm_h%ns
     1047                      i = surf_usm_h%i(m)
     1048                      j = surf_usm_h%j(m)
     1049                      tmp_2d(j,i) = surf_usm_h%z0(m)
     1050                   ENDDO
     1051
     1052                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     1053
     1054                   DO  i = nxlg, nxrg
     1055                      DO  j = nysg, nyng
     1056                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
     1057                      ENDDO
     1058                   ENDDO
     1059
    9191060                ELSE
    9201061                   DO  i = nxlg, nxrg
     
    9301071             CASE ( 'z0h*_xy' )        ! 2d-array
    9311072                IF ( av == 0 ) THEN
    932                    DO  i = nxlg, nxrg
    933                       DO  j = nysg, nyng
    934                          local_pf(i,j,nzb+1) =  z0h(j,i)
     1073                   DO  m = 1, surf_def_h(0)%ns
     1074                      i = surf_def_h(0)%i(m)
     1075                      j = surf_def_h(0)%j(m)
     1076                      tmp_2d(j,i) = surf_def_h(0)%z0h(m)
     1077                   ENDDO
     1078                   DO  m = 1, surf_lsm_h%ns
     1079                      i = surf_lsm_h%i(m)
     1080                      j = surf_lsm_h%j(m)
     1081                      tmp_2d(j,i) = surf_lsm_h%z0h(m)
     1082                   ENDDO
     1083                   DO  m = 1, surf_usm_h%ns
     1084                      i = surf_usm_h%i(m)
     1085                      j = surf_usm_h%j(m)
     1086                      tmp_2d(j,i) = surf_usm_h%z0h(m)
     1087                   ENDDO
     1088
     1089                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     1090
     1091                   DO  i = nxlg, nxrg
     1092                      DO  j = nysg, nyng
     1093                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    9351094                      ENDDO
    9361095                   ENDDO
     
    9481107             CASE ( 'z0q*_xy' )        ! 2d-array
    9491108                IF ( av == 0 ) THEN
    950                    DO  i = nxlg, nxrg
    951                       DO  j = nysg, nyng
    952                          local_pf(i,j,nzb+1) =  z0q(j,i)
     1109                   DO  m = 1, surf_def_h(0)%ns
     1110                      i = surf_def_h(0)%i(m)
     1111                      j = surf_def_h(0)%j(m)
     1112                      tmp_2d(j,i) = surf_def_h(0)%z0q(m)
     1113                   ENDDO
     1114                   DO  m = 1, surf_lsm_h%ns
     1115                      i = surf_lsm_h%i(m)
     1116                      j = surf_lsm_h%j(m)
     1117                      tmp_2d(j,i) = surf_lsm_h%z0q(m)
     1118                   ENDDO
     1119                   DO  m = 1, surf_usm_h%ns
     1120                      i = surf_usm_h%i(m)
     1121                      j = surf_usm_h%j(m)
     1122                      tmp_2d(j,i) = surf_usm_h%z0q(m)
     1123                   ENDDO
     1124
     1125                   CALL exchange_horiz_2d( tmp_2d, nbgp )
     1126
     1127                   DO  i = nxlg, nxrg
     1128                      DO  j = nysg, nyng
     1129                         local_pf(i,j,nzb+1) = tmp_2d(j,i)
    9531130                      ENDDO
    9541131                   ENDDO
  • palm/trunk/SOURCE/data_output_3d.f90

    r2210 r2232  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Adjustments to new topography concept
    2323!
    2424! Former revisions:
     
    152152
    153153    USE arrays_3d,                                                             &
    154         ONLY:  e, nr, p, pt, prr, q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, sa, tend, &
    155                u, v, vpt, w
     154        ONLY:  e, nr, p, pt, prr, q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, sa, &
     155               tend, u, v, vpt, w
    156156       
    157157    USE averaging
     
    162162    USE control_parameters,                                                    &
    163163        ONLY:  cloud_physics, do3d, do3d_no, do3d_time_count, io_blocks,       &
    164                io_group, message_string, ntdim_3d, nz_do3d, psolver,           &
    165                simulated_time, time_since_reference_point, urban_surface,      &
    166                varnamelength
     164               io_group, land_surface, message_string, ntdim_3d, nz_do3d,      &
     165               psolver, simulated_time, time_since_reference_point,            &
     166               urban_surface, varnamelength
    167167       
    168168    USE cpulog,                                                                &
     
    175175   
    176176    USE land_surface_model_mod,                                                &
    177         ONLY: land_surface, lsm_data_output_3d, nzb_soil, nzt_soil
     177        ONLY: lsm_data_output_3d, nzb_soil, nzt_soil
    178178
    179179#if defined( __netcdf )
  • palm/trunk/SOURCE/diffusion_e.f90

    r2119 r2232  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Adjustments to new topography and surface concept
    2323!
    2424! Former revisions:
     
    129129
    130130       USE arrays_3d,                                                          &
    131            ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw,        &
     131           ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, l_wall, tend, zu, zw,&
    132132                  drho_air, rho_air_zw
    133133           
     
    140140           
    141141       USE indices,                                                            &
    142            ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_s_inner,&
    143                   nzt
     142           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_max,    &
     143                  nzt, wall_flags_0
    144144           
    145145       USE kinds
     
    151151           ONLY:  use_sgs_for_particles, wang_kernel
    152152
     153       USE surface_mod,                                                        &
     154          ONLY :  bc_h
     155
    153156       IMPLICIT NONE
    154157
    155        INTEGER(iwp) ::  i              !<
    156        INTEGER(iwp) ::  j              !<
    157        INTEGER(iwp) ::  k              !<
     158       INTEGER(iwp) ::  i              !< running index x direction
     159       INTEGER(iwp) ::  j              !< running index y direction
     160       INTEGER(iwp) ::  k              !< running index z direction
     161       INTEGER(iwp) ::  m              !< running index surface elements
     162 
    158163       REAL(wp)     ::  dvar_dz        !<
     164       REAL(wp)     ::  flag           !< flag to mask topography
    159165       REAL(wp)     ::  l_stable       !<
    160166       REAL(wp)     ::  var_reference  !<
     
    177183          DO  i = nxl, nxr
    178184             DO  j = nys, nyn
    179                 DO  k = nzb_s_inner(j,i)+1, nzt
     185                DO  k = nzb+1, nzt
    180186!
    181187!--                Calculate the mixing length (for dissipation)
     
    191197!--                Adjustment of the mixing length
    192198                   IF ( wall_adjustment )  THEN
    193                       l(k,j)  = MIN( wall_adjustment_factor *          &
    194                                      ( zu(k) - zw(nzb_s_inner(j,i)) ), &
     199                      l(k,j)  = MIN( wall_adjustment_factor * l_wall(k,j,i),   &
    195200                                     l_grid(k), l_stable )
    196                       ll(k,j) = MIN( wall_adjustment_factor *          &
    197                                      ( zu(k) - zw(nzb_s_inner(j,i)) ), &
     201                      ll(k,j) = MIN( wall_adjustment_factor * l_wall(k,j,i),   &
    198202                                     l_grid(k) )
    199203                   ELSE
     
    208212!--          Calculate the tendency terms
    209213             DO  j = nys, nyn
    210                 DO  k = nzb_s_inner(j,i)+1, nzt
    211 
    212                     dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) ) * &
     214                DO  k = nzb+1, nzt
     215!
     216!--                Predetermine flag to mask topography
     217                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
     218
     219                   dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) ) * &
    213220                                       e(k,j,i) * SQRT( e(k,j,i) ) / l(k,j)
    214221
    215                     tend(k,j,i) = tend(k,j,i)                                  &
     222                   tend(k,j,i) = tend(k,j,i)                                   &
    216223                                        + (                                    &
    217224                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
    218225                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
    219                                           ) * ddx2                             &
     226                                          ) * ddx2  * flag                     &
    220227                                        + (                                    &
    221228                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
    222229                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
    223                                           ) * ddy2                             &
     230                                          ) * ddy2  * flag                     &
    224231                                        + (                                    &
    225232               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
     
    227234             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
    228235                                                             * rho_air_zw(k-1) &
    229                                           ) * ddzw(k) * drho_air(k)            &
    230                              - dissipation(k,j)
     236                                          ) * ddzw(k) * drho_air(k) * flag     &
     237                             - dissipation(k,j) * flag
    231238
    232239                ENDDO
     
    239246                  collision_turbulence )  THEN
    240247                DO  j = nys, nyn
    241                    DO  k = nzb_s_inner(j,i)+1, nzt
    242                       diss(k,j,i) = dissipation(k,j)
     248                   DO  k = nzb+1, nzt
     249                      diss(k,j,i) = dissipation(k,j) *                         &
     250                                        MERGE( 1.0_wp, 0.0_wp,                 &
     251                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    243252                   ENDDO
    244253                ENDDO
     
    251260          DO  i = nxl, nxr
    252261             DO  j = nys, nyn
    253                 DO  k = nzb_s_inner(j,i)+1, nzt
     262                DO  k = nzb+1, nzt
    254263!
    255264!--                Calculate the mixing length (for dissipation)
     
    265274!--                Adjustment of the mixing length
    266275                   IF ( wall_adjustment )  THEN
    267                       l(k,j)  = MIN( wall_adjustment_factor *          &
    268                                      ( zu(k) - zw(nzb_s_inner(j,i)) ), &
     276                      l(k,j)  = MIN( wall_adjustment_factor * l_wall(k,j,i),   &
    269277                                     l_grid(k), l_stable )
    270                       ll(k,j) = MIN( wall_adjustment_factor *          &
    271                                      ( zu(k) - zw(nzb_s_inner(j,i)) ), &
     278                      ll(k,j) = MIN( wall_adjustment_factor * l_wall(k,j,i),   &
    272279                                     l_grid(k) )
    273280                   ELSE
     
    282289!--          Calculate the tendency terms
    283290             DO  j = nys, nyn
    284                 DO  k = nzb_s_inner(j,i)+1, nzt
    285 
    286                     dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) ) * &
     291                DO  k = nzb+1, nzt
     292!
     293!--                Predetermine flag to mask topography
     294                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
     295
     296                   dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) )   *&
    287297                                             e(k,j,i) * SQRT( e(k,j,i) ) / l(k,j)
    288298
    289                     tend(k,j,i) = tend(k,j,i)                                  &
     299                   tend(k,j,i) = tend(k,j,i)                                   &
    290300                                        + (                                    &
    291301                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
    292302                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
    293                                           ) * ddx2                             &
     303                                          ) * ddx2  * flag                     &
    294304                                        + (                                    &
    295305                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
    296306                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
    297                                           ) * ddy2                             &
     307                                          ) * ddy2  * flag                     &
    298308                                        + (                                    &
    299309               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
     
    301311             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
    302312                                                             * rho_air_zw(k-1) &
    303                                           ) * ddzw(k) * drho_air(k)            &
    304                              - dissipation(k,j)
     313                                          ) * ddzw(k) * drho_air(k) * flag     &
     314                             - dissipation(k,j) * flag
    305315
    306316                ENDDO
     
    313323                  collision_turbulence )  THEN
    314324                DO  j = nys, nyn
    315                    DO  k = nzb_s_inner(j,i)+1, nzt
    316                       diss(k,j,i) = dissipation(k,j)
     325                   DO  k = nzb+1, nzt
     326                      diss(k,j,i) = dissipation(k,j) *                         &
     327                                        MERGE( 1.0_wp, 0.0_wp,                 &
     328                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    317329                   ENDDO
    318330                ENDDO
     
    324336
    325337!
    326 !--    Boundary condition for dissipation
     338!--    Neumann boundary condition for dissipation diss(nzb,:,:) = diss(nzb+1,:,:)
    327339       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.  &
    328340            collision_turbulence )  THEN
    329           DO  i = nxl, nxr
    330              DO  j = nys, nyn
    331                 diss(nzb_s_inner(j,i),j,i) = diss(nzb_s_inner(j,i)+1,j,i)
    332              ENDDO
    333           ENDDO
     341!
     342!--       Upward facing surfaces
     343          DO  m = 1, bc_h(0)%ns
     344             i = bc_h(0)%i(m)           
     345             j = bc_h(0)%j(m)
     346             k = bc_h(0)%k(m)
     347             diss(k-1,j,i) = diss(k,j,i)
     348          ENDDO
     349!
     350!--       Downward facing surfaces
     351          DO  m = 1, bc_h(1)%ns
     352             i = bc_h(1)%i(m)           
     353             j = bc_h(1)%j(m)
     354             k = bc_h(1)%k(m)
     355             diss(k+1,j,i) = diss(k,j,i)
     356          ENDDO
     357
    334358       ENDIF
    335359
     
    345369
    346370       USE arrays_3d,                                                          &
    347            ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw,        &
     371           ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, l_wall, tend, zu, zw,&
    348372                  drho_air, rho_air_zw
    349373         
     
    356380           
    357381       USE indices,                                                            &
    358            ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner, nzt
     382           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_max, nzt, wall_flags_0
    359383           
    360384       USE kinds
     
    366390           ONLY:  use_sgs_for_particles, wang_kernel
    367391
     392       USE surface_mod,                                                        &
     393          ONLY :  bc_h
     394
    368395       IMPLICIT NONE
    369396
    370        INTEGER(iwp) ::  i              !<
    371        INTEGER(iwp) ::  j              !<
    372        INTEGER(iwp) ::  k              !<
     397       INTEGER(iwp) ::  i              !< running index x direction
     398       INTEGER(iwp) ::  j              !< running index y direction
     399       INTEGER(iwp) ::  k              !< running index z direction
     400       INTEGER(iwp) ::  m              !< running index surface elements
     401       INTEGER(iwp) ::  surf_e         !< End index of surface elements at (j,i)-gridpoint
     402       INTEGER(iwp) ::  surf_s         !< Start index of surface elements at (j,i)-gridpoint
     403
    373404       REAL(wp)     ::  dvar_dz        !<
     405       REAL(wp)     ::  flag           !< flag to mask topography
    374406       REAL(wp)     ::  l_stable       !<
    375407       REAL(wp)     ::  var_reference  !<
     
    384416       REAL(wp), DIMENSION(nzb+1:nzt) ::  ll           !<
    385417
    386 
    387418!
    388419!--    Calculate the mixing length (for dissipation)
    389        DO  k = nzb_s_inner(j,i)+1, nzt
     420       DO  k = nzb+1, nzt
     421!
     422!--       Predetermine flag to mask topography
     423          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
     424
    390425          dvar_dz = atmos_ocean_sign * &
    391426                    ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
     
    404439!--       Adjustment of the mixing length
    405440          IF ( wall_adjustment )  THEN
    406              l(k)  = MIN( wall_adjustment_factor *                     &
    407                           ( zu(k) - zw(nzb_s_inner(j,i)) ), l_grid(k), &
    408                           l_stable )
    409              ll(k) = MIN( wall_adjustment_factor *                     &
    410                           ( zu(k) - zw(nzb_s_inner(j,i)) ), l_grid(k) )