Ignore:
Timestamp:
Aug 15, 2019 1:31:35 PM (23 months ago)
Author:
suehring
Message:

Revision of topography processing to have a consistent treatment of 2D and 3D buildings (init_grid, surface_mod); Bugfix in indoor model in case of non grid-resolved buildings

File:
1 edited

Legend:

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

    r4156 r4159  
    2626! -----------------
    2727! $Id$
     28! Surface classification revised and adjusted to changes in init_grid
     29!
     30! 4156 2019-08-14 09:18:14Z schwenkel
    2831! Bugfix in case of cloud microphysics morrison
    2932!
     
    939942       LOGICAL ::  building                       !< flag indicating building grid point
    940943       LOGICAL ::  terrain                        !< flag indicating natural terrain grid point
     944       LOGICAL ::  unresolved_building            !< flag indicating a grid point where actually a building is
     945                                                  !< defined but not resolved by the vertical grid
    941946
    942947       num_def_h = 0
     
    966971                   IF ( .NOT. BTEST( wall_flags_0(k-1,j,i), 0 ) )  THEN
    967972!
    968 !--                   Determine flags indicating terrain or building.
     973!--                   Determine flags indicating a terrain surface, a building
     974!--                   surface,
    969975                      terrain  = BTEST( wall_flags_0(k-1,j,i), 5 )  .OR.       &
    970976                                 topo_no_distinct
     
    972978                                 topo_no_distinct
    973979!
     980!--                   unresolved_building indicates a surface with equal height
     981!--                   as terrain but with a non-grid resolved building on top.
     982!--                   These surfaces will be flagged as urban surfaces.
     983                      unresolved_building = BTEST( wall_flags_0(k-1,j,i), 5 )  &
     984                                     .AND.  BTEST( wall_flags_0(k-1,j,i), 6 )
     985!
    974986!--                   Land-surface type
    975                       IF ( land_surface  .AND.  terrain )  THEN
     987                      IF ( land_surface  .AND.  terrain  .AND.                 &
     988                           .NOT. unresolved_building )  THEN
    976989                         num_lsm_h    = num_lsm_h    + 1
    977990!
     
    10271040                      building = BTEST( wall_flags_0(k,j-1,i), 6 )   .OR.      &
    10281041                                 topo_no_distinct
    1029                       IF (  land_surface  .AND.  terrain )  THEN
     1042
     1043                      unresolved_building = BTEST( wall_flags_0(k,j-1,i), 5 )  &
     1044                                     .AND.  BTEST( wall_flags_0(k,j-1,i), 6 )
     1045                                     
     1046                      IF (  land_surface  .AND.  terrain  .AND.                &
     1047                           .NOT. unresolved_building )  THEN
    10301048                         num_lsm_v(0) = num_lsm_v(0) + 1
    10311049                      ELSEIF ( urban_surface  .AND.  building )  THEN
     
    10561074                      building = BTEST( wall_flags_0(k,j+1,i), 6 )  .OR.       &
    10571075                                 topo_no_distinct
    1058                       IF (  land_surface  .AND.  terrain )  THEN
     1076                                 
     1077                      unresolved_building = BTEST( wall_flags_0(k,j+1,i), 5 )  &
     1078                                     .AND.  BTEST( wall_flags_0(k,j+1,i), 6 )
     1079                               
     1080                      IF (  land_surface  .AND.  terrain  .AND.                &
     1081                           .NOT. unresolved_building )  THEN
    10591082                         num_lsm_v(1) = num_lsm_v(1) + 1
    10601083                      ELSEIF ( urban_surface  .AND.  building )  THEN
     
    10851108                      building = BTEST( wall_flags_0(k,j,i-1), 6 )  .OR.       &
    10861109                                 topo_no_distinct
    1087                       IF (  land_surface  .AND.  terrain )  THEN
     1110                                 
     1111                      unresolved_building = BTEST( wall_flags_0(k,j,i-1), 5 )  &
     1112                                     .AND.  BTEST( wall_flags_0(k,j,i-1), 6 )
     1113                                     
     1114                      IF (  land_surface  .AND.  terrain  .AND.                &
     1115                           .NOT. unresolved_building )  THEN
    10881116                         num_lsm_v(2) = num_lsm_v(2) + 1
    10891117                      ELSEIF ( urban_surface  .AND.  building )  THEN
     
    11141142                      building = BTEST( wall_flags_0(k,j,i+1), 6 )  .OR.       &
    11151143                                 topo_no_distinct
    1116                       IF (  land_surface  .AND.  terrain )  THEN
     1144                                 
     1145                      unresolved_building = BTEST( wall_flags_0(k,j,i+1), 5 )  &
     1146                                     .AND.  BTEST( wall_flags_0(k,j,i+1), 6 )
     1147                                 
     1148                      IF (  land_surface  .AND.  terrain  .AND.                &
     1149                           .NOT. unresolved_building )  THEN
    11171150                         num_lsm_v(3) = num_lsm_v(3) + 1
    11181151                      ELSEIF ( urban_surface  .AND.  building )  THEN
     
    22172250       INTEGER(iwp), DIMENSION(0:3) ::  start_index_usm_v !< dummy to determing local start index in surface type for given (j,i), for vertical urban surfaces
    22182251
    2219        LOGICAL ::  building     !< flag indicating building grid point
    2220        LOGICAL ::  terrain      !< flag indicating natural terrain grid point
    2221 
     2252       LOGICAL ::  building            !< flag indicating building grid point
     2253       LOGICAL ::  terrain             !< flag indicating natural terrain grid point
     2254       LOGICAL ::  unresolved_building !< flag indicating a grid point where actually a building is defined but not resolved by the vertical grid
    22222255!
    22232256!--    Set offset indices, i.e. index difference between surface element and
     
    23222355                      building = BTEST( wall_flags_0(k-1,j,i), 6 )  .OR.       &
    23232356                                 topo_no_distinct
     2357                                 
     2358!
     2359!--                   unresolved_building indicates a surface with equal height
     2360!--                   as terrain but with a non-grid resolved building on top.
     2361!--                   These surfaces will be flagged as urban surfaces.
     2362                      unresolved_building = BTEST( wall_flags_0(k-1,j,i), 5 )  &
     2363                                     .AND.  BTEST( wall_flags_0(k-1,j,i), 6 )
    23242364!
    23252365!--                   Natural surface type         
    2326                       IF ( land_surface  .AND.  terrain )  THEN
     2366                      IF ( land_surface  .AND.  terrain  .AND.                 &
     2367                           .NOT. unresolved_building )  THEN
    23272368                         CALL initialize_horizontal_surfaces( k, j, i,         &
    23282369                                                              surf_lsm_h,      &
     
    23752416                      building = BTEST( wall_flags_0(k,j-1,i), 6 )  .OR.       &
    23762417                                 topo_no_distinct
    2377                       IF ( urban_surface  .AND.  building )  THEN
     2418
     2419                      unresolved_building = BTEST( wall_flags_0(k,j-1,i), 5 )  &
     2420                                     .AND.  BTEST( wall_flags_0(k,j-1,i), 6 )
     2421                                     
     2422                      IF ( land_surface  .AND.  terrain  .AND.                 &
     2423                           .NOT. unresolved_building )  THEN
     2424                         CALL initialize_vertical_surfaces( k, j, i,           &
     2425                                                            surf_lsm_v(0),     &
     2426                                                            num_lsm_v(0),      &
     2427                                                            num_lsm_v_kji(0),  &
     2428                                                            .FALSE., .FALSE.,  &             
     2429                                                            .FALSE., .TRUE. )
     2430                      ELSEIF ( urban_surface  .AND.  building )  THEN
    23782431                         CALL initialize_vertical_surfaces( k, j, i,           &
    23792432                                                            surf_usm_v(0),     &
     
    23812434                                                            num_usm_v_kji(0),  &
    23822435                                                            .FALSE., .FALSE.,  &             
    2383                                                             .FALSE., .TRUE. )
    2384                       ELSEIF ( land_surface  .AND.  terrain )  THEN
    2385                          CALL initialize_vertical_surfaces( k, j, i,           &
    2386                                                             surf_lsm_v(0),     &
    2387                                                             num_lsm_v(0),      &
    2388                                                             num_lsm_v_kji(0),  &
    2389                                                             .FALSE., .FALSE.,  &             
    2390                                                             .FALSE., .TRUE. )
     2436                                                            .FALSE., .TRUE. )
    23912437                      ELSE
    23922438                         CALL initialize_vertical_surfaces( k, j, i,           &
     
    24072453                      building = BTEST( wall_flags_0(k,j+1,i), 6 )  .OR.       &
    24082454                                 topo_no_distinct
    2409                       IF ( urban_surface  .AND.  building )  THEN
     2455                                 
     2456                      unresolved_building = BTEST( wall_flags_0(k,j+1,i), 5 )  &
     2457                                     .AND.  BTEST( wall_flags_0(k,j+1,i), 6 )
     2458                                     
     2459                      IF ( land_surface  .AND.  terrain  .AND.                 &
     2460                           .NOT. unresolved_building )  THEN
     2461                         CALL initialize_vertical_surfaces( k, j, i,           &
     2462                                                            surf_lsm_v(1),     &
     2463                                                            num_lsm_v(1),      &
     2464                                                            num_lsm_v_kji(1),  &
     2465                                                            .FALSE., .FALSE.,  &
     2466                                                            .TRUE., .FALSE. )
     2467                      ELSEIF ( urban_surface  .AND.  building )  THEN
    24102468                         CALL initialize_vertical_surfaces( k, j, i,           &
    24112469                                                            surf_usm_v(1),     &
     
    24142472                                                            .FALSE., .FALSE.,  &
    24152473                                                            .TRUE., .FALSE. )
    2416                       ELSEIF ( land_surface  .AND.  terrain )  THEN
    2417                          CALL initialize_vertical_surfaces( k, j, i,           &
    2418                                                             surf_lsm_v(1),     &
    2419                                                             num_lsm_v(1),      &
    2420                                                             num_lsm_v_kji(1),  &
    2421                                                             .FALSE., .FALSE.,  &
    2422                                                             .TRUE., .FALSE. ) 
    24232474                      ELSE
    24242475                         CALL initialize_vertical_surfaces( k, j, i,           &
     
    24392490                      building = BTEST( wall_flags_0(k,j,i-1), 6 )  .OR.       &
    24402491                                 topo_no_distinct
    2441                       IF ( urban_surface  .AND.  building )  THEN
     2492                                 
     2493                      unresolved_building = BTEST( wall_flags_0(k,j,i-1), 5 )  &
     2494                                     .AND.  BTEST( wall_flags_0(k,j,i-1), 6 )
     2495                                 
     2496                      IF ( land_surface  .AND.  terrain  .AND.                 &
     2497                           .NOT. unresolved_building )  THEN
     2498                         CALL initialize_vertical_surfaces( k, j, i,           &
     2499                                                            surf_lsm_v(2),     &
     2500                                                            num_lsm_v(2),      &
     2501                                                            num_lsm_v_kji(2),  &
     2502                                                            .TRUE., .FALSE.,   &
     2503                                                            .FALSE., .FALSE. )
     2504                      ELSEIF ( urban_surface  .AND.  building )  THEN
    24422505                         CALL initialize_vertical_surfaces( k, j, i,           &
    24432506                                                            surf_usm_v(2),     &
     
    24452508                                                            num_usm_v_kji(2),  &
    24462509                                                            .TRUE., .FALSE.,   &
    2447                                                             .FALSE., .FALSE. )
    2448                       ELSEIF ( land_surface  .AND.  terrain )  THEN
    2449                          CALL initialize_vertical_surfaces( k, j, i,           &
    2450                                                             surf_lsm_v(2),     &
    2451                                                             num_lsm_v(2),      &
    2452                                                             num_lsm_v_kji(2),  &
    2453                                                             .TRUE., .FALSE.,   &
    2454                                                             .FALSE., .FALSE. )
     2510                                                            .FALSE., .FALSE. )
    24552511                      ELSE
    24562512                         CALL initialize_vertical_surfaces( k, j, i,           &
     
    24712527                      building = BTEST( wall_flags_0(k,j,i+1), 6 )  .OR.       &
    24722528                                 topo_no_distinct
    2473                       IF ( urban_surface  .AND.  building )  THEN
     2529                                 
     2530                      unresolved_building = BTEST( wall_flags_0(k,j,i+1), 5 )  &
     2531                                     .AND.  BTEST( wall_flags_0(k,j,i+1), 6 )
     2532                                 
     2533                      IF ( land_surface  .AND.  terrain  .AND.                 &
     2534                           .NOT. unresolved_building )  THEN
     2535                         CALL initialize_vertical_surfaces( k, j, i,           &
     2536                                                            surf_lsm_v(3),     &
     2537                                                            num_lsm_v(3),      &
     2538                                                            num_lsm_v_kji(3),  &
     2539                                                           .FALSE., .TRUE.,    &
     2540                                                           .FALSE., .FALSE. )
     2541                      ELSEIF ( urban_surface  .AND.  building )  THEN
    24742542                         CALL initialize_vertical_surfaces( k, j, i,           &
    24752543                                                            surf_usm_v(3),     &
     
    24772545                                                            num_usm_v_kji(3),  &
    24782546                                                           .FALSE., .TRUE.,    &
    2479                                                            .FALSE., .FALSE. )
    2480                       ELSEIF ( land_surface  .AND.  terrain )  THEN
    2481                          CALL initialize_vertical_surfaces( k, j, i,           &
    2482                                                             surf_lsm_v(3),     &
    2483                                                             num_lsm_v(3),      &
    2484                                                             num_lsm_v_kji(3),  &
    2485                                                            .FALSE., .TRUE.,    &
    2486                                                            .FALSE., .FALSE. )
     2547                                                           .FALSE., .FALSE. )
    24872548                      ELSE
    24882549                         CALL initialize_vertical_surfaces( k, j, i,           &
Note: See TracChangeset for help on using the changeset viewer.