Changeset 4168


Ignore:
Timestamp:
Aug 16, 2019 1:50:17 PM (2 years ago)
Author:
suehring
Message:

Replace get_topography_top_index functions by pre-calculated arrays in order to save computational resources

Location:
palm/trunk/SOURCE
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r4167 r4168  
    2525# -----------------
    2626# $Id$
     27# Remove some dependencies on surface_mod that are no longer required without
     28# get_topography_top_index functions
     29#
     30# 4167 2019-08-16 11:01:48Z suehring
    2731# Remove no longer needed dependencies on surface_mod
    2832#
     
    12371241        modules.o \
    12381242        netcdf_interface_mod.o \
    1239         surface_mod.o \
    12401243        random_function_mod.o
    12411244mod_kinds.o: \
     
    12721275        mod_kinds.o \
    12731276        modules.o \
    1274         netcdf_data_input_mod.o \
    1275         surface_mod.o
     1277        netcdf_data_input_mod.o
    12761278ocean_mod.o: \
    12771279        advec_s_pw.o \
  • palm/trunk/SOURCE/biometeorology_mod.f90

    r4144 r4168  
    2727! -----------------
    2828! $Id$
     29! Replace function get_topography_top_index by topo_top_ind
     30!
     31! 4144 2019-08-06 09:11:47Z raasch
    2932! relational operators .EQ., .NE., etc. replaced by ==, /=, etc.
    3033!
     
    178181    USE indices,                                                               &
    179182        ONLY:  nxl, nxr, nys, nyn, nzb, nzt, nys, nyn, nxl, nxr, nxlg, nxrg,   &
    180                nysg, nyng
     183               nysg, nyng, topo_top_ind
    181184
    182185    USE kinds  !< Set precision of INTEGER and REAL arrays according to PALM
     
    192195               radiation_interactions, rad_sw_in,                              &
    193196               rad_sw_out, rad_lw_in, rad_lw_out
    194 
    195     USE surface_mod,                                                           &
    196         ONLY:  get_topography_top_index_ji
    197197
    198198    IMPLICIT NONE
     
    15571557             j = mrtbl(iy,l)
    15581558             k = mrtbl(iz,l)
    1559              IF ( k - get_topography_top_index_ji( j, i, 's' ) ==              &
    1560                    bio_cell_level + 1_iwp)  THEN
     1559             IF ( k - topo_top_ind(j,i,0) == bio_cell_level + 1_iwp)  THEN
    15611560!
    15621561!-- Averaging was done before, so we can just copy the result here
     
    15831582          j = mrtbl(iy,l)
    15841583          k = mrtbl(iz,l)
    1585           IF ( k - get_topography_top_index_ji( j, i, 's' ) ==                 &
    1586                 bio_cell_level + 1_iwp)  THEN
     1584          IF ( k - topo_top_ind(j,i,0) == bio_cell_level + 1_iwp)  THEN
    15871585             IF ( mrt_include_sw )  THEN
    15881586                 tmrt_grid(j,i) = ( ( human_absorb * mrtinsw(l) +              &
     
    16081606!------------------------------------------------------------------------------!
    16091607 SUBROUTINE bio_get_thermal_index_input_ij( average_input, i, j, ta, vp, ws,   &
    1610     pair, tmrt )
     1608                                            pair, tmrt )
    16111609
    16121610    IMPLICIT NONE
     
    16331631!-- Determine cell level closest to 1.1m above ground
    16341632!   by making use of truncation due to int cast
    1635     k = INT( get_topography_top_index_ji(j, i, 's') + bio_cell_level )  !< Vertical cell center closest to 1.1m
     1633    k = INT( topo_top_ind(j,i,0) + bio_cell_level )  !< Vertical cell center closest to 1.1m
    16361634
    16371635!
  • palm/trunk/SOURCE/bulk_cloud_model_mod.f90

    r4110 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4110 2019-07-22 17:05:21Z suehring
    2730! Pass integer flag array as well as boundary flags to WS scalar advection
    2831! routine
     
    280283        ONLY:  advc_flags_s,                                                   &
    281284               nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt,     &
     285               topo_top_ind,                                                   &
    282286               wall_flags_0
    283287
     
    291295
    292296    USE surface_mod,                                                           &
    293         ONLY :  bc_h, get_topography_top_index_ji, surf_bulk_cloud_model,      &
     297        ONLY :  bc_h,                                                          &
     298                surf_bulk_cloud_model,                                         &
    294299                surf_microphysics_morrison, surf_microphysics_seifert, &
    295300                surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, surf_usm_v
     
    38073812!
    38083813!--          Determine vertical index of topography top
    3809              k_wall = get_topography_top_index_ji( j, i, 's' )
     3814             k_wall = topo_top_ind(j,i,0)
    38103815             DO  k = nzb+1, nzt
    38113816!
     
    38543859!
    38553860!--    Determine vertical index of topography top
    3856        k_wall = get_topography_top_index_ji( j, i, 's' )
     3861       k_wall = topo_top_ind(j,i,0)
    38573862       DO  k = nzb+1, nzt
    38583863!
  • palm/trunk/SOURCE/data_output_mask.f90

    r4167 r4168  
    2525! -----------------
    2626! $Id$
     27! Remove variable grid
     28!
     29! 4167 2019-08-16 11:01:48Z suehring
    2730! Changed behaviour of masked output over surface to follow terrain and ignore
    2831! buildings (J.Resler, T.Gronemeier)
     
    225228
    226229    IMPLICIT NONE
    227 
    228     CHARACTER(LEN=5) ::  grid !< flag to distinquish between staggered grids
    229230
    230231    INTEGER(iwp) ::  av                      !< flag for (non-)average output
     
    310311       ENDIF
    311312!
    312 !--    Set default grid for terrain-following output
    313        grid = 's'
    314 !
    315313!--    Store the variable chosen.
    316314       resorted = .FALSE.
     
    373371                         im = mask_i(mid,i)
    374372                         jm = mask_j(mid,j)
    375                          ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), DIM = 1 ) - 1
     373                         ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )),&
     374                                       DIM = 1 ) - 1
    376375                         DO  k = 1, mask_size_l(mid,3)
    377376                            kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     
    685684
    686685          CASE ( 'w' )
    687              grid = 'w'
    688686             IF ( av == 0 )  THEN
    689687                to_be_resorted => w
  • palm/trunk/SOURCE/header.f90

    r4069 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4069 2019-07-01 14:05:51Z Giersch
    2730! Masked output running index mid has been introduced as a local variable to
    2831! avoid runtime error (Loop variable has been modified) in time_integration
     
    449452    USE indices,                                                               &
    450453        ONLY:  mg_loc_ind, nnx, nny, nnz, nx, ny, nxl_mg, nxr_mg, nyn_mg,      &
    451                nys_mg, nzt, nzt_mg
     454               nys_mg, nzt, nzt_mg, topo_top_ind
    452455
    453456    USE kinds
     
    478481
    479482    USE surface_mod,                                                           &
    480         ONLY:  surf_def_h, get_topography_top_index_ji
     483        ONLY:  surf_def_h
    481484
    482485    USE turbulence_closure_mod,                                                &
     
    11111114       WRITE( io, 280 )
    11121115       IF ( turbulent_inflow )  THEN
    1113           WRITE( io, 281 )  zu( get_topography_top_index_ji( 0, 0, 's' ) )
     1116          WRITE( io, 281 )  zu(topo_top_ind(0,0,0))
    11141117       ENDIF
    11151118       IF ( TRIM( initializing_actions ) == 'cyclic_fill' )  THEN
  • palm/trunk/SOURCE/init_3d_model.f90

    r4151 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4151 2019-08-09 08:24:30Z suehring
    2730! Add netcdf directive around input calls (fix for last commit)
    2831!
     
    719722                surf_def_v,                                                    &
    720723                surf_lsm_h,                                                    &
    721                 surf_usm_h,                                                    &
    722                 get_topography_top_index_ji
     724                surf_usm_h
    723725
    724726#if defined( _OPENACC )
     
    16331635          DO  i = nxlg, nxrg
    16341636             DO  j = nysg, nyng
    1635                 nz_u_shift = get_topography_top_index_ji( j, i, 'u' )
    1636                 nz_v_shift = get_topography_top_index_ji( j, i, 'v' )
    1637                 nz_w_shift = get_topography_top_index_ji( j, i, 'w' )
    1638                 nz_s_shift = get_topography_top_index_ji( j, i, 's' )
     1637                nz_u_shift = topo_top_ind(j,i,1)
     1638                nz_v_shift = topo_top_ind(j,i,2)
     1639                nz_w_shift = topo_top_ind(j,i,3)
     1640                nz_s_shift = topo_top_ind(j,i,0)
    16391641
    16401642                u(nz_u_shift:nzt+1,j,i)  = u(0:nzt+1-nz_u_shift,j,i)               
     
    16771679          IF ( complex_terrain )  THEN
    16781680             IF ( nxlg <= 0 .AND. nxrg >= 0 .AND. nysg <= 0 .AND. nyng >= 0 )  THEN
    1679                 nz_u_shift_l = get_topography_top_index_ji( 0, 0, 'u' )
    1680                 nz_v_shift_l = get_topography_top_index_ji( 0, 0, 'v' )
    1681                 nz_w_shift_l = get_topography_top_index_ji( 0, 0, 'w' )
    1682                 nz_s_shift_l = get_topography_top_index_ji( 0, 0, 's' )
     1681                nz_u_shift_l = topo_top_ind(j,i,1)
     1682                nz_v_shift_l = topo_top_ind(j,i,2)
     1683                nz_w_shift_l = topo_top_ind(j,i,3)
     1684                nz_s_shift_l = topo_top_ind(j,i,0)
    16831685             ELSE
    16841686                nz_u_shift_l = 0
  • palm/trunk/SOURCE/init_grid.f90

    r4159 r4168  
    2525! -----------------
    2626! $Id$
     27! Pre-calculate topography top index and store it on an array (replaces former
     28! functions get_topography_top_index)
     29!
     30! 4159 2019-08-15 13:31:35Z suehring
    2731! Revision of topography processing. This was not consistent between 2D and 3D
    2832! buildings.
     
    420424               nzb_max, nzb_s_inner, nzb_s_outer, nzb_u_inner,                 &
    421425               nzb_u_outer, nzb_v_inner, nzb_v_outer, nzb_w_inner,             &
    422                nzb_w_outer, nzt, topo_min_level
     426               nzb_w_outer, nzt, topo_top_ind, topo_min_level
    423427   
    424428    USE kinds
     
    429433
    430434    USE surface_mod,                                                           &
    431         ONLY:  get_topography_top_index, get_topography_top_index_ji, init_bc
     435        ONLY:  init_bc
    432436
    433437    USE vertical_nesting_mod,                                                  &
     
    919923    topo_min_level   = 0
    920924#if defined( __parallel )
    921     CALL MPI_ALLREDUCE( MINVAL( get_topography_top_index( 's' ) ),             &
     925    CALL MPI_ALLREDUCE( MINVAL( topo_top_ind(nys:nyn,nxl:nxr,0) ),             &
    922926                        topo_min_level, 1, MPI_INTEGER, MPI_MIN, comm2d, ierr )
    923927#else
    924     topo_min_level = MINVAL( get_topography_top_index( 's' ) )
     928    topo_min_level = MINVAL( topo_top_ind(nys:nyn,nxl:nxr,0) )
    925929#endif
    926930!
     
    960964!--          Topography height on scalar grid. Therefore, determine index of
    961965!--          upward-facing surface element on scalar grid.
    962              zu_s_inner(i,j) = zu( get_topography_top_index_ji( j, i, 's' ) )
     966             zu_s_inner(i,j) = zu(topo_top_ind(j,i,0))
    963967!
    964968!--          Topography height on w grid. Therefore, determine index of
    965969!--          upward-facing surface element on w grid.
    966              zw_w_inner(i,j) = zw( get_topography_top_index_ji( j, i, 's' ) )
     970             zw_w_inner(i,j) = zw(topo_top_ind(j,i,3))
    967971          ENDDO
    968972       ENDDO
     
    988992!
    989993!-- Initialize 2D-index arrays. Note, these will be removed soon!
    990     nzb_local(nys:nyn,nxl:nxr) = get_topography_top_index( 's' )
     994    nzb_local(nys:nyn,nxl:nxr) = topo_top_ind(nys:nyn,nxl:nxr,0)
    991995    CALL exchange_horiz_2d_int( nzb_local, nys, nyn, nxl, nxr, nbgp )
    992996!
     
    9961000    IF ( TRIM( topography ) /= 'flat' )  THEN
    9971001#if defined( __parallel )
    998        CALL MPI_ALLREDUCE( MAXVAL( get_topography_top_index( 's' ) ),          &
     1002       CALL MPI_ALLREDUCE( MAXVAL( topo_top_ind(nys:nyn,nxl:nxr,0) ),          &
    9991003                           nzb_local_max, 1, MPI_INTEGER, MPI_MAX, comm2d, ierr )               
    10001004#else
    1001        nzb_local_max = MAXVAL( get_topography_top_index( 's' ) )
     1005       nzb_local_max = MAXVAL( topo_top_ind(nys:nyn,nxl:nxr,0) )
    10021006#endif
    10031007       nzb_local_min = topo_min_level
     
    20172021    USE pegrid
    20182022
    2019     USE surface_mod,                                                           &
    2020         ONLY:  get_topography_top_index, get_topography_top_index_ji
    2021 
    20222023    IMPLICIT NONE
    20232024
     
    25722573    USE indices,                                                               &
    25732574        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nzb,  &
    2574                nzt, wall_flags_0
     2575               nzt, topo_top_ind, wall_flags_0
    25752576
    25762577    USE kinds
     
    25792580
    25802581    INTEGER(iwp) ::  i             !< index variable along x
     2582    INTEGER(iwp) ::  ibit          !< integer bit position of topgraphy masking array
    25812583    INTEGER(iwp) ::  j             !< index variable along y
    25822584    INTEGER(iwp) ::  k             !< index variable along z
     
    28852887       ENDIF     
    28862888    ENDIF
    2887 
     2889!
     2890!-- Pre-calculate topography top indices (former get_topography_top_index
     2891!-- function)
     2892    ALLOCATE( topo_top_ind(nysg:nyng,nxlg:nxrg,0:4) )
     2893!
     2894!-- Uppermost topography index on scalar grid
     2895    ibit = 12
     2896    topo_top_ind(:,:,0) = MAXLOC(                                              &
     2897                                  MERGE( 1, 0,                                 &
     2898                                          BTEST( wall_flags_0(:,:,:), ibit )   &
     2899                                       ), DIM = 1                              &
     2900                                ) - 1
     2901!
     2902!-- Uppermost topography index on u grid
     2903    ibit = 14
     2904    topo_top_ind(:,:,1) = MAXLOC(                                              &
     2905                                  MERGE( 1, 0,                                 &
     2906                                          BTEST( wall_flags_0(:,:,:), ibit )   &
     2907                                       ), DIM = 1                              &
     2908                                ) - 1
     2909!
     2910!-- Uppermost topography index on v grid
     2911    ibit = 16
     2912    topo_top_ind(:,:,2) = MAXLOC(                                              &
     2913                                  MERGE( 1, 0,                                 &
     2914                                          BTEST( wall_flags_0(:,:,:), ibit )   &
     2915                                       ), DIM = 1                              &
     2916                                ) - 1
     2917!
     2918!-- Uppermost topography index on w grid
     2919    ibit = 18
     2920    topo_top_ind(:,:,3) = MAXLOC(                                              &
     2921                                  MERGE( 1, 0,                                 &
     2922                                          BTEST( wall_flags_0(:,:,:), ibit )   &
     2923                                       ), DIM = 1                              &
     2924                                ) - 1
     2925!
     2926!-- Uppermost topography index on scalar outer grid
     2927    ibit = 24
     2928    topo_top_ind(:,:,4) = MAXLOC(                                              &
     2929                                  MERGE( 1, 0,                                 &
     2930                                          BTEST( wall_flags_0(:,:,:), ibit )   &
     2931                                       ), DIM = 1                              &
     2932                                ) - 1                           
    28882933
    28892934 END SUBROUTINE set_topo_flags
  • palm/trunk/SOURCE/lagrangian_particle_model_mod.f90

    r4145 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4145 2019-08-06 09:55:22Z schwenkel
    2730! Some reformatting
    2831!
     
    227230    USE indices,                                                               &
    228231        ONLY:  nx, nxl, nxlg, nxrg, nxr, ny, nyn, nys, nyng, nysg, nz, nzb,    &
    229                nzb_max, nzt, wall_flags_0,nbgp, ngp_2dh_outer
     232               nzb_max, nzt,nbgp, ngp_2dh_outer,                               &
     233               topo_top_ind,                                                   &
     234               wall_flags_0
    230235
    231236    USE kinds
     
    259264
    260265    USE surface_mod,                                                           &
    261         ONLY:  get_topography_top_index_ji, surf_def_h, surf_lsm_h, surf_usm_h,&
    262                bc_h
     266        ONLY:  bc_h,                                                           &
     267               surf_def_h,                                                     &
     268               surf_lsm_h,                                                     &
     269               surf_usm_h
    263270
    264271#if defined( __parallel )  &&  !defined( __mpifh )
     
    14021409!--                            Determine surface level. Therefore, check for
    14031410!--                            upward-facing wall on w-grid.
    1404                                k_surf = get_topography_top_index_ji( jp, ip, 'w' )
     1411                               k_surf = topo_top_ind(jp,ip,3)
    14051412                               IF ( seed_follows_topography )  THEN
    14061413!
     
    34693476!--          above topography (Prandtl-layer height)
    34703477!--          Determine vertical index of topography top
    3471              k_wall = get_topography_top_index_ji( jp, ip, 's' )
     3478             k_wall = topo_top_ind(jp,ip,0)
    34723479
    34733480             IF ( constant_flux_layer  .AND.  zv(n) - zw(k_wall) < z_p )  THEN
     
    35583565!
    35593566!--          Determine vertical index of topography top
    3560              k_wall = get_topography_top_index_ji( jp,ip, 's' )
     3567             k_wall = topo_top_ind(jp,ip,0)
    35613568
    35623569             IF ( constant_flux_layer  .AND.  zv(n) - zw(k_wall) < z_p )  THEN
  • palm/trunk/SOURCE/modules.f90

    r4131 r4168  
    2525! -----------------
    2626! $Id$
     27! +topo_top_ind
     28!
     29! 4131 2019-08-02 11:06:18Z monakurppa
    2730! Add max_pr_salsa to control_parameters. Used in creating profile output for
    2831! salsa.
     
    17551758    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_m            !< flags used to degrade order of advection scheme for momentum
    17561759    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_s            !< flags used to degrade order of advection scheme for scalar quantities
     1760    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  topo_top_ind            !< precalculated topography top indices
    17571761    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  wall_flags_0            !< flags to mask topography and surface-bounded grid points
    17581762
  • palm/trunk/SOURCE/multi_agent_system_mod.f90

    r3987 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 3987 2019-05-22 09:52:13Z kanani
    2730! Introduce alternative switch for debug output during timestepping
    2831!
     
    131134    USE indices,                                                               &
    132135        ONLY:  nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nzb,        &
     136               topo_top_ind,                                                   &
    133137               wall_flags_0
    134138
     
    374378 SUBROUTINE multi_agent_system
    375379
    376     USE biometeorology_mod,                                                   &
    377         ONLY:  bio_calc_ipt, bio_calculate_mrt_grid, bio_get_thermal_index_input_ij
     380    USE biometeorology_mod,                                                    &
     381        ONLY:  bio_calc_ipt,                                                   &
     382               bio_calculate_mrt_grid,                                         &
     383               bio_get_thermal_index_input_ij
    378384
    379385
     
    30183024           ONLY:  coupling_char, initializing_actions, io_blocks, io_group
    30193025
    3020        USE surface_mod,                                                        &
    3021            ONLY:  get_topography_top_index, get_topography_top_index_ji
    3022 
    30233026       USE arrays_3d,                                                          &
    30243027           ONLY:  zu, zw
     
    30773080       DO il = nxlg, nxrg
    30783081          DO jl = nysg, nyng
    3079              top_top_s(jl,il) = get_topography_top_index_ji(jl,il,'s') + 1
    3080              top_top_w(jl,il) = get_topography_top_index_ji(jl,il,'w')
     3082             top_top_s(jl,il) = topo_top_ind(jl,il,0) + 1
     3083             top_top_w(jl,il) = topo_top_ind(jl,il,3)
    30813084          ENDDO
    30823085       ENDDO
  • palm/trunk/SOURCE/nesting_offl_mod.f90

    r4125 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4125 2019-07-29 13:31:44Z suehring
    2730! In order to enable netcdf parallel access, allocate dummy arrays for the
    2831! lateral boundary data on cores that actually do not belong to these
     
    119122    USE indices,                                                               &
    120123        ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nys,                  &
    121                nysv, nysg, nyn, nyng, nzb, nz, nzt, wall_flags_0
     124               nysv, nysg, nyn, nyng, nzb, nz, nzt,                            &
     125               topo_top_ind,                                                   &
     126               wall_flags_0
    122127
    123128    USE kinds
     
    873878       
    874879       USE kinds
    875        
    876        USE surface_mod,                                                        &
    877            ONLY:  get_topography_top_index, get_topography_top_index_ji
    878880
    879881       IMPLICIT NONE
     
    918920!
    919921!--          Determine topography top index at current (j,i) index
    920              k_surface = get_topography_top_index_ji( j, i, 's' )
     922             k_surface = topo_top_ind(j,i,0)
    921923!
    922924!--          Pre-compute surface virtual temperature. Therefore, use 2nd
     
    978980       
    979981          DO  i = nxl, nxr
    980              k_surface = get_topography_top_index_ji( j, i, 's' )
     982             k_surface = topo_top_ind(j,i,0)
    981983 
    982984             IF ( humidity )  THEN
     
    10321034!--    turbulence generator accordingly. If Rayleigh damping would be applied
    10331035!--    near buildings, etc., this would spoil the simulation results.
    1034        topo_max_l = zw(MAXVAL( get_topography_top_index( 's' )))
     1036       topo_max_l = zw(MAXVAL( topo_top_ind(nys:nyn,nxl:nxr,0) ))
    10351037       
    10361038#if defined( __parallel )
  • palm/trunk/SOURCE/plant_canopy_model_mod.f90

    r4127 r4168  
    2727! -----------------
    2828! $Id$
     29! Replace function get_topography_top_index by topo_top_ind
     30!
     31! 4127 2019-07-30 14:47:10Z suehring
    2932! Output of 3D plant canopy variables changed. It is now relative to the local
    3033! terrain rather than located at the acutal vertical level in the model. This
     
    269272    USE indices,                                                               &
    270273        ONLY:  nbgp, nxl, nxlg, nxlu, nxr, nxrg, nyn, nyng, nys, nysg, nysv,   &
    271                nz, nzb, nzt
     274               nz, nzb, nzt, topo_top_ind
    272275
    273276    USE kinds
    274277
    275278    USE pegrid
    276 
    277     USE surface_mod,                                                           &
    278         ONLY:  get_topography_top_index_ji
    279279
    280280
     
    12921292!--          Check whether topography and local vegetation on top exceed
    12931293!--          height of the model domain.
    1294              k = get_topography_top_index_ji( j, i, 's' )
     1294             k = topo_top_ind(j,i,0)
    12951295             IF ( k + pch_index_ji(j,i) >= nzt + 1 )  THEN
    12961296                message_string =  'Local vegetation height on top of ' //      &
     
    15911591                   CALL message( 'pcm_read_plant_canopy_3d', 'PA0349', 1, 2, 0, 6, 0 )
    15921592                ENDIF
    1593                 kk = get_topography_top_index_ji( j, i, 's' )
     1593                kk = topo_top_ind(j,i,0)
    15941594                lad_s(nzb:nzpltop-kk, j, i) = col(kk:nzpl-1)*lad_type_coef(pctype)
    15951595             CASE DEFAULT
     
    16771677!
    16781678!--                Determine topography-top index on u-grid
    1679                    k_wall = get_topography_top_index_ji( j, i, 'u' )
     1679                   k_wall = topo_top_ind(j,i,1)
    16801680                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
    16811681
     
    17411741!
    17421742!--                Determine topography-top index on v-grid
    1743                    k_wall = get_topography_top_index_ji( j, i, 'v' )
     1743                   k_wall = topo_top_ind(j,i,2)
    17441744
    17451745                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
     
    18061806!
    18071807!--                Determine topography-top index on w-grid
    1808                    k_wall = get_topography_top_index_ji( j, i, 'w' )
     1808                   k_wall = topo_top_ind(j,i,3)
    18091809
    18101810                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i) - 1
     
    18581858                   DO  j = nys, nyn
    18591859!--                   Determine topography-top index on scalar-grid
    1860                       k_wall = get_topography_top_index_ji( j, i, 's' )
     1860                      k_wall = topo_top_ind(j,i,0)
    18611861                      DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
    18621862                         kk = k - k_wall   !- lad arrays are defined flat
     
    18691869                   DO  j = nys, nyn
    18701870!--                   Determine topography-top index on scalar-grid
    1871                       k_wall = get_topography_top_index_ji( j, i, 's' )
     1871                      k_wall = topo_top_ind(j,i,0)
    18721872                      DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
    18731873                         kk = k - k_wall   !- lad arrays are defined flat
     
    18851885!
    18861886!--                Determine topography-top index on scalar-grid
    1887                    k_wall = get_topography_top_index_ji( j, i, 's' )
     1887                   k_wall = topo_top_ind(j,i,0)
    18881888
    18891889                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
     
    19231923!
    19241924!--                Determine topography-top index on scalar-grid
    1925                    k_wall = get_topography_top_index_ji( j, i, 's' )
     1925                   k_wall = topo_top_ind(j,i,0)
    19261926
    19271927                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
     
    19521952!
    19531953!--                Determine topography-top index on scalar-grid
    1954                    k_wall = get_topography_top_index_ji( j, i, 's' )
     1954                   k_wall = topo_top_ind(j,i,0)
    19551955
    19561956                   DO  k = k_wall+1, k_wall + pch_index_ji(j,i)
     
    20462046!
    20472047!--          Determine topography-top index on u-grid
    2048              k_wall = get_topography_top_index_ji( j, i, 'u' )
     2048             k_wall = topo_top_ind(j,i,1)
    20492049             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
    20502050
     
    21062106!
    21072107!--          Determine topography-top index on v-grid
    2108              k_wall = get_topography_top_index_ji( j, i, 'v' )
     2108             k_wall = topo_top_ind(j,i,2)
    21092109
    21102110             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
     
    21662166!
    21672167!--          Determine topography-top index on w-grid
    2168              k_wall = get_topography_top_index_ji( j, i, 'w' )
     2168             k_wall = topo_top_ind(j,i,3)
    21692169
    21702170             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i) - 1
     
    22132213!
    22142214!--          Determine topography-top index on scalar grid
    2215              k_wall = get_topography_top_index_ji( j, i, 's' )
     2215             k_wall = topo_top_ind(j,i,0)
    22162216
    22172217             IF ( humidity ) THEN
     
    22332233!
    22342234!--          Determine topography-top index on scalar grid
    2235              k_wall = get_topography_top_index_ji( j, i, 's' )
     2235             k_wall = topo_top_ind(j,i,0)
    22362236
    22372237             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
     
    22662266!
    22672267!--          Determine topography-top index on scalar grid
    2268              k_wall = get_topography_top_index_ji( j, i, 's' )
     2268             k_wall = topo_top_ind(j,i,0)
    22692269
    22702270             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
     
    22922292!
    22932293!--          Determine topography-top index on scalar grid
    2294              k_wall = get_topography_top_index_ji( j, i, 's' )
     2294             k_wall = topo_top_ind(j,i,0)
    22952295
    22962296             DO  k = k_wall + 1, k_wall + pch_index_ji(j,i)
  • palm/trunk/SOURCE/pmc_interface_mod.f90

    r4029 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4029 2019-06-14 14:04:35Z raasch
    2730! nest_chemistry switch removed
    2831!
     
    478481    USE indices,                                                               &
    479482        ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nyn, nyng, nys, nysg, &
    480                nysv, nz, nzb, nzt, wall_flags_0
     483               nysv, nz, nzb, nzt, topo_top_ind, wall_flags_0
    481484
    482485    USE bulk_cloud_model_mod,                                                  &
     
    528531
    529532    USE surface_mod,                                                           &
    530         ONLY:  get_topography_top_index_ji, surf_def_h, surf_lsm_h, surf_usm_h
     533        ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
    531534
    532535    IMPLICIT NONE
     
    23792382          DO  j = nys, nyn
    23802383             sub_sum = 0.0_wp
    2381              k_wall = get_topography_top_index_ji( j, i, 'u' )
     2384             k_wall = topo_top_ind(j,i,1)
    23822385             DO   k = k_wall + 1, nzt
    23832386                sub_sum = sub_sum + dzw(k)
     
    24012404          DO  j = nys, nyn
    24022405             sub_sum = 0.0_wp
    2403              k_wall = get_topography_top_index_ji( j, i, 'u' )
     2406             k_wall = topo_top_ind(j,i,1)
    24042407             DO   k = k_wall + 1, nzt
    24052408                sub_sum = sub_sum + dzw(k)
     
    24232426          DO  i = nxl, nxr
    24242427             sub_sum = 0.0_wp
    2425              k_wall = get_topography_top_index_ji( j, i, 'v' )
     2428             k_wall = topo_top_ind(j,i,2)
    24262429             DO  k = k_wall + 1, nzt
    24272430                sub_sum = sub_sum + dzw(k)
     
    24452448          DO  i = nxl, nxr
    24462449             sub_sum = 0.0_wp
    2447              k_wall = get_topography_top_index_ji( j, i, 'v' )
     2450             k_wall = topo_top_ind(j,i,2)
    24482451             DO  k = k_wall + 1, nzt
    24492452                sub_sum = sub_sum + dzw(k)
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r4167 r4168  
    2828! -----------------
    2929! $Id$
    30 ! Changed behaviour of masked output over surface to follow terrain and ignore
    31 ! buildings (J.Resler, T.Gronemeier)
     30! Replace function get_topography_top_index by topo_top_ind
    3231!
    3332! 4157 2019-08-14 09:19:12Z suehring
     
    691690    USE indices,                                                               &
    692691        ONLY:  nnx, nny, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,   &
    693                nzb, nzt
     692               nzb, nzt, topo_top_ind
    694693
    695694    USE, INTRINSIC :: iso_c_binding
     
    737736
    738737    USE surface_mod,                                                           &
    739         ONLY:  get_topography_top_index, get_topography_top_index_ji,          &
    740                ind_pav_green, ind_veg_wall, ind_wat_win,                       &
     738        ONLY:  ind_pav_green, ind_veg_wall, ind_wat_win,                       &
    741739               surf_lsm_h, surf_lsm_v, surf_type, surf_usm_h, surf_usm_v,      &
    742740               vertical_surfaces_exist
     
    745743
    746744    CHARACTER(10) :: radiation_scheme = 'clear-sky' ! 'constant', 'clear-sky', or 'rrtmg'
    747 
    748     REAL(wp), PARAMETER ::  fill_value = -9999.0_wp       !< value for the _FillValue attribute
    749745
    750746!
     
    35833579!
    35843580!--       Determine minimum topography top index.
    3585           k_topo_l = MINVAL( get_topography_top_index( 's' ) )
     3581          k_topo_l = MINVAL( topo_top_ind(nys:nyn,nxl:nxr,0) )
    35863582#if defined( __parallel )
    35873583          CALL MPI_ALLREDUCE( k_topo_l, k_topo, 1, MPI_INTEGER, MPI_MIN, &
     
    37733769             DO  i = nxl, nxr
    37743770                DO  j = nys, nyn
    3775                    k_topo_l = get_topography_top_index_ji( j, i, 's' )
     3771                   k_topo_l = topo_top_ind(j,i,0)
    37763772                   DO k = k_topo_l+1, nzt+1
    37773773                      rad_lw_hr(k,j,i)     = rrtm_lwhr(0,k-k_topo_l)  * d_hours_day
     
    40664062!
    40674063!--             Obtain topography top index (lower bound of RRTMG)
    4068                 k_topo = get_topography_top_index_ji( j, i, 's' )
     4064                k_topo = topo_top_ind(j,i,0)
    40694065
    40704066                IF ( lw_radiation )  THEN
     
    56885684!
    56895685!--          Following expression equals former kk = k - nzb_s_inner(j,i)
    5690              kk = k - get_topography_top_index_ji( j, i, 's' )  !- lad arrays are defined flat
     5686             kk = k - topo_top_ind(j,i,0)  !- lad arrays are defined flat
    56915687             pc_heating_rate(kk, j, i) = (pcbinsw(ipcgb) + pcbinlw(ipcgb)) &
    56925688                 * pchf_prep(k) * pt(k, j, i) !-- = dT/dt
     
    57015697                 j = pcbl(iy, ipcgb)
    57025698                 k = pcbl(iz, ipcgb)
    5703                  kk = k - get_topography_top_index_ji( j, i, 's' )  !- lad arrays are defined flat
     5699                 kk = k - topo_top_ind(j,i,0)  !- lad arrays are defined flat
    57045700                 CALL pcm_calc_transpiration_rate( i, j, k, kk, pcbinsw(ipcgb), pcbinlw(ipcgb), &
    57055701                                                   pc_transpiration_rate(kk,j,i), pc_latent_rate(kk,j,i) )
     
    62176213!--    removed later). The following contruct finds the lowest / largest index
    62186214!--    for any upward-facing wall (see bit 12).
    6219        nzubl = MINVAL( get_topography_top_index( 's' ) )
    6220        nzutl = MAXVAL( get_topography_top_index( 's' ) )
     6215       nzubl = MINVAL( topo_top_ind(nys:nyn,nxl:nxr,0) )
     6216       nzutl = MAXVAL( topo_top_ind(nys:nyn,nxl:nxr,0) )
    62216217
    62226218       nzubl = MAX( nzubl, nzb )
     
    62356231!
    62366232!--                Find topography top index
    6237                    k_topo = get_topography_top_index_ji( j, i, 's' )
     6233                   k_topo = topo_top_ind(j,i,0)
    62386234
    62396235                   DO k = nzt+1, 0, -1
     
    63586354!
    63596355!--                Find topography top index
    6360                    k_topo = get_topography_top_index_ji( j, i, 's' )
     6356                   k_topo = topo_top_ind(j,i,0)
    63616357
    63626358                   DO k = k_topo + 1, pct(j,i)
     
    67936789        ALLOCATE( nzterrl_l((nyn-nys+1)*(nxr-nxl+1)) )
    67946790        nzterrl(nys:nyn,nxl:nxr) => nzterrl_l(1:(nyn-nys+1)*(nxr-nxl+1))
    6795         nzterrl = get_topography_top_index( 's' )
     6791        nzterrl = topo_top_ind(nys:nyn,nxl:nxr,0)
    67966792        CALL MPI_AllGather( nzterrl_l, nnx*nny, MPI_INTEGER, &
    67976793                            nzterr, nnx*nny, MPI_INTEGER, comm2d, ierr )
     
    68036799        DEALLOCATE(nzterrl_l)
    68046800#else
    6805         nzterr = RESHAPE( get_topography_top_index( 's' ), (/(nx+1)*(ny+1)/) )
     6801        nzterr = RESHAPE( topo_top_ind(nys:nyn,nxl:nxr,0), (/(nx+1)*(ny+1)/) )
    68066802#endif
    68076803        IF ( plant_canopy )  THEN
     
    68846880            DO i = nxl, nxr
    68856881                DO j = nys, nyn
    6886                     k = get_topography_top_index_ji( j, i, 's' )
     6882                    k = topo_top_ind(j,i,0)
    68876883
    68886884                    sub_lad(k:nz_plant_t, j, i) = lad_s(0:nz_plant_t-k, j, i)
     
    1014310139    LOGICAL      ::  two_d !< flag parameter that indicates 2D variables (horizontal cross sections)
    1014410140
     10141    REAL(wp) ::  fill_value = -999.0_wp    !< value for the _FillValue attribute
     10142
    1014510143    REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf !<
    1014610144
     
    1054010538    LOGICAL      ::  found       !<
    1054110539
     10540    REAL(wp)     ::  fill_value = -999.0_wp    !< value for the _FillValue attribute
     10541
    1054210542    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf !<
    1054310543
     
    1110711107    CHARACTER (LEN=*) ::  variable   !<
    1110811108
     11109    CHARACTER(LEN=5) ::  grid        !< flag to distinquish between staggered grids
     11110
    1110911111    INTEGER(iwp) ::  av              !<
    1111011112    INTEGER(iwp) ::  i               !<
    1111111113    INTEGER(iwp) ::  j               !<
    11112     INTEGER(iwp) ::  k               !<
    11113     INTEGER(iwp) ::  im              !< loop index for masked variables
    11114     INTEGER(iwp) ::  jm              !< loop index for masked variables
    11115     INTEGER(iwp) ::  kk              !<
     11114    INTEGER(iwp) ::  k               !<
    1111611115    INTEGER(iwp) ::  mid             !< masked output running index
    11117     INTEGER(iwp) ::  ktt             !< k index of highest terrain surface
     11116    INTEGER(iwp) ::  topo_top_index  !< k index of highest horizontal surface
    1111811117
    1111911118    LOGICAL ::  found                !< true if output array was found
     
    1112711126    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to array which needs to be resorted for output
    1112811127
     11128
     11129    found    = .TRUE.
     11130    grid     = 's'
    1112911131    resorted = .FALSE.
    11130     found = .TRUE.
    1113111132
    1113211133    SELECT CASE ( TRIM( variable ) )
     
    1121511216             DO  j = 1, mask_size_l(mid,2)
    1121611217!
    11217 !--             Get k index of the highest terraing surface
    11218                 im = mask_i(mid,i)
    11219                 jm = mask_j(mid,j)
    11220                 ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), &
    11221                               DIM = 1 ) - 1
     11218!--             Get k index of highest horizontal surface
     11219                topo_top_index = topo_top_ind(mask_j(mid,j), &
     11220                                              mask_i(mid,i),   &
     11221                                              0 )
     11222!
     11223!--             Save output array
    1122211224                DO  k = 1, mask_size_l(mid,3)
    11223                    kk = MIN( ktt+mask_k(mid,k), nzt+1 )
    11224 !
    11225 !--                Set value if not in building
    11226                    IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
    11227                       local_pf(i,j,k) = fill_value
    11228                    ELSE
    11229                       local_pf(i,j,k) = to_be_resorted(kk,jm,im)
    11230                    ENDIF
     11225                   local_pf(i,j,k) = to_be_resorted(                         &
     11226                                          MIN( topo_top_index+mask_k(mid,k), &
     11227                                               nzt+1 ),                      &
     11228                                          mask_j(mid,j),                     &
     11229                                          mask_i(mid,i)                     )
    1123111230                ENDDO
    1123211231             ENDDO
  • palm/trunk/SOURCE/surface_mod.f90

    r4159 r4168  
    2626! -----------------
    2727! $Id$
     28! Remove functions get_topography_top_index. These are now replaced by
     29! precalculated arrays because of too much CPU-time consumption
     30!
     31! 4159 2019-08-15 13:31:35Z suehring
    2832! Surface classification revised and adjusted to changes in init_grid
    2933!
     
    646650
    647651    PRIVATE
    648 
     652   
    649653    INTERFACE init_bc
    650654       MODULE PROCEDURE init_bc
     
    698702!
    699703!-- Public subroutines and functions
    700     PUBLIC get_topography_top_index,                                                               &
    701            get_topography_top_index_ji,                                                            &
    702            init_bc,                                                                                &
     704    PUBLIC init_bc,                                                                                &
    703705           init_single_surface_properties,                                                         &
    704706           init_surfaces,                                                                          &
     
    710712
    711713#if defined( _OPENACC )
    712     PUBLIC enter_surface_arrays, exit_surface_arrays
     714    PUBLIC enter_surface_arrays,                                                                   &
     715           exit_surface_arrays
    713716#endif
    714717
     
    31413144       
    31423145    END SUBROUTINE init_single_surface_properties
    3143 
    3144 !------------------------------------------------------------------------------!
    3145 ! Description:
    3146 ! ------------
    3147 !> Determines topography-top index at given (j,i)-position. 
    3148 !------------------------------------------------------------------------------!
    3149     FUNCTION get_topography_top_index_ji( j, i, grid )
    3150 
    3151        IMPLICIT NONE
    3152 
    3153        CHARACTER(LEN=*) ::  grid                         !< flag to distinquish between staggered grids
    3154        INTEGER(iwp)     ::  i                            !< grid index in x-dimension
    3155        INTEGER(iwp)     ::  ibit                         !< bit position where topography information is stored on respective grid
    3156        INTEGER(iwp)     ::  j                            !< grid index in y-dimension
    3157        INTEGER(iwp)     ::  get_topography_top_index_ji  !< topography top index
    3158 
    3159        SELECT CASE ( TRIM( grid ) )
    3160 
    3161           CASE ( 's'     )
    3162              ibit = 12
    3163           CASE ( 'u'     )
    3164              ibit = 14
    3165           CASE ( 'v'     )
    3166              ibit = 16
    3167           CASE ( 'w'     )
    3168              ibit = 18
    3169           CASE ( 's_out' )
    3170              ibit = 24
    3171           CASE DEFAULT
    3172 !
    3173 !--          Set default to scalar grid
    3174              ibit = 12
    3175 
    3176        END SELECT
    3177 
    3178        get_topography_top_index_ji = MAXLOC(                                   &
    3179                                      MERGE( 1, 0,                              &
    3180                                             BTEST( wall_flags_0(:,j,i), ibit ) &
    3181                                           ), DIM = 1                           &
    3182                                            ) - 1
    3183 
    3184        RETURN
    3185 
    3186     END FUNCTION get_topography_top_index_ji
    3187 
    3188 !------------------------------------------------------------------------------!
    3189 ! Description:
    3190 ! ------------
    3191 !> Determines topography-top index at each (j,i)-position. 
    3192 !------------------------------------------------------------------------------!
    3193     FUNCTION get_topography_top_index( grid )
    3194 
    3195        IMPLICIT NONE
    3196 
    3197        CHARACTER(LEN=*) ::  grid                      !< flag to distinquish between staggered grids
    3198        INTEGER(iwp)     ::  ibit                      !< bit position where topography information is stored on respective grid
    3199        INTEGER(iwp), DIMENSION(nys:nyn,nxl:nxr) ::  get_topography_top_index  !< topography top index
    3200 
    3201        SELECT CASE ( TRIM( grid ) )
    3202 
    3203           CASE ( 's'     )
    3204              ibit = 12
    3205           CASE ( 'u'     )
    3206              ibit = 14
    3207           CASE ( 'v'     )
    3208              ibit = 16
    3209           CASE ( 'w'     )
    3210              ibit = 18
    3211           CASE ( 's_out' )
    3212              ibit = 24
    3213           CASE DEFAULT
    3214 !
    3215 !--          Set default to scalar grid
    3216              ibit = 12
    3217 
    3218        END SELECT
    3219 
    3220        get_topography_top_index(nys:nyn,nxl:nxr) = MAXLOC(                     &
    3221                          MERGE( 1, 0,                                          &
    3222                                  BTEST( wall_flags_0(:,nys:nyn,nxl:nxr), ibit )&
    3223                               ), DIM = 1                                       &
    3224                                                          ) - 1
    3225 
    3226        RETURN
    3227 
    3228     END FUNCTION get_topography_top_index
    32293146
    32303147!------------------------------------------------------------------------------!
  • palm/trunk/SOURCE/turbulence_closure_mod.f90

    r4110 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 4110 2019-07-22 17:05:21Z suehring
    2730! pass integer flag array as well as boundary flags to WS scalar advection
    2831! routine
     
    254257        ONLY:  advc_flags_s,                                                  &
    255258               nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,    &
     259               topo_top_ind,                                                  &
    256260               wall_flags_0
    257261
     
    272276        ONLY:  bc_h,                                                          &
    273277               bc_v,                                                          &
    274                get_topography_top_index_ji,                                   &
    275278               surf_def_h,                                                    &
    276279               surf_def_v,                                                    &
     
    13651368          DO  i = nxlg, nxrg
    13661369             DO  j = nysg, nyng
    1367                 nz_s_shift = get_topography_top_index_ji( j, i, 's' )
     1370                nz_s_shift = topo_top_ind(j,i,0)
    13681371
    13691372                e(nz_s_shift:nzt+1,j,i)  =  e(0:nzt+1-nz_s_shift,j,i)
     
    13751378             DO  i = nxlg, nxrg
    13761379                DO  j = nysg, nyng
    1377                    nz_s_shift = get_topography_top_index_ji( j, i, 's' )
     1380                   nz_s_shift = topo_top_ind(j,i,0)
    13781381
    13791382                   diss(nz_s_shift:nzt+1,j,i) = diss(0:nzt+1-nz_s_shift,j,i)
     
    13941397             IF ( nxlg <= 0 .AND. nxrg >= 0 .AND.  &
    13951398                  nysg <= 0 .AND. nyng >= 0        )  THEN
    1396                 nz_s_shift_l = get_topography_top_index_ji( 0, 0, 's' )
     1399                nz_s_shift_l = topo_top_ind(0,0,0)
    13971400             ELSE
    13981401                nz_s_shift_l = 0
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4148 r4168  
    2828! -----------------
    2929! $Id$
     30! Replace function get_topography_top_index by topo_top_ind
     31!
     32! 4148 2019-08-08 11:26:00Z suehring
    3033! - Add anthropogenic heat output factors for heating and cooling to building
    3134!   data base
     
    538541    USE indices,                                                               &
    539542        ONLY:  nx, ny, nnx, nny, nnz, nxl, nxlg, nxr, nxrg, nyn, nyng, nys,    &
    540                nysg, nzb, nzt, nbgp, wall_flags_0
     543               nysg, nzb, nzt, nbgp, topo_top_ind, wall_flags_0
    541544
    542545    USE, INTRINSIC :: iso_c_binding
     
    559562
    560563    USE surface_mod,                                                           &
    561         ONLY:  get_topography_top_index_ji, get_topography_top_index,          &
    562                ind_pav_green, ind_veg_wall, ind_wat_win, surf_usm_h,           &
     564        ONLY:  ind_pav_green, ind_veg_wall, ind_wat_win, surf_usm_h,           &
    563565               surf_usm_v, surface_restore_elements
    564566
     
    61596161                    READ( 151, *, err=12, end=13 )  i, j, k, heat
    61606162                    IF ( i >= nxl  .AND.  i <= nxr  .AND.  j >= nys  .AND.  j <= nyn )  THEN
    6161                         IF ( k <= naheatlayers  .AND.  k > get_topography_top_index_ji( j, i, 's' ) )  THEN
     6163                        IF ( k <= naheatlayers  .AND.  k > topo_top_ind(j,i,0) )  THEN
    61626164!--                         write heat into the array
    61636165                            aheat(k,j,i) = heat
     
    73947396              ELSE
    73957397                 WRITE(9,*) 'Problem reading USM data:'
    7396                  WRITE(9,*) l,i,j,kw,get_topography_top_index_ji( j, i, 's' )
    7397                  WRITE(9,*) ii,iw,jw,kw,get_topography_top_index_ji( jw, iw, 's' )
     7398                 WRITE(9,*) l,i,j,kw,topo_top_ind(j,i,0)
     7399                 WRITE(9,*) ii,iw,jw,kw,topo_top_ind(jw,iw,0)
    73987400                 WRITE(9,*) usm_par(ii,jw,iw),usm_par(ii+1,jw,iw)
    73997401                 WRITE(9,*) usm_par(ii+2,jw,iw),usm_par(ii+3,jw,iw)
     
    86148616!--         TO_DO: activate, if testcase is available
    86158617!--         !$OMP PARALLEL DO PRIVATE (i, j, k, acoef, rho_cp)
    8616 !--         it may also improve performance to move get_topography_top_index_ji before the k-loop
     8618!--         it may also improve performance to move topo_top_ind before the k-loop
    86178619            DO i = nxl, nxr
    86188620               DO j = nys, nyn
    86198621                  DO k = nz_urban_b, min(nz_urban_t,naheatlayers)
    8620                      IF ( k > get_topography_top_index_ji( j, i, 's' ) ) THEN
     8622                     IF ( k > topo_top_ind(j,i,0) ) THEN
    86218623!
    86228624!--                    increase of pt in box i,j,k in time dt_3d
  • palm/trunk/SOURCE/user_data_output_mask.f90

    r4069 r4168  
    2525! -----------------
    2626! $Id$
     27! Remove dependency on surface_mod + example for terrain-following output
     28! adjusted
     29!
     30! 4069 2019-07-01 14:05:51Z Giersch
    2731! Masked output running index mid has been introduced as a local variable to
    2832! avoid runtime error (Loop variable has been modified) in time_integration
     
    7276    USE kinds
    7377   
    74     USE surface_mod,                                                           &
    75         ONLY:  get_topography_top_index_ji
    76    
    7778    USE user
    7879
     
    8081
    8182    CHARACTER (LEN=*) ::  variable  !<
    82     CHARACTER (LEN=5) ::  grid      !< flag to distinquish between staggered grids
    8383
    8484    INTEGER(iwp) ::  av             !<
     
    8787!    INTEGER(iwp) ::  j              !<
    8888!    INTEGER(iwp) ::  k              !<
    89 !    INTEGER(iwp) ::  topo_top_ind  !< k index of highest horizontal surface
     89!    INTEGER(iwp) ::  topo_top_index !< k index of highest horizontal surface
    9090
    9191    LOGICAL ::  found               !<
     
    102102
    103103    found = .TRUE.
    104     grid  = 's'
    105104
    106105    SELECT CASE ( TRIM( variable ) )
     
    131130!!
    132131!!--                   Get k index of highest horizontal surface
    133 !                      topo_top_ind = get_topography_top_index_ji( &
     132!                      topo_top_index = topo_top_ind( &
    134133!                                        mask_j(mid,j), &
    135134!                                        mask_i(mid,i), &
    136 !                                        grid )
     135!                                        1          )
    137136!!
    138137!!--                   Save output array
    139138!                      DO  k = 1, mask_size_l(mid,3)
    140 !                         local_pf(i,j,k) = u2(MIN( topo_top_ind+mask_k(mid,k),&
    141 !                                                   nzt+1 ),                   &
    142 !                                              mask_j(mid,j),                  &
     139!                         local_pf(i,j,k) = u2(MIN( topo_top_index+mask_k(mid,k),&
     140!                                                   nzt+1 ),                     &
     141!                                              mask_j(mid,j),                    &
    143142!                                              mask_i(mid,i)                   )
    144143!                      ENDDO
     
    166165!!
    167166!!--                   Get k index of highest horizontal surface
    168 !                      topo_top_ind = get_topography_top_index_ji( &
     167!                      topo_top_index = topo_top_ind(  &
    169168!                                        mask_j(mid,j), &
    170169!                                        mask_i(mid,i), &
    171 !                                        grid )
     170!                                        1 )
    172171!!
    173172!!--                   Save output array
    174173!                      DO  k = 1, mask_size_l(mid,3)
    175 !                         local_pf(i,j,k) = u2_av(                             &
    176 !                                              MIN( topo_top_ind+mask_k(mid,k),&
    177 !                                                   nzt+1 ),                   &
    178 !                                              mask_j(mid,j),                  &
     174!                         local_pf(i,j,k) = u2_av(                               &
     175!                                              MIN( topo_top_index+mask_k(mid,k),&
     176!                                                   nzt+1 ),                     &
     177!                                              mask_j(mid,j),                    &
    179178!                                              mask_i(mid,i)                   )
    180179!                      ENDDO
  • palm/trunk/SOURCE/virtual_measurement_mod.f90

    r3988 r4168  
    2525! -----------------
    2626! $Id$
     27! Replace function get_topography_top_index by topo_top_ind
     28!
     29! 3988 2019-05-22 11:32:37Z kanani
    2730! Add variables to enable steering of output interval for virtual measurements
    2831!
     
    115118
    116119    USE indices,                                                               &
    117         ONLY:  nzb, nzt, nxl, nxr, nys, nyn, nx, ny, wall_flags_0
     120        ONLY:  nzb, nzt, nxl, nxr, nys, nyn, nx, ny, topo_top_ind, wall_flags_0
    118121
    119122    USE kinds
     
    435438               netcdf_data_input_get_dimension_length,                         &
    436439               netcdf_data_input_att, netcdf_data_input_var
    437                
    438     USE surface_mod,                                                           &
    439         ONLY:  get_topography_top_index_ji
    440440       
    441441    IMPLICIT NONE
     
    763763!--                Determine vertical index which correspond to the observation
    764764!--                height.
    765                    ksurf = get_topography_top_index_ji( js, is, 's' )
     765                   ksurf = topo_top_ind(js,is,0)
    766766                   ks = MINLOC( ABS( zu - zw(ksurf) - z_ag(t,n) ), DIM = 1 ) - 1
    767767!
     
    822822                      vmea(l)%j(ns) = j
    823823                      vmea(l)%k(ns) = k
    824                       vmea(l)%z_ag(ns)  = zu(k) -                              &
    825                                    zw(get_topography_top_index_ji( j, i, 's' ))
     824                      vmea(l)%z_ag(ns)  = zu(k) - zw(topo_top_ind(j,i,0))
    826825                   ENDIF
    827826                ENDDO
Note: See TracChangeset for help on using the changeset viewer.