Ignore:
Timestamp:
Dec 18, 2019 11:55:56 AM (4 years ago)
Author:
motisi
Message:

Introduction of wall_flags_total_0, which currently sets bits based on static topography information used in wall_flags_static_0

File:
1 edited

Legend:

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

    r4331 r4346  
    2626! -----------------
    2727! $Id$
     28! Introduction of wall_flags_total_0, which currently sets bits based on static
     29! topography information used in wall_flags_static_0
     30!
     31! 4331 2019-12-10 18:25:02Z suehring
    2832! -pt_2m - array is moved to diagnostic_output_quantities
    2933!
     
    114118
    115119    USE indices,                                                               &
    116         ONLY:  nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt, wall_flags_static_0
     120        ONLY:  nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt,           &
     121               wall_flags_total_0
    117122
    118123    USE grid_variables,                                                        &
     
    590595!         
    591596!--                Check if current gridpoint belongs to the atmosphere
    592                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
    593                       IF ( .NOT. BTEST( wall_flags_static_0(k+bc_h(l)%koff,           &
     597                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
     598                      IF ( .NOT. BTEST( wall_flags_total_0(k+bc_h(l)%koff,     &
    594599                                                     j+bc_h(l)%joff,           &
    595600                                                     i+bc_h(l)%ioff), 0 ) )    &
     
    621626!         
    622627!--                Check if current gridpoint belongs to the atmosphere
    623                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     628                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    624629!         
    625630!--                   Upward-facing
    626                       IF ( .NOT. BTEST( wall_flags_static_0(k+bc_h(l)%koff,           &
     631                      IF ( .NOT. BTEST( wall_flags_total_0(k+bc_h(l)%koff,     &
    627632                                                     j+bc_h(l)%joff,           &
    628633                                                     i+bc_h(l)%ioff), 0 )      &
     
    657662!         
    658663!--                Check if current gridpoint belongs to the atmosphere
    659                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
    660                       IF ( .NOT. BTEST( wall_flags_static_0(k+bc_v(l)%koff,           &
     664                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
     665                      IF ( .NOT. BTEST( wall_flags_total_0(k+bc_v(l)%koff,     &
    661666                                                     j+bc_v(l)%joff,           &
    662667                                                     i+bc_v(l)%ioff), 0 ) )    &
     
    690695!         
    691696!--                Check if current gridpoint belongs to the atmosphere
    692                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     697                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    693698!         
    694699!--                   Upward-facing
    695                       IF ( .NOT. BTEST( wall_flags_static_0(k+bc_v(l)%koff,           &
     700                      IF ( .NOT. BTEST( wall_flags_total_0(k+bc_v(l)%koff,     &
    696701                                                     j+bc_v(l)%joff,           &
    697702                                                     i+bc_v(l)%ioff), 0 )      &
     
    770775!
    771776!--             Check if current gridpoint belongs to the atmosphere
    772                 IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     777                IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    773778!
    774779!--                Check if grid point adjoins to any upward-facing horizontal
    775780!--                surface, e.g. the Earth surface, plane roofs, or ceilings.
    776781
    777                    IF ( .NOT. BTEST( wall_flags_static_0(k-1,j,i), 0 ) )  THEN
     782                   IF ( .NOT. BTEST( wall_flags_total_0(k-1,j,i), 0 ) )  THEN
    778783!
    779784!--                   Determine flags indicating a terrain surface, a building
    780785!--                   surface,
    781                       terrain  = BTEST( wall_flags_static_0(k-1,j,i), 5 )  .OR.       &
     786                      terrain  = BTEST( wall_flags_total_0(k-1,j,i), 5 )  .OR.       &
    782787                                 topo_no_distinct
    783                       building = BTEST( wall_flags_static_0(k-1,j,i), 6 )  .OR.       &
     788                      building = BTEST( wall_flags_total_0(k-1,j,i), 6 )  .OR.       &
    784789                                 topo_no_distinct
    785790!
     
    787792!--                   as terrain but with a non-grid resolved building on top.
    788793!--                   These surfaces will be flagged as urban surfaces.
    789                       unresolved_building = BTEST( wall_flags_static_0(k-1,j,i), 5 )  &
    790                                      .AND.  BTEST( wall_flags_static_0(k-1,j,i), 6 )
     794                      unresolved_building = BTEST( wall_flags_total_0(k-1,j,i), 5 )  &
     795                                     .AND.  BTEST( wall_flags_total_0(k-1,j,i), 6 )
    791796!
    792797!--                   Land-surface type
     
    822827!--                Check for any other downward-facing surface. So far only for
    823828!--                default surface type.
    824                    ELSEIF ( .NOT. BTEST( wall_flags_static_0(k+1,j,i), 0 ) )  THEN
     829                   ELSEIF ( .NOT. BTEST( wall_flags_total_0(k+1,j,i), 0 ) )  THEN
    825830                      num_def_h(1) = num_def_h(1) + 1
    826831                   ENDIF
     
    835840          DO  j = nys, nyn
    836841             DO  k = nzb+1, nzt
    837                 IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     842                IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    838843!
    839844!--                Northward-facing
    840                    IF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i), 0 ) )  THEN
     845                   IF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i), 0 ) )  THEN
    841846!
    842847!--                   Determine flags indicating terrain or building
    843848
    844                       terrain  = BTEST( wall_flags_static_0(k,j-1,i), 5 )  .OR.       &
     849                      terrain  = BTEST( wall_flags_total_0(k,j-1,i), 5 )  .OR.       &
    845850                                 topo_no_distinct
    846                       building = BTEST( wall_flags_static_0(k,j-1,i), 6 )   .OR.      &
     851                      building = BTEST( wall_flags_total_0(k,j-1,i), 6 )   .OR.      &
    847852                                 topo_no_distinct
    848853
    849                       unresolved_building = BTEST( wall_flags_static_0(k,j-1,i), 5 )  &
    850                                      .AND.  BTEST( wall_flags_static_0(k,j-1,i), 6 )
     854                      unresolved_building = BTEST( wall_flags_total_0(k,j-1,i), 5 )  &
     855                                     .AND.  BTEST( wall_flags_total_0(k,j-1,i), 6 )
    851856                                     
    852857                      IF (  land_surface  .AND.  terrain  .AND.                &
     
    873878!
    874879!--                Southward-facing
    875                    IF ( .NOT. BTEST( wall_flags_static_0(k,j+1,i), 0 ) )  THEN
     880                   IF ( .NOT. BTEST( wall_flags_total_0(k,j+1,i), 0 ) )  THEN
    876881!
    877882!--                   Determine flags indicating terrain or building
    878                       terrain  = BTEST( wall_flags_static_0(k,j+1,i), 5 )  .OR.       &
     883                      terrain  = BTEST( wall_flags_total_0(k,j+1,i), 5 )  .OR.       &
    879884                                 topo_no_distinct
    880                       building = BTEST( wall_flags_static_0(k,j+1,i), 6 )  .OR.       &
     885                      building = BTEST( wall_flags_total_0(k,j+1,i), 6 )  .OR.       &
    881886                                 topo_no_distinct
    882887                                 
    883                       unresolved_building = BTEST( wall_flags_static_0(k,j+1,i), 5 )  &
    884                                      .AND.  BTEST( wall_flags_static_0(k,j+1,i), 6 )
     888                      unresolved_building = BTEST( wall_flags_total_0(k,j+1,i), 5 )  &
     889                                     .AND.  BTEST( wall_flags_total_0(k,j+1,i), 6 )
    885890                               
    886891                      IF (  land_surface  .AND.  terrain  .AND.                &
     
    907912!
    908913!--                Eastward-facing
    909                    IF ( .NOT. BTEST( wall_flags_static_0(k,j,i-1), 0 ) )  THEN
     914                   IF ( .NOT. BTEST( wall_flags_total_0(k,j,i-1), 0 ) )  THEN
    910915!
    911916!--                   Determine flags indicating terrain or building
    912                       terrain  = BTEST( wall_flags_static_0(k,j,i-1), 5 )  .OR.       &
     917                      terrain  = BTEST( wall_flags_total_0(k,j,i-1), 5 )  .OR.       &
    913918                                 topo_no_distinct
    914                       building = BTEST( wall_flags_static_0(k,j,i-1), 6 )  .OR.       &
     919                      building = BTEST( wall_flags_total_0(k,j,i-1), 6 )  .OR.       &
    915920                                 topo_no_distinct
    916921                                 
    917                       unresolved_building = BTEST( wall_flags_static_0(k,j,i-1), 5 )  &
    918                                      .AND.  BTEST( wall_flags_static_0(k,j,i-1), 6 )
     922                      unresolved_building = BTEST( wall_flags_total_0(k,j,i-1), 5 )  &
     923                                     .AND.  BTEST( wall_flags_total_0(k,j,i-1), 6 )
    919924                                     
    920925                      IF (  land_surface  .AND.  terrain  .AND.                &
     
    941946!
    942947!--                Westward-facing
    943                    IF ( .NOT. BTEST( wall_flags_static_0(k,j,i+1), 0 ) )  THEN
     948                   IF ( .NOT. BTEST( wall_flags_total_0(k,j,i+1), 0 ) )  THEN
    944949!
    945950!--                   Determine flags indicating terrain or building
    946                       terrain  = BTEST( wall_flags_static_0(k,j,i+1), 5 )  .OR.       &
     951                      terrain  = BTEST( wall_flags_total_0(k,j,i+1), 5 )  .OR.       &
    947952                                 topo_no_distinct
    948                       building = BTEST( wall_flags_static_0(k,j,i+1), 6 )  .OR.       &
     953                      building = BTEST( wall_flags_total_0(k,j,i+1), 6 )  .OR.       &
    949954                                 topo_no_distinct
    950955                                 
    951                       unresolved_building = BTEST( wall_flags_static_0(k,j,i+1), 5 )  &
    952                                      .AND.  BTEST( wall_flags_static_0(k,j,i+1), 6 )
     956                      unresolved_building = BTEST( wall_flags_total_0(k,j,i+1), 5 )  &
     957                                     .AND.  BTEST( wall_flags_total_0(k,j,i+1), 6 )
    953958                                 
    954959                      IF (  land_surface  .AND.  terrain  .AND.                &
     
    21392144!
    21402145!--             Check if current gridpoint belongs to the atmosphere
    2141                 IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     2146                IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    21422147!
    21432148!--                Upward-facing surface. Distinguish between differet surface types.
    21442149!--                To do, think about method to flag natural and non-natural
    21452150!--                surfaces.
    2146                    IF ( .NOT. BTEST( wall_flags_static_0(k-1,j,i), 0 ) )  THEN
     2151                   IF ( .NOT. BTEST( wall_flags_total_0(k-1,j,i), 0 ) )  THEN
    21472152!
    21482153!--                   Determine flags indicating terrain or building
    2149                       terrain  = BTEST( wall_flags_static_0(k-1,j,i), 5 )  .OR.       &
     2154                      terrain  = BTEST( wall_flags_total_0(k-1,j,i), 5 )  .OR.       &
    21502155                                 topo_no_distinct
    2151                       building = BTEST( wall_flags_static_0(k-1,j,i), 6 )  .OR.       &
     2156                      building = BTEST( wall_flags_total_0(k-1,j,i), 6 )  .OR.       &
    21522157                                 topo_no_distinct
    21532158                                 
     
    21562161!--                   as terrain but with a non-grid resolved building on top.
    21572162!--                   These surfaces will be flagged as urban surfaces.
    2158                       unresolved_building = BTEST( wall_flags_static_0(k-1,j,i), 5 )  &
    2159                                      .AND.  BTEST( wall_flags_static_0(k-1,j,i), 6 )
     2163                      unresolved_building = BTEST( wall_flags_total_0(k-1,j,i), 5 )  &
     2164                                     .AND.  BTEST( wall_flags_total_0(k-1,j,i), 6 )
    21602165!
    21612166!--                   Natural surface type         
     
    21952200!--                Check for any other downward-facing surface. So far only for
    21962201!--                default surface type.
    2197                    ELSEIF ( .NOT. BTEST( wall_flags_static_0(k+1,j,i), 0 ) )  THEN
     2202                   ELSEIF ( .NOT. BTEST( wall_flags_total_0(k+1,j,i), 0 ) )  THEN
    21982203                      CALL initialize_horizontal_surfaces( k, j, i,            &
    21992204                                                           surf_def_h(1),      &
     
    22052210!--                Check for vertical walls and, if required, initialize it.
    22062211!                  Start with northward-facing surface.
    2207                    IF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i), 0 ) )  THEN
     2212                   IF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i), 0 ) )  THEN
    22082213!
    22092214!--                   Determine flags indicating terrain or building
    2210                       terrain  = BTEST( wall_flags_static_0(k,j-1,i), 5 )  .OR.       &
     2215                      terrain  = BTEST( wall_flags_total_0(k,j-1,i), 5 )  .OR.       &
    22112216                                 topo_no_distinct
    2212                       building = BTEST( wall_flags_static_0(k,j-1,i), 6 )  .OR.       &
     2217                      building = BTEST( wall_flags_total_0(k,j-1,i), 6 )  .OR.       &
    22132218                                 topo_no_distinct
    22142219
    2215                       unresolved_building = BTEST( wall_flags_static_0(k,j-1,i), 5 )  &
    2216                                      .AND.  BTEST( wall_flags_static_0(k,j-1,i), 6 )
     2220                      unresolved_building = BTEST( wall_flags_total_0(k,j-1,i), 5 )  &
     2221                                     .AND.  BTEST( wall_flags_total_0(k,j-1,i), 6 )
    22172222                                     
    22182223                      IF ( land_surface  .AND.  terrain  .AND.                 &
     
    22422247!
    22432248!--                southward-facing surface
    2244                    IF ( .NOT. BTEST( wall_flags_static_0(k,j+1,i), 0 ) )  THEN
     2249                   IF ( .NOT. BTEST( wall_flags_total_0(k,j+1,i), 0 ) )  THEN
    22452250!
    22462251!--                   Determine flags indicating terrain or building
    2247                       terrain  = BTEST( wall_flags_static_0(k,j+1,i), 5 )  .OR.       &
     2252                      terrain  = BTEST( wall_flags_total_0(k,j+1,i), 5 )  .OR.       &
    22482253                                 topo_no_distinct
    2249                       building = BTEST( wall_flags_static_0(k,j+1,i), 6 )  .OR.       &
     2254                      building = BTEST( wall_flags_total_0(k,j+1,i), 6 )  .OR.       &
    22502255                                 topo_no_distinct
    22512256                                 
    2252                       unresolved_building = BTEST( wall_flags_static_0(k,j+1,i), 5 )  &
    2253                                      .AND.  BTEST( wall_flags_static_0(k,j+1,i), 6 )
     2257                      unresolved_building = BTEST( wall_flags_total_0(k,j+1,i), 5 )  &
     2258                                     .AND.  BTEST( wall_flags_total_0(k,j+1,i), 6 )
    22542259                                     
    22552260                      IF ( land_surface  .AND.  terrain  .AND.                 &
     
    22792284!
    22802285!--                eastward-facing surface
    2281                    IF ( .NOT. BTEST( wall_flags_static_0(k,j,i-1), 0 ) )  THEN
     2286                   IF ( .NOT. BTEST( wall_flags_total_0(k,j,i-1), 0 ) )  THEN
    22822287!
    22832288!--                   Determine flags indicating terrain or building
    2284                       terrain  = BTEST( wall_flags_static_0(k,j,i-1), 5 )  .OR.       &
     2289                      terrain  = BTEST( wall_flags_total_0(k,j,i-1), 5 )  .OR.       &
    22852290                                 topo_no_distinct
    2286                       building = BTEST( wall_flags_static_0(k,j,i-1), 6 )  .OR.       &
     2291                      building = BTEST( wall_flags_total_0(k,j,i-1), 6 )  .OR.       &
    22872292                                 topo_no_distinct
    22882293                                 
    2289                       unresolved_building = BTEST( wall_flags_static_0(k,j,i-1), 5 )  &
    2290                                      .AND.  BTEST( wall_flags_static_0(k,j,i-1), 6 )
     2294                      unresolved_building = BTEST( wall_flags_total_0(k,j,i-1), 5 )  &
     2295                                     .AND.  BTEST( wall_flags_total_0(k,j,i-1), 6 )
    22912296                                 
    22922297                      IF ( land_surface  .AND.  terrain  .AND.                 &
     
    23162321!   
    23172322!--                westward-facing surface
    2318                    IF ( .NOT. BTEST( wall_flags_static_0(k,j,i+1), 0 ) )  THEN
     2323                   IF ( .NOT. BTEST( wall_flags_total_0(k,j,i+1), 0 ) )  THEN
    23192324!
    23202325!--                   Determine flags indicating terrain or building
    2321                       terrain  = BTEST( wall_flags_static_0(k,j,i+1), 5 )  .OR.       &
     2326                      terrain  = BTEST( wall_flags_total_0(k,j,i+1), 5 )  .OR.       &
    23222327                                 topo_no_distinct
    2323                       building = BTEST( wall_flags_static_0(k,j,i+1), 6 )  .OR.       &
     2328                      building = BTEST( wall_flags_total_0(k,j,i+1), 6 )  .OR.       &
    23242329                                 topo_no_distinct
    23252330                                 
    2326                       unresolved_building = BTEST( wall_flags_static_0(k,j,i+1), 5 )  &
    2327                                      .AND.  BTEST( wall_flags_static_0(k,j,i+1), 6 )
     2331                      unresolved_building = BTEST( wall_flags_total_0(k,j,i+1), 5 )  &
     2332                                     .AND.  BTEST( wall_flags_total_0(k,j,i+1), 6 )
    23282333                                 
    23292334                      IF ( land_surface  .AND.  terrain  .AND.                 &
Note: See TracChangeset for help on using the changeset viewer.