Ignore:
Timestamp:
Jun 29, 2020 12:36:47 PM (4 years ago)
Author:
raasch
Message:

files re-formatted to follow the PALM coding standard

File:
1 edited

Legend:

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

    r4560 r4583  
    11!> @file diagnostic_output_quantities_mod.f90
    2 !------------------------------------------------------------------------------!
     2!--------------------------------------------------------------------------------------------------!
    33! This file is part of the PALM model system.
    44!
    5 ! PALM is free software: you can redistribute it and/or modify it under the
    6 ! terms of the GNU General Public License as published by the Free Software
    7 ! Foundation, either version 3 of the License, or (at your option) any later
    8 ! version.
    9 !
    10 ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
    11 ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
    12 ! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
    13 !
    14 ! You should have received a copy of the GNU General Public License along with
    15 ! PALM. If not, see <http://www.gnu.org/licenses/>.
     5! PALM is free software: you can redistribute it and/or modify it under the terms of the GNU General
     6! Public License as published by the Free Software Foundation, either version 3 of the License, or
     7! (at your option) any later version.
     8!
     9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
     10! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
     11! Public License for more details.
     12!
     13! You should have received a copy of the GNU General Public License along with PALM. If not, see
     14! <http://www.gnu.org/licenses/>.
    1615!
    1716! Copyright 1997-2020 Leibniz Universitaet Hannover
    18 !------------------------------------------------------------------------------!
     17!--------------------------------------------------------------------------------------------------!
    1918!
    2019! Current revisions:
     
    2524! -----------------
    2625! $Id$
     26! file re-formatted to follow the PALM coding standard
     27!
     28! 4560 2020-06-11 12:19:47Z suehring
    2729! - Bugfix in calculation of vertical momentum and scalar fluxes
    2830! - remove averaged output variables from PUBLIC list
    29 ! 
     31!
    3032! 4535 2020-05-15 12:07:23Z raasch
    3133! bugfix for restart data format query
    32 ! 
     34!
    3335! 4518 2020-05-04 15:44:28Z suehring
    34 ! * Define arrays over ghost points in order to allow for standard mpi-io
    35 !   treatment. By this modularization of restart-data input is possible with
    36 !   the module interface.
     36! * Define arrays over ghost points in order to allow for standard mpi-io treatment. By this
     37!   modularization of restart-data input is possible with the module interface.
    3738! * Bugfix: add missing restart input of wtheta_av, wq_av, wu_av, and wv_av.
    38 ! 
     39!
    3940! 4517 2020-05-03 14:29:30Z raasch
    4041! use statement for exchange horiz added,
    4142! bugfix for call of exchange horiz 2d
    42 ! 
     43!
    4344! 4431 2020-02-27 23:23:01Z gronemeier
    4445! added wspeed and wdir output; bugfix: set fill_value in case of masked output
    4546!
    4647! 4360 2020-01-07 11:25:50Z suehring
    47 ! added output of wu, wv, wtheta and wq to enable covariance calculation
    48 ! according to temporal EC method
     48! added output of wu, wv, wtheta and wq to enable covariance calculation according to temporal EC
     49! method
    4950!
    5051! 4346 2019-12-18 11:55:56Z motisi
    51 ! Introduction of wall_flags_total_0, which currently sets bits based on static
    52 ! topography information used in wall_flags_static_0
     52! Introduction of wall_flags_total_0, which currently sets bits based on static topography
     53! information used in wall_flags_static_0
    5354!
    5455! 4331 2019-12-10 18:25:02Z suehring
     
    6364!
    6465! 4167 2019-08-16 11:01:48Z suehring
    65 ! Changed behaviour of masked output over surface to follow terrain and ignore
    66 ! buildings (J.Resler, T.Gronemeier)
     66! Changed behaviour of masked output over surface to follow terrain and ignore buildings
     67! (J.Resler, T.Gronemeier)
    6768!
    6869! 4157 2019-08-14 09:19:12Z suehring
    69 ! Initialization restructured, in order to work also when data output during
    70 ! spin-up is enabled.
     70! Initialization restructured, in order to work also when data output during spin-up is enabled.
    7171!
    7272! 4132 2019-08-02 12:34:17Z suehring
     
    7474!
    7575! 4069 2019-07-01 14:05:51Z Giersch
    76 ! Masked output running index mid has been introduced as a local variable to
    77 ! avoid runtime error (Loop variable has been modified) in time_integration
     76! Masked output running index mid has been introduced as a local variable to avoid runtime error
     77! (Loop variable has been modified) in time_integration
    7878!
    7979! 4039 2019-06-18 10:32:41Z suehring
    80 ! - Add output of uu, vv, ww to enable variance calculation according temporal
    81 !   EC method
     80! - Add output of uu, vv, ww to enable variance calculation according temporal EC method
    8281! - Allocate arrays only when they are required
    8382! - Formatting adjustment
     
    8988!
    9089! 3995 2019-05-22 18:59:54Z suehring
    91 ! Avoid compiler warnings about unused variable and fix string operation which
    92 ! is not allowed with PGI compiler
     90! Avoid compiler warnings about unused variable and fix string operation which is not allowed with
     91! PGI compiler
    9392!
    9493! 3994 2019-05-22 18:08:09Z suehring
     
    103102! ------------
    104103!> ...
    105 !------------------------------------------------------------------------------!
     104!--------------------------------------------------------------------------------------------------!
    106105 MODULE diagnostic_output_quantities_mod
    107106
    108     USE arrays_3d,                                                             &
    109         ONLY:  ddzu,                                                           &
    110                pt,                                                             &
    111                q,                                                              &
    112                u,                                                              &
    113                v,                                                              &
    114                w,                                                              &
    115                zu,                                                             &
     107    USE arrays_3d,                                                                                 &
     108        ONLY:  ddzu,                                                                               &
     109               pt,                                                                                 &
     110               q,                                                                                  &
     111               u,                                                                                  &
     112               v,                                                                                  &
     113               w,                                                                                  &
     114               zu,                                                                                 &
    116115               zw
    117116
    118     USE basic_constants_and_equations_mod,                                     &
     117    USE basic_constants_and_equations_mod,                                                         &
    119118        ONLY:  kappa, pi
    120119
    121     USE control_parameters,                                                    &
    122         ONLY:  current_timestep_number,                                        &
    123                data_output,                                                    &
    124                message_string,                                                 &
    125                restart_data_format_output,                                     &
     120    USE control_parameters,                                                                        &
     121        ONLY:  current_timestep_number,                                                            &
     122               data_output,                                                                        &
     123               message_string,                                                                     &
     124               restart_data_format_output,                                                         &
    126125               varnamelength
    127126!
    128 !     USE cpulog,                                                                &
     127!     USE cpulog,                                                                                   &
    129128!         ONLY:  cpu_log, log_point
    130129
    131     USE exchange_horiz_mod,                                                    &
     130    USE exchange_horiz_mod,                                                                        &
    132131        ONLY:  exchange_horiz_2d
    133132
    134    USE grid_variables,                                                         &
     133   USE grid_variables,                                                                             &
    135134        ONLY:  ddx, ddy
    136135
    137     USE indices,                                                               &
    138         ONLY:  nbgp,                                                           &
    139                nxl,                                                            &
    140                nxlg,                                                           &
    141                nxr,                                                            &
    142                nxrg,                                                           &
    143                nyn,                                                            &
    144                nyng,                                                           &
    145                nys,                                                            &
    146                nysg,                                                           &
    147                nzb,                                                            &
    148                nzt,                                                            &
     136    USE indices,                                                                                   &
     137        ONLY:  nbgp,                                                                               &
     138               nxl,                                                                                &
     139               nxlg,                                                                               &
     140               nxr,                                                                                &
     141               nxrg,                                                                               &
     142               nyn,                                                                                &
     143               nyng,                                                                               &
     144               nys,                                                                                &
     145               nysg,                                                                               &
     146               nzb,                                                                                &
     147               nzt,                                                                                &
    149148               wall_flags_total_0
    150149
     
    156155               wrd_mpi_io
    157156
    158     USE surface_mod,                                                           &
    159         ONLY:  surf_def_h,                                                     &
    160                surf_lsm_h,                                                     &
    161                surf_type,                                                      &
     157    USE surface_mod,                                                                               &
     158        ONLY:  surf_def_h,                                                                         &
     159               surf_lsm_h,                                                                         &
     160               surf_type,                                                                          &
    162161               surf_usm_h
    163162
     
    209208!
    210209!-- Public variables
    211     PUBLIC do_all,                                                             &
    212            initialized_diagnostic_output_quantities,                           &
    213            prepared_diagnostic_output_quantities,                              &
     210    PUBLIC do_all,                                                                                 &
     211           initialized_diagnostic_output_quantities,                                               &
     212           prepared_diagnostic_output_quantities,                                                  &
    214213           timestep_number_at_prev_calc
    215214!
    216215!-- Public routines
    217     PUBLIC doq_3d_data_averaging,                                              &
    218            doq_calculate,                                                      &
    219            doq_check_data_output,                                              &
    220            doq_define_netcdf_grid,                                             &
    221            doq_init,                                                           &
    222            doq_output_2d,                                                      &
    223            doq_output_3d,                                                      &
    224            doq_output_mask,                                                    &
    225            doq_rrd_local,                                                      &
     216    PUBLIC doq_3d_data_averaging,                                                                  &
     217           doq_calculate,                                                                          &
     218           doq_check_data_output,                                                                  &
     219           doq_define_netcdf_grid,                                                                 &
     220           doq_init,                                                                               &
     221           doq_output_2d,                                                                          &
     222           doq_output_3d,                                                                          &
     223           doq_output_mask,                                                                        &
     224           doq_rrd_local,                                                                          &
    226225           doq_wrd_local
    227226
     
    275274 CONTAINS
    276275
    277 !------------------------------------------------------------------------------!
     276!--------------------------------------------------------------------------------------------------!
    278277! Description:
    279278! ------------
    280 !> Sum up and time-average diagnostic output quantities as well as allocate
    281 !> the array necessary for storing the average.
    282 !------------------------------------------------------------------------------!
     279!> Sum up and time-average diagnostic output quantities as well as allocate the array necessary for
     280!> storing the average.
     281!--------------------------------------------------------------------------------------------------!
    283282 SUBROUTINE doq_3d_data_averaging( mode, variable )
    284283
    285     USE control_parameters,                                                    &
     284    USE control_parameters,                                                                        &
    286285        ONLY:  average_count_3d
    287286
     
    293292    INTEGER(iwp) ::  k !<
    294293
     294
    295295    IF ( mode == 'allocate' )  THEN
    296296
     
    383383
    384384          CASE ( 'ti' )
    385              IF ( ALLOCATED( ti_av ) ) THEN
     385             IF ( ALLOCATED( ti_av ) )  THEN
    386386                DO  i = nxl, nxr
    387387                   DO  j = nys, nyn
     
    394394
    395395          CASE ( 'uu' )
    396              IF ( ALLOCATED( uu_av ) ) THEN
     396             IF ( ALLOCATED( uu_av ) )  THEN
    397397                DO  i = nxl, nxr
    398398                   DO  j = nys, nyn
     
    405405
    406406          CASE ( 'vv' )
    407              IF ( ALLOCATED( vv_av ) ) THEN
     407             IF ( ALLOCATED( vv_av ) )  THEN
    408408                DO  i = nxl, nxr
    409409                   DO  j = nys, nyn
     
    416416
    417417          CASE ( 'ww' )
    418              IF ( ALLOCATED( ww_av ) ) THEN
     418             IF ( ALLOCATED( ww_av ) )  THEN
    419419                DO  i = nxl, nxr
    420420                   DO  j = nys, nyn
     
    427427
    428428          CASE ( 'wu' )
    429              IF ( ALLOCATED( wu_av ) ) THEN
     429             IF ( ALLOCATED( wu_av ) )  THEN
    430430                DO  i = nxl, nxr
    431431                   DO  j = nys, nyn
     
    438438
    439439          CASE ( 'wv' )
    440              IF ( ALLOCATED( wv_av ) ) THEN
     440             IF ( ALLOCATED( wv_av ) )  THEN
    441441                DO  i = nxl, nxr
    442442                   DO  j = nys, nyn
     
    449449
    450450          CASE ( 'wtheta' )
    451              IF ( ALLOCATED( wtheta_av ) ) THEN
     451             IF ( ALLOCATED( wtheta_av ) )  THEN
    452452                DO  i = nxl, nxr
    453453                   DO  j = nys, nyn
     
    460460
    461461          CASE ( 'wq' )
    462              IF ( ALLOCATED( wq_av ) ) THEN
     462             IF ( ALLOCATED( wq_av ) )  THEN
    463463                DO  i = nxl, nxr
    464464                   DO  j = nys, nyn
     
    471471
    472472          CASE ( 'theta_2m*' )
    473              IF ( ALLOCATED( pt_2m_av ) ) THEN
     473             IF ( ALLOCATED( pt_2m_av ) )  THEN
    474474                DO  i = nxl, nxr
    475475                   DO  j = nys, nyn
     
    480480
    481481          CASE ( 'wspeed_10m*' )
    482              IF ( ALLOCATED( uv_10m_av ) ) THEN
     482             IF ( ALLOCATED( uv_10m_av ) )  THEN
    483483                DO  i = nxl, nxr
    484484                   DO  j = nys, nyn
     
    489489
    490490          CASE ( 'wspeed' )
    491             IF ( ALLOCATED( wspeed_av ) ) THEN
     491            IF ( ALLOCATED( wspeed_av ) )  THEN
    492492               DO  i = nxl, nxr
    493493                  DO  j = nys, nyn
     
    500500
    501501          CASE ( 'wdir' )
    502              IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) ) THEN
     502             IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) )  THEN
    503503                DO  i = nxl, nxr
    504504                   DO  j = nys, nyn
     
    521521
    522522          CASE ( 'ti' )
    523              IF ( ALLOCATED( ti_av ) ) THEN
     523             IF ( ALLOCATED( ti_av ) )  THEN
    524524                DO  i = nxl, nxr
    525525                   DO  j = nys, nyn
     
    532532
    533533          CASE ( 'uu' )
    534              IF ( ALLOCATED( uu_av ) ) THEN
     534             IF ( ALLOCATED( uu_av ) )  THEN
    535535                DO  i = nxl, nxr
    536536                   DO  j = nys, nyn
     
    543543
    544544          CASE ( 'vv' )
    545              IF ( ALLOCATED( vv_av ) ) THEN
     545             IF ( ALLOCATED( vv_av ) )  THEN
    546546                DO  i = nxl, nxr
    547547                   DO  j = nys, nyn
     
    554554
    555555          CASE ( 'ww' )
    556              IF ( ALLOCATED( ww_av ) ) THEN
     556             IF ( ALLOCATED( ww_av ) )  THEN
    557557                DO  i = nxl, nxr
    558558                   DO  j = nys, nyn
     
    565565
    566566          CASE ( 'wu' )
    567              IF ( ALLOCATED( wu_av ) ) THEN
     567             IF ( ALLOCATED( wu_av ) )  THEN
    568568                DO  i = nxl, nxr
    569569                   DO  j = nys, nyn
     
    576576
    577577          CASE ( 'wv' )
    578              IF ( ALLOCATED( wv_av ) ) THEN
     578             IF ( ALLOCATED( wv_av ) )  THEN
    579579                DO  i = nxl, nxr
    580580                   DO  j = nys, nyn
     
    587587
    588588          CASE ( 'wtheta' )
    589              IF ( ALLOCATED( wtheta_av ) ) THEN
     589             IF ( ALLOCATED( wtheta_av ) )  THEN
    590590                DO  i = nxl, nxr
    591591                   DO  j = nys, nyn
     
    598598
    599599          CASE ( 'wq' )
    600              IF ( ALLOCATED( wq_av ) ) THEN
     600             IF ( ALLOCATED( wq_av ) )  THEN
    601601                DO  i = nxl, nxr
    602602                   DO  j = nys, nyn
     
    609609
    610610         CASE ( 'theta_2m*' )
    611             IF ( ALLOCATED( pt_2m_av ) ) THEN
     611            IF ( ALLOCATED( pt_2m_av ) )  THEN
    612612               DO  i = nxlg, nxrg
    613613                  DO  j = nysg, nyng
     
    619619
    620620         CASE ( 'wspeed_10m*' )
    621             IF ( ALLOCATED( uv_10m_av ) ) THEN
     621            IF ( ALLOCATED( uv_10m_av ) )  THEN
    622622               DO  i = nxlg, nxrg
    623623                  DO  j = nysg, nyng
     
    629629
    630630         CASE ( 'wspeed' )
    631              IF ( ALLOCATED( wspeed_av ) ) THEN
     631             IF ( ALLOCATED( wspeed_av ) )  THEN
    632632                DO  i = nxl, nxr
    633633                   DO  j = nys, nyn
     
    640640
    641641          CASE ( 'wdir' )
    642              IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) ) THEN
     642             IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) )  THEN
    643643
    644644                IF ( .NOT. ALLOCATED( wdir_av ) )  THEN
     
    652652                         u_center_av(k,j,i) = u_center_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    653653                         v_center_av(k,j,i) = v_center_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    654                          wdir_av(k,j,i) = ATAN2( u_center_av(k,j,i), v_center_av(k,j,i) ) &
    655                                         / pi * 180.0_wp + 180.0_wp
     654                         wdir_av(k,j,i) = ATAN2( u_center_av(k,j,i), v_center_av(k,j,i) )          &
     655                                          / pi * 180.0_wp + 180.0_wp
    656656                      ENDDO
    657657                   ENDDO
     
    666666 END SUBROUTINE doq_3d_data_averaging
    667667
    668 !------------------------------------------------------------------------------!
     668!--------------------------------------------------------------------------------------------------!
    669669! Description:
    670670! ------------
    671671!> Check data output for diagnostic output
    672 !------------------------------------------------------------------------------!
     672!--------------------------------------------------------------------------------------------------!
    673673 SUBROUTINE doq_check_data_output( var, unit, i, ilen, k )
    674674
     
    682682    INTEGER(iwp), OPTIONAL, INTENT(IN) ::  k     !< Output is xy mode? 0 = no, 1 = yes
    683683
     684
    684685    SELECT CASE ( TRIM( var ) )
    685686
     
    719720!--       Check if output quantity is _xy only.
    720721          IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
    721              message_string = 'illegal value for data_output: "' //            &
    722                               TRIM( var ) // '" & only 2d-horizontal ' //      &
     722             message_string = 'illegal value for data_output: "' //                                &
     723                              TRIM( var ) // '" & only 2d-horizontal ' //                          &
    723724                              'cross sections are allowed for this value'
    724725             CALL message( 'diagnostic_output', 'PA0111', 1, 2, 0, 6, 0 )
     
    736737 END SUBROUTINE doq_check_data_output
    737738
    738 !------------------------------------------------------------------------------!
     739!--------------------------------------------------------------------------------------------------!
    739740!
    740741! Description:
    741742! ------------
    742743!> Subroutine defining appropriate grid for netcdf variables.
    743 !------------------------------------------------------------------------------!
     744!--------------------------------------------------------------------------------------------------!
    744745 SUBROUTINE doq_define_netcdf_grid( variable, found, grid_x, grid_y, grid_z )
    745746
     
    747748
    748749    CHARACTER (LEN=*), INTENT(IN)  ::  variable    !<
    749     LOGICAL, INTENT(OUT)           ::  found       !<
    750750    CHARACTER (LEN=*), INTENT(OUT) ::  grid_x      !<
    751751    CHARACTER (LEN=*), INTENT(OUT) ::  grid_y      !<
    752752    CHARACTER (LEN=*), INTENT(OUT) ::  grid_z      !<
    753753
     754    LOGICAL, INTENT(OUT)           ::  found       !<
     755
     756
    754757    found  = .TRUE.
    755758
     
    757760!
    758761!--    s grid
    759        CASE ( 'ti', 'ti_xy', 'ti_xz', 'ti_yz',                                 &
    760               'wspeed', 'wspeed_xy', 'wspeed_xz', 'wspeed_yz',                 &
     762       CASE ( 'ti', 'ti_xy', 'ti_xz', 'ti_yz',                                                     &
     763              'wspeed', 'wspeed_xy', 'wspeed_xz', 'wspeed_yz',                                     &
    761764              'wdir', 'wdir_xy', 'wdir_xz', 'wdir_yz' )
    762765
     
    787790!
    788791!--    w grid
    789        CASE ( 'ww', 'ww_xy', 'ww_xz', 'ww_yz',                                 &
    790               'wu', 'wu_xy', 'wu_xz', 'wu_yz',                                 &
    791               'wv', 'wv_xy', 'wv_xz', 'wv_yz',                                 &
    792               'wtheta', 'wtheta_xy', 'wtheta_xz', 'wtheta_yz',                 &
    793               'wq', 'wq_xy', 'wq_xz', 'wq_yz'  )
     792       CASE ( 'ww', 'ww_xy', 'ww_xz', 'ww_yz',                                                     &
     793              'wu', 'wu_xy', 'wu_xz', 'wu_yz',                                                     &
     794              'wv', 'wv_xy', 'wv_xz', 'wv_yz',                                                     &
     795              'wtheta', 'wtheta_xy', 'wtheta_xz', 'wtheta_yz',                                     &
     796              'wq', 'wq_xy', 'wq_xz', 'wq_yz' )
    794797
    795798          grid_x = 'x'
     
    808811 END SUBROUTINE doq_define_netcdf_grid
    809812
    810 !------------------------------------------------------------------------------!
     813!--------------------------------------------------------------------------------------------------!
    811814!
    812815! Description:
    813816! ------------
    814817!> Subroutine defining 2D output variables
    815 !------------------------------------------------------------------------------!
    816  SUBROUTINE doq_output_2d( av, variable, found, grid,                          &
    817                            mode, local_pf, two_d, nzb_do, nzt_do, fill_value )
     818!--------------------------------------------------------------------------------------------------!
     819 SUBROUTINE doq_output_2d( av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do,       &
     820                           fill_value )
    818821
    819822
     
    841844    REAL(wp), DIMENSION(:,:,:), POINTER ::                 to_be_resorted  !< points to array which needs to be resorted for output
    842845
     846
    843847    flag_nr  = 0
    844848    found    = .TRUE.
     
    852856              to_be_resorted => ti
    853857           ELSE
    854               IF ( .NOT. ALLOCATED( ti_av ) ) THEN
     858              IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    855859                 ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    856860                 ti_av = REAL( fill_value, KIND = wp )
     
    866870             to_be_resorted => uu
    867871          ELSE
    868              IF ( .NOT. ALLOCATED( uu_av ) ) THEN
     872             IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    869873                ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    870874                uu_av = REAL( fill_value, KIND = wp )
     
    880884             to_be_resorted => vv
    881885          ELSE
    882              IF ( .NOT. ALLOCATED( vv_av ) ) THEN
     886             IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    883887                ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    884888                vv_av = REAL( fill_value, KIND = wp )
     
    894898             to_be_resorted => ww
    895899          ELSE
    896              IF ( .NOT. ALLOCATED( ww_av ) ) THEN
     900             IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    897901                ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    898902                ww_av = REAL( fill_value, KIND = wp )
     
    908912             to_be_resorted => wu
    909913          ELSE
    910              IF ( .NOT. ALLOCATED( wu_av ) ) THEN
     914             IF ( .NOT. ALLOCATED( wu_av ) )  THEN
    911915                ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    912916                wu_av = REAL( fill_value, KIND = wp )
     
    922926             to_be_resorted => wv
    923927          ELSE
    924              IF ( .NOT. ALLOCATED( wv_av ) ) THEN
     928             IF ( .NOT. ALLOCATED( wv_av ) )  THEN
    925929                ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    926930                wv_av = REAL( fill_value, KIND = wp )
     
    936940             to_be_resorted => wtheta
    937941          ELSE
    938              IF ( .NOT. ALLOCATED( wtheta_av ) ) THEN
     942             IF ( .NOT. ALLOCATED( wtheta_av ) )  THEN
    939943                ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    940944                wtheta_av = REAL( fill_value, KIND = wp )
     
    950954             to_be_resorted => wq
    951955          ELSE
    952              IF ( .NOT. ALLOCATED( wq_av ) ) THEN
     956             IF ( .NOT. ALLOCATED( wq_av ) )  THEN
    953957                ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    954958                wq_av = REAL( fill_value, KIND = wp )
     
    968972             ENDDO
    969973          ELSE
    970              IF ( .NOT. ALLOCATED( pt_2m_av ) ) THEN
     974             IF ( .NOT. ALLOCATED( pt_2m_av ) )  THEN
    971975                ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
    972976                pt_2m_av = REAL( fill_value, KIND = wp )
     
    990994             ENDDO
    991995          ELSE
    992              IF ( .NOT. ALLOCATED( uv_10m_av ) ) THEN
     996             IF ( .NOT. ALLOCATED( uv_10m_av ) )  THEN
    993997                ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
    994998                uv_10m_av = REAL( fill_value, KIND = wp )
     
    10081012             to_be_resorted => wspeed
    10091013          ELSE
    1010              IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
     1014             IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
    10111015                ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10121016                wspeed_av = REAL( fill_value, KIND = wp )
     
    10221026             to_be_resorted => wdir
    10231027          ELSE
    1024              IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
     1028             IF ( .NOT. ALLOCATED( wdir_av ) )  THEN
    10251029                ALLOCATE( wdir_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10261030                wdir_av = REAL( fill_value, KIND = wp )
     
    10421046          DO  j = nys, nyn
    10431047             DO  k = nzb_do, nzt_do
    1044                 local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    1045                                      REAL( fill_value, KIND = wp ),            &
    1046                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
     1048                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                                    &
     1049                                         REAL( fill_value, KIND = wp ),                            &
     1050                                         BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    10471051             ENDDO
    10481052          ENDDO
     
    10531057
    10541058
    1055 !------------------------------------------------------------------------------!
     1059!--------------------------------------------------------------------------------------------------!
    10561060!
    10571061! Description:
    10581062! ------------
    10591063!> Subroutine defining 3D output variables
    1060 !------------------------------------------------------------------------------!
    1061  SUBROUTINE doq_output_3d( av, variable, found, local_pf, fill_value, nzb_do,  &
    1062                            nzt_do )
     1064!--------------------------------------------------------------------------------------------------!
     1065 SUBROUTINE doq_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
    10631066
    10641067    IMPLICIT NONE
     
    10821085    REAL(wp), DIMENSION(:,:,:), POINTER ::                 to_be_resorted  !< points to array which needs to be resorted for output
    10831086
     1087
    10841088    flag_nr  = 0
    10851089    found    = .TRUE.
     
    10921096             to_be_resorted => ti
    10931097          ELSE
    1094              IF ( .NOT. ALLOCATED( ti_av ) ) THEN
     1098             IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    10951099                ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10961100                ti_av = REAL( fill_value, KIND = wp )
     
    11041108             to_be_resorted => uu
    11051109          ELSE
    1106              IF ( .NOT. ALLOCATED( uu_av ) ) THEN
     1110             IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    11071111                ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11081112                uu_av = REAL( fill_value, KIND = wp )
     
    11161120             to_be_resorted => vv
    11171121          ELSE
    1118              IF ( .NOT. ALLOCATED( vv_av ) ) THEN
     1122             IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    11191123                ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11201124                vv_av = REAL( fill_value, KIND = wp )
     
    11281132             to_be_resorted => ww
    11291133          ELSE
    1130              IF ( .NOT. ALLOCATED( ww_av ) ) THEN
     1134             IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    11311135                ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11321136                ww_av = REAL( fill_value, KIND = wp )
     
    11401144             to_be_resorted => wu
    11411145          ELSE
    1142              IF ( .NOT. ALLOCATED( wu_av ) ) THEN
     1146             IF ( .NOT. ALLOCATED( wu_av ) )  THEN
    11431147                ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11441148                wu_av = REAL( fill_value, KIND = wp )
     
    11521156             to_be_resorted => wv
    11531157          ELSE
    1154              IF ( .NOT. ALLOCATED( wv_av ) ) THEN
     1158             IF ( .NOT. ALLOCATED( wv_av ) )  THEN
    11551159                ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11561160                wv_av = REAL( fill_value, KIND = wp )
     
    11641168             to_be_resorted => wtheta
    11651169          ELSE
    1166              IF ( .NOT. ALLOCATED( wtheta_av ) ) THEN
     1170             IF ( .NOT. ALLOCATED( wtheta_av ) )  THEN
    11671171                ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11681172                wtheta_av = REAL( fill_value, KIND = wp )
     
    11761180             to_be_resorted => wq
    11771181          ELSE
    1178              IF ( .NOT. ALLOCATED( wq_av ) ) THEN
     1182             IF ( .NOT. ALLOCATED( wq_av ) )  THEN
    11791183                ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11801184                wq_av = REAL( fill_value, KIND = wp )
     
    11881192             to_be_resorted => wspeed
    11891193          ELSE
    1190              IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
     1194             IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
    11911195                ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11921196                wspeed_av = REAL( fill_value, KIND = wp )
     
    12001204             to_be_resorted => wdir
    12011205          ELSE
    1202              IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
     1206             IF ( .NOT. ALLOCATED( wdir_av ) )  THEN
    12031207                ALLOCATE( wdir_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    12041208                wdir_av = REAL( fill_value, KIND = wp )
     
    12171221          DO  j = nys, nyn
    12181222             DO  k = nzb_do, nzt_do
    1219                 local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    1220                                      REAL( fill_value, KIND = wp ),            &
    1221                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
     1223                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                                    &
     1224                                         REAL( fill_value, KIND = wp ),                            &
     1225                                         BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    12221226             ENDDO
    12231227          ENDDO
     
    12271231 END SUBROUTINE doq_output_3d
    12281232
     1233
     1234!--------------------------------------------------------------------------------------------------!
     1235!
    12291236! Description:
    12301237! ------------
    1231 !> Resorts the user-defined output quantity with indices (k,j,i) to a
    1232 !> temporary array with indices (i,j,k) for masked data output.
    1233 !------------------------------------------------------------------------------!
     1238!> Resorts the user-defined output quantity with indices (k,j,i) to a temporary array with indices
     1239!> (i,j,k) for masked data output.
     1240!--------------------------------------------------------------------------------------------------!
    12341241 SUBROUTINE doq_output_mask( av, variable, found, local_pf, mid )
    12351242
     
    12391246
    12401247    IMPLICIT NONE
     1248
     1249    REAL(wp), PARAMETER   ::  fill_value = -9999.0_wp       !< value for the _FillValue attribute
    12411250
    12421251    CHARACTER (LEN=*) ::  variable   !<
     
    12571266    LOGICAL      ::  resorted        !< true if array is resorted
    12581267
    1259     REAL(wp),                                                                  &
    1260        DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  &
    1261           local_pf   !<
    1262     REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to array which needs to be resorted for output
    1263 
    1264     REAL(wp), PARAMETER   ::  fill_value = -9999.0_wp       !< value for the _FillValue attribute
     1268    REAL(wp), DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  local_pf   !<
     1269
     1270    REAL(wp), DIMENSION(:,:,:), POINTER  ::  to_be_resorted  !< points to array which needs to be resorted for output
     1271
    12651272
    12661273    flag_nr  = 0
     
    13731380             DO  j = 1, mask_size_l(mid,2)
    13741381                DO  k = 1, mask_size_l(mid,3)
    1375                    local_pf(i,j,k) = MERGE( to_be_resorted(mask_k(mid,k),  &
    1376                                                            mask_j(mid,j),  &
    1377                                                            mask_i(mid,i)), &
    1378                                             REAL( fill_value, KIND = wp ), &
    1379                                             BTEST( wall_flags_total_0(     &
    1380                                                            mask_k(mid,k),  &
    1381                                                            mask_j(mid,j),  &
    1382                                                            mask_i(mid,i)), &
     1382                   local_pf(i,j,k) = MERGE( to_be_resorted(mask_k(mid,k),                          &
     1383                                                           mask_j(mid,j),                          &
     1384                                                           mask_i(mid,i)),                         &
     1385                                            REAL( fill_value, KIND = wp ),                         &
     1386                                            BTEST( wall_flags_total_0(mask_k(mid,k),               &
     1387                                                                      mask_j(mid,j),               &
     1388                                                                      mask_i(mid,i)),              &
    13831389                                                   flag_nr ) )
    13841390                ENDDO
     
    13951401                im = mask_i(mid,i)
    13961402                jm = mask_j(mid,j)
    1397                 ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_total_0(:,jm,im), 5 )), &
    1398                               DIM = 1 ) - 1
     1403                ktt = MINLOC( MERGE( 1, 0, BTEST( wall_flags_total_0(:,jm,im), 5 ) ), DIM=1 ) - 1
    13991404                DO  k = 1, mask_size_l(mid,3)
    14001405                   kk = MIN( ktt+mask_k(mid,k), nzt+1 )
     
    14151420 END SUBROUTINE doq_output_mask
    14161421
    1417 !------------------------------------------------------------------------------!
     1422!--------------------------------------------------------------------------------------------------!
    14181423! Description:
    14191424! ------------
    14201425!> Allocate required arrays
    1421 !------------------------------------------------------------------------------!
     1426!--------------------------------------------------------------------------------------------------!
    14221427 SUBROUTINE doq_init
    14231428
     
    14251430
    14261431    INTEGER(iwp) ::  ivar   !< loop index over all 2d/3d/mask output quantities
     1432
    14271433
    14281434!
     
    15641570
    15651571!
    1566 !-- Save timestep number to check in time_integration if doq_calculate
    1567 !-- has been called already, since the CALL occurs at two locations, but the calculations need to be
    1568 !-- done only once per timestep.
     1572!-- Save timestep number to check in time_integration if doq_calculate has been called already,
     1573!-- since the CALL occurs at two locations, but the calculations need to be done only once per
     1574!-- timestep.
    15691575    timestep_number_at_prev_calc = current_timestep_number
    15701576
     
    15801586                DO  j = nys, nyn
    15811587                   DO  k = nzb+1, nzt
    1582                       ti(k,j,i) = 0.25_wp * SQRT(                              &
    1583                         (   (   w(k,j+1,i) + w(k-1,j+1,i)                      &
    1584                               - w(k,j-1,i) - w(k-1,j-1,i) ) * ddy              &
    1585                           - (   v(k+1,j,i) + v(k+1,j+1,i)                      &
    1586                               - v(k-1,j,i) - v(k-1,j+1,i) ) * ddzu(k) )**2     &
    1587                       + (   (   u(k+1,j,i) + u(k+1,j,i+1)                      &
    1588                               - u(k-1,j,i) - u(k-1,j,i+1) ) * ddzu(k)          &
    1589                           - (   w(k,j,i+1) + w(k-1,j,i+1)                      &
    1590                               - w(k,j,i-1) - w(k-1,j,i-1) ) * ddx     )**2     &
    1591                       + (   (   v(k,j,i+1) + v(k,j+1,i+1)                      &
    1592                               - v(k,j,i-1) - v(k,j+1,i-1) ) * ddx              &
    1593                           - (   u(k,j+1,i) + u(k,j+1,i+1)                      &
    1594                               - u(k,j-1,i) - u(k,j-1,i+1) ) * ddy     )**2  )  &
    1595                        * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0) )
     1588                      ti(k,j,i) = 0.25_wp * SQRT(                                                  &
     1589                                       (   (   w(k,j+1,i) + w(k-1,j+1,i)                           &
     1590                                             - w(k,j-1,i) - w(k-1,j-1,i) ) * ddy                   &
     1591                                         - (   v(k+1,j,i) + v(k+1,j+1,i)                           &
     1592                                             - v(k-1,j,i) - v(k-1,j+1,i) ) * ddzu(k) )**2          &
     1593                                     + (   (   u(k+1,j,i) + u(k+1,j,i+1)                           &
     1594                                             - u(k-1,j,i) - u(k-1,j,i+1) ) * ddzu(k)               &
     1595                                         - (   w(k,j,i+1) + w(k-1,j,i+1)                           &
     1596                                             - w(k,j,i-1) - w(k-1,j,i-1) ) * ddx     )**2          &
     1597                                     + (   (   v(k,j,i+1) + v(k,j+1,i+1)                           &
     1598                                             - v(k,j,i-1) - v(k,j+1,i-1) ) * ddx                   &
     1599                                         - (   u(k,j+1,i) + u(k,j+1,i+1)                           &
     1600                                             - u(k,j-1,i) - u(k,j-1,i+1) ) * ddy     )**2  )       &
     1601                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    15961602                   ENDDO
    15971603                ENDDO
     
    16031609                DO  j = nys, nyn
    16041610                   DO  k = nzb+1, nzt
    1605                       uu(k,j,i) = u(k,j,i) * u(k,j,i)                          &
    1606                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1607                                 BTEST( wall_flags_total_0(k,j,i), 1) )
     1611                      uu(k,j,i) = u(k,j,i) * u(k,j,i)                                              &
     1612                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 1 ) )
    16081613                   ENDDO
    16091614                ENDDO
     
    16151620                DO  j = nys, nyn
    16161621                   DO  k = nzb+1, nzt
    1617                       vv(k,j,i) = v(k,j,i) * v(k,j,i)                          &
    1618                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1619                                 BTEST( wall_flags_total_0(k,j,i), 2) )
     1622                      vv(k,j,i) = v(k,j,i) * v(k,j,i)                                              &
     1623                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
    16201624                   ENDDO
    16211625                ENDDO
     
    16271631                DO  j = nys, nyn
    16281632                   DO  k = nzb+1, nzt-1
    1629                       ww(k,j,i) = w(k,j,i) * w(k,j,i)                          &
    1630                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1631                                 BTEST( wall_flags_total_0(k,j,i), 3) )
     1633                      ww(k,j,i) = w(k,j,i) * w(k,j,i)                                              &
     1634                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 3 ) )
    16321635                   ENDDO
    16331636                ENDDO
     
    16391642                DO  j = nys, nyn
    16401643                   DO  k = nzb+1, nzt-1
    1641                       wu(k,j,i) = w(k,j,i)                                     &
    1642                        * 0.25_wp * ( u(k,j,i)   + u(k,j,i+1)                   &
    1643                                    + u(k+1,j,i) + u(k+1,j,i+1) )               &
    1644                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1645                                 BTEST( wall_flags_total_0(k,j,i), 0) )
     1644                      wu(k,j,i) = w(k,j,i)                                                         &
     1645                                  * 0.25_wp * ( u(k,j,i) + u(k,j,i+1) + u(k+1,j,i) + u(k+1,j,i+1) )&
     1646                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    16461647                   ENDDO
    16471648                ENDDO
     
    16531654                DO  j = nys, nyn
    16541655                   DO  k = nzb+1, nzt-1
    1655                       wv(k,j,i) = w(k,j,i)                                     &
    1656                        * 0.25_wp * ( v(k,j,i)   + v(k,j+1,i)                   &
    1657                                    + v(k+1,j,i) + v(k+1,j+1,i) )               &
    1658                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1659                                 BTEST( wall_flags_total_0(k,j,i), 0) )
     1656                      wv(k,j,i) = w(k,j,i)                                                         &
     1657                                  * 0.25_wp * ( v(k,j,i) + v(k,j+1,i) + v(k+1,j,i) + v(k+1,j+1,i) )&
     1658                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    16601659                   ENDDO
    16611660                ENDDO
     
    16671666                DO  j = nys, nyn
    16681667                   DO  k = nzb+1, nzt-1
    1669                       wtheta(k,j,i) = w(k,j,i)                                 &
    1670                        *  0.5_wp  * ( pt(k,j,i) + pt(k+1,j,i) )                &
    1671                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1672                                 BTEST( wall_flags_total_0(k,j,i), 3) )
     1668                      wtheta(k,j,i) = w(k,j,i)                                                     &
     1669                                     *  0.5_wp  * ( pt(k,j,i) + pt(k+1,j,i) )                      &
     1670                                     * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 3 ))
    16731671                   ENDDO
    16741672                ENDDO
     
    16801678                DO  j = nys, nyn
    16811679                   DO  k = nzb+1, nzt-1
    1682                       wq(k,j,i) = w(k,j,i) * 0.5_wp * ( q(k,j,i) + q(k+1,j,i) )&
    1683                        * MERGE( 1.0_wp, 0.0_wp,                                &
    1684                                 BTEST( wall_flags_total_0(k,j,i), 3) )
     1680                      wq(k,j,i) = w(k,j,i) * 0.5_wp * ( q(k,j,i) + q(k+1,j,i) )                    &
     1681                                  * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 3 ) )
    16851682                   ENDDO
    16861683                ENDDO
     
    16901687          CASE ( 'theta_2m*' )
    16911688!
    1692 !--          2-m potential temperature is caluclated from surface arrays. In
    1693 !--          case the 2m level is below the first grid point, MOST is applied,
    1694 !--          else, linear interpolation between two vertical grid levels is
    1695 !--          applied. To access all surfaces, iterate over all horizontally-
     1689!--          2-m potential temperature is caluclated from surface arrays. In case the 2m level is
     1690!--          below the first grid point, MOST is applied, else, linear interpolation between two
     1691!--          vertical grid levels is applied. To access all surfaces, iterate over all horizontally-
    16961692!--          upward facing surface types.
    16971693             surf => surf_def_h(0)
     
    17051701          CASE ( 'wspeed_10m*' )
    17061702!
    1707 !--          10-m wind speed is caluclated from surface arrays. In
    1708 !--          case the 10m level is below the first grid point, MOST is applied,
    1709 !--          else, linear interpolation between two vertical grid levels is
    1710 !--          applied. To access all surfaces, iterate over all horizontally-
    1711 !--          upward facing surface types.
     1703!--          10-m wind speed is caluclated from surface arrays. In case the 10m level is below the
     1704!--          first grid point, MOST is applied, else, linear interpolation between two vertical grid
     1705!--          levels is applied. To access all surfaces, iterate over all horizontally-upward facing
     1706!--          surface types.
    17121707             surf => surf_def_h(0)
    17131708             CALL calc_wind_10m
     
    17171712             CALL calc_wind_10m
    17181713!
    1719 !--       horizontal wind speed
     1714!--       Horizontal wind speed
    17201715          CASE ( 'wspeed' )
    17211716             DO  i = nxl, nxr
    17221717                DO  j = nys, nyn
    17231718                   DO  k = nzb, nzt+1
    1724                       wspeed(k,j,i) = SQRT( ( 0.5_wp * ( u(k,j,i) + u(k,j,i+1) ) )**2             &
    1725                                           + ( 0.5_wp * ( v(k,j,i) + v(k,j+1,i) ) )**2 )           &
    1726                                     * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0) )
     1719                      wspeed(k,j,i) = SQRT( ( 0.5_wp * ( u(k,j,i) + u(k,j,i+1) ) )**2              &
     1720                                          + ( 0.5_wp * ( v(k,j,i) + v(k,j+1,i) ) )**2 )            &
     1721                                     * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ))
    17271722                   ENDDO
    17281723                ENDDO
     
    17301725
    17311726!
    1732 !--       horizontal wind direction
     1727!--       Horizontal wind direction
    17331728          CASE ( 'wdir' )
    17341729             DO  i = nxl, nxr
     
    17381733                      v_center(k,j,i) = 0.5_wp * ( v(k,j,i) + v(k,j+1,i) )
    17391734
    1740                       wdir(k,j,i) = ATAN2( u_center(k,j,i), v_center(k,j,i) ) &
    1741                                   / pi * 180.0_wp + 180.0_wp
     1735                      wdir(k,j,i) = ATAN2( u_center(k,j,i), v_center(k,j,i) )                      &
     1736                                    / pi * 180.0_wp + 180.0_wp
    17421737                   ENDDO
    17431738                ENDDO
     
    17521747
    17531748!
    1754 !-- The following block contains subroutines to calculate diagnostic
    1755 !-- surface quantities.
     1749!-- The following block contains subroutines to calculate diagnostic surface quantities.
    17561750    CONTAINS
    1757 !------------------------------------------------------------------------------!
     1751!--------------------------------------------------------------------------------------------------!
    17581752! Description:
    17591753! ------------
    17601754!> Calculation of 2-m potential temperature.
    1761 !------------------------------------------------------------------------------!
     1755!--------------------------------------------------------------------------------------------------!
    17621756       SUBROUTINE calc_pt_2m
    17631757
    1764           USE surface_layer_fluxes_mod,                                        &
     1758          USE surface_layer_fluxes_mod,                                                            &
    17651759              ONLY:  psi_h
    17661760
     
    17761770             k = surf%k(m)
    17771771!
    1778 !--          If 2-m level is below the first grid level, MOST is
    1779 !--          used for calculation of 2-m temperature.
     1772!--          If 2-m level is below the first grid level, MOST is used for calculation of
     1773!--          2-m temperature.
    17801774             IF ( surf%z_mo(m) > 2.0_wp )  THEN
    1781                 pt_2m(j,i) = surf%pt_surface(m) + surf%ts(m) / kappa           &
    1782                                 * ( LOG( 2.0_wp /  surf%z0h(m) )               &
    1783                                   - psi_h( 2.0_wp / surf%ol(m) )               &
    1784                                   + psi_h( surf%z0h(m) / surf%ol(m) ) )
    1785 !
    1786 !--          If 2-m level is above the first grid level, 2-m temperature
    1787 !--          is linearly interpolated between the two nearest vertical grid
    1788 !--          levels. Note, since 2-m temperature is only computed for
    1789 !--          horizontal upward-facing surfaces, only a vertical
    1790 !--          interpolation is necessary.
     1775                pt_2m(j,i) = surf%pt_surface(m) + surf%ts(m) / kappa                               &
     1776                                * ( LOG( 2.0_wp / surf%z0h(m) )                                    &
     1777                                    - psi_h( 2.0_wp      / surf%ol(m) )                            &
     1778                                    + psi_h( surf%z0h(m) / surf%ol(m) ) )
     1779!
     1780!--          If 2-m level is above the first grid level, 2-m temperature is linearly interpolated
     1781!--          between the two nearest vertical grid levels. Note, since 2-m temperature is only
     1782!--          computed for horizontal upward-facing surfaces, only a vertical interpolation is
     1783!--          necessary.
    17911784             ELSE
    17921785!
     
    17981791!
    17991792!--             kk defines the index of the first grid level >= 2m.
    1800                 pt_2m(j,i) = pt(kk-1,j,i) +                                    &
    1801                               ( zw(k-1) + 2.0_wp - zu(kk-1)     ) *            &
    1802                               ( pt(kk,j,i)       - pt(kk-1,j,i) ) /            &
     1793                pt_2m(j,i) = pt(kk-1,j,i) +                                                        &
     1794                              ( zw(k-1) + 2.0_wp - zu(kk-1)     ) *                                &
     1795                              ( pt(kk,j,i)       - pt(kk-1,j,i) ) /                                &
    18031796                              ( zu(kk)           - zu(kk-1)     )
    18041797             ENDIF
     
    18081801       END SUBROUTINE calc_pt_2m
    18091802
    1810 !------------------------------------------------------------------------------!
     1803!--------------------------------------------------------------------------------------------------!
    18111804! Description:
    18121805! ------------
    18131806!> Calculation of 10-m wind speed.
    1814 !------------------------------------------------------------------------------!
     1807!--------------------------------------------------------------------------------------------------!
    18151808       SUBROUTINE calc_wind_10m
    18161809
    1817           USE surface_layer_fluxes_mod,                                        &
     1810          USE surface_layer_fluxes_mod,                                                            &
    18181811              ONLY:  psi_m
    18191812
     
    18251818          REAL(wp) ::  uv_l !< wind speed at lower grid point
    18261819          REAL(wp) ::  uv_u !< wind speed at upper grid point
     1820
    18271821
    18281822          DO  m = 1, surf%ns
     
    18321826             k = surf%k(m)
    18331827!
    1834 !--          If 10-m level is below the first grid level, MOST is
    1835 !--          used for calculation of 10-m temperature.
     1828!--          If 10-m level is below the first grid level, MOST is used for calculation of 10-m
     1829!--          temperature.
    18361830             IF ( surf%z_mo(m) > 10.0_wp )  THEN
    1837                 uv_10m(j,i) = surf%us(m) / kappa                               &
    1838                           * ( LOG( 10.0_wp /  surf%z0(m) )                     &
    1839                               - psi_m( 10.0_wp    / surf%ol(m) )               &
    1840                               + psi_m( surf%z0(m) / surf%ol(m) ) )
    1841 !
    1842 !--          If 10-m level is above the first grid level, 10-m wind speed
    1843 !--          is linearly interpolated between the two nearest vertical grid
    1844 !--          levels. Note, since 10-m temperature is only computed for
    1845 !--          horizontal upward-facing surfaces, only a vertical
    1846 !--          interpolation is necessary.
     1831                uv_10m(j,i) = surf%us(m) / kappa                                                   &
     1832                              * ( LOG( 10.0_wp /  surf%z0(m) )                                     &
     1833                                  - psi_m( 10.0_wp    / surf%ol(m) )                               &
     1834                                  + psi_m( surf%z0(m) / surf%ol(m) ) )
     1835!
     1836!--          If 10-m level is above the first grid level, 10-m wind speed is linearly interpolated
     1837!--          between the two nearest vertical grid levels. Note, since 10-m temperature is only
     1838!--          computed for horizontal upward-facing surfaces, only a vertical interpolation is
     1839!--          necessary.
    18471840             ELSE
    18481841!
     
    18541847!
    18551848!--             kk defines the index of the first grid level >= 10m.
    1856                 uv_l = SQRT( ( 0.5_wp * ( u(kk-1,j,i) + u(kk-1,j,i+1) ) )**2   &
     1849                uv_l = SQRT( ( 0.5_wp * ( u(kk-1,j,i) + u(kk-1,j,i+1) ) )**2                       &
    18571850                           + ( 0.5_wp * ( v(kk-1,j,i) + v(kk-1,j+1,i) ) )**2 )
    18581851
    1859                 uv_u = SQRT( ( 0.5_wp * ( u(kk,j,i)   + u(kk,j,i+1)   ) )**2   &
     1852                uv_u = SQRT( ( 0.5_wp * ( u(kk,j,i)   + u(kk,j,i+1)   ) )**2                       &
    18601853                           + ( 0.5_wp * ( v(kk,j,i)   + v(kk,j+1,i)   ) )**2 )
    18611854
    1862                 uv_10m(j,i) = uv_l + ( zw(k-1) + 10.0_wp - zu(kk-1) ) *        &
    1863                                      ( uv_u              - uv_l     ) /        &
     1855                uv_10m(j,i) = uv_l + ( zw(k-1) + 10.0_wp - zu(kk-1) ) *                            &
     1856                                     ( uv_u              - uv_l     ) /                            &
    18641857                                     ( zu(kk)            - zu(kk-1) )
    18651858
     
    18731866
    18741867
    1875 !------------------------------------------------------------------------------!
     1868!--------------------------------------------------------------------------------------------------!
    18761869! Description:
    18771870! ------------
    1878 !> Preparation of the diagnostic output, counting of the module-specific
    1879 !> output quantities and gathering of the output names.
    1880 !------------------------------------------------------------------------------!
     1871!> Preparation of the diagnostic output, counting of the module-specific output quantities and
     1872!> gathering of the output names.
     1873!--------------------------------------------------------------------------------------------------!
    18811874 SUBROUTINE doq_prepare
    18821875
    1883     USE control_parameters,                                                    &
     1876    USE control_parameters,                                                                        &
    18841877        ONLY:  do2d, do3d, domask, masks
    18851878
    18861879    IMPLICIT NONE
    18871880
    1888     CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do2d_var = ' '  !<
    1889                                                           !< label array for 2d output quantities
     1881    CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do2d_var = ' '  !< label array for 2d output quantities
    18901882
    18911883    INTEGER(iwp) ::  av         !< index defining type of output, av=0 instantaneous, av=1 averaged
     
    18951887    INTEGER(iwp) ::  mid          !< masked output running index
    18961888
     1889
    18971890    prepared_diagnostic_output_quantities = .FALSE.
    18981891
     
    19071900!
    19081901!--    Gather 2d output quantity names.
    1909 !--    Check for double occurrence of output quantity, e.g. by _xy,
    1910 !--    _yz, _xz.
     1902!--    Check for double occurrence of output quantity, e.g. by _xy, _yz, _xz.
    19111903       DO  WHILE ( do2d_var(av,ivar)(1:1) /= ' ' )
    19121904          IF ( .NOT.  ANY( do_all == do2d_var(av,ivar) ) )  THEN
     
    19301922       ivar = 1
    19311923!
    1932 !--    Gather masked output quantity names. Also check for double output
    1933 !--    e.g. by different masks.
     1924!--    Gather masked output quantity names. Also check for double output e.g. by different masks.
    19341925       DO  mid = 1, masks
    19351926          DO  WHILE ( domask(mid,av,ivar)(1:1) /= ' ' )
     
    19501941 END SUBROUTINE doq_prepare
    19511942
    1952 !------------------------------------------------------------------------------!
     1943!--------------------------------------------------------------------------------------------------!
    19531944! Description:
    19541945! ------------
    19551946!> Subroutine reads local (subdomain) restart data
    1956 !------------------------------------------------------------------------------!
    1957  SUBROUTINE doq_rrd_local_ftn( k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,                             &
    1958                                nxr_on_file, nynf, nync, nyn_on_file, nysf,                         &
    1959                                nysc, nys_on_file, tmp_2d, tmp_3d, found )
     1947!--------------------------------------------------------------------------------------------------!
     1948 SUBROUTINE doq_rrd_local_ftn( k, nxlf, nxlc, nxl_on_file, nxrf, nxrc, nxr_on_file, nynf, nync,    &
     1949                               nyn_on_file, nysf, nysc, nys_on_file, tmp_2d, tmp_3d, found )
    19601950
    19611951    USE control_parameters
     
    20021992          pt_2m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                                     &
    20031993                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2004    
     1994
    20051995       CASE ( 'ti_av' )
    20061996          IF ( .NOT. ALLOCATED( ti_av ) )  THEN
     
    21082098 END SUBROUTINE doq_rrd_local_ftn
    21092099
    2110 !------------------------------------------------------------------------------!
     2100!--------------------------------------------------------------------------------------------------!
    21112101! Description:
    21122102! ------------
    21132103!> Read module-specific local restart data arrays (MPI-IO).
    2114 !------------------------------------------------------------------------------!
     2104!--------------------------------------------------------------------------------------------------!
    21152105 SUBROUTINE doq_rrd_local_mpi
    21162106
     
    21982188 END SUBROUTINE doq_rrd_local_mpi
    21992189
    2200 !------------------------------------------------------------------------------!
     2190!--------------------------------------------------------------------------------------------------!
    22012191! Description:
    22022192! ------------
    22032193!> Subroutine writes local (subdomain) restart data
    2204 !------------------------------------------------------------------------------!
     2194!--------------------------------------------------------------------------------------------------!
    22052195 SUBROUTINE doq_wrd_local
    22062196
    2207 
    22082197    IMPLICIT NONE
     2198
    22092199
    22102200    IF ( TRIM( restart_data_format_output ) == 'fortran_binary' )  THEN
Note: See TracChangeset for help on using the changeset viewer.