Ignore:
Timestamp:
Feb 27, 2020 11:23:01 PM (4 years ago)
Author:
gronemeier
Message:

diagnostic_output_quantities: added wspeed and wdir output; bugfix: set fill_value in case of masked output

File:
1 edited

Legend:

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

    r4360 r4431  
    2525! -----------------
    2626! $Id$
     27! added wspeed and wdir output; bugfix: set fill_value in case of masked output
     28!
     29! 4360 2020-01-07 11:25:50Z suehring
    2730! added output of wu, wv, wtheta and wq to enable covariance calculation
    2831! according to temporal EC method
    29 ! 
     32!
    3033! 4346 2019-12-18 11:55:56Z motisi
    3134! Introduction of wall_flags_total_0, which currently sets bits based on static
    3235! topography information used in wall_flags_static_0
    33 ! 
     36!
    3437! 4331 2019-12-10 18:25:02Z suehring
    3538! - Modularize 2-m potential temperature output
    3639! - New output for 10-m wind speed
    37 ! 
     40!
    3841! 4329 2019-12-10 15:46:36Z motisi
    3942! Renamed wall_flags_0 to wall_flags_static_0
    40 ! 
     43!
    4144! 4182 2019-08-22 15:20:23Z scharf
    4245! Corrected "Former revisions" section
    43 ! 
     46!
    4447! 4167 2019-08-16 11:01:48Z suehring
    45 ! Changed behaviour of masked output over surface to follow terrain and ignore 
     48! Changed behaviour of masked output over surface to follow terrain and ignore
    4649! buildings (J.Resler, T.Gronemeier)
    47 ! 
     50!
    4851! 4157 2019-08-14 09:19:12Z suehring
    4952! Initialization restructured, in order to work also when data output during
    50 ! spin-up is enabled. 
    51 ! 
     53! spin-up is enabled.
     54!
    5255! 4132 2019-08-02 12:34:17Z suehring
    5356! Bugfix in masked data output
    54 ! 
     57!
    5558! 4069 2019-07-01 14:05:51Z Giersch
    56 ! Masked output running index mid has been introduced as a local variable to 
    57 ! avoid runtime error (Loop variable has been modified) in time_integration 
    58 ! 
     59! Masked output running index mid has been introduced as a local variable to
     60! avoid runtime error (Loop variable has been modified) in time_integration
     61!
    5962! 4039 2019-06-18 10:32:41Z suehring
    6063! - Add output of uu, vv, ww to enable variance calculation according temporal
     
    6467! - Rename subroutines
    6568! - Further modularization
    66 ! 
     69!
    6770! 3998 2019-05-23 13:38:11Z suehring
    68 ! Bugfix in gathering all output strings 
    69 ! 
     71! Bugfix in gathering all output strings
     72!
    7073! 3995 2019-05-22 18:59:54Z suehring
    7174! Avoid compiler warnings about unused variable and fix string operation which
    7275! is not allowed with PGI compiler
    73 ! 
     76!
    7477! 3994 2019-05-22 18:08:09Z suehring
    7578! Initial revision
     
    7881! --------
    7982! @author Farah Kanani-Suehring
    80 ! 
     83!
    8184!
    8285! Description:
     
    8588!------------------------------------------------------------------------------!
    8689 MODULE diagnostic_output_quantities_mod
    87  
     90
    8891    USE arrays_3d,                                                             &
    8992        ONLY:  ddzu,                                                           &
     
    97100
    98101    USE basic_constants_and_equations_mod,                                     &
    99         ONLY:  kappa
     102        ONLY:  kappa, pi
    100103
    101104    USE control_parameters,                                                    &
     
    104107               message_string,                                                 &
    105108               varnamelength
    106 ! 
     109!
    107110!     USE cpulog,                                                                &
    108111!         ONLY:  cpu_log, log_point
     
    114117        ONLY:  nbgp,                                                           &
    115118               nxl,                                                            &
    116                nxlg,                                                           & 
    117                nxr,                                                            & 
     119               nxlg,                                                           &
     120               nxr,                                                            &
    118121               nxrg,                                                           &
    119122               nyn,                                                            &
     
    139142
    140143    INTEGER(iwp) ::  timestep_number_at_prev_calc = 0  !< ...at previous diagnostic output calculation
    141  
     144
    142145    LOGICAL ::  initialized_diagnostic_output_quantities = .FALSE. !< flag indicating whether output is initialized
    143146    LOGICAL ::  prepared_diagnostic_output_quantities = .FALSE.    !< flag indicating whether output is p
     
    149152
    150153    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ti     !< rotation(u,v,w) aka turbulence intensity
    151     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ti_av  !< avg. rotation(u,v,w) aka turbulence intensity   
    152     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  uu         !< uu
    153     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  uu_av      !< mean of uu
    154     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vv         !< vv
    155     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vv_av      !< mean of vv
    156     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ww         !< ww
    157     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ww_av      !< mean of ww
    158     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wu         !< wu
    159     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wu_av      !< mean of wu
    160     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wv         !< wv
    161     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wv_av      !< mean of wv
    162     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wtheta     !< wtheta
    163     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wtheta_av  !< mean of wtheta
    164     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wq         !< wq
    165     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wq_av      !< mean of wq
     154    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ti_av  !< avg. rotation(u,v,w) aka turbulence intensity
     155    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_center     !< u at center of grid box
     156    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_center_av  !< mean of u_center
     157    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  uu           !< uu
     158    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  uu_av        !< mean of uu
     159    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wspeed       !< horizontal wind speed
     160    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wspeed_av    !< mean of horizotal wind speed
     161    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_center     !< v at center of grid box
     162    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_center_av  !< mean of v_center
     163    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vv           !< vv
     164    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vv_av        !< mean of vv
     165    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wdir         !< wind direction
     166    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wdir_av      !< mean wind direction
     167    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ww           !< ww
     168    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ww_av        !< mean of ww
     169    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wu           !< wu
     170    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wu_av        !< mean of wu
     171    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wv           !< wv
     172    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wv_av        !< mean of wv
     173    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wtheta       !< wtheta
     174    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wtheta_av    !< mean of wtheta
     175    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wq           !< wq
     176    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  wq_av        !< mean of wq
    166177
    167178
     
    178189           pt_2m_av,                                                           &
    179190           ti_av,                                                              &
     191           u_center_av,                                                        &
    180192           uu_av,                                                              &
    181193           uv_10m_av,                                                          &
     194           v_center_av,                                                        &
    182195           vv_av,                                                              &
     196           wdir_av,                                                            &
     197           wspeed_av,                                                          &
    183198           ww_av
    184 !                                                                             
    185 !-- Public routines                                                           
     199!
     200!-- Public routines
    186201    PUBLIC doq_3d_data_averaging,                                              &
    187202           doq_calculate,                                                      &
     
    198213    INTERFACE doq_3d_data_averaging
    199214       MODULE PROCEDURE doq_3d_data_averaging
    200     END INTERFACE doq_3d_data_averaging       
     215    END INTERFACE doq_3d_data_averaging
    201216
    202217    INTERFACE doq_calculate
     
    207222       MODULE PROCEDURE doq_check_data_output
    208223    END INTERFACE doq_check_data_output
    209    
     224
    210225    INTERFACE doq_define_netcdf_grid
    211226       MODULE PROCEDURE doq_define_netcdf_grid
    212227    END INTERFACE doq_define_netcdf_grid
    213    
     228
    214229    INTERFACE doq_output_2d
    215230       MODULE PROCEDURE doq_output_2d
    216231    END INTERFACE doq_output_2d
    217    
     232
    218233    INTERFACE doq_output_3d
    219234       MODULE PROCEDURE doq_output_3d
    220235    END INTERFACE doq_output_3d
    221    
     236
    222237    INTERFACE doq_output_mask
    223238       MODULE PROCEDURE doq_output_mask
    224239    END INTERFACE doq_output_mask
    225      
     240
    226241    INTERFACE doq_init
    227242       MODULE PROCEDURE doq_init
     
    231246       MODULE PROCEDURE doq_prepare
    232247    END INTERFACE doq_prepare
    233    
     248
    234249!     INTERFACE doq_rrd_local
    235250!        MODULE PROCEDURE doq_rrd_local
    236251!     END INTERFACE doq_rrd_local
    237    
     252
    238253    INTERFACE doq_wrd_local
    239254       MODULE PROCEDURE doq_wrd_local
     
    242257
    243258 CONTAINS
    244  
     259
    245260!------------------------------------------------------------------------------!
    246261! Description:
     
    254269        ONLY:  average_count_3d
    255270
    256     CHARACTER (LEN=*) ::  mode     !< 
    257     CHARACTER (LEN=*) ::  variable !< 
     271    CHARACTER (LEN=*) ::  mode     !<
     272    CHARACTER (LEN=*) ::  variable !<
    258273
    259274    INTEGER(iwp) ::  i !<
     
    270285             ENDIF
    271286             ti_av = 0.0_wp
    272        
     287
    273288          CASE ( 'uu' )
    274289             IF ( .NOT. ALLOCATED( uu_av ) )  THEN
     
    276291             ENDIF
    277292             uu_av = 0.0_wp
    278                
     293
    279294          CASE ( 'vv' )
    280295             IF ( .NOT. ALLOCATED( vv_av ) )  THEN
     
    282297             ENDIF
    283298             vv_av = 0.0_wp
    284                
     299
    285300          CASE ( 'ww' )
    286301             IF ( .NOT. ALLOCATED( ww_av ) )  THEN
     
    288303             ENDIF
    289304             ww_av = 0.0_wp
    290            
     305
    291306           CASE ( 'wu' )
    292307             IF ( .NOT. ALLOCATED( wu_av ) )  THEN
     
    294309             ENDIF
    295310             wu_av = 0.0_wp
    296            
     311
    297312           CASE ( 'wv' )
    298313             IF ( .NOT. ALLOCATED( wv_av ) )  THEN
     
    300315             ENDIF
    301316             wv_av = 0.0_wp
    302                
     317
    303318           CASE ( 'wtheta' )
    304319             IF ( .NOT. ALLOCATED( wtheta_av ) )  THEN
     
    306321             ENDIF
    307322             wtheta_av = 0.0_wp
    308                
     323
    309324           CASE ( 'wq' )
    310325             IF ( .NOT. ALLOCATED( wq_av ) )  THEN
     
    312327             ENDIF
    313328             wq_av = 0.0_wp
    314              
     329
    315330          CASE ( 'theta_2m*' )
    316331             IF ( .NOT. ALLOCATED( pt_2m_av ) )  THEN
     
    318333             ENDIF
    319334             pt_2m_av = 0.0_wp
    320              
     335
    321336          CASE ( 'wspeed_10m*' )
    322337             IF ( .NOT. ALLOCATED( uv_10m_av ) )  THEN
     
    325340             uv_10m_av = 0.0_wp
    326341
     342          CASE ( 'wspeed' )
     343             IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
     344                ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     345             ENDIF
     346             wspeed_av = 0.0_wp
     347
     348          CASE ( 'wdir' )
     349             IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
     350                ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     351             ENDIF
     352             IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
     353                ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     354             ENDIF
     355             u_center_av = 0.0_wp
     356             v_center_av = 0.0_wp
     357
    327358          CASE DEFAULT
    328359             CONTINUE
     
    333364
    334365       SELECT CASE ( TRIM( variable ) )
    335  
     366
    336367          CASE ( 'ti' )
    337368             IF ( ALLOCATED( ti_av ) ) THEN
     
    344375                ENDDO
    345376             ENDIF
    346              
     377
    347378          CASE ( 'uu' )
    348379             IF ( ALLOCATED( uu_av ) ) THEN
     
    355386                ENDDO
    356387             ENDIF
    357              
     388
    358389          CASE ( 'vv' )
    359390             IF ( ALLOCATED( vv_av ) ) THEN
     
    366397                ENDDO
    367398             ENDIF
    368              
     399
    369400          CASE ( 'ww' )
    370401             IF ( ALLOCATED( ww_av ) ) THEN
     
    377408                ENDDO
    378409             ENDIF
    379              
     410
    380411          CASE ( 'wu' )
    381412             IF ( ALLOCATED( wu_av ) ) THEN
     
    388419                ENDDO
    389420             ENDIF
    390              
     421
    391422          CASE ( 'wv' )
    392423             IF ( ALLOCATED( wv_av ) ) THEN
     
    399430                ENDDO
    400431             ENDIF
    401              
     432
    402433          CASE ( 'wtheta' )
    403434             IF ( ALLOCATED( wtheta_av ) ) THEN
     
    410441                ENDDO
    411442             ENDIF
    412                          
     443
    413444          CASE ( 'wq' )
    414445             IF ( ALLOCATED( wq_av ) ) THEN
     
    421452                ENDDO
    422453             ENDIF
    423              
     454
    424455          CASE ( 'theta_2m*' )
    425456             IF ( ALLOCATED( pt_2m_av ) ) THEN
     
    436467                   DO  j = nys, nyn
    437468                      uv_10m_av(j,i) = uv_10m_av(j,i) + uv_10m(j,i)
     469                   ENDDO
     470                ENDDO
     471             ENDIF
     472
     473          CASE ( 'wspeed' )
     474            IF ( ALLOCATED( wspeed_av ) ) THEN
     475               DO  i = nxl, nxr
     476                  DO  j = nys, nyn
     477                     DO  k = nzb, nzt+1
     478                         wspeed_av(k,j,i) = wspeed_av(k,j,i) + wspeed(k,j,i)
     479                     ENDDO
     480                  ENDDO
     481               ENDDO
     482            ENDIF
     483
     484          CASE ( 'wdir' )
     485             IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) ) THEN
     486                DO  i = nxl, nxr
     487                   DO  j = nys, nyn
     488                      DO  k = nzb, nzt+1
     489                        u_center_av(k,j,i) = u_center_av(k,j,i) + u_center(k,j,i)
     490                        v_center_av(k,j,i) = v_center_av(k,j,i) + v_center(k,j,i)
     491                      ENDDO
    438492                   ENDDO
    439493                ENDDO
     
    459513                ENDDO
    460514             ENDIF
    461        
     515
    462516          CASE ( 'uu' )
    463517             IF ( ALLOCATED( uu_av ) ) THEN
     
    470524                ENDDO
    471525             ENDIF
    472              
     526
    473527          CASE ( 'vv' )
    474528             IF ( ALLOCATED( vv_av ) ) THEN
     
    481535                ENDDO
    482536             ENDIF
    483              
     537
    484538          CASE ( 'ww' )
    485539             IF ( ALLOCATED( ww_av ) ) THEN
     
    503557                ENDDO
    504558             ENDIF
    505              
     559
    506560          CASE ( 'wv' )
    507561             IF ( ALLOCATED( wv_av ) ) THEN
     
    514568                ENDDO
    515569             ENDIF
    516              
     570
    517571          CASE ( 'wtheta' )
    518572             IF ( ALLOCATED( wtheta_av ) ) THEN
     
    525579                ENDDO
    526580             ENDIF
    527              
     581
    528582          CASE ( 'wq' )
    529583             IF ( ALLOCATED( wq_av ) ) THEN
     
    557611            ENDIF
    558612
     613         CASE ( 'wspeed' )
     614             IF ( ALLOCATED( wspeed_av ) ) THEN
     615                DO  i = nxl, nxr
     616                   DO  j = nys, nyn
     617                      DO  k = nzb, nzt+1
     618                         wspeed_av(k,j,i) = wspeed_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     619                      ENDDO
     620                   ENDDO
     621                ENDDO
     622             ENDIF
     623
     624          CASE ( 'wdir' )
     625             IF ( ALLOCATED( u_center_av )  .AND.  ALLOCATED( v_center_av ) ) THEN
     626
     627                IF ( .NOT. ALLOCATED( wdir_av ) )  THEN
     628                   ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     629                ENDIF
     630                wdir_av = 0.0_wp
     631
     632                DO  i = nxl, nxr
     633                   DO  j = nys, nyn
     634                      DO  k = nzb, nzt+1
     635                         u_center_av(k,j,i) = u_center_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     636                         v_center_av(k,j,i) = v_center_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     637                         wdir_av(k,j,i) = ATAN2( u_center_av(k,j,i), v_center_av(k,j,i) ) &
     638                                        / pi * 180.0_wp + 180.0_wp
     639                      ENDDO
     640                   ENDDO
     641                ENDDO
     642             ENDIF
     643
    559644       END SELECT
    560645
     
    562647
    563648
    564  END SUBROUTINE doq_3d_data_averaging 
    565  
     649 END SUBROUTINE doq_3d_data_averaging
     650
    566651!------------------------------------------------------------------------------!
    567652! Description:
     
    573658    IMPLICIT NONE
    574659
    575     CHARACTER (LEN=*) ::  unit  !< 
     660    CHARACTER (LEN=*) ::  unit  !<
    576661    CHARACTER (LEN=*) ::  var   !<
    577662
     
    584669       CASE ( 'ti' )
    585670          unit = '1/s'
    586              
     671
    587672       CASE ( 'uu' )
    588673          unit = 'm2/s2'
    589              
     674
    590675       CASE ( 'vv' )
    591676          unit = 'm2/s2'
    592              
     677
    593678       CASE ( 'ww' )
    594679          unit = 'm2/s2'
    595          
     680
    596681       CASE ( 'wu' )
    597682          unit = 'm2/s2'
    598              
     683
    599684       CASE ( 'wv' )
    600685          unit = 'm2/s2'
    601              
     686
    602687       CASE ( 'wtheta' )
    603688          unit = 'Km/s'
    604              
     689
    605690       CASE ( 'wq' )
    606691          unit = 'm/s'
     692
     693       CASE ( 'wspeed' )
     694          unit = 'm/s'
     695
     696       CASE ( 'wdir' )
     697          unit = 'degree'
    607698!
    608699!--    Treat horizotal cross-section output quanatities
     
    627718
    628719 END SUBROUTINE doq_check_data_output
    629  
     720
    630721!------------------------------------------------------------------------------!
    631722!
     
    633724! ------------
    634725!> Subroutine defining appropriate grid for netcdf variables.
    635 !------------------------------------------------------------------------------! 
     726!------------------------------------------------------------------------------!
    636727 SUBROUTINE doq_define_netcdf_grid( variable, found, grid_x, grid_y, grid_z )
    637    
     728
    638729    IMPLICIT NONE
    639730
    640731    CHARACTER (LEN=*), INTENT(IN)  ::  variable    !<
    641     LOGICAL, INTENT(OUT)           ::  found       !< 
    642     CHARACTER (LEN=*), INTENT(OUT) ::  grid_x      !< 
    643     CHARACTER (LEN=*), INTENT(OUT) ::  grid_y      !< 
    644     CHARACTER (LEN=*), INTENT(OUT) ::  grid_z      !< 
     732    LOGICAL, INTENT(OUT)           ::  found       !<
     733    CHARACTER (LEN=*), INTENT(OUT) ::  grid_x      !<
     734    CHARACTER (LEN=*), INTENT(OUT) ::  grid_y      !<
     735    CHARACTER (LEN=*), INTENT(OUT) ::  grid_z      !<
    645736
    646737    found  = .TRUE.
    647    
     738
    648739    SELECT CASE ( TRIM( variable ) )
    649740!
    650741!--    s grid
    651742       CASE ( 'ti', 'ti_xy', 'ti_xz', 'ti_yz',                                 &
     743              'wspeed', 'wspeed_xy', 'wspeed_xz', 'wspeed_yz',                 &
     744              'wdir', 'wdir_xy', 'wdir_xz', 'wdir_yz',                         &
    652745              'wu', 'wu_xy', 'wu_xz', 'wu_yz',                                 &
    653746              'wv', 'wv_xy', 'wv_xz', 'wv_yz',                                 &
     
    697790
    698791 END SUBROUTINE doq_define_netcdf_grid
    699  
     792
    700793!------------------------------------------------------------------------------!
    701794!
     
    710803    IMPLICIT NONE
    711804
    712     CHARACTER (LEN=*) ::  grid     !< 
    713     CHARACTER (LEN=*) ::  mode     !< 
    714     CHARACTER (LEN=*) ::  variable !< 
     805    CHARACTER (LEN=*) ::  grid     !<
     806    CHARACTER (LEN=*) ::  mode     !<
     807    CHARACTER (LEN=*) ::  variable !<
    715808
    716809    INTEGER(iwp) ::  av       !< value indicating averaged or non-averaged output
     
    719812    INTEGER(iwp) ::  j        !< grid index y-direction
    720813    INTEGER(iwp) ::  k        !< grid index z-direction
    721     INTEGER(iwp) ::  nzb_do   !< 
    722     INTEGER(iwp) ::  nzt_do   !< 
     814    INTEGER(iwp) ::  nzb_do   !<
     815    INTEGER(iwp) ::  nzt_do   !<
    723816
    724817    LOGICAL ::  found             !< true if variable is in list
     
    727820
    728821    REAL(wp) ::  fill_value       !< value for the _FillValue attribute
    729    
    730     REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf !< 
     822
     823    REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf !<
    731824    REAL(wp), DIMENSION(:,:,:), POINTER ::                 to_be_resorted  !< points to array which needs to be resorted for output
    732    
     825
    733826    flag_nr  = 0
    734827    found    = .TRUE.
     
    749842           ENDIF
    750843           flag_nr = 0
    751            
     844
    752845           IF ( mode == 'xy' )  grid = 'zu'
    753    
     846
    754847       CASE ( 'uu_xy', 'uu_xz', 'uu_yz' )
    755848          IF ( av == 0 )  THEN
     
    763856          ENDIF
    764857          flag_nr = 1
    765          
     858
    766859          IF ( mode == 'xy' )  grid = 'zu'
    767          
     860
    768861       CASE ( 'vv_xy', 'vv_xz', 'vv_yz' )
    769862          IF ( av == 0 )  THEN
     
    777870          ENDIF
    778871          flag_nr = 2
    779          
     872
    780873          IF ( mode == 'xy' )  grid = 'zu'
    781                
     874
    782875       CASE ( 'ww_xy', 'ww_xz', 'ww_yz' )
    783876          IF ( av == 0 )  THEN
     
    791884          ENDIF
    792885          flag_nr = 3
    793          
     886
    794887          IF ( mode == 'xy' )  grid = 'zw'
    795          
     888
    796889       CASE ( 'wu_xy', 'wu_xz', 'wu_yz' )
    797890          IF ( av == 0 )  THEN
     
    805898          ENDIF
    806899          flag_nr = 0
    807          
     900
    808901          IF ( mode == 'xy' )  grid = 'zw'
    809          
     902
    810903       CASE ( 'wv_xy', 'wv_xz', 'wv_yz' )
    811904          IF ( av == 0 )  THEN
     
    819912          ENDIF
    820913          flag_nr = 0
    821          
     914
    822915          IF ( mode == 'xy' )  grid = 'zw'
    823          
     916
    824917       CASE ( 'wtheta_xy', 'wtheta_xz', 'wtheta_yz' )
    825918          IF ( av == 0 )  THEN
     
    833926          ENDIF
    834927          flag_nr = 0
    835          
     928
    836929          IF ( mode == 'xy' )  grid = 'zw'
    837          
     930
    838931       CASE ( 'wq_xy', 'wq_xz', 'wq_yz' )
    839932          IF ( av == 0 )  THEN
     
    847940          ENDIF
    848941          flag_nr = 0
    849          
     942
    850943          IF ( mode == 'xy' )  grid = 'zw'
    851          
     944
    852945       CASE ( 'theta_2m*_xy' )        ! 2d-array
    853946          IF ( av == 0 )  THEN
     
    871964          two_d    = .TRUE.
    872965          grid     = 'zu1'
    873          
     966
    874967       CASE ( 'wspeed_10m*_xy' )        ! 2d-array
    875968          IF ( av == 0 )  THEN
     
    894987          grid     = 'zu1'
    895988
     989       CASE ( 'wspeed_xy', 'wspeed_xz', 'wspeed_yz' )
     990          IF ( av == 0 )  THEN
     991             to_be_resorted => wspeed
     992          ELSE
     993             IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
     994                ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     995                wspeed_av = REAL( fill_value, KIND = wp )
     996             ENDIF
     997             to_be_resorted => wspeed_av
     998          ENDIF
     999          flag_nr = 0
     1000
     1001          IF ( mode == 'xy' )  grid = 'zu'
     1002
     1003       CASE ( 'wdir_xy', 'wdir_xz', 'wdir_yz' )
     1004          IF ( av == 0 )  THEN
     1005             to_be_resorted => wdir
     1006          ELSE
     1007             IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
     1008                ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1009                wdir_av = REAL( fill_value, KIND = wp )
     1010             ENDIF
     1011             to_be_resorted => wdir_av
     1012          ENDIF
     1013          flag_nr = 0
     1014
     1015          IF ( mode == 'xy' )  grid = 'zu'
     1016
    8961017       CASE DEFAULT
    8971018          found = .FALSE.
     
    8991020
    9001021    END SELECT
    901    
    902     IF ( found  .AND.  .NOT. resorted )  THEN     
     1022
     1023    IF ( found  .AND.  .NOT. resorted )  THEN
    9031024       DO  i = nxl, nxr
    9041025          DO  j = nys, nyn
     
    9061027                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    9071028                                     REAL( fill_value, KIND = wp ),            &
    908                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) ) 
     1029                                     BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    9091030             ENDDO
    9101031          ENDDO
    9111032       ENDDO
    9121033    ENDIF
    913  
     1034
    9141035 END SUBROUTINE doq_output_2d
    915  
    916  
     1036
     1037
    9171038!------------------------------------------------------------------------------!
    9181039!
     
    9231044 SUBROUTINE doq_output_3d( av, variable, found, local_pf, fill_value, nzb_do,  &
    9241045                           nzt_do )
    925  
     1046
    9261047    IMPLICIT NONE
    9271048
    928     CHARACTER (LEN=*) ::  variable !< 
     1049    CHARACTER (LEN=*) ::  variable !<
    9291050
    9301051    INTEGER(iwp) ::  av       !< index indicating averaged or instantaneous output
     
    9411062    REAL(wp) ::  fill_value       !< value for the _FillValue attribute
    9421063
    943     REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf        !< 
     1064    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf        !<
    9441065    REAL(wp), DIMENSION(:,:,:), POINTER ::                 to_be_resorted  !< points to array which needs to be resorted for output
    9451066
     
    9471068    found    = .TRUE.
    9481069    resorted = .FALSE.
    949    
     1070
    9501071    SELECT CASE ( TRIM( variable ) )
    9511072
     
    9611082          ENDIF
    9621083          flag_nr = 0
    963    
     1084
    9641085       CASE ( 'uu' )
    9651086          IF ( av == 0 )  THEN
     
    9731094          ENDIF
    9741095          flag_nr = 1
    975              
     1096
    9761097       CASE ( 'vv' )
    9771098          IF ( av == 0 )  THEN
     
    9851106          ENDIF
    9861107          flag_nr = 2
    987              
     1108
    9881109       CASE ( 'ww' )
    9891110          IF ( av == 0 )  THEN
     
    10211142          ENDIF
    10221143          flag_nr = 0
    1023          
     1144
    10241145       CASE ( 'wtheta' )
    10251146          IF ( av == 0 )  THEN
     
    10331154          ENDIF
    10341155          flag_nr = 0
    1035          
     1156
    10361157       CASE ( 'wq' )
    10371158          IF ( av == 0 )  THEN
     
    10461167          flag_nr = 0
    10471168
     1169       CASE ( 'wspeed' )
     1170          IF ( av == 0 )  THEN
     1171             to_be_resorted => wspeed
     1172          ELSE
     1173             IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
     1174                ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1175                wspeed_av = REAL( fill_value, KIND = wp )
     1176             ENDIF
     1177             to_be_resorted => wspeed_av
     1178          ENDIF
     1179          flag_nr = 0
     1180
     1181       CASE ( 'wdir' )
     1182          IF ( av == 0 )  THEN
     1183             to_be_resorted => wdir
     1184          ELSE
     1185             IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
     1186                ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1187                wdir_av = REAL( fill_value, KIND = wp )
     1188             ENDIF
     1189             to_be_resorted => wdir_av
     1190          ENDIF
     1191          flag_nr = 0
     1192
    10481193       CASE DEFAULT
    10491194          found = .FALSE.
    10501195
    10511196    END SELECT
    1052    
    1053     IF ( found  .AND.  .NOT. resorted )  THEN     
     1197
     1198    IF ( found  .AND.  .NOT. resorted )  THEN
    10541199       DO  i = nxl, nxr
    10551200          DO  j = nys, nyn
     
    10571202                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    10581203                                     REAL( fill_value, KIND = wp ),            &
    1059                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) ) 
     1204                                     BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    10601205             ENDDO
    10611206          ENDDO
     
    10641209
    10651210 END SUBROUTINE doq_output_3d
    1066  
     1211
    10671212! Description:
    10681213! ------------
     
    10711216!------------------------------------------------------------------------------!
    10721217 SUBROUTINE doq_output_mask( av, variable, found, local_pf, mid )
    1073  
     1218
    10741219    USE control_parameters
    1075        
     1220
    10761221    USE indices
    10771222
     
    10971242    REAL(wp),                                                                  &
    10981243       DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  &
    1099           local_pf   !< 
     1244          local_pf   !<
    11001245    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to array which needs to be resorted for output
    11011246
     
    11171262          grid = 's'
    11181263          flag_nr = 0
    1119    
     1264
    11201265       CASE ( 'uu' )
    11211266          IF ( av == 0 )  THEN
     
    11261271          grid = 'u'
    11271272          flag_nr = 1
    1128    
     1273
    11291274       CASE ( 'vv' )
    11301275          IF ( av == 0 )  THEN
     
    11351280          grid = 'v'
    11361281          flag_nr = 2
    1137    
     1282
    11381283       CASE ( 'ww' )
    11391284          IF ( av == 0 )  THEN
     
    11441289          grid = 'w'
    11451290          flag_nr = 3
    1146    
     1291
    11471292       CASE ( 'wu' )
    11481293          IF ( av == 0 )  THEN
     
    11531298          grid = 's'
    11541299          flag_nr = 0
    1155    
     1300
    11561301       CASE ( 'wv' )
    11571302          IF ( av == 0 )  THEN
     
    11621307          grid = 's'
    11631308          flag_nr = 0
    1164              
     1309
    11651310       CASE ( 'wtheta' )
    11661311          IF ( av == 0 )  THEN
     
    11711316          grid = 's'
    11721317          flag_nr = 0
    1173                
     1318
    11741319       CASE ( 'wq' )
    11751320          IF ( av == 0 )  THEN
     
    11811326          flag_nr = 0
    11821327
     1328       CASE ( 'wspeed' )
     1329          IF ( av == 0 )  THEN
     1330             to_be_resorted => wspeed
     1331          ELSE
     1332             to_be_resorted => wspeed_av
     1333          ENDIF
     1334          grid = 's'
     1335          flag_nr = 0
     1336
     1337       CASE ( 'wdir' )
     1338          IF ( av == 0 )  THEN
     1339             to_be_resorted => wdir
     1340          ELSE
     1341             to_be_resorted => wdir_av
     1342          ENDIF
     1343          grid = 's'
     1344          flag_nr = 0
     1345
    11831346       CASE DEFAULT
    11841347          found = .FALSE.
    11851348
    11861349    END SELECT
    1187    
     1350
    11881351    IF ( found  .AND.  .NOT. resorted )  THEN
    11891352       IF ( .NOT. mask_surface(mid) )  THEN
     
    11931356             DO  j = 1, mask_size_l(mid,2)
    11941357                DO  k = 1, mask_size_l(mid,3)
    1195                    local_pf(i,j,k) =  to_be_resorted(mask_k(mid,k),            &
    1196                                                      mask_j(mid,j),            &
    1197                                                      mask_i(mid,i))
     1358                   local_pf(i,j,k) = MERGE( to_be_resorted(mask_k(mid,k),  &
     1359                                                           mask_j(mid,j),  &
     1360                                                           mask_i(mid,i)), &
     1361                                            REAL( fill_value, KIND = wp ), &
     1362                                            BTEST( wall_flags_total_0(     &
     1363                                                           mask_k(mid,k),  &
     1364                                                           mask_j(mid,j),  &
     1365                                                           mask_i(mid,i)), &
     1366                                                   flag_nr ) )
    11981367                ENDDO
    11991368             ENDDO
     
    12261395       ENDIF
    12271396    ENDIF
    1228    
     1397
    12291398 END SUBROUTINE doq_output_mask
    12301399
     
    12371406
    12381407    IMPLICIT NONE
    1239    
     1408
    12401409    INTEGER(iwp) ::  ivar   !< loop index over all 2d/3d/mask output quantities
    12411410
     
    12481417
    12491418    initialized_diagnostic_output_quantities = .FALSE.
    1250    
     1419
    12511420    ivar = 1
    1252    
    1253     DO  WHILE ( ivar <= SIZE( do_all ) ) 
     1421
     1422    DO  WHILE ( ivar <= SIZE( do_all ) )
    12541423
    12551424       SELECT CASE ( TRIM( do_all(ivar) ) )
     
    13241493                uv_10m = 0.0_wp
    13251494             ENDIF
     1495!
     1496!--       Allocate array for wspeed
     1497          CASE ( 'wspeed' )
     1498             IF ( .NOT. ALLOCATED( wspeed ) )  THEN
     1499                ALLOCATE( wspeed(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1500                wspeed = 0.0_wp
     1501             ENDIF
     1502
     1503!
     1504!--       Allocate array for wdir
     1505          CASE ( 'wdir' )
     1506             IF ( .NOT. ALLOCATED( u_center ) )  THEN
     1507                ALLOCATE( u_center(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1508                u_center = 0.0_wp
     1509             ENDIF
     1510             IF ( .NOT. ALLOCATED( v_center ) )  THEN
     1511                ALLOCATE( v_center(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1512                v_center = 0.0_wp
     1513             ENDIF
     1514             IF ( .NOT. ALLOCATED( wdir ) )  THEN
     1515                ALLOCATE( wdir(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1516                wdir = 0.0_wp
     1517             ENDIF
    13261518
    13271519       END SELECT
     
    13311523
    13321524    initialized_diagnostic_output_quantities = .TRUE.
    1333    
     1525
    13341526 END SUBROUTINE doq_init
    13351527
     
    13451537
    13461538    INTEGER(iwp) ::  i          !< grid index x-dimension
    1347     INTEGER(iwp) ::  j          !< grid index y-dimension 
     1539    INTEGER(iwp) ::  j          !< grid index y-dimension
    13481540    INTEGER(iwp) ::  k          !< grid index z-dimension
    13491541    INTEGER(iwp) ::  ivar       !< loop index over all 2d/3d/mask output quantities
    1350    
     1542
    13511543    TYPE(surf_type), POINTER ::  surf     !< surf-type array, used to generalize subroutines
    13521544
     
    13551547
    13561548!
    1357 !-- Save timestep number to check in time_integration if doq_calculate 
     1549!-- Save timestep number to check in time_integration if doq_calculate
    13581550!-- has been called already, since the CALL occurs at two locations, but the calculations need to be
    13591551!-- done only once per timestep.
     
    13621554    ivar = 1
    13631555
    1364     DO  WHILE ( ivar <= SIZE( do_all ) ) 
     1556    DO  WHILE ( ivar <= SIZE( do_all ) )
    13651557
    13661558       SELECT CASE ( TRIM( do_all(ivar) ) )
     
    13871579                   ENDDO
    13881580                ENDDO
    1389              ENDDO           
     1581             ENDDO
    13901582!
    13911583!--       uu
     
    15021694             surf => surf_usm_h
    15031695             CALL calc_wind_10m
     1696!
     1697!--       horizontal wind speed
     1698          CASE ( 'wspeed' )
     1699             DO  i = nxl, nxr
     1700                DO  j = nys, nyn
     1701                   DO  k = nzb, nzt+1
     1702                      wspeed(k,j,i) = SQRT( ( 0.5_wp * ( u(k,j,i) + u(k,j,i+1) ) )**2             &
     1703                                          + ( 0.5_wp * ( v(k,j,i) + v(k,j+1,i) ) )**2 )           &
     1704                                    * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0) )
     1705                   ENDDO
     1706                ENDDO
     1707             ENDDO
     1708
     1709!
     1710!--       horizontal wind direction
     1711          CASE ( 'wdir' )
     1712             DO  i = nxl, nxr
     1713                DO  j = nys, nyn
     1714                   DO  k = nzb, nzt+1
     1715                      u_center(k,j,i) = 0.5_wp * ( u(k,j,i) + u(k,j,i+1) )
     1716                      v_center(k,j,i) = 0.5_wp * ( v(k,j,i) + v(k,j+1,i) )
     1717
     1718                      wdir(k,j,i) = ATAN2( u_center(k,j,i), v_center(k,j,i) ) &
     1719                                  / pi * 180.0_wp + 180.0_wp
     1720                   ENDDO
     1721                ENDDO
     1722             ENDDO
    15041723
    15051724       END SELECT
     
    15111730
    15121731!
    1513 !-- The following block contains subroutines to calculate diagnostic 
    1514 !-- surface quantities. 
     1732!-- The following block contains subroutines to calculate diagnostic
     1733!-- surface quantities.
    15151734    CONTAINS
    15161735!------------------------------------------------------------------------------!
     
    15281747          INTEGER(iwp) ::  kk     !< running index along the z-dimension
    15291748          INTEGER(iwp) ::  m      !< running index for surface elements
    1530  
     1749
    15311750          DO  m = 1, surf%ns
    15321751
     
    15351754             k = surf%k(m)
    15361755!
    1537 !--          If 2-m level is below the first grid level, MOST is 
     1756!--          If 2-m level is below the first grid level, MOST is
    15381757!--          used for calculation of 2-m temperature.
    15391758             IF ( surf%z_mo(m) > 2.0_wp )  THEN
     
    15461765!--          is linearly interpolated between the two nearest vertical grid
    15471766!--          levels. Note, since 2-m temperature is only computed for
    1548 !--          horizontal upward-facing surfaces, only a vertical 
    1549 !--          interpolation is necessary. 
     1767!--          horizontal upward-facing surfaces, only a vertical
     1768!--          interpolation is necessary.
    15501769             ELSE
    15511770!
    1552 !--             zw(k-1) defines the height of the surface. 
     1771!--             zw(k-1) defines the height of the surface.
    15531772                kk = k
    15541773                DO WHILE ( zu(kk) - zw(k-1) < 2.0_wp  .AND.  kk <= nzt )
    1555                    kk = kk + 1 
    1556                 ENDDO
    1557 !
    1558 !--             kk defines the index of the first grid level >= 2m. 
     1774                   kk = kk + 1
     1775                ENDDO
     1776!
     1777!--             kk defines the index of the first grid level >= 2m.
    15591778                pt_2m(j,i) = pt(kk-1,j,i) +                                    &
    15601779                              ( zw(k-1) + 2.0_wp - zu(kk-1)     ) *            &
     
    15661785
    15671786       END SUBROUTINE calc_pt_2m
    1568        
     1787
    15691788!------------------------------------------------------------------------------!
    15701789! Description:
     
    15841803          REAL(wp) ::  uv_l !< wind speed at lower grid point
    15851804          REAL(wp) ::  uv_u !< wind speed at upper grid point
    1586  
     1805
    15871806          DO  m = 1, surf%ns
    15881807
     
    15911810             k = surf%k(m)
    15921811!
    1593 !--          If 10-m level is below the first grid level, MOST is 
     1812!--          If 10-m level is below the first grid level, MOST is
    15941813!--          used for calculation of 10-m temperature.
    15951814             IF ( surf%z_mo(m) > 10.0_wp )  THEN
     
    16021821!--          is linearly interpolated between the two nearest vertical grid
    16031822!--          levels. Note, since 10-m temperature is only computed for
    1604 !--          horizontal upward-facing surfaces, only a vertical 
    1605 !--          interpolation is necessary. 
     1823!--          horizontal upward-facing surfaces, only a vertical
     1824!--          interpolation is necessary.
    16061825             ELSE
    16071826!
    1608 !--             zw(k-1) defines the height of the surface. 
     1827!--             zw(k-1) defines the height of the surface.
    16091828                kk = k
    16101829                DO WHILE ( zu(kk) - zw(k-1) < 10.0_wp  .AND.  kk <= nzt )
    1611                    kk = kk + 1 
     1830                   kk = kk + 1
    16121831                ENDDO
    16131832!
     
    16531872    INTEGER(iwp) ::  ivar_all   !< loop index
    16541873    INTEGER(iwp) ::  l          !< index for cutting string
    1655     INTEGER(iwp) ::  mid          !< masked output running index 
     1874    INTEGER(iwp) ::  mid          !< masked output running index
    16561875
    16571876    prepared_diagnostic_output_quantities = .FALSE.
     
    16671886!
    16681887!--    Gather 2d output quantity names.
    1669 !--    Check for double occurrence of output quantity, e.g. by _xy, 
    1670 !--    _yz, _xz. 
     1888!--    Check for double occurrence of output quantity, e.g. by _xy,
     1889!--    _yz, _xz.
    16711890       DO  WHILE ( do2d_var(av,ivar)(1:1) /= ' ' )
    16721891          IF ( .NOT.  ANY( do_all == do2d_var(av,ivar) ) )  THEN
     
    17091928
    17101929 END SUBROUTINE doq_prepare
    1711  
     1930
    17121931!------------------------------------------------------------------------------!
    17131932! Description:
    17141933! ------------
    17151934!> Subroutine reads local (subdomain) restart data
    1716 !> Note: With the current structure reading of non-standard array is not 
     1935!> Note: With the current structure reading of non-standard array is not
    17171936!> possible
    17181937!------------------------------------------------------------------------------!
     
    17201939!                            nxr_on_file, nynf, nync, nyn_on_file, nysf,         &
    17211940!                            nysc, nys_on_file, tmp_3d_non_standard, found )
    1722 ! 
    1723 ! 
     1941!
     1942!
    17241943!     USE control_parameters
    1725 !         
     1944!
    17261945!     USE indices
    1727 !     
     1946!
    17281947!     USE kinds
    1729 !     
     1948!
    17301949!     USE pegrid
    1731 ! 
    1732 ! 
     1950!
     1951!
    17331952!     IMPLICIT NONE
    1734 ! 
    1735 !     INTEGER(iwp) ::  k               !< 
    1736 !     INTEGER(iwp) ::  nxlc            !< 
    1737 !     INTEGER(iwp) ::  nxlf            !< 
    1738 !     INTEGER(iwp) ::  nxl_on_file     !< 
    1739 !     INTEGER(iwp) ::  nxrc            !< 
    1740 !     INTEGER(iwp) ::  nxrf            !< 
    1741 !     INTEGER(iwp) ::  nxr_on_file     !< 
    1742 !     INTEGER(iwp) ::  nync            !< 
    1743 !     INTEGER(iwp) ::  nynf            !< 
    1744 !     INTEGER(iwp) ::  nyn_on_file     !< 
    1745 !     INTEGER(iwp) ::  nysc            !< 
    1746 !     INTEGER(iwp) ::  nysf            !< 
    1747 !     INTEGER(iwp) ::  nys_on_file     !< 
    1748 ! 
     1953!
     1954!     INTEGER(iwp) ::  k               !<
     1955!     INTEGER(iwp) ::  nxlc            !<
     1956!     INTEGER(iwp) ::  nxlf            !<
     1957!     INTEGER(iwp) ::  nxl_on_file     !<
     1958!     INTEGER(iwp) ::  nxrc            !<
     1959!     INTEGER(iwp) ::  nxrf            !<
     1960!     INTEGER(iwp) ::  nxr_on_file     !<
     1961!     INTEGER(iwp) ::  nync            !<
     1962!     INTEGER(iwp) ::  nynf            !<
     1963!     INTEGER(iwp) ::  nyn_on_file     !<
     1964!     INTEGER(iwp) ::  nysc            !<
     1965!     INTEGER(iwp) ::  nysf            !<
     1966!     INTEGER(iwp) ::  nys_on_file     !<
     1967!
    17491968!     LOGICAL, INTENT(OUT)  :: found
    1750 !     
     1969!
    17511970!     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE  ::  tmp_3d_non_standard !< temporary array for storing 3D data with non standard dimensions
    17521971! !
    1753 ! !-- If temporary non-standard array for reading is already allocated, 
     1972! !-- If temporary non-standard array for reading is already allocated,
    17541973! !-- deallocate it.
    17551974!     IF ( ALLOCATED( tmp_3d_non_standard ) )  DEALLOCATE( tmp_3d_non_standard )
    1756 !     
     1975!
    17571976!     found = .TRUE.
    1758 ! 
     1977!
    17591978!     SELECT CASE ( restart_string(1:length) )
    1760 ! 
     1979!
    17611980!        CASE ( 'ti_av' )
    17621981!           IF ( .NOT. ALLOCATED( ti_av ) )  THEN
     
    17691988!           ENDIF
    17701989!           ti_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1771 !     
     1990!
    17721991!        CASE ( 'uu_av' )
    17731992!           IF ( .NOT. ALLOCATED( uu_av ) )  THEN
     
    17801999!           ENDIF
    17812000!           uu_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1782 !                   
     2001!
    17832002!        CASE ( 'vv_av' )
    17842003!           IF ( .NOT. ALLOCATED( vv_av ) )  THEN
     
    17912010!           ENDIF
    17922011!           vv_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1793 !                   
     2012!
    17942013!        CASE ( 'ww_av' )
    17952014!           IF ( .NOT. ALLOCATED( ww_av ) )  THEN
     
    18022021!           ENDIF
    18032022!           ww_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1804 !                         
    1805 ! 
     2023!
     2024!
    18062025!        CASE DEFAULT
    1807 ! 
     2026!
    18082027!           found = .FALSE.
    1809 ! 
     2028!
    18102029!     END SELECT
    1811 ! 
     2030!
    18122031!  END SUBROUTINE doq_rrd_local
    1813  
     2032
    18142033!------------------------------------------------------------------------------!
    18152034! Description:
     
    18612080       WRITE ( 14 )  wv_av
    18622081    ENDIF
    1863    
     2082
    18642083    IF ( ALLOCATED( wtheta_av ) )  THEN
    18652084       CALL wrd_write_string( 'wtheta_av' )
    18662085       WRITE ( 14 )  wtheta_av
    18672086    ENDIF
    1868    
     2087
    18692088    IF ( ALLOCATED( wq_av ) )  THEN
    18702089       CALL wrd_write_string( 'wq_av' )
     
    18722091    ENDIF
    18732092
     2093    IF ( ALLOCATED( wspeed_av ) )  THEN
     2094       CALL wrd_write_string( 'wspeed_av' )
     2095       WRITE ( 14 )  wspeed_av
     2096    ENDIF
     2097
     2098    IF ( ALLOCATED( u_center_av ) )  THEN
     2099       CALL wrd_write_string( 'u_center_av' )
     2100       WRITE ( 14 )  u_center_av
     2101    ENDIF
     2102
     2103    IF ( ALLOCATED( v_center_av ) )  THEN
     2104       CALL wrd_write_string( 'v_center_av' )
     2105       WRITE ( 14 )  v_center_av
     2106    ENDIF
     2107
    18742108 END SUBROUTINE doq_wrd_local
    1875  
    1876  
     2109
     2110
    18772111
    18782112 END MODULE diagnostic_output_quantities_mod
Note: See TracChangeset for help on using the changeset viewer.