Ignore:
Timestamp:
May 3, 2020 2:29:30 PM (14 months ago)
Author:
raasch
Message:

added restart with MPI-IO for reading local arrays

File:
1 edited

Legend:

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

    r4514 r4517  
    11471147
    11481148!
    1149 !--    Close restart File
     1149!--    Close restart file
    11501150       CALL rd_mpi_io_close
    11511151
     
    13761376! Description:
    13771377! ------------
    1378 !> Reads processor specific data of variables and arrays from restart file
     1378!> Reads processor (subdomain) specific data of variables and arrays from restart file
    13791379!> (binary format).
    13801380!------------------------------------------------------------------------------!
     
    13851385    CHARACTER (LEN=10) ::  binary_version_local
    13861386    CHARACTER (LEN=10) ::  version_on_file
     1387    CHARACTER (LEN=20) ::  tmp_name               !< temporary variable
    13871388
    13881389    INTEGER(iwp) ::  files_to_be_opened  !<
     
    14281429    INTEGER(isp), DIMENSION(:,:,:), ALLOCATABLE ::  tmp_2d_seq_random  !< temporary array for storing random generator data
    14291430
    1430     LOGICAL ::  found
     1431    LOGICAL ::  array_found                      !<
     1432    LOGICAL ::  found                            !<
    14311433
    14321434    REAL(wp), DIMENSION(:,:),   ALLOCATABLE   ::  tmp_2d         !< temporary array for storing 2D data
     
    14381440!-- Read data from previous model run.
    14391441    CALL cpu_log( log_point_s(14), 'rrd_local', 'start' )
    1440 !
    1441 !-- Allocate temporary buffer arrays. In previous versions, there were
    1442 !-- declared as automated arrays, causing memory problems when these
    1443 !-- were allocate on stack.
    1444     ALLOCATE( nxlfa(numprocs_previous_run,1000) )
    1445     ALLOCATE( nxrfa(numprocs_previous_run,1000) )
    1446     ALLOCATE( nynfa(numprocs_previous_run,1000) )
    1447     ALLOCATE( nysfa(numprocs_previous_run,1000) )
    1448     ALLOCATE( offset_xa(numprocs_previous_run,1000) )
    1449     ALLOCATE( offset_ya(numprocs_previous_run,1000) )
    1450 
    1451 !
    1452 !-- Check which of the restart files contain data needed for the subdomain
    1453 !-- of this PE
    1454     files_to_be_opened = 0
    1455 
    1456     DO  i = 1, numprocs_previous_run
    1457 !
    1458 !--    Store array bounds of the previous run ("pr") in temporary scalars
    1459        nxlpr = hor_index_bounds_previous_run(1,i-1)
    1460        nxrpr = hor_index_bounds_previous_run(2,i-1)
    1461        nyspr = hor_index_bounds_previous_run(3,i-1)
    1462        nynpr = hor_index_bounds_previous_run(4,i-1)
    1463 
    1464 !
    1465 !--    Determine the offsets. They may be non-zero in case that the total domain
    1466 !--    on file is smaller than the current total domain.
    1467        offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
    1468        offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
    1469 
    1470 !
    1471 !--    Start with this offset and then check, if the subdomain on file
    1472 !--    matches another time(s) in the current subdomain by shifting it
    1473 !--    for nx_on_file+1, ny_on_file+1 respectively
    1474 
    1475        shift_y = 0
    1476        j       = 0
    1477        DO WHILE (  nyspr+shift_y <= nyn-offset_y )
    1478 
    1479           IF ( nynpr+shift_y >= nys-offset_y ) THEN
    1480 
    1481              shift_x = 0
    1482              DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
    1483 
    1484                 IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
    1485                    j = j +1
    1486                    IF ( j > 1000 )  THEN
    1487 !
    1488 !--                   Array bound exceeded
    1489                       message_string = 'data from subdomain of previous' //                        &
    1490                                        ' run mapped more than 1000 times'
    1491                       CALL message( 'rrd_local', 'PA0284', 2, 2, -1, 6, 1 )
     1442
     1443    IF ( TRIM( restart_data_format_input ) == 'fortran_binary' )  THEN
     1444!
     1445!--    Input in Fortran binary format
     1446
     1447!
     1448!--    Allocate temporary buffer arrays. In previous versions, there were
     1449!--    declared as automated arrays, causing memory problems when these
     1450!--    were allocate on stack.
     1451       ALLOCATE( nxlfa(numprocs_previous_run,1000) )
     1452       ALLOCATE( nxrfa(numprocs_previous_run,1000) )
     1453       ALLOCATE( nynfa(numprocs_previous_run,1000) )
     1454       ALLOCATE( nysfa(numprocs_previous_run,1000) )
     1455       ALLOCATE( offset_xa(numprocs_previous_run,1000) )
     1456       ALLOCATE( offset_ya(numprocs_previous_run,1000) )
     1457
     1458!
     1459!--    Check which of the restart files contain data needed for the subdomain
     1460!--    of this PE
     1461       files_to_be_opened = 0
     1462
     1463       DO  i = 1, numprocs_previous_run
     1464!
     1465!--       Store array bounds of the previous run ("pr") in temporary scalars
     1466          nxlpr = hor_index_bounds_previous_run(1,i-1)
     1467          nxrpr = hor_index_bounds_previous_run(2,i-1)
     1468          nyspr = hor_index_bounds_previous_run(3,i-1)
     1469          nynpr = hor_index_bounds_previous_run(4,i-1)
     1470
     1471!
     1472!--       Determine the offsets. They may be non-zero in case that the total domain
     1473!--       on file is smaller than the current total domain.
     1474          offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
     1475          offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
     1476
     1477!
     1478!--       Start with this offset and then check, if the subdomain on file
     1479!--       matches another time(s) in the current subdomain by shifting it
     1480!--       for nx_on_file+1, ny_on_file+1 respectively
     1481
     1482          shift_y = 0
     1483          j       = 0
     1484          DO WHILE (  nyspr+shift_y <= nyn-offset_y )
     1485
     1486             IF ( nynpr+shift_y >= nys-offset_y ) THEN
     1487
     1488                shift_x = 0
     1489                DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
     1490
     1491                   IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
     1492                      j = j +1
     1493                      IF ( j > 1000 )  THEN
     1494!
     1495!--                      Array bound exceeded
     1496                         message_string = 'data from subdomain of previous' //                        &
     1497                                          ' run mapped more than 1000 times'
     1498                         CALL message( 'rrd_local', 'PA0284', 2, 2, -1, 6, 1 )
     1499                      ENDIF
     1500
     1501                      IF ( j == 1 )  THEN
     1502                         files_to_be_opened = files_to_be_opened + 1
     1503                         file_list(files_to_be_opened) = i-1
     1504                      ENDIF
     1505
     1506                      offset_xa(files_to_be_opened,j) = offset_x + shift_x
     1507                      offset_ya(files_to_be_opened,j) = offset_y + shift_y
     1508!
     1509!--                   Index bounds of overlapping data
     1510                      nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
     1511                      nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
     1512                      nysfa(files_to_be_opened,j) = MAX( nys-offset_y-shift_y, nyspr )
     1513                      nynfa(files_to_be_opened,j) = MIN( nyn-offset_y-shift_y, nynpr )
     1514
    14921515                   ENDIF
    14931516
    1494                    IF ( j == 1 )  THEN
    1495                       files_to_be_opened = files_to_be_opened + 1
    1496                       file_list(files_to_be_opened) = i-1
    1497                    ENDIF
    1498 
    1499                    offset_xa(files_to_be_opened,j) = offset_x + shift_x
    1500                    offset_ya(files_to_be_opened,j) = offset_y + shift_y
    1501 !
    1502 !--                Index bounds of overlapping data
    1503                    nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
    1504                    nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
    1505                    nysfa(files_to_be_opened,j) = MAX( nys-offset_y-shift_y, nyspr )
    1506                    nynfa(files_to_be_opened,j) = MIN( nyn-offset_y-shift_y, nynpr )
    1507 
    1508                 ENDIF
    1509 
    1510                 shift_x = shift_x + ( nx_on_file + 1 )
    1511              ENDDO
    1512 
     1517                   shift_x = shift_x + ( nx_on_file + 1 )
     1518                ENDDO
     1519
     1520             ENDIF
     1521
     1522             shift_y = shift_y + ( ny_on_file + 1 )
     1523          ENDDO
     1524
     1525          IF ( j > 0 )  overlap_count(files_to_be_opened) = j
     1526
     1527       ENDDO
     1528
     1529!
     1530!--    Save the id-string of the current process, since myid_char may now be used
     1531!--    to open files created by PEs with other id.
     1532       myid_char_save = myid_char
     1533
     1534       IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run )  THEN
     1535          WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed in restart run. & ',   &
     1536                                     'Set debug_output =.T. to get a list of files from which the & ',&
     1537                                     'single PEs will read respectively'
     1538          CALL message( 'rrd_local', 'PA0285', 0, 0, 0, 6, 0 )
     1539          IF ( debug_output )  THEN
     1540             IF ( files_to_be_opened <= 120 )  THEN
     1541                WRITE( debug_string, '(2A,1X,120(I6.6,1X))' )                                         &
     1542                     'number of PEs or virtual PE-grid changed in restart run.  PE will read from ',  &
     1543                     'files ', file_list(1:files_to_be_opened)
     1544             ELSE
     1545                WRITE( debug_string, '(3A,1X,120(I6.6,1X),A)' )                                      &
     1546                     'number of PEs or virtual PE-grid changed in restart run.  PE will read from ',  &
     1547                     'files ', file_list(1:120), '... and more'
     1548             ENDIF
     1549             CALL debug_message( 'rrd_local', 'info' )
    15131550          ENDIF
    1514 
    1515           shift_y = shift_y + ( ny_on_file + 1 )
    1516        ENDDO
    1517 
    1518        IF ( j > 0 )  overlap_count(files_to_be_opened) = j
    1519 
    1520     ENDDO
    1521 
    1522 !
    1523 !-- Save the id-string of the current process, since myid_char may now be used
    1524 !-- to open files created by PEs with other id.
    1525     myid_char_save = myid_char
    1526 
    1527     IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run )  THEN
    1528        WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed in restart run. & ',   &
    1529                                   'Set debug_output =.T. to get a list of files from which the & ',&
    1530                                   'single PEs will read respectively'
    1531        CALL message( 'rrd_local', 'PA0285', 0, 0, 0, 6, 0 )
    1532        IF ( debug_output )  THEN
    1533           IF ( files_to_be_opened <= 120 )  THEN
    1534              WRITE( debug_string, '(2A,1X,120(I6.6,1X))' )                                         &
    1535                   'number of PEs or virtual PE-grid changed in restart run.  PE will read from ',  &
    1536                   'files ', file_list(1:files_to_be_opened)
    1537           ELSE
    1538              WRITE( debug_string, '(3A,1X,120(I6.6,1X),A)' )                                      &
    1539                   'number of PEs or virtual PE-grid changed in restart run.  PE will read from ',  &
    1540                   'files ', file_list(1:120), '... and more'
    1541           ENDIF
    1542           CALL debug_message( 'rrd_local', 'info' )
    1543        ENDIF
    1544     ENDIF
    1545 
    1546 !
    1547 !-- Read data from all restart files determined above
    1548     DO  i = 1, files_to_be_opened
    1549 
    1550        j = file_list(i)
    1551 !
    1552 !--    Set the filename (underscore followed by four digit processor id)
    1553        WRITE (myid_char,'(''_'',I6.6)')  j
    1554 
    1555 !
    1556 !--    Open the restart file. If this file has been created by PE0 (_000000),
    1557 !--    the global variables at the beginning of the file have to be skipped
    1558 !--    first.
    1559        CALL check_open( 13 )
    1560        IF ( j == 0 )  CALL rrd_skip_global
    1561 
    1562 !
    1563 !--    First compare the version numbers
    1564        READ ( 13 )  length
    1565        READ ( 13 )  restart_string(1:length)
    1566        READ ( 13 )  version_on_file
    1567 
    1568        binary_version_local = '4.7'
    1569        IF ( TRIM( version_on_file ) /= TRIM( binary_version_local ) )  THEN
    1570           WRITE( message_string, * ) 'version mismatch concerning ',                               &
    1571                                      'binary_version_local:',                                      &
    1572                                      '&version on file    = "', TRIM( version_on_file ), '"',      &
    1573                                      '&version in program = "', TRIM( binary_version_local ), '"'
    1574           CALL message( 'rrd_local', 'PA0286', 1, 2, 0, 6, 0 )
    1575        ENDIF
    1576 
    1577 !
    1578 !--    Read number of processors, processor-id, and array ranges.
    1579 !--    Compare the array ranges with those stored in the index bound array.
    1580        READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, nys_on_file,         &
    1581                     nyn_on_file, nzb_on_file, nzt_on_file
    1582 
    1583        IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
    1584           WRITE( message_string, * ) 'problem with index bound nxl on ',                           &
    1585                                      'restart file "', myid_char, '"',                             &
    1586                                      '&nxl = ', nxl_on_file, ' but it should be',                  &
    1587                                      '&= ', hor_index_bounds_previous_run(1,j),                    &
    1588                                      '&from the index bound information array'
    1589           CALL message( 'rrd_local', 'PA0287', 2, 2, -1, 6, 1 )
    1590        ENDIF
    1591 
    1592        IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
    1593            WRITE( message_string, * ) 'problem with index bound nxr on ',                          &
    1594                                       'restart file "', myid_char, '"'  ,                          &
    1595                                       ' nxr = ', nxr_on_file, ' but it should be',                 &
    1596                                       ' = ', hor_index_bounds_previous_run(2,j),                   &
    1597                                       ' from the index bound information array'
    1598           CALL message( 'rrd_local', 'PA0288', 2, 2, -1, 6, 1 )
    1599 
    1600        ENDIF
    1601 
    1602        IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
    1603           WRITE( message_string, * ) 'problem with index bound nys on ',                           &
    1604                                      'restart file "', myid_char, '"',                             &
    1605                                      '&nys = ', nys_on_file, ' but it should be',                  &
    1606                                      '&= ', hor_index_bounds_previous_run(3,j),                    &
    1607                                      '&from the index bound information array'
    1608           CALL message( 'rrd_local', 'PA0289', 2, 2, -1, 6, 1 )
    1609        ENDIF
    1610 
    1611        IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
    1612           WRITE( message_string, * ) 'problem with index bound nyn on ',                           &
    1613                                      'restart file "', myid_char, '"',                             &
    1614                                      '&nyn = ', nyn_on_file, ' but it should be',                  &
    1615                                      '&= ', hor_index_bounds_previous_run(4,j),                    &
    1616                                      '&from the index bound information array'
    1617           CALL message( 'rrd_local', 'PA0290', 2, 2, -1, 6, 1 )
    1618        ENDIF
    1619 
    1620        IF ( nzb_on_file /= nzb )  THEN
    1621           WRITE( message_string, * ) 'mismatch between actual data and data ',                     &
    1622                                      'from prior run on PE ', myid,                                &
    1623                                      '&nzb on file = ', nzb_on_file,                               &
    1624                                      '&nzb         = ', nzb
    1625           CALL message( 'rrd_local', 'PA0291', 1, 2, 0, 6, 0 )
    1626        ENDIF
    1627 
    1628        IF ( nzt_on_file /= nzt )  THEN
    1629           WRITE( message_string, * ) 'mismatch between actual data and data ',                     &
    1630                                      'from prior run on PE ', myid,                                &
    1631                                      '&nzt on file = ', nzt_on_file,                               &
    1632                                      '&nzt         = ', nzt
    1633           CALL message( 'rrd_local', 'PA0292', 1, 2, 0, 6, 0 )
    1634        ENDIF
    1635 
    1636 !
    1637 !--    Allocate temporary arrays sized as the arrays on the restart file
    1638        ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp),      &
    1639                  tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,                               &
    1640                         nxl_on_file-nbgp:nxr_on_file+nbgp) )
    1641 
    1642 !
    1643 !--    Read arrays
    1644 !--    ATTENTION: If the following read commands have been altered, the
    1645 !--    ---------- version number of the variable binary_version_local must
    1646 !--               be altered, too. Furthermore, the output list of arrays in
    1647 !--               wrd_write_local must also be altered
    1648 !--               accordingly.
    1649        READ ( 13 )  length
    1650        READ ( 13 )  restart_string(1:length)
    1651 
    1652 
    1653 !
    1654 !--    Loop over processor specific field data
    1655        DO  WHILE ( restart_string(1:length) /= '*** end ***' )
    1656 
    1657 !
    1658 !--       Map data on file as often as needed (data are read only for k=1)
    1659           DO  k = 1, overlap_count(i)
    1660 
    1661              found = .FALSE.
    1662 
    1663 !
    1664 !--          Get the index range of the subdomain on file which overlap with
    1665 !--          the current subdomain
    1666              nxlf = nxlfa(i,k)
    1667              nxlc = nxlfa(i,k) + offset_xa(i,k)
    1668              nxrf = nxrfa(i,k)
    1669              nxrc = nxrfa(i,k) + offset_xa(i,k)
    1670              nysf = nysfa(i,k)
    1671              nysc = nysfa(i,k) + offset_ya(i,k)
    1672              nynf = nynfa(i,k)
    1673              nync = nynfa(i,k) + offset_ya(i,k)
    1674 
    1675 
    1676              SELECT CASE ( restart_string(1:length) )
    1677 
    1678                 CASE ( 'ghf_av' )
    1679                    IF ( .NOT. ALLOCATED( ghf_av ) )  THEN
    1680                       ALLOCATE( ghf_av(nysg:nyng,nxlg:nxrg) )
    1681                    ENDIF
    1682                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1683                    ghf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1684                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1685 
    1686                 CASE ( 'e' )
    1687                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1688                    e(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    1689                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1690 
    1691                 CASE ( 'e_av' )
    1692                    IF ( .NOT. ALLOCATED( e_av ) )  THEN
    1693                       ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,                                  &
    1694                                      nxl-nbgp:nxr+nbgp) )
    1695                    ENDIF
    1696                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1697                    e_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1698                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1699 
    1700                 CASE ( 'kh' )
    1701                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1702                    kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
    1703                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1704 
    1705                 CASE ( 'kh_av' )
    1706                    IF ( .NOT. ALLOCATED( kh_av ) )  THEN
    1707                       ALLOCATE( kh_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
    1708                    ENDIF
    1709                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1710                    kh_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
    1711                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1712 
    1713                 CASE ( 'km' )
    1714                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1715                    km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
    1716                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1717 
    1718                 CASE ( 'km_av' )
    1719                    IF ( .NOT. ALLOCATED( km_av ) )  THEN
    1720                       ALLOCATE( km_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
    1721                    ENDIF
    1722                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1723                    km_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
    1724                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1725 
    1726                 CASE ( 'lpt_av' )
    1727                    IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
    1728                       ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
    1729                    ENDIF
    1730                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1731                    lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
    1732                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1733 
    1734                 CASE ( 'lwp_av' )
    1735                    IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
    1736                       ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
    1737                    ENDIF
    1738                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1739                    lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1740                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1741 
    1742                 CASE ( 'p' )
    1743                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1744                    p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    1745                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1746 
    1747                 CASE ( 'p_av' )
    1748                    IF ( .NOT. ALLOCATED( p_av ) )  THEN
    1749                       ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1750                    ENDIF
    1751                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1752                    p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1753                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1754 
    1755                 CASE ( 'pt' )
    1756                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1757                    pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
    1758                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1759 
    1760                 CASE ( 'pt_av' )
    1761                    IF ( .NOT. ALLOCATED( pt_av ) )  THEN
    1762                       ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1763                    ENDIF
    1764                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1765                    pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
    1766                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1767 
    1768                 CASE ( 'pt_2m_av' )
    1769                    IF ( .NOT. ALLOCATED( pt_2m_av ) )  THEN
    1770                       ALLOCATE( pt_2m_av(nysg:nyng,nxlg:nxrg) )
    1771                    ENDIF
    1772                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1773                    pt_2m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                            &
    1774                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1775 
    1776                 CASE ( 'q' )
    1777                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1778                    q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    1779                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1780 
    1781                 CASE ( 'q_av' )
    1782                    IF ( .NOT. ALLOCATED( q_av ) )  THEN
    1783                       ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
    1784                    ENDIF
    1785                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1786                    q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1787                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1788 
    1789                 CASE ( 'ql' )
    1790                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1791                    ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
    1792                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1793 
    1794                 CASE ( 'ql_av' )
    1795                    IF ( .NOT. ALLOCATED( ql_av ) )  THEN
    1796                       ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1797                    ENDIF
    1798                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1799                    ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
    1800                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1801 
    1802                 CASE ( 'qsurf_av' )
    1803                    IF ( .NOT. ALLOCATED( qsurf_av ) )  THEN
    1804                       ALLOCATE( qsurf_av(nysg:nyng,nxlg:nxrg) )
    1805                    ENDIF
    1806                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1807                    qsurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
    1808                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1809 
    1810                 CASE ( 'qsws_av' )
    1811                    IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
    1812                       ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
    1813                    ENDIF
    1814                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1815                    qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
    1816                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1817 
    1818                 CASE ( 'qv_av' )
    1819                    IF ( .NOT. ALLOCATED( qv_av ) )  THEN
    1820                       ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1821                    ENDIF
    1822                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1823                    qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
    1824                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1825 
    1826                 CASE ( 'r_a_av' )
    1827                    IF ( .NOT. ALLOCATED( r_a_av ) )  THEN
    1828                       ALLOCATE( r_a_av(nysg:nyng,nxlg:nxrg) )
    1829                    ENDIF
    1830                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1831                    r_a_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1832                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1833 
    1834                 CASE ( 'random_iv' )  ! still unresolved issue
    1835                    IF ( k == 1 )  READ ( 13 )  random_iv
    1836                    IF ( k == 1 )  READ ( 13 )  random_iy
    1837 
    1838                 CASE ( 'seq_random_array' )
    1839                    ALLOCATE( tmp_2d_id_random(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) )
    1840                    ALLOCATE( tmp_2d_seq_random(5,nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) )
    1841                    IF ( .NOT. ALLOCATED( id_random_array ) )  THEN
    1842                       ALLOCATE( id_random_array(nys:nyn,nxl:nxr) )
    1843                    ENDIF
    1844                    IF ( .NOT. ALLOCATED( seq_random_array ) )  THEN
    1845                       ALLOCATE( seq_random_array(5,nys:nyn,nxl:nxr) )
    1846                    ENDIF
    1847                    IF ( k == 1 )  READ ( 13 )  tmp_2d_id_random
    1848                    IF ( k == 1 )  READ ( 13 )  tmp_2d_seq_random
    1849                    id_random_array(nysc:nync,nxlc:nxrc) = tmp_2d_id_random(nysf:nynf,nxlf:nxrf)
    1850                    seq_random_array(:,nysc:nync,nxlc:nxrc) = tmp_2d_seq_random(:,nysf:nynf,nxlf:nxrf)
    1851                    DEALLOCATE( tmp_2d_id_random, tmp_2d_seq_random )
    1852 
    1853                 CASE ( 's' )
    1854                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1855                    s(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    1856                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1857 
    1858                 CASE ( 's_av' )
    1859                    IF ( .NOT. ALLOCATED( s_av ) )  THEN
    1860                       ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
    1861                    ENDIF
    1862                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1863                    s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1864                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1865 
    1866                 CASE ( 'shf_av' )
    1867                    IF ( .NOT. ALLOCATED( shf_av ) )  THEN
    1868                       ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
    1869                    ENDIF
    1870                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1871                    shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
    1872                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1873 
    1874                 CASE ( 'ssurf_av' )
    1875                    IF ( .NOT. ALLOCATED( ssurf_av ) )  THEN
    1876                       ALLOCATE( ssurf_av(nysg:nyng,nxlg:nxrg) )
    1877                    ENDIF
    1878                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1879                    ssurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
    1880                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1881 
    1882                 CASE ( 'ssws_av' )
    1883                    IF ( .NOT. ALLOCATED( ssws_av ) )  THEN
    1884                       ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
    1885                    ENDIF
    1886                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1887                    ssws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
    1888                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1889 
    1890                 CASE ( 'ti_av' )
    1891                    IF ( .NOT. ALLOCATED( ti_av ) )  THEN
    1892                       ALLOCATE( ti_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1893                    ENDIF
    1894                    IF ( k == 1 )  THEN
    1895                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1896                                                     nxl_on_file:nxr_on_file) )
    1897                       READ ( 13 )  tmp_3d_non_standard
    1898                    ENDIF
    1899                    ti_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1900 
    1901                 CASE ( 'ts_av' )
    1902                    IF ( .NOT. ALLOCATED( ts_av ) )  THEN
    1903                       ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
    1904                    ENDIF
    1905                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1906                    ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
    1907                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1908 
    1909                 CASE ( 'tsurf_av' )
    1910                    IF ( .NOT. ALLOCATED( tsurf_av ) )  THEN
    1911                       ALLOCATE( tsurf_av(nysg:nyng,nxlg:nxrg) )
    1912                    ENDIF
    1913                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1914                    tsurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
    1915                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1916 
    1917                 CASE ( 'u' )
    1918                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1919                    u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    1920                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1921 
    1922                 CASE ( 'u_av' )
    1923                    IF ( .NOT. ALLOCATED( u_av ) )  THEN
    1924                       ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1925                    ENDIF
    1926                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1927                    u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    1928                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1929 
    1930                 CASE ( 'u_center_av' )
    1931                    IF ( .NOT. ALLOCATED( u_center_av ) )  THEN
    1932                       ALLOCATE( u_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1933                    ENDIF
    1934                    IF ( k == 1 )  THEN
    1935                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1936                                                     nxl_on_file:nxr_on_file) )
    1937                       READ ( 13 )  tmp_3d_non_standard
    1938                    ENDIF
    1939                    u_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1940 
    1941                 CASE ( 'uu_av' )
    1942                    IF ( .NOT. ALLOCATED( uu_av ) )  THEN
    1943                       ALLOCATE( uu_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    1944                    ENDIF
    1945                    IF ( k == 1 )  THEN
    1946                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    1947                                                     nxl_on_file:nxr_on_file) )
    1948                       READ ( 13 )  tmp_3d_non_standard
    1949                    ENDIF
    1950                    uu_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    1951 
    1952                 CASE ( 'uv_10m_av' )
    1953                    IF ( .NOT. ALLOCATED( uv_10m_av ) )  THEN
    1954                       ALLOCATE( uv_10m_av(nysg:nyng,nxlg:nxrg) )
    1955                    ENDIF
    1956                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1957                    uv_10m_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                           &
    1958                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1959 
    1960                 CASE ( 'u_m_l' )
    1961                    IF ( k == 1 )  THEN
    1962                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    1963                                                     1:2) )
    1964                       READ ( 13 )  tmp_3d_non_standard
    1965                    ENDIF
    1966                    IF ( bc_radiation_l )  THEN
    1967                       u_m_l(:,nysc-nbgp:nync+nbgp,:) =  tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    1968                    ENDIF
    1969 
    1970                 CASE ( 'u_m_n' )
    1971                    IF ( k == 1 )  THEN
    1972                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
    1973                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    1974                       READ ( 13 )  tmp_3d_non_standard
    1975                    ENDIF
    1976                    IF ( bc_radiation_n )  THEN
    1977                       u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    1978                    ENDIF
    1979 
    1980                 CASE ( 'u_m_r' )
    1981                    IF ( k == 1 )  THEN
    1982                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    1983                                                     nx-1:nx) )
    1984                       READ ( 13 )  tmp_3d_non_standard
    1985                    ENDIF
    1986                    IF ( bc_radiation_r )  THEN
    1987                       u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    1988                    ENDIF
    1989 
    1990                 CASE ( 'u_m_s' )
    1991                    IF ( k == 1 )  THEN
    1992                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,0:1,                                 &
    1993                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    1994                       READ ( 13 )  tmp_3d_non_standard
    1995                    ENDIF
    1996                    IF ( bc_radiation_s )  THEN
    1997                       u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    1998                    ENDIF
    1999 
    2000                 CASE ( 'us_av' )
    2001                    IF ( .NOT. ALLOCATED( us_av ) )  THEN
    2002                       ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
    2003                    ENDIF
    2004                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    2005                    us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
    2006                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2007 
    2008                 CASE ( 'v' )
    2009                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2010                    v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    2011                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2012 
    2013                 CASE ( 'v_av' )
    2014                    IF ( .NOT. ALLOCATED( v_av ) )  THEN
    2015                       ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    2016                    ENDIF
    2017                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2018                    v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    2019                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2020 
    2021                 CASE ( 'v_center_av' )
    2022                    IF ( .NOT. ALLOCATED( v_center_av ) )  THEN
    2023                       ALLOCATE( v_center_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2024                    ENDIF
    2025                    IF ( k == 1 )  THEN
    2026                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2027                                                     nxl_on_file:nxr_on_file) )
    2028                       READ ( 13 )  tmp_3d_non_standard
    2029                    ENDIF
    2030                    v_center_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2031 
    2032                 CASE ( 'vv_av' )
    2033                    IF ( .NOT. ALLOCATED( vv_av ) )  THEN
    2034                       ALLOCATE( vv_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2035                    ENDIF
    2036                    IF ( k == 1 )  THEN
    2037                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2038                                                     nxl_on_file:nxr_on_file) )
    2039                       READ ( 13 )  tmp_3d_non_standard
    2040                    ENDIF
    2041                    vv_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2042 
    2043                 CASE ( 'v_m_l' )
    2044                    IF ( k == 1 )  THEN
    2045                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    2046                                                     0:1) )
    2047                       READ ( 13 )  tmp_3d_non_standard
    2048                    ENDIF
    2049                    IF ( bc_radiation_l )  THEN
    2050                       v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    2051                    ENDIF
    2052 
    2053                 CASE ( 'v_m_n' )
    2054                    IF ( k == 1 )  THEN
    2055                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
    2056                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    2057                       READ ( 13 )  tmp_3d_non_standard
    2058                    ENDIF
    2059                    IF ( bc_radiation_n )  THEN
    2060                       v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    2061                    ENDIF
    2062 
    2063                 CASE ( 'v_m_r' )
    2064                    IF ( k == 1 )  THEN
    2065                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    2066                                                     nx-1:nx) )
    2067                       READ ( 13 )  tmp_3d_non_standard
    2068                    ENDIF
    2069                    IF ( bc_radiation_r )  THEN
    2070                       v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    2071                    ENDIF
    2072 
    2073                 CASE ( 'v_m_s' )
    2074                    IF ( k == 1 )  THEN
    2075                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,1:2,                                 &
    2076                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    2077                       READ ( 13 )  tmp_3d_non_standard
    2078                    ENDIF
    2079                    IF ( bc_radiation_s )  THEN
    2080                       v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    2081                    ENDIF
    2082 
    2083                 CASE ( 'vpt' )
    2084                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2085                    vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                &
    2086                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2087 
    2088                 CASE ( 'vpt_av' )
    2089                    IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
    2090                       ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    2091                    ENDIF
    2092                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2093                    vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
    2094                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2095 
    2096                 CASE ( 'w' )
    2097                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2098                    w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
    2099                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2100 
    2101                 CASE ( 'w_av' )
    2102                    IF ( .NOT. ALLOCATED( w_av ) )  THEN
    2103                       ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    2104                    ENDIF
    2105                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    2106                    w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
    2107                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2108 
    2109                 CASE ( 'ww_av' )
    2110                    IF ( .NOT. ALLOCATED( ww_av ) )  THEN
    2111                       ALLOCATE( ww_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2112                    ENDIF
    2113                    IF ( k == 1 )  THEN
    2114                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2115                                                     nxl_on_file:nxr_on_file) )
    2116                       READ ( 13 )  tmp_3d_non_standard
    2117                    ENDIF
    2118                    ww_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2119 
    2120                 CASE ( 'w_m_l' )
    2121                    IF ( k == 1 )  THEN
    2122                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    2123                                                     0:1) )
    2124                       READ ( 13 )  tmp_3d_non_standard
    2125                    ENDIF
    2126                    IF ( bc_radiation_l )  THEN
    2127                       w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    2128                    ENDIF
    2129 
    2130                 CASE ( 'w_m_n' )
    2131                    IF ( k == 1 )  THEN
    2132                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
    2133                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    2134                       READ ( 13 )  tmp_3d_non_standard
    2135                    ENDIF
    2136                    IF ( bc_radiation_n )  THEN
    2137                       w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    2138                    ENDIF
    2139 
    2140                 CASE ( 'w_m_r' )
    2141                    IF ( k == 1 )  THEN
    2142                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
    2143                                                     nx-1:nx) )
    2144                       READ ( 13 )  tmp_3d_non_standard
    2145                    ENDIF
    2146                    IF ( bc_radiation_r )  THEN
    2147                       w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
    2148                    ENDIF
    2149 
    2150                 CASE ( 'w_m_s' )
    2151                    IF ( k == 1 )  THEN
    2152                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,0:1,                                 &
    2153                                                     nxl_on_file-nbgp:nxr_on_file+nbgp) )
    2154                       READ ( 13 )  tmp_3d_non_standard
    2155                    ENDIF
    2156                    IF ( bc_radiation_s )  THEN
    2157                       w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
    2158                    ENDIF
    2159 
    2160                 CASE ( 'wspeed_av' )
    2161                    IF ( .NOT. ALLOCATED( wspeed_av ) )  THEN
    2162                       ALLOCATE( wspeed_av(nzb:nzt+1,nys:nyn,nxl:nxr) )
    2163                    ENDIF
    2164                    IF ( k == 1 )  THEN
    2165                       ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file:nyn_on_file,             &
    2166                                                     nxl_on_file:nxr_on_file) )
    2167                       READ ( 13 )  tmp_3d_non_standard
    2168                    ENDIF
    2169                    wspeed_av(:,nysc:nync,nxlc:nxrc) = tmp_3d_non_standard(:,nysf:nynf,nxlf:nxrf)
    2170 
    2171                 CASE ( 'z0_av' )
    2172                    IF ( .NOT. ALLOCATED( z0_av ) )  THEN
    2173                       ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
    2174                    ENDIF
    2175                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    2176                    z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
    2177                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2178 
    2179                 CASE ( 'z0h_av' )
    2180                    IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
    2181                       ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
    2182                    ENDIF
    2183                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    2184                    z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
    2185                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2186 
    2187                 CASE ( 'z0q_av' )
    2188                    IF ( .NOT. ALLOCATED( z0q_av ) )  THEN
    2189                       ALLOCATE( z0q_av(nysg:nyng,nxlg:nxrg) )
    2190                    ENDIF
    2191                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    2192                    z0q_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
    2193                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    2194 
    2195                 CASE DEFAULT
    2196 
    2197 !
    2198 !--                Read restart data of surfaces
    2199                    IF ( .NOT. found )  CALL surface_rrd_local( k, nxlf, nxlc, nxl_on_file, nxrf,   &
    2200                                                                nxr_on_file, nynf, nyn_on_file,     &
    2201                                                                nysf, nysc, nys_on_file, found )
    2202 !
    2203 !--                Read restart data of other modules
    2204                    IF ( .NOT. found ) CALL module_interface_rrd_local(                             &
    2205                                                                k, nxlf, nxlc, nxl_on_file, nxrf,   &
    2206                                                                nxrc, nxr_on_file, nynf, nync,      &
    2207                                                                nyn_on_file, nysf, nysc,            &
    2208                                                                nys_on_file, tmp_2d, tmp_3d, found )
    2209 
    2210 
    2211                    IF ( .NOT. found )  THEN
    2212                       WRITE( message_string, * ) 'unknown variable named "',                       &
    2213                                                  restart_string(1:length),                         &
    2214                                                 '" found in subdomain data ',                      &
    2215                                                 'from prior run on PE ', myid
    2216                       CALL message( 'rrd_local', 'PA0302', 1, 2, 0, 6, 0 )
    2217 
    2218                    ENDIF
    2219 
    2220              END SELECT
    2221 
    2222           ENDDO ! overlaploop
    2223 
    2224 !
    2225 !--       Deallocate non standard array needed for specific variables only
    2226           IF ( ALLOCATED( tmp_3d_non_standard ) )  DEALLOCATE( tmp_3d_non_standard )
    2227 
    2228 !
    2229 !--       Read next character string
     1551       ENDIF
     1552
     1553!
     1554!--    Read data from all restart files determined above
     1555       DO  i = 1, files_to_be_opened
     1556
     1557          j = file_list(i)
     1558!
     1559!--       Set the filename (underscore followed by four digit processor id)
     1560          WRITE (myid_char,'(''_'',I6.6)')  j
     1561
     1562!
     1563!--       Open the restart file. If this file has been created by PE0 (_000000),
     1564!--       the global variables at the beginning of the file have to be skipped
     1565!--       first.
     1566          CALL check_open( 13 )
     1567          IF ( j == 0 )  CALL rrd_skip_global
     1568
     1569!
     1570!--       First compare the version numbers
    22301571          READ ( 13 )  length
    22311572          READ ( 13 )  restart_string(1:length)
    2232 
    2233        ENDDO ! dataloop
    2234 !
    2235 !--    Close the restart file
    2236        CALL close_file( 13 )
    2237 
    2238        DEALLOCATE( tmp_2d, tmp_3d )
    2239 
    2240     ENDDO  ! loop over restart files
    2241 !
    2242 !-- Deallocate temporary buffer arrays
    2243     DEALLOCATE( nxlfa )
    2244     DEALLOCATE( nxrfa )
    2245     DEALLOCATE( nynfa )
    2246     DEALLOCATE( nysfa )
    2247     DEALLOCATE( offset_xa )
    2248     DEALLOCATE( offset_ya )
    2249 !
    2250 !-- Restore the original filename for the restart file to be written
    2251     myid_char = myid_char_save
     1573          READ ( 13 )  version_on_file
     1574
     1575          binary_version_local = '4.7'
     1576          IF ( TRIM( version_on_file ) /= TRIM( binary_version_local ) )  THEN
     1577             WRITE( message_string, * ) 'version mismatch concerning ',                               &
     1578                                        'binary_version_local:',                                      &
     1579                                        '&version on file    = "', TRIM( version_on_file ), '"',      &
     1580                                        '&version in program = "', TRIM( binary_version_local ), '"'
     1581             CALL message( 'rrd_local', 'PA0286', 1, 2, 0, 6, 0 )
     1582          ENDIF
     1583
     1584!
     1585!--       Read number of processors, processor-id, and array ranges.
     1586!--       Compare the array ranges with those stored in the index bound array.
     1587          READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, nys_on_file,         &
     1588                       nyn_on_file, nzb_on_file, nzt_on_file
     1589
     1590          IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
     1591             WRITE( message_string, * ) 'problem with index bound nxl on ',                           &
     1592                                        'restart file "', myid_char, '"',                             &
     1593                                        '&nxl = ', nxl_on_file, ' but it should be',                  &
     1594                                        '&= ', hor_index_bounds_previous_run(1,j),                    &
     1595                                        '&from the index bound information array'
     1596             CALL message( 'rrd_local', 'PA0287', 2, 2, -1, 6, 1 )
     1597          ENDIF
     1598
     1599          IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
     1600              WRITE( message_string, * ) 'problem with index bound nxr on ',                          &
     1601                                         'restart file "', myid_char, '"'  ,                          &
     1602                                         ' nxr = ', nxr_on_file, ' but it should be',                 &
     1603                                         ' = ', hor_index_bounds_previous_run(2,j),                   &
     1604                                         ' from the index bound information array'
     1605             CALL message( 'rrd_local', 'PA0288', 2, 2, -1, 6, 1 )
     1606
     1607          ENDIF
     1608
     1609          IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
     1610             WRITE( message_string, * ) 'problem with index bound nys on ',                           &
     1611                                        'restart file "', myid_char, '"',                             &
     1612                                        '&nys = ', nys_on_file, ' but it should be',                  &
     1613                                        '&= ', hor_index_bounds_previous_run(3,j),                    &
     1614                                        '&from the index bound information array'
     1615             CALL message( 'rrd_local', 'PA0289', 2, 2, -1, 6, 1 )
     1616          ENDIF
     1617
     1618          IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
     1619             WRITE( message_string, * ) 'problem with index bound nyn on ',                           &
     1620                                        'restart file "', myid_char, '"',                             &
     1621                                        '&nyn = ', nyn_on_file, ' but it should be',                  &
     1622                                        '&= ', hor_index_bounds_previous_run(4,j),                    &
     1623                                        '&from the index bound information array'
     1624             CALL message( 'rrd_local', 'PA0290', 2, 2, -1, 6, 1 )
     1625          ENDIF
     1626
     1627          IF ( nzb_on_file /= nzb )  THEN
     1628             WRITE( message_string, * ) 'mismatch between actual data and data ',                     &
     1629                                        'from prior run on PE ', myid,                                &
     1630                                        '&nzb on file = ', nzb_on_file,                               &
     1631                                        '&nzb         = ', nzb
     1632             CALL message( 'rrd_local', 'PA0291', 1, 2, 0, 6, 0 )
     1633          ENDIF
     1634
     1635          IF ( nzt_on_file /= nzt )  THEN
     1636             WRITE( message_string, * ) 'mismatch between actual data and data ',                     &
     1637                                        'from prior run on PE ', myid,                                &
     1638                                        '&nzt on file = ', nzt_on_file,                               &
     1639                                        '&nzt         = ', nzt
     1640             CALL message( 'rrd_local', 'PA0292', 1, 2, 0, 6, 0 )
     1641          ENDIF
     1642
     1643!
     1644!--       Allocate temporary arrays sized as the arrays on the restart file
     1645          ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp),      &
     1646                    tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,                               &
     1647                           nxl_on_file-nbgp:nxr_on_file+nbgp) )
     1648
     1649!
     1650!--       Read arrays
     1651!--       ATTENTION: If the following read commands have been altered, the
     1652!--       ---------- version number of the variable binary_version_local must
     1653!--                  be altered, too. Furthermore, the output list of arrays in
     1654!--                  wrd_write_local must also be altered
     1655!--                  accordingly.
     1656          READ ( 13 )  length
     1657          READ ( 13 )  restart_string(1:length)
     1658
     1659
     1660!
     1661!--       Loop over processor specific field data
     1662          DO  WHILE ( restart_string(1:length) /= '*** end ***' )
     1663
     1664!
     1665!--          Map data on file as often as needed (data are read only for k=1)
     1666             DO  k = 1, overlap_count(i)
     1667
     1668                found = .FALSE.
     1669
     1670!
     1671!--             Get the index range of the subdomain on file which overlap with
     1672!--             the current subdomain
     1673                nxlf = nxlfa(i,k)
     1674                nxlc = nxlfa(i,k) + offset_xa(i,k)
     1675                nxrf = nxrfa(i,k)
     1676                nxrc = nxrfa(i,k) + offset_xa(i,k)
     1677                nysf = nysfa(i,k)
     1678                nysc = nysfa(i,k) + offset_ya(i,k)
     1679                nynf = nynfa(i,k)
     1680                nync = nynfa(i,k) + offset_ya(i,k)
     1681
     1682
     1683                SELECT CASE ( restart_string(1:length) )
     1684
     1685                   CASE ( 'ghf_av' )
     1686                      IF ( .NOT. ALLOCATED( ghf_av ) )  THEN
     1687                         ALLOCATE( ghf_av(nysg:nyng,nxlg:nxrg) )
     1688                      ENDIF
     1689                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1690                      ghf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1691                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1692
     1693                   CASE ( 'e' )
     1694                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1695                      e(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     1696                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1697
     1698                   CASE ( 'e_av' )
     1699                      IF ( .NOT. ALLOCATED( e_av ) )  THEN
     1700                         ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,                                  &
     1701                                        nxl-nbgp:nxr+nbgp) )
     1702                      ENDIF
     1703                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1704                      e_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1705                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1706
     1707                   CASE ( 'kh' )
     1708                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1709                      kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     1710                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1711
     1712                   CASE ( 'kh_av' )
     1713                      IF ( .NOT. ALLOCATED( kh_av ) )  THEN
     1714                         ALLOCATE( kh_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
     1715                      ENDIF
     1716                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1717                      kh_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
     1718                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1719
     1720                   CASE ( 'km' )
     1721                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1722                      km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     1723                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1724
     1725                   CASE ( 'km_av' )
     1726                      IF ( .NOT. ALLOCATED( km_av ) )  THEN
     1727                         ALLOCATE( km_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
     1728                      ENDIF
     1729                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1730                      km_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
     1731                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1732
     1733                   CASE ( 'lpt_av' )
     1734                      IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
     1735                         ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
     1736                      ENDIF
     1737                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1738                      lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
     1739                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1740
     1741                   CASE ( 'lwp_av' )
     1742                      IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
     1743                         ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
     1744                      ENDIF
     1745                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1746                      lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1747                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1748
     1749                   CASE ( 'p' )
     1750                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1751                      p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     1752                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1753
     1754                   CASE ( 'p_av' )
     1755                      IF ( .NOT. ALLOCATED( p_av ) )  THEN
     1756                         ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1757                      ENDIF
     1758                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1759                      p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1760                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1761
     1762                   CASE ( 'pt' )
     1763                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1764                      pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     1765                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1766
     1767                   CASE ( 'pt_av' )
     1768                      IF ( .NOT. ALLOCATED( pt_av ) )  THEN
     1769                         ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1770                      ENDIF
     1771                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1772                      pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
     1773                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1774
     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
     1783                   CASE ( 'q' )
     1784                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1785                      q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     1786                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1787
     1788                   CASE ( 'q_av' )
     1789                      IF ( .NOT. ALLOCATED( q_av ) )  THEN
     1790                         ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
     1791                      ENDIF
     1792                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1793                      q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1794                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1795
     1796                   CASE ( 'ql' )
     1797                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1798                      ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                 &
     1799                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1800
     1801                   CASE ( 'ql_av' )
     1802                      IF ( .NOT. ALLOCATED( ql_av ) )  THEN
     1803                         ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1804                      ENDIF
     1805                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1806                      ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
     1807                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1808
     1809                   CASE ( 'qsurf_av' )
     1810                      IF ( .NOT. ALLOCATED( qsurf_av ) )  THEN
     1811                         ALLOCATE( qsurf_av(nysg:nyng,nxlg:nxrg) )
     1812                      ENDIF
     1813                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1814                      qsurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
     1815                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1816
     1817                   CASE ( 'qsws_av' )
     1818                      IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
     1819                         ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
     1820                      ENDIF
     1821                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1822                      qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
     1823                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1824
     1825                   CASE ( 'qv_av' )
     1826                      IF ( .NOT. ALLOCATED( qv_av ) )  THEN
     1827                         ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1828                      ENDIF
     1829                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1830                      qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                              &
     1831                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1832
     1833                   CASE ( 'r_a_av' )
     1834                      IF ( .NOT. ALLOCATED( r_a_av ) )  THEN
     1835                         ALLOCATE( r_a_av(nysg:nyng,nxlg:nxrg) )
     1836                      ENDIF
     1837                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1838                      r_a_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1839                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1840
     1841                   CASE ( 'random_iv' )  ! still unresolved issue
     1842                      IF ( k == 1 )  READ ( 13 )  random_iv
     1843                      IF ( k == 1 )  READ ( 13 )  random_iy
     1844
     1845                   CASE ( 'seq_random_array' )
     1846                      ALLOCATE( tmp_2d_id_random(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) )
     1847                      ALLOCATE( tmp_2d_seq_random(5,nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) )
     1848                      IF ( .NOT. ALLOCATED( id_random_array ) )  THEN
     1849                         ALLOCATE( id_random_array(nys:nyn,nxl:nxr) )
     1850                      ENDIF
     1851                      IF ( .NOT. ALLOCATED( seq_random_array ) )  THEN
     1852                         ALLOCATE( seq_random_array(5,nys:nyn,nxl:nxr) )
     1853                      ENDIF
     1854                      IF ( k == 1 )  READ ( 13 )  tmp_2d_id_random
     1855                      IF ( k == 1 )  READ ( 13 )  tmp_2d_seq_random
     1856                      id_random_array(nysc:nync,nxlc:nxrc) = tmp_2d_id_random(nysf:nynf,nxlf:nxrf)
     1857                      seq_random_array(:,nysc:nync,nxlc:nxrc) = tmp_2d_seq_random(:,nysf:nynf,nxlf:nxrf)
     1858                      DEALLOCATE( tmp_2d_id_random, tmp_2d_seq_random )
     1859
     1860                   CASE ( 's' )
     1861                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1862                      s(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     1863                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1864
     1865                   CASE ( 's_av' )
     1866                      IF ( .NOT. ALLOCATED( s_av ) )  THEN
     1867                         ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
     1868                      ENDIF
     1869                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1870                      s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1871                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1872
     1873                   CASE ( 'shf_av' )
     1874                      IF ( .NOT. ALLOCATED( shf_av ) )  THEN
     1875                         ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
     1876                      ENDIF
     1877                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1878                      shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
     1879                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1880
     1881                   CASE ( 'ssurf_av' )
     1882                      IF ( .NOT. ALLOCATED( ssurf_av ) )  THEN
     1883                         ALLOCATE( ssurf_av(nysg:nyng,nxlg:nxrg) )
     1884                      ENDIF
     1885                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1886                      ssurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
     1887                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1888
     1889                   CASE ( 'ssws_av' )
     1890                      IF ( .NOT. ALLOCATED( ssws_av ) )  THEN
     1891                         ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
     1892                      ENDIF
     1893                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1894                      ssws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                             &
     1895                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1896
     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
     1908                   CASE ( 'ts_av' )
     1909                      IF ( .NOT. ALLOCATED( ts_av ) )  THEN
     1910                         ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
     1911                      ENDIF
     1912                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1913                      ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
     1914                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1915
     1916                   CASE ( 'tsurf_av' )
     1917                      IF ( .NOT. ALLOCATED( tsurf_av ) )  THEN
     1918                         ALLOCATE( tsurf_av(nysg:nyng,nxlg:nxrg) )
     1919                      ENDIF
     1920                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     1921                      tsurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
     1922                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1923
     1924                   CASE ( 'u' )
     1925                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1926                      u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     1927                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     1928
     1929                   CASE ( 'u_av' )
     1930                      IF ( .NOT. ALLOCATED( u_av ) )  THEN
     1931                         ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1932                      ENDIF
     1933                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     1934                      u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     1935                         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)
     1966
     1967                   CASE ( 'u_m_l' )
     1968                      IF ( k == 1 )  THEN
     1969                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     1970                                                       1:2) )
     1971                         READ ( 13 )  tmp_3d_non_standard
     1972                      ENDIF
     1973                      IF ( bc_radiation_l )  THEN
     1974                         u_m_l(:,nysc-nbgp:nync+nbgp,:) =  tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     1975                      ENDIF
     1976
     1977                   CASE ( 'u_m_n' )
     1978                      IF ( k == 1 )  THEN
     1979                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
     1980                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     1981                         READ ( 13 )  tmp_3d_non_standard
     1982                      ENDIF
     1983                      IF ( bc_radiation_n )  THEN
     1984                         u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     1985                      ENDIF
     1986
     1987                   CASE ( 'u_m_r' )
     1988                      IF ( k == 1 )  THEN
     1989                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     1990                                                       nx-1:nx) )
     1991                         READ ( 13 )  tmp_3d_non_standard
     1992                      ENDIF
     1993                      IF ( bc_radiation_r )  THEN
     1994                         u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     1995                      ENDIF
     1996
     1997                   CASE ( 'u_m_s' )
     1998                      IF ( k == 1 )  THEN
     1999                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,0:1,                                 &
     2000                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     2001                         READ ( 13 )  tmp_3d_non_standard
     2002                      ENDIF
     2003                      IF ( bc_radiation_s )  THEN
     2004                         u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     2005                      ENDIF
     2006
     2007                   CASE ( 'us_av' )
     2008                      IF ( .NOT. ALLOCATED( us_av ) )  THEN
     2009                         ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
     2010                      ENDIF
     2011                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     2012                      us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
     2013                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2014
     2015                   CASE ( 'v' )
     2016                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2017                      v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     2018                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2019
     2020                   CASE ( 'v_av' )
     2021                      IF ( .NOT. ALLOCATED( v_av ) )  THEN
     2022                         ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2023                      ENDIF
     2024                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2025                      v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     2026                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2027
     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
     2050                   CASE ( 'v_m_l' )
     2051                      IF ( k == 1 )  THEN
     2052                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     2053                                                       0:1) )
     2054                         READ ( 13 )  tmp_3d_non_standard
     2055                      ENDIF
     2056                      IF ( bc_radiation_l )  THEN
     2057                         v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     2058                      ENDIF
     2059
     2060                   CASE ( 'v_m_n' )
     2061                      IF ( k == 1 )  THEN
     2062                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
     2063                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     2064                         READ ( 13 )  tmp_3d_non_standard
     2065                      ENDIF
     2066                      IF ( bc_radiation_n )  THEN
     2067                         v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     2068                      ENDIF
     2069
     2070                   CASE ( 'v_m_r' )
     2071                      IF ( k == 1 )  THEN
     2072                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     2073                                                       nx-1:nx) )
     2074                         READ ( 13 )  tmp_3d_non_standard
     2075                      ENDIF
     2076                      IF ( bc_radiation_r )  THEN
     2077                         v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     2078                      ENDIF
     2079
     2080                   CASE ( 'v_m_s' )
     2081                      IF ( k == 1 )  THEN
     2082                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,1:2,                                 &
     2083                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     2084                         READ ( 13 )  tmp_3d_non_standard
     2085                      ENDIF
     2086                      IF ( bc_radiation_s )  THEN
     2087                         v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     2088                      ENDIF
     2089
     2090                   CASE ( 'vpt' )
     2091                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2092                      vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                &
     2093                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2094
     2095                   CASE ( 'vpt_av' )
     2096                      IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
     2097                         ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2098                      ENDIF
     2099                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2100                      vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                             &
     2101                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2102
     2103                   CASE ( 'w' )
     2104                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2105                      w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                  &
     2106                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2107
     2108                   CASE ( 'w_av' )
     2109                      IF ( .NOT. ALLOCATED( w_av ) )  THEN
     2110                         ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2111                      ENDIF
     2112                      IF ( k == 1 )  READ ( 13 )  tmp_3d
     2113                      w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                               &
     2114                         tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2115
     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
     2127                   CASE ( 'w_m_l' )
     2128                      IF ( k == 1 )  THEN
     2129                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     2130                                                       0:1) )
     2131                         READ ( 13 )  tmp_3d_non_standard
     2132                      ENDIF
     2133                      IF ( bc_radiation_l )  THEN
     2134                         w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     2135                      ENDIF
     2136
     2137                   CASE ( 'w_m_n' )
     2138                      IF ( k == 1 )  THEN
     2139                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,ny-1:ny,                             &
     2140                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     2141                         READ ( 13 )  tmp_3d_non_standard
     2142                      ENDIF
     2143                      IF ( bc_radiation_n )  THEN
     2144                         w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     2145                      ENDIF
     2146
     2147                   CASE ( 'w_m_r' )
     2148                      IF ( k == 1 )  THEN
     2149                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,   &
     2150                                                       nx-1:nx) )
     2151                         READ ( 13 )  tmp_3d_non_standard
     2152                      ENDIF
     2153                      IF ( bc_radiation_r )  THEN
     2154                         w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3d_non_standard(:,nysf-nbgp:nynf+nbgp,:)
     2155                      ENDIF
     2156
     2157                   CASE ( 'w_m_s' )
     2158                      IF ( k == 1 )  THEN
     2159                         ALLOCATE( tmp_3d_non_standard(nzb:nzt+1,0:1,                                 &
     2160                                                       nxl_on_file-nbgp:nxr_on_file+nbgp) )
     2161                         READ ( 13 )  tmp_3d_non_standard
     2162                      ENDIF
     2163                      IF ( bc_radiation_s )  THEN
     2164                         w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3d_non_standard(:,:,nxlf-nbgp:nxrf+nbgp)
     2165                      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)
     2177
     2178                   CASE ( 'z0_av' )
     2179                      IF ( .NOT. ALLOCATED( z0_av ) )  THEN
     2180                         ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
     2181                      ENDIF
     2182                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     2183                      z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                               &
     2184                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2185
     2186                   CASE ( 'z0h_av' )
     2187                      IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
     2188                         ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
     2189                      ENDIF
     2190                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     2191                      z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
     2192                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2193
     2194                   CASE ( 'z0q_av' )
     2195                      IF ( .NOT. ALLOCATED( z0q_av ) )  THEN
     2196                         ALLOCATE( z0q_av(nysg:nyng,nxlg:nxrg) )
     2197                      ENDIF
     2198                      IF ( k == 1 )  READ ( 13 )  tmp_2d
     2199                      z0q_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =                              &
     2200                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2201
     2202                   CASE DEFAULT
     2203
     2204!
     2205!--                   Read restart data of surfaces
     2206                      IF ( .NOT. found )  CALL surface_rrd_local( k, nxlf, nxlc, nxl_on_file, nxrf,   &
     2207                                                                  nxr_on_file, nynf, nyn_on_file,     &
     2208                                                                  nysf, nysc, nys_on_file, found )
     2209!
     2210!--                   Read restart data of other modules
     2211                      IF ( .NOT. found ) CALL module_interface_rrd_local(                             &
     2212                                                                  k, nxlf, nxlc, nxl_on_file, nxrf,   &
     2213                                                                  nxrc, nxr_on_file, nynf, nync,      &
     2214                                                                  nyn_on_file, nysf, nysc,            &
     2215                                                                  nys_on_file, tmp_2d, tmp_3d, found )
     2216
     2217
     2218                      IF ( .NOT. found )  THEN
     2219                         WRITE( message_string, * ) 'unknown variable named "',                       &
     2220                                                    restart_string(1:length),                         &
     2221                                                   '" found in subdomain data ',                      &
     2222                                                   'from prior run on PE ', myid
     2223                         CALL message( 'rrd_local', 'PA0302', 1, 2, 0, 6, 0 )
     2224
     2225                      ENDIF
     2226
     2227                END SELECT
     2228
     2229             ENDDO ! overlaploop
     2230
     2231!
     2232!--          Deallocate non standard array needed for specific variables only
     2233             IF ( ALLOCATED( tmp_3d_non_standard ) )  DEALLOCATE( tmp_3d_non_standard )
     2234
     2235!
     2236!--          Read next character string
     2237             READ ( 13 )  length
     2238             READ ( 13 )  restart_string(1:length)
     2239
     2240          ENDDO ! dataloop
     2241!
     2242!--       Close the restart file
     2243          CALL close_file( 13 )
     2244
     2245          DEALLOCATE( tmp_2d, tmp_3d )
     2246
     2247       ENDDO  ! loop over restart files
     2248!
     2249!--    Deallocate temporary buffer arrays
     2250       DEALLOCATE( nxlfa )
     2251       DEALLOCATE( nxrfa )
     2252       DEALLOCATE( nynfa )
     2253       DEALLOCATE( nysfa )
     2254       DEALLOCATE( offset_xa )
     2255       DEALLOCATE( offset_ya )
     2256!
     2257!--    Restore the original filename for the restart file to be written
     2258       myid_char = myid_char_save
     2259
     2260
     2261    ELSEIF ( TRIM( restart_data_format_input ) == 'mpi' )  THEN
     2262
     2263!
     2264!--    Read global restart data using MPI-IO
     2265!
     2266!--    Open the MPI-IO restart file.
     2267       CALL rd_mpi_io_open( 'read', 'BININ' // TRIM( coupling_char ) )
     2268
     2269
     2270       CALL rd_mpi_io_check_array( 'ghf_av' , found = array_found )
     2271       IF ( array_found )  THEN
     2272          IF (.NOT. ALLOCATED( ghf_av ) )  ALLOCATE( ghf_av(nysg:nyng,nxlg:nxrg) )
     2273          CALL rrd_mpi_io( 'ghf_av', ghf_av )
     2274       ENDIF
     2275
     2276       CALL rrd_mpi_io( 'e', e )
     2277
     2278       CALL rd_mpi_io_check_array( 'e_av' , found = array_found )
     2279       IF ( array_found  )  THEN
     2280          IF ( .NOT. ALLOCATED( e_av ) )  ALLOCATE( e_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2281          CALL rrd_mpi_io( 'e_av', e_av )
     2282       ENDIF
     2283
     2284       CALL rrd_mpi_io( 'kh', kh )
     2285
     2286       CALL rd_mpi_io_check_array( 'kh_av' , found = array_found )
     2287       IF ( array_found )  THEN
     2288          IF ( .NOT. ALLOCATED( kh_av ) )  ALLOCATE( kh_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2289          CALL rrd_mpi_io( 'kh_av', kh_av )
     2290       ENDIF
     2291
     2292       CALL rrd_mpi_io( 'km' , km)
     2293
     2294       CALL rd_mpi_io_check_array( 'km_av' , found = array_found )
     2295       IF ( array_found )  THEN
     2296          IF ( .NOT. ALLOCATED( km_av ) )  ALLOCATE( km_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2297          CALL rrd_mpi_io( 'km_av', km_av )
     2298       ENDIF
     2299
     2300       CALL rd_mpi_io_check_array( 'lpt_av' , found = array_found )
     2301       IF ( array_found )  THEN
     2302          IF ( .NOT. ALLOCATED( lpt_av ) )  ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2303          CALL rrd_mpi_io( 'lpt_av', lpt_av )
     2304       ENDIF
     2305
     2306       CALL rd_mpi_io_check_array( 'lwp_av' , found = array_found )
     2307       IF ( array_found )  THEN
     2308          IF ( .NOT. ALLOCATED( lwp_av ) )  ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
     2309          CALL rrd_mpi_io( 'lwp_av', lwp_av )
     2310       ENDIF
     2311
     2312       CALL rrd_mpi_io( 'p', p)
     2313
     2314       CALL rd_mpi_io_check_array( 'p_av' , found = array_found )
     2315       IF ( array_found )  THEN
     2316          IF ( .NOT. ALLOCATED( p_av ) )  ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2317          CALL rrd_mpi_io( 'p_av', p_av )
     2318       ENDIF
     2319
     2320       CALL rrd_mpi_io( 'pt', pt)
     2321
     2322       CALL rd_mpi_io_check_array( 'pt_av' , found = array_found )
     2323       IF ( array_found )  THEN
     2324          IF ( .NOT. ALLOCATED( pt_av ) )  ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2325          CALL rrd_mpi_io( 'pt_av', pt_av )
     2326       ENDIF
     2327
     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
     2334       CALL rd_mpi_io_check_array( 'q' , found = array_found )
     2335       IF ( array_found )  THEN
     2336          CALL rrd_mpi_io( 'q', q )
     2337       ENDIF
     2338
     2339       CALL rd_mpi_io_check_array( 'q_av' , found = array_found )
     2340       IF ( array_found )  THEN
     2341          IF ( .NOT. ALLOCATED( q_av ) )  ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2342          CALL rrd_mpi_io( 'q_av', q_av )
     2343       ENDIF
     2344
     2345       CALL rd_mpi_io_check_array( 'ql' , found = array_found )
     2346       IF ( array_found )  THEN
     2347          CALL rrd_mpi_io( 'ql', ql )
     2348       ENDIF
     2349
     2350       CALL rd_mpi_io_check_array( 'ql_av' , found = array_found )
     2351       IF ( array_found )  THEN
     2352          IF ( .NOT. ALLOCATED( ql_av ) )  ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2353          CALL rrd_mpi_io( 'ql_av', ql_av )
     2354       ENDIF
     2355
     2356       CALL rd_mpi_io_check_array( 'qsurf_av' , found = array_found )
     2357       IF ( array_found )  THEN
     2358          IF ( .NOT. ALLOCATED( qsurf_av ) )  ALLOCATE( qsurf_av(nysg:nyng,nxlg:nxrg) )
     2359          CALL rrd_mpi_io( 'qsurf_av', qsurf_av )
     2360       ENDIF
     2361
     2362       CALL rd_mpi_io_check_array( 'qsws_av' , found = array_found )
     2363       IF ( array_found )  THEN
     2364          IF ( .NOT. ALLOCATED( qsws_av ) )  ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
     2365          CALL rrd_mpi_io( 'qsws_av', qsws_av )
     2366       ENDIF
     2367
     2368       CALL rd_mpi_io_check_array( 'qv_av' , found = array_found )
     2369       IF ( array_found )  THEN
     2370          IF ( .NOT. ALLOCATED( qv_av ) )  ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2371          CALL rrd_mpi_io( 'qv_av', qv_av )
     2372       ENDIF
     2373
     2374       CALL rd_mpi_io_check_array( 'r_a_av' , found = array_found )
     2375       IF ( array_found )  THEN
     2376          IF ( .NOT. ALLOCATED( r_a_av ) )  ALLOCATE( r_a_av(nysg:nyng,nxlg:nxrg) )
     2377          CALL rrd_mpi_io( 'r_a_av', r_a_av )
     2378       ENDIF
     2379
     2380!
     2381!--    ATTENTION: The random seeds are global data! If independent values for every PE are required,
     2382!--    the general approach of PE indendent restart will be lost. That means that in general the
     2383!--    parallel random number generator in random_generator_parallel_mod should be used!
     2384       CALL rrd_mpi_io_global_array( 'random_iv', random_iv )
     2385       CALL rrd_mpi_io( 'random_iy', random_iy )
     2386
     2387       CALL rd_mpi_io_check_array( 'id_random_array' , found = array_found )
     2388       IF ( array_found )  THEN
     2389          IF ( .NOT. ALLOCATED( id_random_array ) )  ALLOCATE( id_random_array(nys:nyn,nxl:nxr) )
     2390          IF ( .NOT. ALLOCATED( seq_random_array ) )  ALLOCATE( seq_random_array(5,nys:nyn,nxl:nxr) )
     2391          CALL rrd_mpi_io( 'id_random_array', id_random_array)
     2392          DO  i = 1, SIZE( seq_random_array, 1 )
     2393             WRITE( tmp_name, '(A,I2.2)' )  'seq_random_array', i
     2394             CALL rrd_mpi_io( TRIM(tmp_name), seq_random_array(i,:,:) )
     2395          ENDDO
     2396       ENDIF
     2397
     2398       CALL rd_mpi_io_check_array( 's' , found = array_found )
     2399       IF ( array_found )  THEN
     2400          CALL rrd_mpi_io( 's', s )
     2401       ENDIF
     2402
     2403       CALL rd_mpi_io_check_array( 's_av' , found = array_found )
     2404       IF ( array_found )  THEN
     2405          IF ( .NOT. ALLOCATED( s_av ) )  ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2406          CALL rrd_mpi_io( 's_av', s_av )
     2407       ENDIF
     2408
     2409       CALL rd_mpi_io_check_array( 'shf_av' , found = array_found )
     2410       IF ( array_found )  THEN
     2411          IF ( .NOT. ALLOCATED( shf_av ) )  ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
     2412          CALL rrd_mpi_io( 'shf_av', shf_av )
     2413       ENDIF
     2414
     2415       CALL rd_mpi_io_check_array( 'ssurf_av' , found = array_found )
     2416       IF ( array_found )  THEN
     2417          IF ( .NOT. ALLOCATED( ssurf_av ) )  ALLOCATE( ssurf_av(nysg:nyng,nxlg:nxrg) )
     2418          CALL rrd_mpi_io( 'ssurf_av', ssurf_av )
     2419       ENDIF
     2420
     2421       CALL rd_mpi_io_check_array( 'ssws_av' , found = array_found )
     2422       IF ( array_found )  THEN
     2423          IF ( .NOT. ALLOCATED( ssws_av ) )  ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
     2424          CALL rrd_mpi_io( 'ssws_av', ssws_av )
     2425       ENDIF
     2426
     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
     2433       CALL rd_mpi_io_check_array( 'ts_av' , found = array_found )
     2434       IF ( array_found )  THEN
     2435          IF ( .NOT. ALLOCATED( ts_av ) )  ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
     2436          CALL rrd_mpi_io( 'ts_av', ts_av )
     2437       ENDIF
     2438
     2439       CALL rd_mpi_io_check_array( 'tsurf_av' , found = array_found )
     2440       IF ( array_found )  THEN
     2441          IF ( .NOT. ALLOCATED( tsurf_av ) )  ALLOCATE( tsurf_av(nysg:nyng,nxlg:nxrg) )
     2442          CALL rrd_mpi_io( 'tsurf_av', tsurf_av )
     2443       ENDIF
     2444
     2445       CALL rrd_mpi_io( 'u', u)
     2446
     2447       CALL rd_mpi_io_check_array( 'u_av' , found = array_found )
     2448       IF ( array_found )  THEN
     2449          IF ( .NOT. ALLOCATED( u_av ) )  ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2450          CALL rrd_mpi_io( 'u_av', u_av )
     2451       ENDIF
     2452
     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
     2471       CALL rd_mpi_io_check_array( 'u_m_l' , found = array_found )
     2472       IF ( array_found )  THEN
     2473          IF ( .NOT. ALLOCATED( u_m_l ) )  ALLOCATE( u_m_l(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2474          CALL rrd_mpi_io( 'u_m_l', u_m_l )
     2475       ENDIF
     2476
     2477       CALL rd_mpi_io_check_array( 'u_m_n' , found = array_found )
     2478       IF ( array_found )  THEN
     2479          IF ( .NOT. ALLOCATED( u_m_n ) )  ALLOCATE( u_m_n(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2480          CALL rrd_mpi_io( 'u_m_n', u_m_n )
     2481       ENDIF
     2482
     2483       CALL rd_mpi_io_check_array( 'u_m_r' , found = array_found )
     2484       IF ( array_found )  THEN
     2485          IF ( .NOT. ALLOCATED( u_m_r ) )  ALLOCATE( u_m_r(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2486          CALL rrd_mpi_io( 'u_m_r', u_m_r )
     2487       ENDIF
     2488
     2489       CALL rd_mpi_io_check_array( 'u_m_s' , found = array_found )
     2490       IF ( array_found )  THEN
     2491          IF ( .NOT. ALLOCATED( u_m_s ) )  ALLOCATE( u_m_s(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2492          CALL rrd_mpi_io( 'u_m_s', u_m_s )
     2493       ENDIF
     2494
     2495       CALL rd_mpi_io_check_array( 'us_av' , found = array_found )
     2496       IF ( array_found )  THEN
     2497          IF ( .NOT. ALLOCATED( us_av ) )  ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
     2498          CALL rrd_mpi_io( 'us_av', us_av )
     2499       ENDIF
     2500
     2501       CALL rrd_mpi_io( 'v', v )
     2502
     2503       CALL rd_mpi_io_check_array( 'v_av' , found = array_found )
     2504       IF ( array_found )  THEN
     2505          IF ( .NOT. ALLOCATED( v_av ) )  ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2506          CALL rrd_mpi_io( 'v_av', v_av )
     2507       ENDIF
     2508
     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
     2521       CALL rd_mpi_io_check_array( 'v_m_l' , found = array_found )
     2522       IF ( array_found )  THEN
     2523          IF ( .NOT. ALLOCATED( v_m_l ) )  ALLOCATE( v_m_l(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2524          CALL rrd_mpi_io( 'v_m_l', v_m_l )
     2525       ENDIF
     2526
     2527       CALL rd_mpi_io_check_array( 'v_m_n' , found = array_found )
     2528       IF ( array_found )  THEN
     2529          IF ( .NOT. ALLOCATED( v_m_n ) )  ALLOCATE( v_m_n(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2530          CALL rrd_mpi_io( 'v_m_n', v_m_n )
     2531       ENDIF
     2532
     2533       CALL rd_mpi_io_check_array( 'v_m_r' , found = array_found )
     2534       IF ( array_found )  THEN
     2535          IF ( .NOT. ALLOCATED( v_m_r ) )  ALLOCATE( v_m_r(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2536          CALL rrd_mpi_io( 'v_m_r', v_m_r )
     2537       ENDIF
     2538
     2539       CALL rd_mpi_io_check_array( 'v_m_s' , found = array_found )
     2540       IF ( array_found )  THEN
     2541          IF ( .NOT. ALLOCATED( v_m_s ) )  ALLOCATE( v_m_s(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2542          CALL rrd_mpi_io( 'v_m_s', v_m_s )
     2543       ENDIF
     2544
     2545       CALL rd_mpi_io_check_array( 'vpt' , found = array_found )
     2546       IF ( array_found )  THEN
     2547          CALL rrd_mpi_io( 'vpt',  vpt)
     2548       ENDIF
     2549
     2550       CALL rd_mpi_io_check_array( 'vpt_av' , found = array_found )
     2551       IF ( array_found )  THEN
     2552          IF ( .NOT. ALLOCATED( vpt_av ) )  ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2553          CALL rrd_mpi_io( 'vpt_av', vpt_av )
     2554       ENDIF
     2555
     2556       CALL rrd_mpi_io( 'w', w)
     2557
     2558       CALL rd_mpi_io_check_array( 'w_av' , found = array_found )
     2559       IF ( array_found )  THEN
     2560          IF ( .NOT. ALLOCATED( w_av ) )  ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2561          CALL rrd_mpi_io( 'w_av', w_av )
     2562       ENDIF
     2563
     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
     2570       CALL rd_mpi_io_check_array( 'w_m_l' , found = array_found )
     2571       IF ( array_found )  THEN
     2572          IF ( .NOT. ALLOCATED( w_m_l ) )  ALLOCATE( w_m_l(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2573          CALL rrd_mpi_io( 'w_m_l', w_m_l )
     2574       ENDIF
     2575
     2576       CALL rd_mpi_io_check_array( 'w_m_n' , found = array_found )
     2577       IF ( array_found )  THEN
     2578          IF ( .NOT. ALLOCATED( w_m_n ) )  ALLOCATE( w_m_n(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2579          CALL rrd_mpi_io( 'w_m_n', w_m_n )
     2580       ENDIF
     2581
     2582       CALL rd_mpi_io_check_array( 'w_m_r' , found = array_found )
     2583       IF ( array_found )  THEN
     2584          IF ( .NOT. ALLOCATED( w_m_r ) )  ALLOCATE( w_m_r(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2585          CALL rrd_mpi_io( 'w_m_r', w_m_r )
     2586       ENDIF
     2587
     2588       CALL rd_mpi_io_check_array( 'w_m_s' , found = array_found )
     2589       IF ( array_found )  THEN
     2590          IF ( .NOT. ALLOCATED( w_m_s ) )  ALLOCATE( w_m_s(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2591          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 )
     2598       ENDIF
     2599
     2600       CALL rd_mpi_io_check_array( 'z0_av' , found = array_found )
     2601       IF ( array_found )  THEN
     2602          IF ( .NOT. ALLOCATED( z0_av ) )  ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
     2603          CALL rrd_mpi_io( 'z0_av', z0_av )
     2604       ENDIF
     2605
     2606       CALL rd_mpi_io_check_array( 'z0h_av' , found = array_found )
     2607       IF ( array_found )  THEN
     2608          IF ( .NOT. ALLOCATED( z0h_av ) )  ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
     2609          CALL rrd_mpi_io( 'z0h_av', z0h_av )
     2610       ENDIF
     2611
     2612       CALL rd_mpi_io_check_array( 'z0q_av' , found = array_found )
     2613       IF ( array_found )  THEN
     2614          IF ( .NOT. ALLOCATED( z0q_av ) )  ALLOCATE( z0q_av(nysg:nyng,nxlg:nxrg) )
     2615          CALL rrd_mpi_io( 'z0q_av', z0q_av )
     2616       ENDIF
     2617
     2618!
     2619!--    Read restart data of surfaces
     2620       CALL surface_rrd_local
     2621
     2622!
     2623!--    Read restart data of other modules
     2624       CALL module_interface_rrd_local
     2625
     2626!
     2627!--    Close restart file
     2628       CALL rd_mpi_io_close
     2629
     2630    ENDIF
    22522631
    22532632!
Note: See TracChangeset for help on using the changeset viewer.