Ignore:
Timestamp:
Aug 16, 2019 11:01:48 AM (5 years ago)
Author:
suehring
Message:

Merge from branch resler: Changed behaviour of masked output over surface to follow terrain and ignore buildings

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE

  • palm/trunk/SOURCE/salsa_mod.f90

    r4131 r4167  
    2626! -----------------
    2727! $Id$
     28! Changed behaviour of masked output over surface to follow terrain and ignore
     29! buildings (J.Resler, T.Gronemeier)
     30!
     31! 4131 2019-08-02 11:06:18Z monakurppa
    2832! - Add "salsa_" before each salsa output variable
    2933! - Add a possibility to output the number (salsa_N_UFP) and mass concentration
     
    256260                                             !< 2 = autumn (no harvest yet), 3 = late autumn
    257261                                             !< (already frost), 4 = winter, 5 = transitional spring
     262
     263    REAL(wp), PARAMETER ::  fill_value = -9999.0_wp    !< value for the _FillValue attribute
    258264!
    259265!-- Universal constants
     
    1039310399                                          !< depositing in the alveolar (or tracheobronchial)
    1039410400                                          !< region of the lung. Depends on the particle size
    10395     REAL(wp) ::  fill_value = -9999.0_wp  !< value for the _FillValue attribute
    1039610401    REAL(wp) ::  mean_d                   !< Particle diameter in micrometres
    1039710402    REAL(wp) ::  temp_bin                 !< temporary array for calculating output variables
     
    1080810813                                          !< depositing in the alveolar (or tracheobronchial)
    1080910814                                          !< region of the lung. Depends on the particle size
    10810     REAL(wp) ::  fill_value = -9999.0_wp  !< value for the _FillValue attribute
    1081110815    REAL(wp) ::  mean_d                   !< Particle diameter in micrometres
    1081210816    REAL(wp) ::  temp_bin                 !< temporary array for calculating output variables
     
    1117411178        ONLY:  mask_i, mask_j, mask_k, mask_size_l, mask_surface, nz_do3d
    1117511179
    11176     USE surface_mod,                                                                               &
    11177         ONLY:  get_topography_top_index_ji
    11178 
    1117911180    IMPLICIT NONE
    1118011181
     
    1119111192    INTEGER(iwp) ::  j              !< loop index in y-direction
    1119211193    INTEGER(iwp) ::  k              !< loop index in z-direction
     11194    INTEGER(iwp) ::  im             !< loop index for masked variables
     11195    INTEGER(iwp) ::  jm             !< loop index for masked variables
     11196    INTEGER(iwp) ::  kk             !< loop index for masked output in z-direction
    1119311197    INTEGER(iwp) ::  mid            !< masked output running index
    11194     INTEGER(iwp) ::  topo_top_ind   !< k index of highest horizontal surface
     11198    INTEGER(iwp) ::  ktt            !< k index of highest terrain surface
    1119511199
    1119611200    LOGICAL ::  found      !<
     
    1123111235                DO  i = 1, mask_size_l(mid,1)
    1123211236                   DO  j = 1, mask_size_l(mid,2)
    11233                       topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i),    &
    11234                                                                   grid )
     11237!
     11238!--                   Get k index of the highest terraing surface
     11239                      im = mask_i(mid,i)
     11240                      jm = mask_j(mid,j)
     11241                      ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1123511242                      DO  k = 1, mask_size_l(mid,3)
    11236                          local_pf(i,j,k) = aerosol_number(ib)%conc(MIN( topo_top_ind+mask_k(mid,k),&
    11237                                                                         nzt+1 ),                   &
    11238                                                                    mask_j(mid,j), mask_i(mid,i) )
     11243                         kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11244!
     11245!--                      Set value if not in building
     11246                         IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11247                            local_pf(i,j,k) = fill_value
     11248                         ELSE
     11249                            local_pf(i,j,k) = aerosol_number(ib)%conc(kk,jm,im)
     11250                         ENDIF
    1123911251                      ENDDO
    1124011252                   ENDDO
     
    1127711289                DO  i = 1, mask_size_l(mid,1)
    1127811290                   DO  j = 1, mask_size_l(mid,2)
    11279                       topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i),    &
    11280                                                                   grid )
     11291!
     11292!--                   Get k index of the highest terraing surface
     11293                      im = mask_i(mid,i)
     11294                      jm = mask_j(mid,j)
     11295                      ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1128111296                      DO  k = 1, mask_size_l(mid,3)
    11282                          local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),         &
    11283                                                  mask_j(mid,j), mask_i(mid,i) )
     11297                         kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11298!
     11299!--                      Set value if not in building
     11300                         IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11301                            local_pf(i,j,k) = fill_value
     11302                         ELSE
     11303                            local_pf(i,j,k) = tend(kk,jm,im)
     11304                         ENDIF
    1128411305                      ENDDO
    1128511306                   ENDDO
     
    1134711368                   DO  i = 1, mask_size_l(mid,1)
    1134811369                      DO  j = 1, mask_size_l(mid,2)
    11349                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11350                                                                      grid )
     11370!
     11371!--                      Get k index of the highest terraing surface
     11372                         im = mask_i(mid,i)
     11373                         jm = mask_j(mid,j)
     11374                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1135111375                         DO  k = 1, mask_size_l(mid,3)
    11352                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11353                                                     mask_j(mid,j), mask_i(mid,i) )
     11376                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11377!
     11378!--                         Set value if not in building
     11379                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11380                               local_pf(i,j,k) = fill_value
     11381                            ELSE
     11382                               local_pf(i,j,k) = tend(kk,jm,im)
     11383                            ENDIF
    1135411384                         ENDDO
    1135511385                      ENDDO
     
    1138711417                   DO  i = 1, mask_size_l(mid,1)
    1138811418                      DO  j = 1, mask_size_l(mid,2)
    11389                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11390                                                                      grid )
     11419!
     11420!--                      Get k index of the highest terraing surface
     11421                         im = mask_i(mid,i)
     11422                         jm = mask_j(mid,j)
     11423                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1139111424                         DO  k = 1, mask_size_l(mid,3)
    11392                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11393                                                     mask_j(mid,j), mask_i(mid,i) )
     11425                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11426!
     11427!--                         Set value if not in building
     11428                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11429                               local_pf(i,j,k) = fill_value
     11430                            ELSE
     11431                               local_pf(i,j,k) = tend(kk,jm,im)
     11432                            ENDIF
    1139411433                         ENDDO
    1139511434                      ENDDO
     
    1142511464                   DO  i = 1, mask_size_l(mid,1)
    1142611465                      DO  j = 1, mask_size_l(mid,2)
    11427                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11428                                                                      grid )
     11466!
     11467!--                      Get k index of the highest terraing surface
     11468                         im = mask_i(mid,i)
     11469                         jm = mask_j(mid,j)
     11470                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1142911471                         DO  k = 1, mask_size_l(mid,3)
    11430                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11431                                                     mask_j(mid,j), mask_i(mid,i) )
     11472                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11473!
     11474!--                         Set value if not in building
     11475                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11476                               local_pf(i,j,k) = fill_value
     11477                            ELSE
     11478                               local_pf(i,j,k) = tend(kk,jm,im)
     11479                            ENDIF
    1143211480                         ENDDO
    1143311481                      ENDDO
     
    1146711515                   DO  i = 1, mask_size_l(mid,1)
    1146811516                      DO  j = 1, mask_size_l(mid,2)
    11469                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11470                                                                      grid )
     11517!
     11518!--                      Get k index of the highest terraing surface
     11519                         im = mask_i(mid,i)
     11520                         jm = mask_j(mid,j)
     11521                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1147111522                         DO  k = 1, mask_size_l(mid,3)
    11472                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11473                                                     mask_j(mid,j), mask_i(mid,i) )
     11523                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11524!
     11525!--                         Set value if not in building
     11526                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11527                               local_pf(i,j,k) = fill_value
     11528                            ELSE
     11529                               local_pf(i,j,k) = tend(kk,jm,im)
     11530                            ENDIF
    1147411531                         ENDDO
    1147511532                      ENDDO
     
    1150911566                   DO  i = 1, mask_size_l(mid,1)
    1151011567                      DO  j = 1, mask_size_l(mid,2)
    11511                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11512                                                                      grid )
     11568!
     11569!--                      Get k index of the highest terraing surface
     11570                         im = mask_i(mid,i)
     11571                         jm = mask_j(mid,j)
     11572                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1151311573                         DO  k = 1, mask_size_l(mid,3)
    11514                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11515                                                     mask_j(mid,j), mask_i(mid,i) )
     11574                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11575!
     11576!--                         Set value if not in building
     11577                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11578                               local_pf(i,j,k) = fill_value
     11579                            ELSE
     11580                               local_pf(i,j,k) = tend(kk,jm,im)
     11581                            ENDIF
    1151611582                         ENDDO
    1151711583                      ENDDO
     
    1155111617                   DO  i = 1, mask_size_l(mid,1)
    1155211618                      DO  j = 1, mask_size_l(mid,2)
    11553                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11554                                                                      grid )
     11619!
     11620!--                      Get k index of the highest terraing surface
     11621                         im = mask_i(mid,i)
     11622                         jm = mask_j(mid,j)
     11623                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1155511624                         DO  k = 1, mask_size_l(mid,3)
    11556                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11557                                                     mask_j(mid,j), mask_i(mid,i) )
     11625                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11626!
     11627!--                         Set value if not in building
     11628                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11629                               local_pf(i,j,k) = fill_value
     11630                            ELSE
     11631                               local_pf(i,j,k) = tend(kk,jm,im)
     11632                            ENDIF
    1155811633                         ENDDO
    1155911634                      ENDDO
     
    1159411669                   DO  i = 1, mask_size_l(mid,1)
    1159511670                      DO  j = 1, mask_size_l(mid,2)
    11596                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11597                                                                      grid )
     11671!
     11672!--                      Get k index of the highest terraing surface
     11673                         im = mask_i(mid,i)
     11674                         jm = mask_j(mid,j)
     11675                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1159811676                         DO  k = 1, mask_size_l(mid,3)
    11599                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11600                                                     mask_j(mid,j), mask_i(mid,i) )
     11677                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11678!
     11679!--                         Set value if not in building
     11680                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11681                               local_pf(i,j,k) = fill_value
     11682                            ELSE
     11683                               local_pf(i,j,k) = tend(kk,jm,im)
     11684                            ENDIF
    1160111685                         ENDDO
    1160211686                      ENDDO
     
    1164111725                   DO  i = 1, mask_size_l(mid,1)
    1164211726                      DO  j = 1, mask_size_l(mid,2)
    11643                          topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), &
    11644                                                                      grid )
     11727!
     11728!--                      Get k index of the highest terraing surface
     11729                         im = mask_i(mid,i)
     11730                         jm = mask_j(mid,j)
     11731                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1164511732                         DO  k = 1, mask_size_l(mid,3)
    11646                             local_pf(i,j,k) = tend( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),      &
    11647                                                     mask_j(mid,j), mask_i(mid,i) )
     11733                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11734!
     11735!--                         Set value if not in building
     11736                            IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11737                               local_pf(i,j,k) = fill_value
     11738                            ELSE
     11739                               local_pf(i,j,k) =  tend(kk,jm,im)
     11740                            ENDIF
    1164811741                         ENDDO
    1164911742                      ENDDO
     
    1166111754    ENDIF
    1166211755
    11663     IF ( .NOT. resorted )  THEN
     11756    IF ( found  .AND.  .NOT. resorted )  THEN
    1166411757       IF ( .NOT. mask_surface(mid) )  THEN
    1166511758!
     
    1167711770          DO  i = 1, mask_size_l(mid,1)
    1167811771             DO  j = 1, mask_size_l(mid,2)
    11679 !
    11680 !--             Get k index of highest horizontal surface
    11681                 topo_top_ind = get_topography_top_index_ji( mask_j(mid,j), mask_i(mid,i), grid )
    11682 !
    11683 !--             Save output array
     11772!--             Get k index of the highest terraing surface
     11773                im = mask_i(mid,i)
     11774                jm = mask_j(mid,j)
     11775                ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
    1168411776                DO  k = 1, mask_size_l(mid,3)
    11685                    local_pf(i,j,k) = to_be_resorted( MIN( topo_top_ind+mask_k(mid,k), nzt+1 ),     &
    11686                                                      mask_j(mid,j), mask_i(mid,i) )
     11777                   kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     11778!--                Set value if not in building
     11779                   IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     11780                      local_pf(i,j,k) = fill_value
     11781                   ELSE
     11782                      local_pf(i,j,k) = to_be_resorted(kk,jm,im)
     11783                   ENDIF
    1168711784                ENDDO
    1168811785             ENDDO
Note: See TracChangeset for help on using the changeset viewer.