Changeset 4431 for palm


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

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

Location:
palm/trunk/SOURCE
Files:
2 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
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r4360 r4431  
    2525! -----------------
    2626! $Id$
     27! added u_center_av, v_center_av, wspeed_av
     28!
     29! 4360 2020-01-07 11:25:50Z suehring
    2730! Change automatic arrays to allocatable ones in rrd_local, in order to avoid
    28 ! memory problems due to too small stack size for large jobs with intel 
     31! memory problems due to too small stack size for large jobs with intel
    2932! compiler. (J.Resler)
    30 ! 
     33!
    3134! 4331 2019-12-10 18:25:02Z suehring
    3235! Enable restart data for 2-m potential temperature output
    33 ! 
     36!
    3437! 4301 2019-11-22 12:09:09Z oliver.maas
    3538! removed recycling_yshift
    36 ! 
     39!
    3740! 4227 2019-09-10 18:04:34Z gronemeier
    3841! implement new palm_date_time_mod and increased binary version
    39 ! 
     42!
    4043! 4146 2019-08-07 07:47:36Z gronemeier
    4144! Corrected "Former revisions" section
    42 ! 
     45!
    4346! 4131 2019-08-02 11:06:18Z monakurppa
    4447! Allocate hom and hom_sum to allow profile output for salsa variables.
    45 ! 
     48!
    4649! 4101 2019-07-17 15:14:26Z gronemeier
    4750! remove old_dt
    48 ! 
     51!
    4952! 4039 2019-06-18 10:32:41Z suehring
    5053! input of uu_av, vv_av, ww_av added
    51 ! 
     54!
    5255! 4017 2019-06-06 12:16:46Z schwenkel
    5356! bugfix for r3998, allocation of 3d temporary arrays of various dimensions revised
    54 ! 
     57!
    5558! 3998 2019-05-23 13:38:11Z suehring
    5659! Formatting adjustment
    57 ! 
     60!
    5861! 3994 2019-05-22 18:08:09Z suehring
    5962! output of turbulence intensity added
    60 ! 
     63!
    6164! 3988 2019-05-22 11:32:37Z kanani
    6265! + time_virtual_measurement (to enable steering of output interval)
    63 ! 
     66!
    6467! 3936 2019-04-26 15:38:02Z kanani
    6568! Enable time-averaged output of theta_2m* with restarts
    66 ! 
     69!
    6770! 3767 2019-02-27 08:18:02Z raasch
    6871! unused variables removed from rrd-subroutines parameter list
    69 ! 
     72!
    7073! 3766 2019-02-26 16:23:41Z raasch
    7174! first argument removed from module_interface_rrd_*
    72 ! 
     75!
    7376! 3668 2019-01-14 12:49:24Z maronga
    7477! Removed most_method and increased binary version
    75 ! 
     78!
    7679! 3655 2019-01-07 16:51:22Z knoop
    7780! Implementation of the PALM module interface
    78 ! 
     81!
    7982! 2894 2018-03-15 09:17:58Z Giersch
    8083! Initial revision
    81 ! 
     84!
    8285!
    8386! Description:
     
    111114        ONLY:  pt_2m_av,                                                       &
    112115               ti_av,                                                          &
     116               u_center_av,                                                    &
    113117               uu_av,                                                          &
    114118               uv_10m_av,                                                      &
     119               v_center_av,                                                    &
    115120               vv_av,                                                          &
     121               wspeed_av,                                                      &
    116122               ww_av
    117123
     
    191197! Description:
    192198! ------------
    193 !> Reads values of global control variables from restart-file (binary format) 
     199!> Reads values of global control variables from restart-file (binary format)
    194200!> created by PE0 of the previous run
    195201!------------------------------------------------------------------------------!
     
    199205       CHARACTER (LEN=10) ::  binary_version_global, version_on_file
    200206
    201        LOGICAL ::  found 
     207       LOGICAL ::  found
    202208
    203209
     
    773779                   WRITE( message_string, * ) 'unknown variable named "',      &
    774780                                           restart_string(1:length),           &
    775                                           '" found in global data from ',      & 
     781                                          '" found in global data from ',      &
    776782                                          'prior run on PE ', myid
    777783                CALL message( 'rrd_global', 'PA0302', 1, 2, 0, 6, 0 )
    778  
     784
    779785                ENDIF
    780786
     
    783789!--       Read next string
    784790          READ ( 13 )  length
    785           READ ( 13 )  restart_string(1:length)   
     791          READ ( 13 )  restart_string(1:length)
    786792
    787793       ENDDO
    788  
     794
    789795
    790796    CALL close_file( 13 )
    791797
    792    
     798
    793799    END SUBROUTINE rrd_global
    794800
     
    10131019! Description:
    10141020! ------------
    1015 !> Reads processor specific data of variables and arrays from restart file 
     1021!> Reads processor specific data of variables and arrays from restart file
    10161022!> (binary format).
    10171023!------------------------------------------------------------------------------!
     
    10761082    CALL cpu_log( log_point_s(14), 'rrd_local', 'start' )
    10771083!
    1078 !-- Allocate temporary buffer arrays. In previous versions, there were 
     1084!-- Allocate temporary buffer arrays. In previous versions, there were
    10791085!-- declared as automated arrays, causing memory problems when these
    10801086!-- were allocate on stack.
     
    11091115!--    matches another time(s) in the current subdomain by shifting it
    11101116!--    for nx_on_file+1, ny_on_file+1 respectively
    1111    
     1117
    11121118       shift_y = 0
    11131119       j       = 0
    11141120       DO WHILE (  nyspr+shift_y <= nyn-offset_y )
    1115          
    1116           IF ( nynpr+shift_y >= nys-offset_y ) THEN 
     1121
     1122          IF ( nynpr+shift_y >= nys-offset_y ) THEN
    11171123
    11181124             shift_x = 0
    11191125             DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
    1120                
     1126
    11211127                IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
    11221128                   j = j +1
     
    11331139                      file_list(files_to_be_opened) = i-1
    11341140                   ENDIF
    1135                      
     1141
    11361142                   offset_xa(files_to_be_opened,j) = offset_x + shift_x
    11371143                   offset_ya(files_to_be_opened,j) = offset_y + shift_y
     
    11471153                shift_x = shift_x + ( nx_on_file + 1 )
    11481154             ENDDO
    1149        
     1155
    11501156          ENDIF
    1151              
    1152           shift_y = shift_y + ( ny_on_file + 1 )             
     1157
     1158          shift_y = shift_y + ( ny_on_file + 1 )
    11531159       ENDDO
    1154          
     1160
    11551161       IF ( j > 0 )  overlap_count(files_to_be_opened) = j
    1156          
     1162
    11571163    ENDDO
    1158    
     1164
    11591165!
    11601166!-- Save the id-string of the current process, since myid_char may now be used
     
    11721178!-- Read data from all restart files determined above
    11731179    DO  i = 1, files_to_be_opened
    1174  
     1180
    11751181       j = file_list(i)
    11761182!
     
    12311237                                     '&= ', hor_index_bounds_previous_run(3,j),                    &
    12321238                                     '&from the index bound information array'
    1233           CALL message( 'rrd_local', 'PA0289', 2, 2, -1, 6, 1 ) 
     1239          CALL message( 'rrd_local', 'PA0289', 2, 2, -1, 6, 1 )
    12341240       ENDIF
    12351241
     
    12401246                                     '&= ', hor_index_bounds_previous_run(4,j),                    &
    12411247                                     '&from the index bound information array'
    1242           CALL message( 'rrd_local', 'PA0290', 2, 2, -1, 6, 1 ) 
     1248          CALL message( 'rrd_local', 'PA0290', 2, 2, -1, 6, 1 )
    12431249       ENDIF
    12441250
     
    12481254                                     '&nzb on file = ', nzb_on_file,                               &
    12491255                                     '&nzb         = ', nzb
    1250           CALL message( 'rrd_local', 'PA0291', 1, 2, 0, 6, 0 ) 
     1256          CALL message( 'rrd_local', 'PA0291', 1, 2, 0, 6, 0 )
    12511257       ENDIF
    12521258
     
    12561262                                     '&nzt on file = ', nzt_on_file,                               &
    12571263                                     '&nzt         = ', nzt
    1258           CALL message( 'rrd_local', 'PA0292', 1, 2, 0, 6, 0 ) 
     1264          CALL message( 'rrd_local', 'PA0292', 1, 2, 0, 6, 0 )
    12591265       ENDIF
    12601266
     
    12671273!
    12681274!--    Read arrays
    1269 !--    ATTENTION: If the following read commands have been altered, the 
    1270 !--    ---------- version number of the variable binary_version_local must 
    1271 !--               be altered, too. Furthermore, the output list of arrays in 
    1272 !--               wrd_write_local must also be altered 
     1275!--    ATTENTION: If the following read commands have been altered, the
     1276!--    ---------- version number of the variable binary_version_local must
     1277!--               be altered, too. Furthermore, the output list of arrays in
     1278!--               wrd_write_local must also be altered
    12731279!--               accordingly.
    12741280       READ ( 13 )  length
    12751281       READ ( 13 )  restart_string(1:length)
    1276        
     1282
    12771283
    12781284!
     
    12851291
    12861292             found = .FALSE.
    1287              
     1293
    12881294!
    12891295!--          Get the index range of the subdomain on file which overlap with
     
    13171323                   IF ( .NOT. ALLOCATED( e_av ) )  THEN
    13181324                      ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,                                  &
    1319                                      nxl-nbgp:nxr+nbgp) )   
     1325                                     nxl-nbgp:nxr+nbgp) )
    13201326                   ENDIF
    13211327                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    14281434                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
    14291435                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
    1430                    ENDIF 
     1436                   ENDIF
    14311437                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    14321438                   qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
     
    14881494                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
    14891495                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1490                    
     1496
    14911497                CASE ( 'ssws_av' )
    14921498                   IF ( .NOT. ALLOCATED( ssws_av ) )  THEN
    14931499                      ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
    1494                    ENDIF 
     1500                   ENDIF
    14951501                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    14961502                   ssws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
     
    15361542                   u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    15371543                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1538                      
     1544
     1545                CASE ( 'u_center_av' )
     1546                   IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
     1547                      ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1548                   ENDIF
     1549                   IF ( k == 1 )  THEN
     1550                      ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
     1551                                                    nxl_on_file:nxr_on_file) )
     1552                      READ ( 13 )  tmp_3d_non_standard
     1553                   ENDIF
     1554                   u_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
     1555
    15391556                CASE ( 'uu_av' )
    15401557                   IF ( .NOT. ALLOCATED( uu_av ) )  THEN
     
    16161633                   v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    16171634                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1618                      
     1635
     1636                CASE ( 'v_center_av' )
     1637                   IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
     1638                      ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1639                   ENDIF
     1640                   IF ( k == 1 )  THEN
     1641                      ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
     1642                                                    nxl_on_file:nxr_on_file) )
     1643                      READ ( 13 )  tmp_3d_non_standard
     1644                   ENDIF
     1645                   v_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
     1646
    16191647                CASE ( 'vv_av' )
    16201648                   IF ( .NOT. ALLOCATED( vv_av ) )  THEN
     
    16931721                   w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    16941722                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1695                      
     1723
    16961724                CASE ( 'ww_av' )
    16971725                   IF ( .NOT. ALLOCATED( ww_av ) )  THEN
     
    17441772                      w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    17451773                   ENDIF
     1774
     1775                CASE ( 'wspeed_av' )
     1776                   IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
     1777                      ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1778                   ENDIF
     1779                   IF ( k == 1 )  THEN
     1780                      ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
     1781                                                    nxl_on_file:nxr_on_file) )
     1782                      READ ( 13 )  tmp_3d_non_standard
     1783                   ENDIF
     1784                   wspeed_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    17461785
    17471786                CASE ( 'z0_av' )
     
    17911830                                                'from prior run on PE ', myid
    17921831                      CALL message( 'rrd_local', 'PA0302', 1, 2, 0, 6, 0 )
    1793  
     1832
    17941833                   ENDIF
    17951834
    17961835             END SELECT
    17971836
    1798           ENDDO ! overlaploop 
     1837          ENDDO ! overlaploop
    17991838
    18001839!
Note: See TracChangeset for help on using the changeset viewer.