Ignore:
Timestamp:
Aug 16, 2019 11:01:48 AM (2 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/diagnostic_output_quantities_mod.f90

    r4157 r4167  
    2525! -----------------
    2626! $Id$
     27! Changed behaviour of masked output over surface to follow terrain and ignore
     28! buildings (J.Resler, T.Gronemeier)
     29!
     30! 4157 2019-08-14 09:19:12Z suehring
    2731! Initialization restructured, in order to work also when data output during
    2832! spin-up is enabled.
     
    8690!
    8791    USE kinds
    88 ! 
     92!
    8993!     USE land_surface_model_mod,                                                &
    9094!         ONLY:  zs
     
    694698       
    695699    USE indices
    696    
    697     USE surface_mod,                                                           &
    698         ONLY:  get_topography_top_index_ji
    699  
     700
    700701    IMPLICIT NONE
    701702
    702     CHARACTER (LEN=*) ::  variable  !<
    703     CHARACTER (LEN=5) ::  grid      !< flag to distinquish between staggered grids
    704 
    705     INTEGER(iwp) ::  av           !< index indicating averaged or instantaneous output
    706     INTEGER(iwp) ::  flag_nr      !< number of the topography flag (0: scalar, 1: u, 2: v, 3: w)
    707     INTEGER(iwp) ::  i            !< index variable along x-direction
    708     INTEGER(iwp) ::  j            !< index variable along y-direction
    709     INTEGER(iwp) ::  k            !< index variable along z-direction
    710     INTEGER(iwp) ::  mid          !< masked output running index
    711     INTEGER(iwp) ::  topo_top_ind !< k index of highest horizontal surface
    712 
    713     LOGICAL ::  found             !< true if variable is in list
    714     LOGICAL ::  resorted          !< true if array is resorted
     703    CHARACTER (LEN=*) ::  variable   !<
     704    CHARACTER (LEN=5) ::  grid       !< flag to distinquish between staggered grids
     705
     706    INTEGER(iwp) ::  av              !< index indicating averaged or instantaneous output
     707    INTEGER(iwp) ::  flag_nr         !< number of the topography flag (0: scalar, 1: u, 2: v, 3: w)
     708    INTEGER(iwp) ::  i               !< index variable along x-direction
     709    INTEGER(iwp) ::  j               !< index variable along y-direction
     710    INTEGER(iwp) ::  k               !< index variable along z-direction
     711    INTEGER(iwp) ::  im              !< loop index for masked variables
     712    INTEGER(iwp) ::  jm              !< loop index for masked variables
     713    INTEGER(iwp) ::  kk              !< masked output index variable along z-direction
     714    INTEGER(iwp) ::  mid             !< masked output running index
     715    INTEGER(iwp) ::  ktt             !< k index of highest horizontal surface
     716
     717    LOGICAL      ::  found           !< true if variable is in list
     718    LOGICAL      ::  resorted        !< true if array is resorted
    715719
    716720    REAL(wp),                                                                  &
     
    718722          local_pf   !<
    719723    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to array which needs to be resorted for output
     724
     725    REAL(wp), PARAMETER   ::  fill_value = -9999.0_wp       !< value for the _FillValue attribute
    720726
    721727    flag_nr  = 0
     
    788794             DO  j = 1, mask_size_l(mid,2)
    789795!
    790 !--             Get k index of highest horizontal surface
    791                 topo_top_ind = get_topography_top_index_ji( mask_j(mid,j),     &
    792                                                             mask_i(mid,i),     &
    793                                                             grid )
    794 !
    795 !--             Save output array
     796!--             Get k index of the highest terraing surface
     797                im = mask_i(mid,i)
     798                jm = mask_j(mid,j)
     799                ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_0(:,jm,im), 5 )), &
     800                              DIM = 1 ) - 1
    796801                DO  k = 1, mask_size_l(mid,3)
    797                    local_pf(i,j,k) = to_be_resorted(                           &
    798                                           MIN( topo_top_ind+mask_k(mid,k),     &
    799                                                nzt+1 ),                        &
    800                                           mask_j(mid,j),                       &
    801                                           mask_i(mid,i)                     )
     802                   kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     803!
     804!--                Set value if not in building
     805                   IF ( BTEST( wall_flags_0(kk,jm,im), 6 ) )  THEN
     806                      local_pf(i,j,k) = fill_value
     807                   ELSE
     808                      local_pf(i,j,k) = to_be_resorted(kk,jm,im)
     809                   ENDIF
    802810                ENDDO
    803811             ENDDO
Note: See TracChangeset for help on using the changeset viewer.