Changeset 4518


Ignore:
Timestamp:
May 4, 2020 3:44:28 PM (5 years ago)
Author:
suehring
Message:

Diagnostic output: Define arrays over ghost points in order to allow for standard mpi-io treatment. By this modularization of restart-data input is possible with the module interface. Move input of restart data to doq_rrd_local. Enable mpi-io for restart data. Bugfix: add missing restart input of wtheta_av, wq_av, wu_av, and wv_av.

Location:
palm/trunk/SOURCE
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r4517 r4518  
    2525# -----------------
    2626# $Id$
     27# Remove dependency of read_restart_data_mod on diagnostic_output_quantities_mod
     28#
     29# 4517 2020-05-03 14:29:30Z raasch
    2730# dependencies for MPI-IO added
    2831#
     
    577580        mod_kinds.o \
    578581        modules.o \
     582        restart_data_mpi_io_mod.o \
    579583        surface_layer_fluxes_mod.o
    580584diffusion_s.o: \
     
    10631067        chem_modules.o \
    10641068        cpulog_mod.o \
    1065         diagnostic_output_quantities_mod.o \
    10661069        gust_mod.o \
    10671070        mod_kinds.o \
  • palm/trunk/SOURCE/data_output_2d.f90

    r4514 r4518  
    2525! -----------------
    2626! $Id$
     27! remove double index
     28!
     29! 4514 2020-04-30 16:29:59Z suehring
    2730! Enable output of qsurf and ssurf
    2831!
     
    891894                      DO  j = nys, nyn
    892895                         k = topo_top_ind(j,i,0)
    893                          local_pf(i,j,nzb+1) = s(k+k,j,i)
     896                         local_pf(i,j,nzb+1) = s(k,j,i)
    894897                      ENDDO
    895898                   ENDDO
  • palm/trunk/SOURCE/diagnostic_output_quantities_mod.f90

    r4517 r4518  
    2525! -----------------
    2626! $Id$
     27! * Define arrays over ghost points in order to allow for standard mpi-io
     28!   treatment. By this modularization of restart-data input is possible with
     29!   the module interface.
     30! * Bugfix: add missing restart input of wtheta_av, wq_av, wu_av, and wv_av.
     31!
     32! 4517 2020-05-03 14:29:30Z raasch
    2733! use statement for exchange horiz added,
    2834! bugfix for call of exchange horiz 2d
     
    137143
    138144    USE kinds
     145
     146    USE restart_data_mpi_io_mod,                                                                   &
     147        ONLY:  rd_mpi_io_check_array,                                                              &
     148               rrd_mpi_io,                                                                         &
     149               wrd_mpi_io
    139150
    140151    USE surface_mod,                                                           &
     
    211222           doq_check_data_output,                                              &
    212223           doq_define_netcdf_grid,                                             &
     224           doq_init,                                                           &
    213225           doq_output_2d,                                                      &
    214226           doq_output_3d,                                                      &
    215227           doq_output_mask,                                                    &
    216            doq_init,                                                           &
     228           doq_rrd_local,                                                      &
    217229           doq_wrd_local
    218 !          doq_rrd_local,                                                      &
    219230
    220231
     
    255266    END INTERFACE doq_prepare
    256267
    257 !     INTERFACE doq_rrd_local
    258 !        MODULE PROCEDURE doq_rrd_local
    259 !     END INTERFACE doq_rrd_local
     268   INTERFACE doq_rrd_local
     269       MODULE PROCEDURE doq_rrd_local_ftn
     270       MODULE PROCEDURE doq_rrd_local_mpi
     271    END INTERFACE doq_rrd_local
    260272
    261273    INTERFACE doq_wrd_local
     
    290302          CASE ( 'ti' )
    291303             IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    292                 ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     304                ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    293305             ENDIF
    294306             ti_av = 0.0_wp
     
    296308          CASE ( 'uu' )
    297309             IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    298                 ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     310                ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    299311             ENDIF
    300312             uu_av = 0.0_wp
     
    302314          CASE ( 'vv' )
    303315             IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    304                 ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     316                ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    305317             ENDIF
    306318             vv_av = 0.0_wp
     
    308320          CASE ( 'ww' )
    309321             IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    310                 ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     322                ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    311323             ENDIF
    312324             ww_av = 0.0_wp
     
    314326           CASE ( 'wu' )
    315327             IF ( .NOT. ALLOCATED( wu_av ) )  THEN
    316                 ALLOCATE( wu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     328                ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    317329             ENDIF
    318330             wu_av = 0.0_wp
     
    320332           CASE ( 'wv' )
    321333             IF ( .NOT. ALLOCATED( wv_av ) )  THEN
    322                 ALLOCATE( wv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     334                ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    323335             ENDIF
    324336             wv_av = 0.0_wp
     
    326338           CASE ( 'wtheta' )
    327339             IF ( .NOT. ALLOCATED( wtheta_av ) )  THEN
    328                 ALLOCATE( wtheta_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     340                ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    329341             ENDIF
    330342             wtheta_av = 0.0_wp
     
    332344           CASE ( 'wq' )
    333345             IF ( .NOT. ALLOCATED( wq_av ) )  THEN
    334                 ALLOCATE( wq_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     346                ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    335347             ENDIF
    336348             wq_av = 0.0_wp
     
    350362          CASE ( 'wspeed' )
    351363             IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
    352                 ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     364                ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    353365             ENDIF
    354366             wspeed_av = 0.0_wp
     
    356368          CASE ( 'wdir' )
    357369             IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
    358                 ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     370                ALLOCATE( u_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    359371             ENDIF
    360372             IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
    361                 ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     373                ALLOCATE( v_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    362374             ENDIF
    363375             u_center_av = 0.0_wp
     
    634646
    635647                IF ( .NOT. ALLOCATED( wdir_av ) )  THEN
    636                    ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     648                   ALLOCATE( wdir_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    637649                ENDIF
    638650                wdir_av = 0.0_wp
     
    844856           ELSE
    845857              IF ( .NOT. ALLOCATED( ti_av ) ) THEN
    846                  ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     858                 ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    847859                 ti_av = REAL( fill_value, KIND = wp )
    848860              ENDIF
     
    858870          ELSE
    859871             IF ( .NOT. ALLOCATED( uu_av ) ) THEN
    860                 ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     872                ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    861873                uu_av = REAL( fill_value, KIND = wp )
    862874             ENDIF
     
    872884          ELSE
    873885             IF ( .NOT. ALLOCATED( vv_av ) ) THEN
    874                 ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     886                ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    875887                vv_av = REAL( fill_value, KIND = wp )
    876888             ENDIF
     
    886898          ELSE
    887899             IF ( .NOT. ALLOCATED( ww_av ) ) THEN
    888                 ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     900                ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    889901                ww_av = REAL( fill_value, KIND = wp )
    890902             ENDIF
     
    900912          ELSE
    901913             IF ( .NOT. ALLOCATED( wu_av ) ) THEN
    902                 ALLOCATE( wu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     914                ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    903915                wu_av = REAL( fill_value, KIND = wp )
    904916             ENDIF
     
    914926          ELSE
    915927             IF ( .NOT. ALLOCATED( wv_av ) ) THEN
    916                 ALLOCATE( wv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     928                ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    917929                wv_av = REAL( fill_value, KIND = wp )
    918930             ENDIF
     
    928940          ELSE
    929941             IF ( .NOT. ALLOCATED( wtheta_av ) ) THEN
    930                 ALLOCATE( wtheta_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     942                ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    931943                wtheta_av = REAL( fill_value, KIND = wp )
    932944             ENDIF
     
    942954          ELSE
    943955             IF ( .NOT. ALLOCATED( wq_av ) ) THEN
    944                 ALLOCATE( wq_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     956                ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    945957                wq_av = REAL( fill_value, KIND = wp )
    946958             ENDIF
     
    10001012          ELSE
    10011013             IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
    1002                 ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1014                ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10031015                wspeed_av = REAL( fill_value, KIND = wp )
    10041016             ENDIF
     
    10141026          ELSE
    10151027             IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
    1016                 ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1028                ALLOCATE( wdir_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10171029                wdir_av = REAL( fill_value, KIND = wp )
    10181030             ENDIF
     
    10841096          ELSE
    10851097             IF ( .NOT. ALLOCATED( ti_av ) ) THEN
    1086                 ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1098                ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10871099                ti_av = REAL( fill_value, KIND = wp )
    10881100             ENDIF
     
    10961108          ELSE
    10971109             IF ( .NOT. ALLOCATED( uu_av ) ) THEN
    1098                 ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1110                ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    10991111                uu_av = REAL( fill_value, KIND = wp )
    11001112             ENDIF
     
    11081120          ELSE
    11091121             IF ( .NOT. ALLOCATED( vv_av ) ) THEN
    1110                 ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1122                ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11111123                vv_av = REAL( fill_value, KIND = wp )
    11121124             ENDIF
     
    11201132          ELSE
    11211133             IF ( .NOT. ALLOCATED( ww_av ) ) THEN
    1122                 ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1134                ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11231135                ww_av = REAL( fill_value, KIND = wp )
    11241136             ENDIF
     
    11321144          ELSE
    11331145             IF ( .NOT. ALLOCATED( wu_av ) ) THEN
    1134                 ALLOCATE( wu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1146                ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11351147                wu_av = REAL( fill_value, KIND = wp )
    11361148             ENDIF
     
    11441156          ELSE
    11451157             IF ( .NOT. ALLOCATED( wv_av ) ) THEN
    1146                 ALLOCATE( wv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1158                ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11471159                wv_av = REAL( fill_value, KIND = wp )
    11481160             ENDIF
     
    11561168          ELSE
    11571169             IF ( .NOT. ALLOCATED( wtheta_av ) ) THEN
    1158                 ALLOCATE( wtheta_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1170                ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11591171                wtheta_av = REAL( fill_value, KIND = wp )
    11601172             ENDIF
     
    11681180          ELSE
    11691181             IF ( .NOT. ALLOCATED( wq_av ) ) THEN
    1170                 ALLOCATE( wq_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1182                ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11711183                wq_av = REAL( fill_value, KIND = wp )
    11721184             ENDIF
     
    11801192          ELSE
    11811193             IF ( .NOT. ALLOCATED( wspeed_av ) ) THEN
    1182                 ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1194                ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11831195                wspeed_av = REAL( fill_value, KIND = wp )
    11841196             ENDIF
     
    11921204          ELSE
    11931205             IF ( .NOT. ALLOCATED( wdir_av ) ) THEN
    1194                 ALLOCATE( wdir_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1206                ALLOCATE( wdir_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11951207                wdir_av = REAL( fill_value, KIND = wp )
    11961208             ENDIF
     
    14351447          CASE ( 'ti' )
    14361448             IF ( .NOT. ALLOCATED( ti ) )  THEN
    1437                 ALLOCATE( ti(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1449                ALLOCATE( ti(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14381450                ti = 0.0_wp
    14391451             ENDIF
     
    14421454          CASE ( 'uu' )
    14431455             IF ( .NOT. ALLOCATED( uu ) )  THEN
    1444                 ALLOCATE( uu(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1456                ALLOCATE( uu(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14451457                uu = 0.0_wp
    14461458             ENDIF
     
    14491461          CASE ( 'vv' )
    14501462             IF ( .NOT. ALLOCATED( vv ) )  THEN
    1451                 ALLOCATE( vv(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1463                ALLOCATE( vv(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14521464                vv = 0.0_wp
    14531465             ENDIF
     
    14561468          CASE ( 'ww' )
    14571469             IF ( .NOT. ALLOCATED( ww ) )  THEN
    1458                 ALLOCATE( ww(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1470                ALLOCATE( ww(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14591471                ww = 0.0_wp
    14601472             ENDIF
     
    14631475          CASE ( 'wu' )
    14641476             IF ( .NOT. ALLOCATED( wu ) )  THEN
    1465                 ALLOCATE( wu(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1477                ALLOCATE( wu(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14661478                wu = 0.0_wp
    14671479             ENDIF
     
    14701482          CASE ( 'wv' )
    14711483             IF ( .NOT. ALLOCATED( wv ) )  THEN
    1472                 ALLOCATE( wv(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1484                ALLOCATE( wv(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14731485                wv = 0.0_wp
    14741486             ENDIF
     
    14771489          CASE ( 'wtheta' )
    14781490             IF ( .NOT. ALLOCATED( wtheta ) )  THEN
    1479                 ALLOCATE( wtheta(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1491                ALLOCATE( wtheta(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14801492                wtheta = 0.0_wp
    14811493             ENDIF
     
    14841496          CASE ( 'wq' )
    14851497             IF ( .NOT. ALLOCATED( wq ) )  THEN
    1486                 ALLOCATE( wq(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1498                ALLOCATE( wq(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    14871499                wq = 0.0_wp
    14881500             ENDIF
     
    14911503          CASE ( 'theta_2m*' )
    14921504             IF ( .NOT. ALLOCATED( pt_2m ) )  THEN
    1493                 ALLOCATE( pt_2m(nys:nyn,nxl:nxr) )
     1505                ALLOCATE( pt_2m(nysg:nyng,nxlg:nxrg) )
    14941506                pt_2m = 0.0_wp
    14951507             ENDIF
     
    14981510          CASE ( 'wspeed_10m*' )
    14991511             IF ( .NOT. ALLOCATED( uv_10m ) )  THEN
    1500                 ALLOCATE( uv_10m(nys:nyn,nxl:nxr) )
     1512                ALLOCATE( uv_10m(nysg:nyng,nxlg:nxrg) )
    15011513                uv_10m = 0.0_wp
    15021514             ENDIF
     
    15051517          CASE ( 'wspeed' )
    15061518             IF ( .NOT. ALLOCATED( wspeed ) )  THEN
    1507                 ALLOCATE( wspeed(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1519                ALLOCATE( wspeed(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    15081520                wspeed = 0.0_wp
    15091521             ENDIF
     
    15131525          CASE ( 'wdir' )
    15141526             IF ( .NOT. ALLOCATED( u_center ) )  THEN
    1515                 ALLOCATE( u_center(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1527                ALLOCATE( u_center(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    15161528                u_center = 0.0_wp
    15171529             ENDIF
    15181530             IF ( .NOT. ALLOCATED( v_center ) )  THEN
    1519                 ALLOCATE( v_center(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1531                ALLOCATE( v_center(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    15201532                v_center = 0.0_wp
    15211533             ENDIF
    15221534             IF ( .NOT. ALLOCATED( wdir ) )  THEN
    1523                 ALLOCATE( wdir(nzb:nzt+1,nys:nyn,nxl:nxr) )
     1535                ALLOCATE( wdir(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    15241536                wdir = 0.0_wp
    15251537             ENDIF
     
    15961608                      uu(k,j,i) = u(k,j,i) * u(k,j,i)                          &
    15971609                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1598                        BTEST( wall_flags_total_0(k,j,i), 1) )
     1610                                BTEST( wall_flags_total_0(k,j,i), 1) )
    15991611                   ENDDO
    16001612                ENDDO
     
    16081620                      vv(k,j,i) = v(k,j,i) * v(k,j,i)                          &
    16091621                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1610                        BTEST( wall_flags_total_0(k,j,i), 2) )
     1622                                BTEST( wall_flags_total_0(k,j,i), 2) )
    16111623                   ENDDO
    16121624                ENDDO
     
    16201632                      ww(k,j,i) = w(k,j,i) * w(k,j,i)                          &
    16211633                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1622                        BTEST( wall_flags_total_0(k,j,i), 3) )
     1634                                BTEST( wall_flags_total_0(k,j,i), 3) )
    16231635                   ENDDO
    16241636                ENDDO
     
    16321644                      wu(k,j,i) = w(k,j,i) * u(k,j,i)                          &
    16331645                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1634                        BTEST( wall_flags_total_0(k,j,i), 0) )
     1646                                BTEST( wall_flags_total_0(k,j,i), 0) )
    16351647                   ENDDO
    16361648                ENDDO
     
    16441656                      wv(k,j,i) = w(k,j,i) * v(k,j,i)                          &
    16451657                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1646                        BTEST( wall_flags_total_0(k,j,i), 0) )
     1658                                BTEST( wall_flags_total_0(k,j,i), 0) )
    16471659                   ENDDO
    16481660                ENDDO
     
    16561668                      wtheta(k,j,i) = w(k,j,i) * pt(k,j,i)                     &
    16571669                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1658                        BTEST( wall_flags_total_0(k,j,i), 0) )
     1670                                BTEST( wall_flags_total_0(k,j,i), 0) )
    16591671                   ENDDO
    16601672                ENDDO
     
    16681680                      wq(k,j,i) = w(k,j,i) * q(k,j,i)                          &
    16691681                       * MERGE( 1.0_wp, 0.0_wp,                                &
    1670                        BTEST( wall_flags_total_0(k,j,i), 0) )
     1682                                BTEST( wall_flags_total_0(k,j,i), 0) )
    16711683                   ENDDO
    16721684                ENDDO
     
    18671879 SUBROUTINE doq_prepare
    18681880
    1869 
    18701881    USE control_parameters,                                                    &
    18711882        ONLY:  do2d, do3d, domask, masks
     
    19411952! ------------
    19421953!> Subroutine reads local (subdomain) restart data
    1943 !> Note: With the current structure reading of non-standard array is not
    1944 !> possible
    1945 !> COMMENT:  these arrays should be given standard index bounds! (Siggi)
    1946 !------------------------------------------------------------------------------!
    1947 !  SUBROUTINE doq_rrd_local( k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,             &
    1948 !                            nxr_on_file, nynf, nync, nyn_on_file, nysf,         &
    1949 !                            nysc, nys_on_file, tmp_3d_non_standard, found )
    1950 !
    1951 !
    1952 !     USE control_parameters
    1953 !
    1954 !     USE indices
    1955 !
    1956 !     USE kinds
    1957 !
    1958 !     USE pegrid
    1959 !
    1960 !
    1961 !     IMPLICIT NONE
    1962 !
    1963 !     INTEGER(iwp) ::  k               !<
    1964 !     INTEGER(iwp) ::  nxlc            !<
    1965 !     INTEGER(iwp) ::  nxlf            !<
    1966 !     INTEGER(iwp) ::  nxl_on_file     !<
    1967 !     INTEGER(iwp) ::  nxrc            !<
    1968 !     INTEGER(iwp) ::  nxrf            !<
    1969 !     INTEGER(iwp) ::  nxr_on_file     !<
    1970 !     INTEGER(iwp) ::  nync            !<
    1971 !     INTEGER(iwp) ::  nynf            !<
    1972 !     INTEGER(iwp) ::  nyn_on_file     !<
    1973 !     INTEGER(iwp) ::  nysc            !<
    1974 !     INTEGER(iwp) ::  nysf            !<
    1975 !     INTEGER(iwp) ::  nys_on_file     !<
    1976 !
    1977 !     LOGICAL, INTENT(OUT)  :: found
    1978 !
    1979 !     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE  ::  tmp_3d_non_standard !< temporary array for storing 3D data with non standard dimensions
    1980 ! !
    1981 ! !-- If temporary non-standard array for reading is already allocated,
    1982 ! !-- deallocate it.
    1983 !     IF ( ALLOCATED( tmp_3d_non_standard ) )  DEALLOCATE( tmp_3d_non_standard )
    1984 !
    1985 !     found = .TRUE.
    1986 !
    1987 !     SELECT CASE ( restart_string(1:length) )
    1988 !
    1989 !        CASE ( 'ti_av' )
    1990 !           IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    1991 !              ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1992 !           ENDIF
    1993 !           IF ( k == 1 )  THEN
    1994 !              ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,  &
    1995 !                                            nxl_on_file:nxr_on_file) )
    1996 !              READ ( 13 )  tmp_3d_non_standard
    1997 !           ENDIF
    1998 !           ti_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1999 !
    2000 !        CASE ( 'uu_av' )
    2001 !           IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    2002 !              ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2003 !           ENDIF
    2004 !           IF ( k == 1 )  THEN
    2005 !              ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,  &
    2006 !                                            nxl_on_file:nxr_on_file) )
    2007 !              READ ( 13 )  tmp_3d_non_standard
    2008 !           ENDIF
    2009 !           uu_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2010 !
    2011 !        CASE ( 'vv_av' )
    2012 !           IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    2013 !              ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2014 !           ENDIF
    2015 !           IF ( k == 1 )  THEN
    2016 !              ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,  &
    2017 !                                            nxl_on_file:nxr_on_file) )
    2018 !              READ ( 13 )  tmp_3d_non_standard
    2019 !           ENDIF
    2020 !           vv_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2021 !
    2022 !        CASE ( 'ww_av' )
    2023 !           IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    2024 !              ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2025 !           ENDIF
    2026 !           IF ( k == 1 )  THEN
    2027 !              ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,  &
    2028 !                                            nxl_on_file:nxr_on_file) )
    2029 !              READ ( 13 )  tmp_3d_non_standard
    2030 !           ENDIF
    2031 !           ww_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2032 !
    2033 !
    2034 !        CASE DEFAULT
    2035 !
    2036 !           found = .FALSE.
    2037 !
    2038 !     END SELECT
    2039 !
    2040 !  END SUBROUTINE doq_rrd_local
     1954!------------------------------------------------------------------------------!
     1955 SUBROUTINE doq_rrd_local_ftn( k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,                             &
     1956                               nxr_on_file, nynf, nync, nyn_on_file, nysf,                         &
     1957                               nysc, nys_on_file, tmp_2d, tmp_3d, found )
     1958
     1959    USE control_parameters
     1960
     1961    USE indices
     1962
     1963    USE kinds
     1964
     1965    USE pegrid
     1966
     1967
     1968    IMPLICIT NONE
     1969
     1970    INTEGER(iwp) ::  k               !<
     1971    INTEGER(iwp) ::  nxlc            !<
     1972    INTEGER(iwp) ::  nxlf            !<
     1973    INTEGER(iwp) ::  nxl_on_file     !<
     1974    INTEGER(iwp) ::  nxrc            !<
     1975    INTEGER(iwp) ::  nxrf            !<
     1976    INTEGER(iwp) ::  nxr_on_file     !<
     1977    INTEGER(iwp) ::  nync            !<
     1978    INTEGER(iwp) ::  nynf            !<
     1979    INTEGER(iwp) ::  nyn_on_file     !<
     1980    INTEGER(iwp) ::  nysc            !<
     1981    INTEGER(iwp) ::  nysf            !<
     1982    INTEGER(iwp) ::  nys_on_file     !<
     1983
     1984    LOGICAL, INTENT(OUT)  :: found
     1985
     1986    REAL(wp), DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_2d   !<
     1987
     1988    REAL(wp), DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d   !<
     1989
     1990
     1991    found = .TRUE.
     1992
     1993    SELECT CASE ( restart_string(1:length) )
     1994
     1995       CASE ( 'pt_2m_av' )
     1996          IF ( .NOT. ALLOCATED( pt_2m_av ) )  THEN
     1997             ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
     1998          ENDIF
     1999          IF ( k == 1 )  READ ( 13 )  tmp_2d
     2000          pt_2m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                                     &
     2001                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2002   
     2003       CASE ( 'ti_av' )
     2004          IF ( .NOT. ALLOCATED( ti_av ) )  THEN
     2005             ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2006          ENDIF
     2007          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2008          ti_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2009                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2010
     2011       CASE ( 'u_center_av' )
     2012          IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
     2013             ALLOCATE( u_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2014          ENDIF
     2015          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2016          u_center_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     2017                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2018
     2019       CASE ( 'uu_av' )
     2020          IF ( .NOT. ALLOCATED( uu_av ) )  THEN
     2021             ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2022          ENDIF
     2023          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2024          uu_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2025                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2026
     2027       CASE ( 'uv_10m_av' )
     2028          IF ( .NOT. ALLOCATED( uv_10m_av ) )  THEN
     2029             ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
     2030          ENDIF
     2031          IF ( k == 1 )  READ ( 13 )  tmp_2d
     2032          uv_10m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                                    &
     2033                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2034
     2035       CASE ( 'v_center_av' )
     2036          IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
     2037             ALLOCATE( v_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2038          ENDIF
     2039          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2040          v_center_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     2041                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2042
     2043       CASE ( 'vv_av' )
     2044          IF ( .NOT. ALLOCATED( vv_av ) )  THEN
     2045             ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2046          ENDIF
     2047          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2048          vv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2049                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2050
     2051       CASE ( 'wtheta_av' )
     2052          IF ( .NOT. ALLOCATED( wtheta_av ) )  THEN
     2053             ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2054          ENDIF
     2055          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2056          wtheta_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                   &
     2057                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2058
     2059       CASE ( 'wq_av' )
     2060          IF ( .NOT. ALLOCATED( wq_av ) )  THEN
     2061             ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2062          ENDIF
     2063          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2064          wq_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2065                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2066
     2067       CASE ( 'wspeed_av' )
     2068          IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
     2069             ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2070          ENDIF
     2071          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2072          wspeed_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                   &
     2073                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2074
     2075       CASE ( 'wu_av' )
     2076          IF ( .NOT. ALLOCATED( wu_av ) )  THEN
     2077             ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2078          ENDIF
     2079          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2080          wu_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2081                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2082
     2083       CASE ( 'wv_av' )
     2084          IF ( .NOT. ALLOCATED( wv_av ) )  THEN
     2085             ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2086          ENDIF
     2087          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2088          wv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2089                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2090
     2091       CASE ( 'ww_av' )
     2092          IF ( .NOT. ALLOCATED( ww_av ) )  THEN
     2093             ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2094          ENDIF
     2095          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2096          ww_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2097                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2098
     2099
     2100       CASE DEFAULT
     2101
     2102          found = .FALSE.
     2103
     2104    END SELECT
     2105
     2106 END SUBROUTINE doq_rrd_local_ftn
     2107
     2108!------------------------------------------------------------------------------!
     2109! Description:
     2110! ------------
     2111!> Read module-specific local restart data arrays (MPI-IO).
     2112!------------------------------------------------------------------------------!
     2113 SUBROUTINE doq_rrd_local_mpi
     2114
     2115    LOGICAL ::  array_found  !< control flad indicating whether the array is found in the file or not
     2116
     2117
     2118    CALL rd_mpi_io_check_array( 'pt_2m_av' , found = array_found )
     2119    IF ( array_found )  THEN
     2120       IF ( .NOT. ALLOCATED( pt_2m_av ) )  ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
     2121       CALL rrd_mpi_io( 'pt_2m_av', pt_2m_av )
     2122    ENDIF
     2123
     2124    CALL rd_mpi_io_check_array( 'ti_av' , found = array_found )
     2125    IF ( array_found )  THEN
     2126       IF ( .NOT. ALLOCATED( ti_av ) )  ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2127       CALL rrd_mpi_io( 'ti_av', ti_av )
     2128    ENDIF
     2129
     2130    CALL rd_mpi_io_check_array( 'u_center_av' , found = array_found )
     2131    IF ( array_found )  THEN
     2132       IF ( .NOT. ALLOCATED( u_center_av ) )  ALLOCATE( u_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2133       CALL rrd_mpi_io( 'u_center_av', u_center_av )
     2134    ENDIF
     2135
     2136    CALL rd_mpi_io_check_array( 'uu_av' , found = array_found )
     2137    IF ( array_found )  THEN
     2138       IF ( .NOT. ALLOCATED( uu_av ) )  ALLOCATE( uu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2139       CALL rrd_mpi_io( 'uu_av', uu_av )
     2140    ENDIF
     2141
     2142    CALL rd_mpi_io_check_array( 'uv_10m_av' , found = array_found )
     2143    IF ( array_found )  THEN
     2144       IF ( .NOT. ALLOCATED( uv_10m_av ) )  ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
     2145       CALL rrd_mpi_io( 'uv_10m_av', uv_10m_av )
     2146    ENDIF
     2147
     2148    CALL rd_mpi_io_check_array( 'v_center_av' , found = array_found )
     2149    IF ( array_found )  THEN
     2150       IF ( .NOT. ALLOCATED( v_center_av ) )  ALLOCATE( v_center_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2151       CALL rrd_mpi_io( 'v_center_av', v_center_av )
     2152    ENDIF
     2153
     2154    CALL rd_mpi_io_check_array( 'vv_av' , found = array_found )
     2155    IF ( array_found )  THEN
     2156       IF ( .NOT. ALLOCATED( vv_av ) )  ALLOCATE( vv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2157       CALL rrd_mpi_io( 'vv_av', vv_av )
     2158    ENDIF
     2159
     2160    CALL rd_mpi_io_check_array( 'ww_av' , found = array_found )
     2161    IF ( array_found )  THEN
     2162       IF ( .NOT. ALLOCATED( ww_av ) )  ALLOCATE( ww_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2163       CALL rrd_mpi_io( 'ww_av', ww_av )
     2164    ENDIF
     2165
     2166    CALL rd_mpi_io_check_array( 'wu_av' , found = array_found )
     2167    IF ( array_found )  THEN
     2168       IF ( .NOT. ALLOCATED( wu_av ) )  ALLOCATE( wu_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2169       CALL rrd_mpi_io( 'wu_av', wu_av )
     2170    ENDIF
     2171
     2172    CALL rd_mpi_io_check_array( 'wv_av' , found = array_found )
     2173    IF ( array_found )  THEN
     2174       IF ( .NOT. ALLOCATED( wv_av ) )  ALLOCATE( wv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2175       CALL rrd_mpi_io( 'wv_av', wv_av )
     2176    ENDIF
     2177
     2178    CALL rd_mpi_io_check_array( 'wtheta_av' , found = array_found )
     2179    IF ( array_found )  THEN
     2180       IF ( .NOT. ALLOCATED( wtheta_av ) )  ALLOCATE( wtheta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2181       CALL rrd_mpi_io( 'wtheta_av', wtheta_av )
     2182    ENDIF
     2183
     2184    CALL rd_mpi_io_check_array( 'wq_av' , found = array_found )
     2185    IF ( array_found )  THEN
     2186       IF ( .NOT. ALLOCATED( wq_av ) )  ALLOCATE( wq_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2187       CALL rrd_mpi_io( 'wq_av', wq_av )
     2188    ENDIF
     2189
     2190    CALL rd_mpi_io_check_array( 'wspeed_av' , found = array_found )
     2191    IF ( array_found )  THEN
     2192       IF ( .NOT. ALLOCATED( wspeed_av ) )  ALLOCATE( wspeed_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2193       CALL rrd_mpi_io( 'wspeed_av', wspeed_av )
     2194    ENDIF
     2195
     2196 END SUBROUTINE doq_rrd_local_mpi
    20412197
    20422198!------------------------------------------------------------------------------!
     
    20622218       ENDIF
    20632219
     2220       IF ( ALLOCATED( u_center_av ) )  THEN
     2221          CALL wrd_write_string( 'u_center_av' )
     2222          WRITE ( 14 )  u_center_av
     2223       ENDIF
     2224
    20642225       IF ( ALLOCATED( uu_av ) )  THEN
    20652226          CALL wrd_write_string( 'uu_av' )
     
    20722233       ENDIF
    20732234
     2235       IF ( ALLOCATED( v_center_av ) )  THEN
     2236          CALL wrd_write_string( 'v_center_av' )
     2237          WRITE ( 14 )  v_center_av
     2238       ENDIF
     2239
    20742240       IF ( ALLOCATED( vv_av ) )  THEN
    20752241          CALL wrd_write_string( 'vv_av' )
     
    21072273       ENDIF
    21082274
    2109        IF ( ALLOCATED( u_center_av ) )  THEN
    2110           CALL wrd_write_string( 'u_center_av' )
    2111           WRITE ( 14 )  u_center_av
    2112        ENDIF
    2113 
    2114        IF ( ALLOCATED( v_center_av ) )  THEN
    2115           CALL wrd_write_string( 'v_center_av' )
    2116           WRITE ( 14 )  v_center_av
    2117        ENDIF
    2118 
    21192275    ELSEIF ( TRIM( restart_data_format_output ) == 'mpi' )  THEN
    21202276
    2121        STOP 'mpi-io for doq_wrd_local not realized'
     2277       IF ( ALLOCATED( pt_2m_av ) )     CALL wrd_mpi_io( 'pt_2m_av', pt_2m_av )
     2278       IF ( ALLOCATED( ti_av ) )        CALL wrd_mpi_io( 'ti_av', ti_av )
     2279       IF ( ALLOCATED( u_center_av ) )  CALL wrd_mpi_io( 'u_center_av', u_center_av )
     2280       IF ( ALLOCATED( uu_av ) )        CALL wrd_mpi_io( 'uu_av', uu_av )
     2281       IF ( ALLOCATED( uv_10m_av ) )    CALL wrd_mpi_io( 'uv_10m_av', uv_10m_av )
     2282       IF ( ALLOCATED( vv_av ) )        CALL wrd_mpi_io( 'vv_av', vv_av )
     2283       IF ( ALLOCATED( v_center_av ) )  CALL wrd_mpi_io( 'v_center_av', v_center_av )
     2284       IF ( ALLOCATED( wtheta_av ) )    CALL wrd_mpi_io( 'wtheta_av', wtheta_av )
     2285       IF ( ALLOCATED( wq_av ) )        CALL wrd_mpi_io( 'wq_av', wq_av )
     2286       IF ( ALLOCATED( wspeed_av ) )    CALL wrd_mpi_io( 'wspeed_av', wspeed_av )
     2287       IF ( ALLOCATED( wu_av ) )        CALL wrd_mpi_io( 'wu_av', wu_av )
     2288       IF ( ALLOCATED( wv_av ) )        CALL wrd_mpi_io( 'wv_av', wv_av )
     2289       IF ( ALLOCATED( ww_av ) )        CALL wrd_mpi_io( 'ww_av', ww_av )
    21222290
    21232291    ENDIF
     
    21262294
    21272295
    2128 
    21292296 END MODULE diagnostic_output_quantities_mod
  • palm/trunk/SOURCE/module_interface.f90

    r4517 r4518  
    2525! -----------------
    2626! $Id$
     27! Call of doq_rrd_local enabled
     28!
     29! 4517 2020-05-03 14:29:30Z raasch
    2730! added restart with MPI-IO for reading local arrays
    2831!
     
    335338               doq_output_2d,                                                  &
    336339               doq_output_3d,                                                  &
     340               doq_rrd_local,                                                  &
    337341               doq_wrd_local
    338 !                doq_rrd_local,                                                  &
    339342
    340343    USE flight_mod,                                                            &
     
    18781881                            ) ! ToDo: change interface to pass variable
    18791882
    1880 !     IF ( .NOT. found )  CALL doq_rrd_local(                                    &
    1881 !                                map_index,                                      &
    1882 !                                nxlf, nxlc, nxl_on_file,                        &
    1883 !                                nxrf, nxrc, nxr_on_file,                        &
    1884 !                                nynf, nync, nyn_on_file,                        &
    1885 !                                nysf, nysc, nys_on_file,                        &
    1886 !                                tmp_3d_non_standard, found                      &
    1887 !                             ) ! ToDo: change interface to pass variable CALL doq_wrd_local
     1883    IF ( .NOT. found )  CALL doq_rrd_local(                                    &
     1884                               map_index,                                      &
     1885                               nxlf, nxlc, nxl_on_file,                        &
     1886                               nxrf, nxrc, nxr_on_file,                        &
     1887                               nynf, nync, nyn_on_file,                        &
     1888                               nysf, nysc, nys_on_file,                        &
     1889                               tmp_2d, tmp_3d, found                           &
     1890                            ) ! ToDo: change interface to pass variable
    18881891
    18891892    IF ( .NOT. found )  CALL gust_rrd_local(                                   &
     
    19941997    IF ( bulk_cloud_model )     CALL bcm_rrd_local
    19951998    IF ( air_chemistry )        CALL chem_rrd_local
    1996 !    CALL doq_rrd_local
     1999    CALL doq_rrd_local
    19972000    IF ( gust_module_enabled )  CALL gust_rrd_local
    19982001    IF ( particle_advection )   CALL lpm_rrd_local
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r4517 r4518  
    2525! -----------------
    2626! $Id$
     27! Move input of diagnostic output quantities to doq_rrd_local
     28!
     29! 4517 2020-05-03 14:29:30Z raasch
    2730! qsurf and ssurf added
    2831!
     
    130133    USE cpulog,                                                                &
    131134        ONLY:  cpu_log, log_point_s
    132 
    133     USE diagnostic_output_quantities_mod,                                      &
    134         ONLY:  pt_2m_av,                                                       &
    135                ti_av,                                                          &
    136                u_center_av,                                                    &
    137                uu_av,                                                          &
    138                uv_10m_av,                                                      &
    139                v_center_av,                                                    &
    140                vv_av,                                                          &
    141                wspeed_av,                                                      &
    142                ww_av
    143135
    144136    USE grid_variables,                                                        &
     
    17731765                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    17741766
    1775                    CASE ( 'pt_2m_av' )
    1776                       IF ( .NOT. ALLOCATED( pt_2m_av ) )  THEN
    1777                          ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
    1778                       ENDIF
    1779                       IF ( k == 1 )  READ ( 13 )  tmp_2d
    1780                       pt_2m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                            &
    1781                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1782 
    17831767                   CASE ( 'q' )
    17841768                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    18951879                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    18961880
    1897                    CASE ( 'ti_av' )
    1898                       IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    1899                          ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1900                       ENDIF
    1901                       IF ( k == 1 )  THEN
    1902                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1903                                                        nxl_on_file:nxr_on_file) )
    1904                          READ ( 13 )  tmp_3d_non_standard
    1905                       ENDIF
    1906                       ti_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1907 
    19081881                   CASE ( 'ts_av' )
    19091882                      IF ( .NOT. ALLOCATED( ts_av ) )  THEN
     
    19341907                      u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    19351908                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1936 
    1937                    CASE ( 'u_center_av' )
    1938                       IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
    1939                          ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1940                       ENDIF
    1941                       IF ( k == 1 )  THEN
    1942                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1943                                                        nxl_on_file:nxr_on_file) )
    1944                          READ ( 13 )  tmp_3d_non_standard
    1945                       ENDIF
    1946                       u_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1947 
    1948                    CASE ( 'uu_av' )
    1949                       IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    1950                          ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1951                       ENDIF
    1952                       IF ( k == 1 )  THEN
    1953                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1954                                                        nxl_on_file:nxr_on_file) )
    1955                          READ ( 13 )  tmp_3d_non_standard
    1956                       ENDIF
    1957                       uu_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1958 
    1959                    CASE ( 'uv_10m_av' )
    1960                       IF ( .NOT. ALLOCATED( uv_10m_av ) )  THEN
    1961                          ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
    1962                       ENDIF
    1963                       IF ( k == 1 )  READ ( 13 )  tmp_2d
    1964                       uv_10m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                           &
    1965                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    19661909
    19671910                   CASE ( 'u_m_l' )
     
    20261969                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    20271970
    2028                    CASE ( 'v_center_av' )
    2029                       IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
    2030                          ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2031                       ENDIF
    2032                       IF ( k == 1 )  THEN
    2033                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2034                                                        nxl_on_file:nxr_on_file) )
    2035                          READ ( 13 )  tmp_3d_non_standard
    2036                       ENDIF
    2037                       v_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2038 
    2039                    CASE ( 'vv_av' )
    2040                       IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    2041                       ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2042                       ENDIF
    2043                       IF ( k == 1 )  THEN
    2044                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2045                                                        nxl_on_file:nxr_on_file) )
    2046                          READ ( 13 )  tmp_3d_non_standard
    2047                       ENDIF
    2048                       vv_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2049 
    20501971                   CASE ( 'v_m_l' )
    20511972                      IF ( k == 1 )  THEN
     
    21142035                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    21152036
    2116                    CASE ( 'ww_av' )
    2117                       IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    2118                          ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2119                       ENDIF
    2120                       IF ( k == 1 )  THEN
    2121                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2122                                                        nxl_on_file:nxr_on_file) )
    2123                          READ ( 13 )  tmp_3d_non_standard
    2124                       ENDIF
    2125                       ww_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2126 
    21272037                   CASE ( 'w_m_l' )
    21282038                      IF ( k == 1 )  THEN
     
    21642074                         w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    21652075                      ENDIF
    2166 
    2167                    CASE ( 'wspeed_av' )
    2168                       IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
    2169                          ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2170                       ENDIF
    2171                       IF ( k == 1 )  THEN
    2172                          ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2173                                                        nxl_on_file:nxr_on_file) )
    2174                          READ ( 13 )  tmp_3d_non_standard
    2175                       ENDIF
    2176                       wspeed_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    21772076
    21782077                   CASE ( 'z0_av' )
     
    23262225       ENDIF
    23272226
    2328        CALL rd_mpi_io_check_array( 'pt_2m_av' , found = array_found )
    2329        IF ( array_found )  THEN
    2330           IF ( .NOT. ALLOCATED( pt_2m_av ) )  ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
    2331           CALL rrd_mpi_io( 'pt_2m_av', pt_2m_av )
    2332        ENDIF
    2333 
    23342227       CALL rd_mpi_io_check_array( 'q' , found = array_found )
    23352228       IF ( array_found )  THEN
     
    24252318       ENDIF
    24262319
    2427        CALL rd_mpi_io_check_array( 'ti_av' , found = array_found )
    2428        IF ( array_found )  THEN
    2429           IF ( .NOT. ALLOCATED( ti_av ) )  ALLOCATE( ti_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    2430           CALL rrd_mpi_io( 'ti_av', ti_av )
    2431        ENDIF
    2432 
    24332320       CALL rd_mpi_io_check_array( 'ts_av' , found = array_found )
    24342321       IF ( array_found )  THEN
     
    24512338       ENDIF
    24522339
    2453        CALL rd_mpi_io_check_array( 'u_center_av' , found = array_found )
    2454        IF ( array_found )  THEN
    2455           IF ( .NOT. ALLOCATED( u_center_av ) )  ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2456           CALL rrd_mpi_io( 'u_center_av', u_center_av )
    2457        ENDIF
    2458 
    2459        CALL rd_mpi_io_check_array( 'uu_av' , found = array_found )
    2460        IF ( array_found )  THEN
    2461           IF ( .NOT. ALLOCATED( uu_av ) )  ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2462           CALL rrd_mpi_io( 'uu_av', uu_av )
    2463        ENDIF
    2464 
    2465        CALL rd_mpi_io_check_array( 'uv_10m_av' , found = array_found )
    2466        IF ( array_found )  THEN
    2467           IF ( .NOT. ALLOCATED( uv_10m_av ) )  ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
    2468           CALL rrd_mpi_io( 'uv_10m_av', uv_10m_av )
    2469        ENDIF
    2470 
    24712340       CALL rd_mpi_io_check_array( 'u_m_l' , found = array_found )
    24722341       IF ( array_found )  THEN
     
    25072376       ENDIF
    25082377
    2509        CALL rd_mpi_io_check_array( 'v_center_av' , found = array_found )
    2510        IF ( array_found )  THEN
    2511           IF ( .NOT. ALLOCATED( v_center_av ) )  ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2512           CALL rrd_mpi_io( 'v_center_av', v_center_av )
    2513        ENDIF
    2514 
    2515        CALL rd_mpi_io_check_array( 'vv_av' , found = array_found )
    2516        IF ( array_found )  THEN
    2517           IF ( .NOT. ALLOCATED( vv_av ) )  ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2518           CALL rrd_mpi_io( 'vv_av', vv_av )
    2519        ENDIF
    2520 
    25212378       CALL rd_mpi_io_check_array( 'v_m_l' , found = array_found )
    25222379       IF ( array_found )  THEN
     
    25622419       ENDIF
    25632420
    2564        CALL rd_mpi_io_check_array( 'ww_av' , found = array_found )
    2565        IF ( array_found )  THEN
    2566           IF ( .NOT. ALLOCATED( ww_av ) )  ALLOCATE( w_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2567           CALL rrd_mpi_io( 'ww_av', ww_av )
    2568        ENDIF
    2569 
    25702421       CALL rd_mpi_io_check_array( 'w_m_l' , found = array_found )
    25712422       IF ( array_found )  THEN
     
    25902441          IF ( .NOT. ALLOCATED( w_m_s ) )  ALLOCATE( w_m_s(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    25912442          CALL rrd_mpi_io( 'w_m_s', w_m_s )
    2592        ENDIF
    2593 
    2594        CALL rd_mpi_io_check_array( 'wspeed_av' , found = array_found )
    2595        IF ( array_found )  THEN
    2596           IF ( .NOT. ALLOCATED( wspeed_av ) )  ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2597           CALL rrd_mpi_io( 'wspeed_av', wspeed_av )
    25982443       ENDIF
    25992444
Note: See TracChangeset for help on using the changeset viewer.