Ignore:
Timestamp:
Mar 15, 2018 9:17:58 AM (4 years ago)
Author:
Giersch
Message:

Reading/Writing? data in case of restart runs revised

File:
1 edited

Legend:

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

    r2881 r2894  
    2525! -----------------
    2626! $Id$
     27! Calculations of the index range of the subdomain on file which overlaps with
     28! the current subdomain are already done in read_restart_data_mod,
     29! lsm_read/write_restart_data was renamed to lsm_r/wrd_local, USE kinds has
     30! been removed in several routines, variable named found has been
     31! introduced for checking if restart data was found, reading of restart strings
     32! has been moved completely to read_restart_data_mod, lsm_rrd_local is already
     33! inside the overlap loop programmed in read_restart_data_mod, the marker ***
     34! end lsm *** is not necessary anymore, strings and their respective lengths
     35! are written out and read now in case of restart runs to get rid of prescribed
     36! character lengths, SAVE attribute added where necessary, deallocation and
     37! allocation of some arrays have been changed to take care of different restart
     38! files that can be opened (index i)
     39!
     40! 2881 2018-03-13 16:24:40Z suehring
    2741! Bugfix: wrong loop structure for soil moisture calculation
    2842!
     
    8599! radiation quantities belong to surface type now
    86100! surface fractions initialized
    87 ! Rename lsm_last_actions into lsm_write_restart_data (MS)
     101! Rename lsm_last_actions into lsm_wrd_subdomain (MS)
    88102!
    89103! 2608 2017-11-13 14:04:26Z schwenkel
     
    872886           lsm_data_output_2d, lsm_data_output_3d, lsm_energy_balance,         &
    873887           lsm_header, lsm_init, lsm_init_arrays, lsm_parin, lsm_soil_model,   &
    874            lsm_swap_timelevel, lsm_read_restart_data, lsm_write_restart_data
     888           lsm_swap_timelevel, lsm_rrd_local, lsm_wrd_local
    875889! !vegetat
    876890!-- Public parameters, constants and initial values
     
    945959    END INTERFACE lsm_swap_timelevel
    946960
    947     INTERFACE lsm_read_restart_data
    948        MODULE PROCEDURE lsm_read_restart_data
    949     END INTERFACE lsm_read_restart_data
    950 
    951     INTERFACE lsm_write_restart_data
    952        MODULE PROCEDURE lsm_write_restart_data
    953     END INTERFACE lsm_write_restart_data
     961    INTERFACE lsm_rrd_local
     962       MODULE PROCEDURE lsm_rrd_local
     963    END INTERFACE lsm_rrd_local
     964
     965    INTERFACE lsm_wrd_local
     966       MODULE PROCEDURE lsm_wrd_local
     967    END INTERFACE lsm_wrd_local
    954968
    955969 CONTAINS
     
    15911605          message_string = 'invalid soil layer configuration found ' //        &
    15921606                           '(dz_soil_center(k) = 0.0)'
    1593           CALL message( 'lsm_read_restart_data', 'PA0140', 1, 2, 0, 6, 0 )
     1607          CALL message( 'lsm_rrd_local', 'PA0140', 1, 2, 0, 6, 0 )
    15941608       ENDIF 
    15951609    ENDDO
     
    43014315          message_string = 'For non-pavement surfaces the combination ' //     &
    43024316                           ' lai = 0.0 and c_veg = 1.0 is not allowed.'
    4303           CALL message( 'lsm_read_restart_data', 'PA0999', 2, 2, 0, 6, 0 )
     4317          CALL message( 'lsm_rrd_local', 'PA0999', 2, 2, 0, 6, 0 )
    43044318       ENDIF
    43054319
     
    43104324             message_string = 'For non-pavement surfaces the combination ' //  &
    43114325                              ' lai = 0.0 and c_veg = 1.0 is not allowed.'
    4312              CALL message( 'lsm_read_restart_data', 'PA0999', 2, 2, 0, 6, 0 )
     4326             CALL message( 'lsm_rrd_local', 'PA0999', 2, 2, 0, 6, 0 )
    43134327          ENDIF
    43144328       ENDDO
     
    50155029    USE indices
    50165030
    5017     USE kinds
    5018 
    50195031    IMPLICIT NONE
    50205032
     
    53495361    USE indices
    53505362
    5351     USE kinds
    5352 
    53535363
    53545364    IMPLICIT NONE
     
    56085618
    56095619    USE indices
    5610 
    5611     USE kinds
    56125620
    56135621
     
    56885696! Description:
    56895697! ------------
    5690 !> Write restart data for land surface model
     5698!> Write restart data for land surface model. It is necessary to write
     5699!> start_index and end_index several times.
    56915700!------------------------------------------------------------------------------!
    5692  SUBROUTINE lsm_write_restart_data
    5693  
    5694 
    5695     USE control_parameters
     5701 SUBROUTINE lsm_wrd_local
    56965702       
    5697     USE kinds
    56985703
    56995704    IMPLICIT NONE
     
    57025707    INTEGER(iwp)      ::  l      !< index variable for surface orientation
    57035708
    5704     IF ( write_binary )  THEN
    5705 
    5706 
    5707        WRITE ( 14 ) 'ns_h_on_file_lsm    '
    5708        WRITE ( 14 ) surf_lsm_h%ns
    5709        WRITE ( 14 ) 'ns_v_on_file_lsm    '
    5710        WRITE ( 14 ) surf_lsm_v(0:3)%ns
    5711 
    5712        IF ( ALLOCATED( c_liq_av ) )  THEN
    5713           WRITE ( 14 )  'c_liq_av            ';  WRITE ( 14 ) c_liq_av
    5714        ENDIF
    5715        IF ( ALLOCATED( c_soil_av ) )  THEN
    5716           WRITE ( 14 )  'c_soil_av           ';  WRITE ( 14 ) c_soil_av
    5717        ENDIF
    5718        IF ( ALLOCATED( c_veg_av ) )  THEN
    5719           WRITE ( 14 )  'c_veg_av            ';  WRITE ( 14 ) c_veg_av
    5720        ENDIF
    5721        IF ( ALLOCATED( lai_av ) )  THEN
    5722           WRITE ( 14 )  'lai_av              ';  WRITE ( 14 )  lai_av
    5723        ENDIF
    5724        IF ( ALLOCATED( m_liq_av ) )  THEN
    5725           WRITE ( 14 )  'm_liq_av            ';  WRITE ( 14 )  m_liq_av
    5726        ENDIF
    5727        IF ( ALLOCATED( m_soil_av ) )  THEN
    5728           WRITE ( 14 )  'm_soil_av           ';  WRITE ( 14 )  m_soil_av
    5729        ENDIF
    5730        IF ( ALLOCATED( qsws_liq_av ) )  THEN
    5731           WRITE ( 14 )  'qsws_liq_av         ';  WRITE ( 14 )  qsws_liq_av
    5732        ENDIF 
    5733        IF ( ALLOCATED( qsws_soil_av ) )  THEN
    5734           WRITE ( 14 )  'qsws_soil_av        ';  WRITE ( 14 )  qsws_soil_av
    5735        ENDIF
    5736        IF ( ALLOCATED( qsws_veg_av ) )  THEN
    5737           WRITE ( 14 )  'qsws_veg_av         ';  WRITE ( 14 )  qsws_veg_av
    5738        ENDIF
    5739        IF ( ALLOCATED( t_soil_av ) )  THEN
    5740           WRITE ( 14 )  't_soil_av           ';  WRITE ( 14 )  t_soil_av
    5741        ENDIF
     5709    CALL wrd_write_string( 'ns_h_on_file_lsm' )
     5710    WRITE ( 14 )  surf_lsm_h%ns
     5711
     5712    CALL wrd_write_string( 'ns_v_on_file_lsm' )
     5713    WRITE ( 14 )  surf_lsm_v(0:3)%ns
     5714
     5715
     5716    IF ( ALLOCATED( c_liq_av ) )  THEN
     5717       CALL wrd_write_string( 'c_liq_av' )
     5718       WRITE ( 14 )  c_liq_av
     5719    ENDIF
     5720
     5721    IF ( ALLOCATED( c_soil_av ) )  THEN
     5722       CALL wrd_write_string( 'c_soil_av' )
     5723       WRITE ( 14 )  c_soil_av
     5724    ENDIF
     5725
     5726    IF ( ALLOCATED( c_veg_av ) )  THEN
     5727       CALL wrd_write_string( 'c_veg_av' )
     5728       WRITE ( 14 )  c_veg_av
     5729    ENDIF
     5730
     5731    IF ( ALLOCATED( lai_av ) )  THEN
     5732       CALL wrd_write_string( 'lai_av' )
     5733       WRITE ( 14 )  lai_av
     5734    ENDIF
     5735
     5736    IF ( ALLOCATED( m_liq_av ) )  THEN
     5737       CALL wrd_write_string( 'm_liq_av' )
     5738       WRITE ( 14 )  m_liq_av
     5739    ENDIF
     5740
     5741    IF ( ALLOCATED( m_soil_av ) )  THEN
     5742       CALL wrd_write_string( 'm_soil_av' )
     5743       WRITE ( 14 )  m_soil_av
     5744    ENDIF
     5745
     5746    IF ( ALLOCATED( qsws_liq_av ) )  THEN
     5747       CALL wrd_write_string( 'qsws_liq_av' )
     5748       WRITE ( 14 )  qsws_liq_av
     5749    ENDIF
     5750
     5751    IF ( ALLOCATED( qsws_soil_av ) )  THEN
     5752       CALL wrd_write_string( 'qsws_soil_av' )
     5753       WRITE ( 14 )  qsws_soil_av
     5754    ENDIF
     5755
     5756    IF ( ALLOCATED( qsws_veg_av ) )  THEN
     5757       CALL wrd_write_string( 'qsws_veg_av' )
     5758       WRITE ( 14 )  qsws_veg_av
     5759    ENDIF
     5760
     5761    IF ( ALLOCATED( t_soil_av ) )  THEN
     5762       CALL wrd_write_string( 't_soil_av' )
     5763       WRITE ( 14 )  t_soil_av
     5764    ENDIF
     5765
     5766    CALL wrd_write_string( 'lsm_start_index_h' )
     5767    WRITE ( 14 )  surf_lsm_h%start_index
     5768
     5769    CALL wrd_write_string( 'lsm_end_index_h' )
     5770    WRITE ( 14 )  surf_lsm_h%end_index
     5771
     5772    CALL wrd_write_string( 't_soil_h' )
     5773    WRITE ( 14 )  t_soil_h%var_2d
    57425774       
    5743        WRITE ( 14 ) 'lsm_start_index_h   '
    5744        WRITE ( 14 ) surf_lsm_h%start_index
    5745        WRITE ( 14 ) 'lsm_end_index_h     '
    5746        WRITE ( 14 ) surf_lsm_h%end_index
    5747        WRITE ( 14 ) 't_soil_h            '
    5748        WRITE ( 14 ) t_soil_h%var_2d
     5775
    57495776       
    5750        DO  l = 0, 3
    5751           WRITE ( 14 ) 'lsm_start_index_v   '
    5752           WRITE ( 14 ) surf_lsm_v(l)%start_index
    5753           WRITE ( 14 ) 'lsm_end_index_v     '
    5754           WRITE ( 14 ) surf_lsm_v(l)%end_index
    5755           WRITE( dum, '(I1)')  l         
    5756           WRITE ( 14 ) 't_soil_v(' // dum // ')         '
    5757           WRITE ( 14 ) t_soil_v(l)%var_2d         
    5758        ENDDO
    5759 
    5760        WRITE ( 14 ) 'lsm_start_index_h   '
    5761        WRITE ( 14 ) surf_lsm_h%start_index
    5762        WRITE ( 14 ) 'lsm_end_index_h     '
    5763        WRITE ( 14 ) surf_lsm_h%end_index
    5764        WRITE ( 14 ) 'm_soil_h            '
    5765        WRITE ( 14 ) m_soil_h%var_2d
     5777    DO  l = 0, 3
     5778
     5779       CALL wrd_write_string( 'lsm_start_index_v' )
     5780       WRITE ( 14 )  surf_lsm_v(l)%start_index
     5781
     5782       CALL wrd_write_string( 'lsm_end_index_v' )
     5783       WRITE ( 14 )  surf_lsm_v(l)%end_index
     5784
     5785       WRITE( dum, '(I1)')  l   
     5786
     5787       CALL wrd_write_string( 't_soil_v(' // dum // ')' )
     5788       WRITE ( 14 )  t_soil_v(l)%var_2d
     5789             
     5790    ENDDO
     5791
     5792    CALL wrd_write_string( 'lsm_start_index_h' )
     5793    WRITE ( 14 )  surf_lsm_h%start_index
     5794
     5795    CALL wrd_write_string( 'lsm_end_index_h' )
     5796    WRITE ( 14 )  surf_lsm_h%end_index
     5797
     5798    CALL wrd_write_string( 'm_soil_h' )
     5799    WRITE ( 14 )  m_soil_h%var_2d
     5800
     5801    DO  l = 0, 3
     5802
     5803       CALL wrd_write_string( 'lsm_start_index_v' )
     5804       WRITE ( 14 )  surf_lsm_v(l)%start_index
     5805
     5806       CALL wrd_write_string( 'lsm_end_index_v' )
     5807       WRITE ( 14 )  surf_lsm_v(l)%end_index
     5808
     5809       WRITE( dum, '(I1)')  l   
     5810
     5811       CALL wrd_write_string( 'm_soil_v(' // dum // ')' )
     5812       WRITE ( 14 )  m_soil_v(l)%var_2d
     5813     
     5814    ENDDO
     5815
     5816    CALL wrd_write_string( 'lsm_start_index_h' )
     5817    WRITE ( 14 )  surf_lsm_h%start_index
     5818
     5819    CALL wrd_write_string( 'lsm_end_index_h' )
     5820    WRITE ( 14 )  surf_lsm_h%end_index
     5821
     5822    CALL wrd_write_string( 'm_liq_h' )
     5823    WRITE ( 14 )  m_liq_h%var_1d
    57665824       
    5767        DO  l = 0, 3
    5768           WRITE ( 14 ) 'lsm_start_index_v   '
    5769           WRITE ( 14 ) surf_lsm_v(l)%start_index
    5770           WRITE ( 14 ) 'lsm_end_index_v     '
    5771           WRITE ( 14 ) surf_lsm_v(l)%end_index
    5772           WRITE( dum, '(I1)')  l         
    5773           WRITE ( 14 ) 'm_soil_v(' // dum // ')         '
    5774           WRITE ( 14 ) m_soil_v(l)%var_2d         
    5775        ENDDO
    5776 
    5777        WRITE ( 14 ) 'lsm_start_index_h   '
    5778        WRITE ( 14 ) surf_lsm_h%start_index
    5779        WRITE ( 14 ) 'lsm_end_index_h     '
    5780        WRITE ( 14 ) surf_lsm_h%end_index
    5781        WRITE ( 14 ) 'm_liq_h             '
    5782        WRITE ( 14 ) m_liq_h%var_1d
     5825    DO  l = 0, 3
     5826
     5827       CALL wrd_write_string( 'lsm_start_index_v' )
     5828       WRITE ( 14 )  surf_lsm_v(l)%start_index
     5829
     5830       CALL wrd_write_string( 'lsm_end_index_v' )
     5831       WRITE ( 14 )  surf_lsm_v(l)%end_index
     5832
     5833       WRITE( dum, '(I1)')  l   
     5834
     5835       CALL wrd_write_string( 'm_liq_v(' // dum // ')' )
     5836       WRITE ( 14 )  m_liq_v(l)%var_1d     
     5837               
     5838    ENDDO
     5839
     5840    CALL wrd_write_string( 'lsm_start_index_h' )
     5841    WRITE ( 14 )  surf_lsm_h%start_index
     5842
     5843    CALL wrd_write_string( 'lsm_end_index_h' )
     5844    WRITE ( 14 )  surf_lsm_h%end_index
     5845
     5846    CALL wrd_write_string( 't_surface_h' )
     5847    WRITE ( 14 )  t_surface_h%var_1d
     5848
     5849    DO  l = 0, 3
     5850
     5851       CALL wrd_write_string( 'lsm_start_index_v' )
     5852       WRITE ( 14 )  surf_lsm_v(l)%start_index
     5853
     5854       CALL wrd_write_string( 'lsm_end_index_v' )
     5855       WRITE ( 14 )  surf_lsm_v(l)%end_index
     5856
     5857       WRITE( dum, '(I1)')  l   
     5858
     5859       CALL wrd_write_string( 't_surface_v(' // dum // ')' )
     5860       WRITE ( 14 )  t_surface_v(l)%var_1d     
    57835861       
    5784        DO  l = 0, 3
    5785           WRITE ( 14 ) 'lsm_start_index_v   '
    5786           WRITE ( 14 ) surf_lsm_v(l)%start_index
    5787           WRITE ( 14 ) 'lsm_end_index_v     '
    5788           WRITE ( 14 ) surf_lsm_v(l)%end_index
    5789           WRITE( dum, '(I1)')  l         
    5790           WRITE ( 14 ) 'm_liq_v(' // dum // ')          '
    5791           WRITE ( 14 ) m_liq_v(l)%var_1d         
    5792        ENDDO
    5793 
    5794        WRITE ( 14 ) 'lsm_start_index_h   '
    5795        WRITE ( 14 ) surf_lsm_h%start_index
    5796        WRITE ( 14 ) 'lsm_end_index_h     '
    5797        WRITE ( 14 ) surf_lsm_h%end_index
    5798        WRITE ( 14 ) 't_surface_h         '
    5799        WRITE ( 14 ) t_surface_h%var_1d
    5800        
    5801        DO  l = 0, 3
    5802           WRITE ( 14 ) 'lsm_start_index_v   '
    5803           WRITE ( 14 ) surf_lsm_v(l)%start_index
    5804           WRITE ( 14 ) 'lsm_end_index_v     '
    5805           WRITE ( 14 ) surf_lsm_v(l)%end_index
    5806           WRITE( dum, '(I1)')  l         
    5807           WRITE ( 14 ) 't_surface_v(' // dum // ')      '
    5808           WRITE ( 14 ) t_surface_v(l)%var_1d         
    5809        ENDDO
    5810 
    5811 
    5812        WRITE ( 14 )  '*** end lsm ***     '
    5813 
    5814     ENDIF
    5815 
    5816  END SUBROUTINE lsm_write_restart_data
    5817 
    5818 
    5819 SUBROUTINE lsm_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file,   &
    5820                                      nynfa, nyn_on_file, nysfa, nys_on_file,   &
    5821                                      offset_xa, offset_ya, overlap_count,      &
    5822                                      tmp_2d )
     5862    ENDDO
     5863
     5864
     5865 END SUBROUTINE lsm_wrd_local
     5866
     5867
     5868!------------------------------------------------------------------------------!
     5869!
     5870! Description:
     5871! ------------
     5872!> Soubroutine reads lsm data from restart file(s)
     5873!------------------------------------------------------------------------------!
     5874SUBROUTINE lsm_rrd_local( i, k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,           &
     5875                          nxr_on_file, nynf, nync, nyn_on_file, nysf, nysc,    &
     5876                          nys_on_file, tmp_2d, found )
    58235877 
    58245878
     
    58275881    USE indices
    58285882   
    5829     USE kinds
    5830    
    58315883    USE pegrid
    58325884
     5885
    58335886    IMPLICIT NONE
    5834 
    5835     CHARACTER (LEN=20) :: field_char   !<
    58365887
    58375888    INTEGER(iwp) ::  i                 !<
     
    58415892    INTEGER(iwp) ::  nxlc              !<
    58425893    INTEGER(iwp) ::  nxlf              !<
    5843     INTEGER(iwp) ::  nxl_on_file       !<
     5894    INTEGER(iwp) ::  nxl_on_file       !< index of left boundary on former local domain
    58445895    INTEGER(iwp) ::  nxrc              !<
    58455896    INTEGER(iwp) ::  nxrf              !<
    5846     INTEGER(iwp) ::  nxr_on_file       !<
     5897    INTEGER(iwp) ::  nxr_on_file       !< index of right boundary on former local domain
    58475898    INTEGER(iwp) ::  nync              !<
    58485899    INTEGER(iwp) ::  nynf              !<
    5849     INTEGER(iwp) ::  nyn_on_file       !<
     5900    INTEGER(iwp) ::  nyn_on_file       !< index of north boundary on former local domain
    58505901    INTEGER(iwp) ::  nysc              !<
    58515902    INTEGER(iwp) ::  nysf              !<
    5852     INTEGER(iwp) ::  nys_on_file       !<
    5853     INTEGER(iwp) ::  overlap_count     !<
     5903    INTEGER(iwp) ::  nys_on_file       !< index of south boundary on former local domain
    58545904
    58555905    INTEGER(iwp) ::  ns_v_on_file_lsm(0:3) !< number of vertical surface elements (natural type) on file
    58565906
    5857     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa       !<
    5858     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa       !<
    5859     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa       !<
    5860     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa       !<
    5861     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa   !<
    5862     INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya   !<
    5863 
    5864     INTEGER(iwp), DIMENSION(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) ::  start_index_on_file
    5865     INTEGER(iwp), DIMENSION(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) ::  end_index_on_file
    5866 
    5867     REAL(wp),                                                                  &
    5868        DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: &
    5869           tmp_2d   !<
    5870 
    5871     REAL(wp),                                                                  &
    5872        DIMENSION(nzb_soil:nzt_soil+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: &
    5873           tmp_3d   !<
    5874 
    5875     REAL(wp),                                                                  &
    5876        DIMENSION(nzb_soil:nzt_soil,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: &
    5877           tmp_3d2   !<
    5878 
    5879     TYPE(surf_type_lsm) :: tmp_walltype_h_1d   !< temporary 1D array containing the respective surface variable stored on file, horizontal surfaces
    5880     TYPE(surf_type_lsm) :: tmp_walltype_h_2d   !< temporary 2D array containing the respective surface variable stored on file, horizontal surfaces
    5881     TYPE(surf_type_lsm) :: tmp_walltype_h_2d2  !< temporary 2D array containing the respective surface variable stored on file, horizontal surfaces
    5882 
    5883     TYPE(surf_type_lsm), DIMENSION(0:3) :: tmp_walltype_v_1d   !< temporary 1D array containing the respective surface variable stored on file, vertical surfaces
    5884     TYPE(surf_type_lsm), DIMENSION(0:3) :: tmp_walltype_v_2d   !< temporary 2D array containing the respective surface variable stored on file, vertical surfaces
    5885     TYPE(surf_type_lsm), DIMENSION(0:3) :: tmp_walltype_v_2d2  !< temporary 2D array containing the respective surface variable stored on file, vertical surfaces
    5886 
    5887    IF ( initializing_actions == 'read_restart_data' )  THEN
    5888       READ ( 13 )  field_char
    5889 
    5890 !
    5891 !--   At first, determine the number of surface elements (with certain orientation) on file
    5892       IF ( TRIM( field_char ) /= 'ns_h_on_file_lsm' )  THEN
    5893 !
    5894 !--      Add a proper error message
    5895       ENDIF
    5896       READ ( 13 ) ns_h_on_file_lsm
    5897 
    5898       READ ( 13 )  field_char
    5899       IF ( TRIM( field_char ) /= 'ns_v_on_file_lsm' )  THEN
    5900 !
    5901 !--      Add a proper error message
    5902       ENDIF
    5903       READ ( 13 ) ns_v_on_file_lsm
    5904 !
    5905 !--   Allocate temporary arrays to store surface data
    5906       ALLOCATE( tmp_walltype_h_1d%var_1d(1:ns_h_on_file_lsm)                     )
    5907       ALLOCATE( tmp_walltype_h_2d%var_2d(nzb_soil:nzt_soil+1,1:ns_h_on_file_lsm) )
    5908       ALLOCATE( tmp_walltype_h_2d2%var_2d(nzb_soil:nzt_soil,1:ns_h_on_file_lsm)  )
    5909 
    5910       DO  l = 0, 3
    5911          ALLOCATE( tmp_walltype_v_1d(l)%var_1d(1:ns_v_on_file_lsm(l))                    )
    5912          ALLOCATE( tmp_walltype_v_2d(l)%var_2d(nzb_soil:nzt_soil+1,1:ns_v_on_file_lsm(l)) )
    5913          ALLOCATE( tmp_walltype_v_2d2(l)%var_2d(nzb_soil:nzt_soil,1:ns_v_on_file_lsm(l)) )
    5914       ENDDO
    5915      
    5916       READ ( 13 )  field_char
    5917 
    5918       DO  WHILE ( TRIM( field_char ) /= '*** end lsm ***' )
    5919 
    5920          DO  k = 1, overlap_count
    5921 
    5922             nxlf = nxlfa(i,k)
    5923             nxlc = nxlfa(i,k) + offset_xa(i,k)
    5924             nxrf = nxrfa(i,k)
    5925             nxrc = nxrfa(i,k) + offset_xa(i,k)
    5926             nysf = nysfa(i,k)
    5927             nysc = nysfa(i,k) + offset_ya(i,k)
    5928             nynf = nynfa(i,k)
    5929             nync = nynfa(i,k) + offset_ya(i,k)
    5930 
    5931 
    5932             SELECT CASE ( TRIM( field_char ) )
    5933 
    5934 
    5935                 CASE ( 'c_liq_av' )
    5936                    IF ( .NOT. ALLOCATED( c_liq_av ) )  THEN
    5937                       ALLOCATE( c_liq_av(nysg:nyng,nxlg:nxrg) )
    5938                    ENDIF
    5939                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5940                    c_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    5941                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5942 
    5943                 CASE ( 'c_soil_av' )
    5944                    IF ( .NOT. ALLOCATED( c_soil_av ) )  THEN
    5945                       ALLOCATE( c_soil_av(nysg:nyng,nxlg:nxrg) )
    5946                    ENDIF
    5947                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5948                    c_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =        &
    5949                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5950 
    5951                 CASE ( 'c_veg_av' )
    5952                    IF ( .NOT. ALLOCATED( c_veg_av ) )  THEN
    5953                       ALLOCATE( c_veg_av(nysg:nyng,nxlg:nxrg) )
    5954                    ENDIF
    5955                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5956                    c_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    5957                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5958 
    5959                 CASE ( 'lai_av' )
    5960                    IF ( .NOT. ALLOCATED( lai_av ) )  THEN
    5961                       ALLOCATE( lai_av(nysg:nyng,nxlg:nxrg) )
    5962                    ENDIF
    5963                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5964                    lai_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
    5965                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5966 
    5967                 CASE ( 'm_liq_av' )
    5968                    IF ( .NOT. ALLOCATED( m_liq_av ) )  THEN
    5969                       ALLOCATE( m_liq_av(nysg:nyng,nxlg:nxrg) )
    5970                    ENDIF
    5971                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5972                    m_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    5973                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5974 
    5975                 CASE ( 'm_soil_av' )
    5976                    IF ( .NOT. ALLOCATED( m_soil_av ) )  THEN
    5977                       ALLOCATE( m_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
    5978                    ENDIF
    5979                    IF ( k == 1 )  READ ( 13 )  tmp_3d2(:,:,:)
    5980                    m_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    5981                                     tmp_3d2(nzb_soil:nzt_soil,nysf             &
    5982                                     -nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5983 
    5984                 CASE ( 'qsws_liq_av' )
    5985                    IF ( .NOT. ALLOCATED( qsws_liq_av ) )  THEN
    5986                       ALLOCATE( qsws_liq_av(nysg:nyng,nxlg:nxrg) )
    5987                    ENDIF 
    5988                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5989                    qsws_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =     &
    5990                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5991                 CASE ( 'qsws_soil_av' )
    5992                    IF ( .NOT. ALLOCATED( qsws_soil_av ) )  THEN
    5993                       ALLOCATE( qsws_soil_av(nysg:nyng,nxlg:nxrg) )
    5994                    ENDIF 
    5995                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    5996                    qsws_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =    &
    5997                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    5998 
    5999                 CASE ( 'qsws_veg_av' )
    6000                    IF ( .NOT. ALLOCATED( qsws_veg_av ) )  THEN
    6001                       ALLOCATE( qsws_veg_av(nysg:nyng,nxlg:nxrg) )
    6002                    ENDIF 
    6003                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    6004                    qsws_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =     &
    6005                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    6006 
    6007                 CASE ( 't_soil_av' )
    6008                    IF ( .NOT. ALLOCATED( t_soil_av ) )  THEN
    6009                       ALLOCATE( t_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
    6010                    ENDIF
    6011                    IF ( k == 1 )  READ ( 13 )  tmp_3d2(:,:,:)
    6012                    t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    6013                                     tmp_3d2(:,nysf-nbgp:nynf+nbgp,             &
    6014                                     nxlf-nbgp:nxrf+nbgp)
    6015 
    6016                 CASE ( 'lsm_start_index_h', 'lsm_start_index_v'  )   
    6017                    IF ( k == 1 )                                               &
    6018                       READ ( 13 )  start_index_on_file
    6019                       
    6020                 CASE ( 'lsm_end_index_h', 'lsm_end_index_v' )   
    6021                    IF ( k == 1 )                                               &
    6022                       READ ( 13 )  end_index_on_file
    6023                
    6024                 CASE ( 't_soil_h' )
     5907    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  start_index_on_file
     5908    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  end_index_on_file
     5909
     5910    LOGICAL, INTENT(OUT)  :: found
     5911
     5912    REAL(wp), DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_2d   !<
     5913
     5914    REAL(wp), DIMENSION(nzb_soil:nzt_soil+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d   !<
     5915
     5916    REAL(wp), DIMENSION(nzb_soil:nzt_soil,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d2   !<
     5917
     5918    TYPE(surf_type_lsm), SAVE :: tmp_walltype_h_1d   !< temporary 1D array containing the respective surface variable stored on file, horizontal surfaces
     5919    TYPE(surf_type_lsm), SAVE :: tmp_walltype_h_2d   !< temporary 2D array containing the respective surface variable stored on file, horizontal surfaces
     5920    TYPE(surf_type_lsm), SAVE :: tmp_walltype_h_2d2  !< temporary 2D array containing the respective surface variable stored on file, horizontal surfaces
     5921
     5922    TYPE(surf_type_lsm), DIMENSION(0:3), SAVE :: tmp_walltype_v_1d   !< temporary 1D array containing the respective surface variable stored on file, vertical surfaces
     5923    TYPE(surf_type_lsm), DIMENSION(0:3), SAVE :: tmp_walltype_v_2d   !< temporary 2D array containing the respective surface variable stored on file, vertical surfaces
     5924    TYPE(surf_type_lsm), DIMENSION(0:3), SAVE :: tmp_walltype_v_2d2  !< temporary 2D array containing the respective surface variable stored on file, vertical surfaces
     5925
     5926
     5927    found = .TRUE.
     5928
     5929
     5930       SELECT CASE ( restart_string(1:length) )
     5931
     5932           CASE ( 'ns_h_on_file_lsm' )
     5933              IF ( k == 1 )  THEN
     5934                 READ ( 13 ) ns_h_on_file_lsm
     5935
     5936                 IF ( ALLOCATED( tmp_walltype_h_1d%var_1d ) )                  &
     5937                    DEALLOCATE( tmp_walltype_h_1d%var_1d )
     5938                 IF ( ALLOCATED( tmp_walltype_h_2d%var_2d ) )                  &   
     5939                    DEALLOCATE( tmp_walltype_h_2d%var_2d )
     5940                 IF ( ALLOCATED( tmp_walltype_h_2d2%var_2d ) )                 &
     5941                    DEALLOCATE( tmp_walltype_h_2d2%var_2d )
     5942
     5943!
     5944!--              Allocate temporary arrays to store surface data
     5945                 ALLOCATE( tmp_walltype_h_1d%var_1d(1:ns_h_on_file_lsm) )
     5946                 ALLOCATE( tmp_walltype_h_2d%var_2d(nzb_soil:nzt_soil+1,       &
     5947                                                    1:ns_h_on_file_lsm) )
     5948                 ALLOCATE( tmp_walltype_h_2d2%var_2d(nzb_soil:nzt_soil,        &
     5949                           1:ns_h_on_file_lsm)  )
     5950
     5951              ENDIF
     5952
     5953           CASE ( 'ns_v_on_file_lsm' )
     5954              IF ( k == 1 )  THEN
     5955                 READ ( 13 ) ns_v_on_file_lsm
     5956
     5957                 DO  l = 0, 3
     5958                    IF ( ALLOCATED( tmp_walltype_v_1d(l)%var_1d ) )            &
     5959                       DEALLOCATE( tmp_walltype_v_1d(l)%var_1d )
     5960                    IF ( ALLOCATED( tmp_walltype_v_2d(l)%var_2d ) )            &
     5961                       DEALLOCATE( tmp_walltype_v_2d(l)%var_2d )
     5962                    IF ( ALLOCATED( tmp_walltype_v_2d2(l)%var_2d ) )           &
     5963                       DEALLOCATE( tmp_walltype_v_2d2(l)%var_2d )
     5964                 ENDDO
     5965
     5966!
     5967!--              Allocate temporary arrays to store surface data
     5968                 DO  l = 0, 3
     5969                    ALLOCATE( tmp_walltype_v_1d(l)                             &
     5970                                 %var_1d(1:ns_v_on_file_lsm(l)) )
     5971                    ALLOCATE( tmp_walltype_v_2d(l)                             &
     5972                                 %var_2d(nzb_soil:nzt_soil+1,                  &
     5973                                         1:ns_v_on_file_lsm(l)) )
     5974                    ALLOCATE( tmp_walltype_v_2d2(l)                            &
     5975                                 %var_2d(nzb_soil:nzt_soil,                    &
     5976                                         1:ns_v_on_file_lsm(l))  )
     5977                 ENDDO
     5978
     5979              ENDIF
     5980
     5981
     5982           CASE ( 'c_liq_av' )
     5983              IF ( .NOT. ALLOCATED( c_liq_av ) )  THEN
     5984                 ALLOCATE( c_liq_av(nysg:nyng,nxlg:nxrg) )
     5985              ENDIF
     5986              IF ( k == 1 )  READ ( 13 )  tmp_2d
     5987              c_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =              &
     5988                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     5989
     5990           CASE ( 'c_soil_av' )
     5991              IF ( .NOT. ALLOCATED( c_soil_av ) )  THEN
     5992                 ALLOCATE( c_soil_av(nysg:nyng,nxlg:nxrg) )
     5993              ENDIF
     5994              IF ( k == 1 )  READ ( 13 )  tmp_2d
     5995              c_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
     5996                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     5997
     5998           CASE ( 'c_veg_av' )
     5999              IF ( .NOT. ALLOCATED( c_veg_av ) )  THEN
     6000                 ALLOCATE( c_veg_av(nysg:nyng,nxlg:nxrg) )
     6001              ENDIF
     6002              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6003              c_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =              &
     6004                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6005
     6006           CASE ( 'lai_av' )
     6007              IF ( .NOT. ALLOCATED( lai_av ) )  THEN
     6008                 ALLOCATE( lai_av(nysg:nyng,nxlg:nxrg) )
     6009              ENDIF
     6010              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6011              lai_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                &
     6012                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6013
     6014           CASE ( 'm_liq_av' )
     6015              IF ( .NOT. ALLOCATED( m_liq_av ) )  THEN
     6016                 ALLOCATE( m_liq_av(nysg:nyng,nxlg:nxrg) )
     6017              ENDIF
     6018              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6019              m_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =              &
     6020                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6021
     6022           CASE ( 'm_soil_av' )
     6023              IF ( .NOT. ALLOCATED( m_soil_av ) )  THEN
     6024                 ALLOCATE( m_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
     6025              ENDIF
     6026              IF ( k == 1 )  READ ( 13 )  tmp_3d2(:,:,:)
     6027              m_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
     6028                 tmp_3d2(nzb_soil:nzt_soil,nysf                                &
     6029                         -nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6030
     6031           CASE ( 'qsws_liq_av' )
     6032              IF ( .NOT. ALLOCATED( qsws_liq_av ) )  THEN
     6033                 ALLOCATE( qsws_liq_av(nysg:nyng,nxlg:nxrg) )
     6034              ENDIF 
     6035              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6036              qsws_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =          &
     6037                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6038           CASE ( 'qsws_soil_av' )
     6039              IF ( .NOT. ALLOCATED( qsws_soil_av ) )  THEN
     6040                 ALLOCATE( qsws_soil_av(nysg:nyng,nxlg:nxrg) )
     6041              ENDIF 
     6042              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6043              qsws_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =         &
     6044                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6045
     6046           CASE ( 'qsws_veg_av' )
     6047              IF ( .NOT. ALLOCATED( qsws_veg_av ) )  THEN
     6048                 ALLOCATE( qsws_veg_av(nysg:nyng,nxlg:nxrg) )
     6049              ENDIF 
     6050              IF ( k == 1 )  READ ( 13 )  tmp_2d
     6051              qsws_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =          &
     6052                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     6053
     6054           CASE ( 't_soil_av' )
     6055              IF ( .NOT. ALLOCATED( t_soil_av ) )  THEN
     6056                 ALLOCATE( t_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
     6057              ENDIF
     6058              IF ( k == 1 )  READ ( 13 )  tmp_3d2(:,:,:)
     6059              t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
     6060                 tmp_3d2(:,nysf-nbgp:nynf+nbgp,                                &
     6061                         nxlf-nbgp:nxrf+nbgp)
     6062
     6063           CASE ( 'lsm_start_index_h', 'lsm_start_index_v'  )   
     6064                IF ( k == 1 )  THEN
     6065
     6066                   IF ( ALLOCATED( start_index_on_file ) )                     &
     6067                      DEALLOCATE( start_index_on_file )
     6068
     6069                   ALLOCATE ( start_index_on_file(nys_on_file:nyn_on_file,     &
     6070                   nxl_on_file:nxr_on_file) )
     6071
     6072                   READ ( 13 )  start_index_on_file
     6073
     6074                ENDIF
    60256075                 
    6026                    IF ( k == 1 )  THEN
    6027                       IF ( .NOT.  ALLOCATED( t_soil_h%var_2d ) )               &
    6028                          ALLOCATE( t_soil_h%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_h%ns) )
    6029                       READ ( 13 )  tmp_walltype_h_2d%var_2d
    6030                    ENDIF
    6031                    CALL surface_restore_elements(                              &
    6032                                               t_soil_h%var_2d,                 &
    6033                                               tmp_walltype_h_2d%var_2d,        &
    6034                                               surf_lsm_h%start_index,          &
    6035                                               start_index_on_file,             &
    6036                                               end_index_on_file,               &
    6037                                               nxlc, nysc,                      &
    6038                                               nxlf, nxrf, nysf, nynf,          &
    6039                                               nys_on_file, nyn_on_file,        &
    6040                                               nxl_on_file,nxr_on_file )
    6041 
    6042                 CASE ( 't_soil_v(0)' )
    6043                  
    6044                    IF ( k == 1 )  THEN
    6045                       IF ( .NOT.  ALLOCATED( t_soil_v(0)%var_2d ) )            &
    6046                          ALLOCATE( t_soil_v(0)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(0)%ns) )
    6047                       READ ( 13 )  tmp_walltype_v_2d(0)%var_2d
    6048                    ENDIF
    6049                    CALL surface_restore_elements(                              &
    6050                                            t_soil_v(0)%var_2d,                 &
    6051                                            tmp_walltype_v_2d(0)%var_2d,        &
    6052                                            surf_lsm_v(0)%start_index,          &
    6053                                            start_index_on_file,                &
    6054                                            end_index_on_file,                  &
    6055                                            nxlc, nysc,                         &
    6056                                            nxlf, nxrf, nysf, nynf,             &
    6057                                            nys_on_file, nyn_on_file,           &
    6058                                            nxl_on_file,nxr_on_file )
    6059 
    6060                 CASE ( 't_soil_v(1)' )
    6061                  
    6062                    IF ( k == 1 )  THEN
    6063                       IF ( .NOT.  ALLOCATED( t_soil_v(1)%var_2d ) )            &
    6064                          ALLOCATE( t_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(1)%ns) )
    6065                       READ ( 13 )  tmp_walltype_v_2d(1)%var_2d
    6066                    ENDIF
    6067                    CALL surface_restore_elements(                              &
    6068                                            t_soil_v(1)%var_2d,                 &
    6069                                            tmp_walltype_v_2d(1)%var_2d,        &
    6070                                            surf_lsm_v(1)%start_index,          &
    6071                                            start_index_on_file,                &
    6072                                            end_index_on_file,                  &
    6073                                            nxlc, nysc,                         &
    6074                                            nxlf, nxrf, nysf, nynf,             &
    6075                                            nys_on_file, nyn_on_file,           &
    6076                                            nxl_on_file,nxr_on_file )
    6077 
    6078                 CASE ( 't_soil_v(2)' )
    6079                  
    6080                    IF ( k == 1 )  THEN
    6081                       IF ( .NOT.  ALLOCATED( t_soil_v(2)%var_2d ) )            &
    6082                          ALLOCATE( t_soil_v(2)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(2)%ns) )
    6083                       READ ( 13 )  tmp_walltype_v_2d(2)%var_2d
    6084                    ENDIF
    6085                    CALL surface_restore_elements(                              &
    6086                                            t_soil_v(2)%var_2d,                 &
    6087                                            tmp_walltype_v_2d(2)%var_2d,        &
    6088                                            surf_lsm_v(2)%start_index,          &
    6089                                            start_index_on_file,                &
    6090                                            end_index_on_file,                  &
    6091                                            nxlc, nysc,                         &
    6092                                            nxlf, nxrf, nysf, nynf,             &
    6093                                            nys_on_file, nyn_on_file,           &
    6094                                            nxl_on_file,nxr_on_file )
    6095 
    6096                 CASE ( 't_soil_v(3)' )
    6097                  
    6098                    IF ( k == 1 )  THEN
    6099                       IF ( .NOT.  ALLOCATED( t_soil_v(3)%var_2d ) )            &
    6100                          ALLOCATE( t_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(3)%ns) )
    6101                       READ ( 13 )  tmp_walltype_v_2d(3)%var_2d
    6102                    ENDIF
    6103                    CALL surface_restore_elements(                              &
    6104                                            t_soil_v(3)%var_2d,                 &
    6105                                            tmp_walltype_v_2d(3)%var_2d,        &
    6106                                            surf_lsm_v(3)%start_index,          &
    6107                                            start_index_on_file,                &
    6108                                            end_index_on_file,                  &
    6109                                            nxlc, nysc,                         &
    6110                                            nxlf, nxrf, nysf, nynf,             &
    6111                                            nys_on_file, nyn_on_file,           &
    6112                                            nxl_on_file,nxr_on_file )
    6113 
    6114                 CASE ( 'm_soil_h' )
    6115                  
    6116                    IF ( k == 1 )  THEN
    6117                       IF ( .NOT.  ALLOCATED( m_soil_h%var_2d ) )               &
    6118                          ALLOCATE( m_soil_h%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_h%ns) )
    6119                       READ ( 13 )  tmp_walltype_h_2d2%var_2d
    6120                    ENDIF
    6121                    CALL surface_restore_elements(                              &
    6122                                              m_soil_h%var_2d,                  &
    6123                                              tmp_walltype_h_2d2%var_2d,        &
    6124                                              surf_lsm_h%start_index,           &
    6125                                              start_index_on_file,              &
    6126                                              end_index_on_file,                &
    6127                                              nxlc, nysc,                       &
    6128                                              nxlf, nxrf, nysf, nynf,           &
    6129                                              nys_on_file, nyn_on_file,         &
    6130                                              nxl_on_file,nxr_on_file )
    6131 
    6132                 CASE ( 'm_soil_v(0)' )
    6133                  
    6134                    IF ( k == 1 )  THEN
    6135                       IF ( .NOT.  ALLOCATED( m_soil_v(0)%var_2d ) )            &
    6136                          ALLOCATE( m_soil_v(0)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(0)%ns) )
    6137                       READ ( 13 )  tmp_walltype_v_2d2(0)%var_2d
    6138                    ENDIF
    6139                    CALL surface_restore_elements(                              &
    6140                                           m_soil_v(0)%var_2d,                  &
    6141                                           tmp_walltype_v_2d2(0)%var_2d,        &
    6142                                           surf_lsm_v(0)%start_index,           &
    6143                                           start_index_on_file,                 &
    6144                                           end_index_on_file,                   &
    6145                                           nxlc, nysc,                          &
    6146                                           nxlf, nxrf, nysf, nynf,              &
    6147                                           nys_on_file, nyn_on_file,            &
    6148                                           nxl_on_file,nxr_on_file )
    6149 
    6150                 CASE ( 'm_soil_v(1)' )
    6151                  
    6152                    IF ( k == 1 )  THEN
    6153                       IF ( .NOT.  ALLOCATED( m_soil_v(1)%var_2d ) )            &
    6154                          ALLOCATE( m_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(1)%ns) )
    6155                       READ ( 13 )  tmp_walltype_v_2d2(1)%var_2d
    6156                    ENDIF
    6157                    CALL surface_restore_elements(                              &
    6158                                           m_soil_v(1)%var_2d,                  &
    6159                                           tmp_walltype_v_2d2(1)%var_2d,        &
    6160                                           surf_lsm_v(1)%start_index,           &
    6161                                           start_index_on_file,                 &
    6162                                           end_index_on_file,                   &
    6163                                           nxlc, nysc,                          &
    6164                                           nxlf, nxrf, nysf, nynf,              &
    6165                                           nys_on_file, nyn_on_file,            &
    6166                                           nxl_on_file,nxr_on_file )
    6167 
    6168 
    6169                 CASE ( 'm_soil_v(2)' )
    6170                  
    6171                    IF ( k == 1 )  THEN
    6172                       IF ( .NOT.  ALLOCATED( m_soil_v(2)%var_2d ) )            &
    6173                          ALLOCATE( m_soil_v(2)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(2)%ns) )
    6174                       READ ( 13 )  tmp_walltype_v_2d2(2)%var_2d
    6175                    ENDIF
    6176                    CALL surface_restore_elements(                              &
    6177                                           m_soil_v(2)%var_2d,                  &
    6178                                           tmp_walltype_v_2d2(2)%var_2d,        &
    6179                                           surf_lsm_v(2)%start_index,           &
    6180                                           start_index_on_file,                 &
    6181                                           end_index_on_file,                   &
    6182                                           nxlc, nysc,                          &
    6183                                           nxlf, nxrf, nysf, nynf,              &
    6184                                           nys_on_file, nyn_on_file,            &
    6185                                           nxl_on_file,nxr_on_file )
    6186 
    6187 
    6188                 CASE ( 'm_soil_v(3)' )
    6189                  
    6190                    IF ( k == 1 )  THEN
    6191                       IF ( .NOT.  ALLOCATED( m_soil_v(3)%var_2d ) )            &
    6192                          ALLOCATE( m_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,1:surf_lsm_v(3)%ns) )
    6193                       READ ( 13 )  tmp_walltype_v_2d2(3)%var_2d
    6194                    ENDIF
    6195                    CALL surface_restore_elements(                              &
    6196                                           m_soil_v(3)%var_2d,                  &
    6197                                           tmp_walltype_v_2d2(3)%var_2d,        &
    6198                                           surf_lsm_v(3)%start_index,           &
    6199                                           start_index_on_file,                 &
    6200                                           end_index_on_file,                   &
    6201                                           nxlc, nysc,                          &
    6202                                           nxlf, nxrf, nysf, nynf,              &
    6203                                           nys_on_file, nyn_on_file,            &
    6204                                           nxl_on_file,nxr_on_file )
    6205 
    6206 
    6207                 CASE ( 'm_liq_h' )
    6208                  
    6209                    IF ( k == 1 )  THEN
    6210                       IF ( .NOT.  ALLOCATED( m_liq_h%var_1d ) )                &
    6211                          ALLOCATE( m_liq_h%var_1d(1:surf_lsm_h%ns) )
    6212                       READ ( 13 )  tmp_walltype_h_1d%var_1d
    6213                    ENDIF
    6214                    CALL surface_restore_elements(                              &
    6215                                               m_liq_h%var_1d,                  &
    6216                                               tmp_walltype_h_1d%var_1d,        &
    6217                                               surf_lsm_h%start_index,          &
    6218                                               start_index_on_file,             &
    6219                                               end_index_on_file,               &
    6220                                               nxlc, nysc,                      &
    6221                                               nxlf, nxrf, nysf, nynf,          &
    6222                                               nys_on_file, nyn_on_file,        &
    6223                                               nxl_on_file,nxr_on_file )
    6224 
    6225 
    6226                 CASE ( 'm_liq_v(0)' )
    6227                  
    6228                    IF ( k == 1 )  THEN
    6229                       IF ( .NOT.  ALLOCATED( m_liq_v(0)%var_1d ) )             &
    6230                          ALLOCATE( m_liq_v(0)%var_1d(1:surf_lsm_v(0)%ns) )
    6231                       READ ( 13 )  tmp_walltype_v_1d(0)%var_1d
    6232                    ENDIF
    6233                    CALL surface_restore_elements(                              &
    6234                                            m_liq_v(0)%var_1d,                  &
    6235                                            tmp_walltype_v_1d(0)%var_1d,        &
    6236                                            surf_lsm_v(0)%start_index,          &
    6237                                            start_index_on_file,                &
    6238                                            end_index_on_file,                  &
    6239                                            nxlc, nysc,                         &
    6240                                            nxlf, nxrf, nysf, nynf,             &
    6241                                            nys_on_file, nyn_on_file,           &
    6242                                            nxl_on_file,nxr_on_file )
    6243 
    6244 
    6245                 CASE ( 'm_liq_v(1)' )
    6246                  
    6247                    IF ( k == 1 )  THEN
    6248                       IF ( .NOT.  ALLOCATED( m_liq_v(1)%var_1d ) )             &
    6249                          ALLOCATE( m_liq_v(1)%var_1d(1:surf_lsm_v(1)%ns) )
    6250                       READ ( 13 )  tmp_walltype_v_1d(1)%var_1d
    6251                    ENDIF
    6252                    CALL surface_restore_elements(                              &
    6253                                            m_liq_v(1)%var_1d,                  &
    6254                                            tmp_walltype_v_1d(1)%var_1d,        &
    6255                                            surf_lsm_v(1)%start_index,          &
    6256                                            start_index_on_file,                &
    6257                                            end_index_on_file,                  &
    6258                                            nxlc, nysc,                         &
    6259                                            nxlf, nxrf, nysf, nynf,             &
    6260                                            nys_on_file, nyn_on_file,           &
    6261                                            nxl_on_file,nxr_on_file )
    6262 
    6263 
    6264                 CASE ( 'm_liq_v(2)' )
    6265                  
    6266                    IF ( k == 1 )  THEN
    6267                       IF ( .NOT.  ALLOCATED( m_liq_v(2)%var_1d ) )             &
    6268                          ALLOCATE( m_liq_v(2)%var_1d(1:surf_lsm_v(2)%ns) )
    6269                       READ ( 13 )  tmp_walltype_v_1d(2)%var_1d
    6270                    ENDIF
    6271                    CALL surface_restore_elements(                              &
    6272                                            m_liq_v(2)%var_1d,                  &
    6273                                            tmp_walltype_v_1d(2)%var_1d,        &
    6274                                            surf_lsm_v(2)%start_index,          &
    6275                                            start_index_on_file,                &
    6276                                            end_index_on_file,                  &
    6277                                            nxlc, nysc,                         &
    6278                                            nxlf, nxrf, nysf, nynf,             &
    6279                                            nys_on_file, nyn_on_file,           &
    6280                                            nxl_on_file,nxr_on_file )
    6281 
    6282                 CASE ( 'm_liq_v(3)' )
    6283                  
    6284                    IF ( k == 1 )  THEN
    6285                       IF ( .NOT.  ALLOCATED( m_liq_v(3)%var_1d ) )             &
    6286                          ALLOCATE( m_liq_v(3)%var_1d(1:surf_lsm_v(3)%ns) )
    6287                       READ ( 13 )  tmp_walltype_v_1d(3)%var_1d
    6288                    ENDIF
    6289                    CALL surface_restore_elements(                              &
    6290                                            m_liq_v(3)%var_1d,                  &
    6291                                            tmp_walltype_v_1d(3)%var_1d,        &
    6292                                            surf_lsm_v(3)%start_index,          &
    6293                                            start_index_on_file,                &
    6294                                            end_index_on_file,                  &
    6295                                            nxlc, nysc,                         &
    6296                                            nxlf, nxrf, nysf, nynf,             &
    6297                                            nys_on_file, nyn_on_file,           &
    6298                                            nxl_on_file,nxr_on_file )
    6299 
    6300 
    6301                 CASE ( 't_surface_h' )
    6302                  
    6303                    IF ( k == 1 )  THEN
    6304                       IF ( .NOT.  ALLOCATED( t_surface_h%var_1d ) )            &
    6305                          ALLOCATE( t_surface_h%var_1d(1:surf_lsm_h%ns) )
    6306                       READ ( 13 )  tmp_walltype_h_1d%var_1d
    6307                    ENDIF
    6308                    CALL surface_restore_elements(                              &
    6309                                               t_surface_h%var_1d,              &
    6310                                               tmp_walltype_h_1d%var_1d,        &
    6311                                               surf_lsm_h%start_index,          &
    6312                                               start_index_on_file,             &
    6313                                               end_index_on_file,               &
    6314                                               nxlc, nysc,                      &
    6315                                               nxlf, nxrf, nysf, nynf,          &
    6316                                               nys_on_file, nyn_on_file,        &
    6317                                               nxl_on_file,nxr_on_file )
    6318 
    6319                 CASE ( 't_surface_v(0)' )
    6320                  
    6321                    IF ( k == 1 )  THEN
    6322                       IF ( .NOT.  ALLOCATED( t_surface_v(0)%var_1d ) )         &
    6323                          ALLOCATE( t_surface_v(0)%var_1d(1:surf_lsm_v(0)%ns) )
    6324                       READ ( 13 )  tmp_walltype_v_1d(0)%var_1d
    6325                    ENDIF
    6326                    CALL surface_restore_elements(                              &
    6327                                            t_surface_v(0)%var_1d,              &
    6328                                            tmp_walltype_v_1d(0)%var_1d,        &
    6329                                            surf_lsm_v(0)%start_index,          &
    6330                                            start_index_on_file,                &
    6331                                            end_index_on_file,                  &
    6332                                            nxlc, nysc,                         &
    6333                                            nxlf, nxrf, nysf, nynf,             &
    6334                                            nys_on_file, nyn_on_file,           &
    6335                                            nxl_on_file,nxr_on_file )
    6336 
    6337                 CASE ( 't_surface_v(1)' )
    6338                  
    6339                    IF ( k == 1 )  THEN
    6340                       IF ( .NOT.  ALLOCATED( t_surface_v(1)%var_1d ) )         &
    6341                          ALLOCATE( t_surface_v(1)%var_1d(1:surf_lsm_v(1)%ns) )
    6342                       READ ( 13 )  tmp_walltype_v_1d(1)%var_1d
    6343                    ENDIF
    6344                    CALL surface_restore_elements(                              &
    6345                                            t_surface_v(1)%var_1d,              &
    6346                                            tmp_walltype_v_1d(1)%var_1d,        &
    6347                                            surf_lsm_v(1)%start_index,          &
    6348                                            start_index_on_file,                &
    6349                                            end_index_on_file,                  &
    6350                                            nxlc, nysc,                         &
    6351                                            nxlf, nxrf, nysf, nynf,             &
    6352                                            nys_on_file, nyn_on_file,           &
    6353                                            nxl_on_file,nxr_on_file )
    6354 
    6355                 CASE ( 't_surface_v(2)' )
    6356                  
    6357                    IF ( k == 1 )  THEN
    6358                       IF ( .NOT.  ALLOCATED( t_surface_v(2)%var_1d ) )         &
    6359                          ALLOCATE( t_surface_v(2)%var_1d(1:surf_lsm_v(2)%ns) )
    6360                       READ ( 13 )  tmp_walltype_v_1d(2)%var_1d
    6361                    ENDIF
    6362                    CALL surface_restore_elements(                              &
    6363                                            t_surface_v(2)%var_1d,              &
    6364                                            tmp_walltype_v_1d(2)%var_1d,        &
    6365                                            surf_lsm_v(2)%start_index,          &
    6366                                            start_index_on_file,                &
    6367                                            end_index_on_file,                  &
    6368                                            nxlc, nysc,                         &
    6369                                            nxlf, nxrf, nysf, nynf,             &
    6370                                            nys_on_file, nyn_on_file,           &
    6371                                            nxl_on_file,nxr_on_file )
    6372 
    6373                 CASE ( 't_surface_v(3)' )
    6374                  
    6375                    IF ( k == 1 )  THEN
    6376                       IF ( .NOT.  ALLOCATED( t_surface_v(3)%var_1d ) )         &
    6377                          ALLOCATE( t_surface_v(3)%var_1d(1:surf_lsm_v(3)%ns) )
    6378                       READ ( 13 )  tmp_walltype_v_1d(3)%var_1d
    6379                    ENDIF
    6380                    CALL surface_restore_elements(                              &
    6381                                            t_surface_v(3)%var_1d,              &
    6382                                            tmp_walltype_v_1d(3)%var_1d,        &
    6383                                            surf_lsm_v(3)%start_index,          &
    6384                                            start_index_on_file,                &
    6385                                            end_index_on_file,                  &
    6386                                            nxlc, nysc,                         &
    6387                                            nxlf, nxrf, nysf, nynf,             &
    6388                                            nys_on_file, nyn_on_file,           &
    6389                                            nxl_on_file,nxr_on_file )
    6390 
    6391                CASE DEFAULT
    6392                   WRITE( message_string, * ) 'unknown variable named "',       &
    6393                                         TRIM( field_char ), '" found in',      &
    6394                                         '&data from prior run on PE ', myid
    6395                   CALL message( 'lsm_read_restart_data', 'PA0302', 1, 2, 0, 6, &
    6396                                  0 )
    6397 
    6398             END SELECT
    6399 
    6400          ENDDO
    6401 
    6402          READ ( 13 )  field_char
    6403 
    6404       ENDDO
    6405    ENDIF
    6406 
    6407  END SUBROUTINE lsm_read_restart_data
     6076           CASE ( 'lsm_end_index_h', 'lsm_end_index_v' )   
     6077                IF ( k == 1 )  THEN
     6078
     6079                   IF ( ALLOCATED( end_index_on_file ) )                       &
     6080                      DEALLOCATE( end_index_on_file )
     6081
     6082                   ALLOCATE ( end_index_on_file(nys_on_file:nyn_on_file,       &
     6083                      nxl_on_file:nxr_on_file) )
     6084
     6085                   READ ( 13 )  end_index_on_file
     6086
     6087                ENDIF
     6088           
     6089           CASE ( 't_soil_h' )
     6090           
     6091              IF ( k == 1 )  THEN
     6092                 IF ( .NOT.  ALLOCATED( t_soil_h%var_2d ) )                    &
     6093                    ALLOCATE( t_soil_h%var_2d(nzb_soil:nzt_soil+1,             &
     6094                                              1:surf_lsm_h%ns) )
     6095                 READ ( 13 )  tmp_walltype_h_2d%var_2d
     6096              ENDIF
     6097              CALL surface_restore_elements(                                   &
     6098                                         t_soil_h%var_2d,                      &
     6099                                         tmp_walltype_h_2d%var_2d,             &
     6100                                         surf_lsm_h%start_index,               &
     6101                                         start_index_on_file,                  &
     6102                                         end_index_on_file,                    &
     6103                                         nxlc, nysc,                           &
     6104                                         nxlf, nxrf, nysf, nynf,               &
     6105                                         nys_on_file, nyn_on_file,             &
     6106                                         nxl_on_file,nxr_on_file )
     6107
     6108           CASE ( 't_soil_v(0)' )
     6109           
     6110              IF ( k == 1 )  THEN
     6111                 IF ( .NOT.  ALLOCATED( t_soil_v(0)%var_2d ) )                 &
     6112                    ALLOCATE( t_soil_v(0)%var_2d(nzb_soil:nzt_soil+1,          &
     6113                                                 1:surf_lsm_v(0)%ns) )
     6114                 READ ( 13 )  tmp_walltype_v_2d(0)%var_2d
     6115              ENDIF
     6116              CALL surface_restore_elements(                                   &
     6117                                      t_soil_v(0)%var_2d,                      &
     6118                                      tmp_walltype_v_2d(0)%var_2d,             &
     6119                                      surf_lsm_v(0)%start_index,               & 
     6120                                      start_index_on_file,                     &
     6121                                      end_index_on_file,                       &
     6122                                      nxlc, nysc,                              &
     6123                                      nxlf, nxrf, nysf, nynf,                  &
     6124                                      nys_on_file, nyn_on_file,                &
     6125                                      nxl_on_file,nxr_on_file )
     6126
     6127           CASE ( 't_soil_v(1)' )
     6128           
     6129              IF ( k == 1 )  THEN
     6130                 IF ( .NOT.  ALLOCATED( t_soil_v(1)%var_2d ) )                 &
     6131                    ALLOCATE( t_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,          &
     6132                                                 1:surf_lsm_v(1)%ns) )
     6133                 READ ( 13 )  tmp_walltype_v_2d(1)%var_2d
     6134              ENDIF
     6135              CALL surface_restore_elements(                                   &
     6136                                      t_soil_v(1)%var_2d,                      &
     6137                                      tmp_walltype_v_2d(1)%var_2d,             &
     6138                                      surf_lsm_v(1)%start_index,               &   
     6139                                      start_index_on_file,                     &
     6140                                      end_index_on_file,                       &
     6141                                      nxlc, nysc,                              &
     6142                                      nxlf, nxrf, nysf, nynf,                  &
     6143                                      nys_on_file, nyn_on_file,                &
     6144                                      nxl_on_file,nxr_on_file )
     6145
     6146           CASE ( 't_soil_v(2)' )
     6147           
     6148              IF ( k == 1 )  THEN
     6149                 IF ( .NOT.  ALLOCATED( t_soil_v(2)%var_2d ) )                 &
     6150                    ALLOCATE( t_soil_v(2)%var_2d(nzb_soil:nzt_soil+1,          &
     6151                                                 1:surf_lsm_v(2)%ns) )
     6152                 READ ( 13 )  tmp_walltype_v_2d(2)%var_2d
     6153              ENDIF
     6154              CALL surface_restore_elements(                                   &
     6155                                      t_soil_v(2)%var_2d,                      &
     6156                                      tmp_walltype_v_2d(2)%var_2d,             &
     6157                                      surf_lsm_v(2)%start_index,               &
     6158                                      start_index_on_file,                     &
     6159                                      end_index_on_file,                       &
     6160                                      nxlc, nysc,                              &
     6161                                      nxlf, nxrf, nysf, nynf,                  &
     6162                                      nys_on_file, nyn_on_file,                &
     6163                                      nxl_on_file,nxr_on_file )
     6164
     6165           CASE ( 't_soil_v(3)' )
     6166           
     6167              IF ( k == 1 )  THEN
     6168                 IF ( .NOT.  ALLOCATED( t_soil_v(3)%var_2d ) )                 &
     6169                    ALLOCATE( t_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,          &
     6170                                                 1:surf_lsm_v(3)%ns) )
     6171                 READ ( 13 )  tmp_walltype_v_2d(3)%var_2d
     6172              ENDIF
     6173              CALL surface_restore_elements(                                   &
     6174                                      t_soil_v(3)%var_2d,                      &
     6175                                      tmp_walltype_v_2d(3)%var_2d,             &
     6176                                      surf_lsm_v(3)%start_index,               &
     6177                                      start_index_on_file,                     &
     6178                                      end_index_on_file,                       &
     6179                                      nxlc, nysc,                              &
     6180                                      nxlf, nxrf, nysf, nynf,                  &
     6181                                      nys_on_file, nyn_on_file,                &
     6182                                      nxl_on_file,nxr_on_file )
     6183
     6184           CASE ( 'm_soil_h' )
     6185           
     6186              IF ( k == 1 )  THEN
     6187                 IF ( .NOT.  ALLOCATED( m_soil_h%var_2d ) )                    &
     6188                    ALLOCATE( m_soil_h%var_2d(nzb_soil:nzt_soil+1,             &
     6189                                              1:surf_lsm_h%ns) )
     6190                 READ ( 13 )  tmp_walltype_h_2d2%var_2d
     6191              ENDIF
     6192              CALL surface_restore_elements(                                   &
     6193                                        m_soil_h%var_2d,                       &
     6194                                        tmp_walltype_h_2d2%var_2d,             &
     6195                                        surf_lsm_h%start_index,                & 
     6196                                        start_index_on_file,                   &
     6197                                        end_index_on_file,                     &
     6198                                        nxlc, nysc,                            &
     6199                                        nxlf, nxrf, nysf, nynf,                &
     6200                                        nys_on_file, nyn_on_file,              &
     6201                                        nxl_on_file,nxr_on_file )
     6202
     6203           CASE ( 'm_soil_v(0)' )
     6204           
     6205              IF ( k == 1 )  THEN
     6206                 IF ( .NOT.  ALLOCATED( m_soil_v(0)%var_2d ) )                 &
     6207                    ALLOCATE( m_soil_v(0)%var_2d(nzb_soil:nzt_soil+1,          &
     6208                                                 1:surf_lsm_v(0)%ns) )
     6209                 READ ( 13 )  tmp_walltype_v_2d2(0)%var_2d
     6210              ENDIF
     6211              CALL surface_restore_elements(                                   &
     6212                                     m_soil_v(0)%var_2d,                       &
     6213                                     tmp_walltype_v_2d2(0)%var_2d,             &
     6214                                     surf_lsm_v(0)%start_index,                &
     6215                                     start_index_on_file,                      &
     6216                                     end_index_on_file,                        &
     6217                                     nxlc, nysc,                               &
     6218                                     nxlf, nxrf, nysf, nynf,                   &
     6219                                     nys_on_file, nyn_on_file,                 &
     6220                                     nxl_on_file,nxr_on_file )
     6221
     6222           CASE ( 'm_soil_v(1)' )
     6223           
     6224              IF ( k == 1 )  THEN
     6225                 IF ( .NOT.  ALLOCATED( m_soil_v(1)%var_2d ) )                 &
     6226                    ALLOCATE( m_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,          &
     6227                                                 1:surf_lsm_v(1)%ns) )
     6228                 READ ( 13 )  tmp_walltype_v_2d2(1)%var_2d
     6229              ENDIF
     6230              CALL surface_restore_elements(                                   &
     6231                                     m_soil_v(1)%var_2d,                       &   
     6232                                     tmp_walltype_v_2d2(1)%var_2d,             &
     6233                                     surf_lsm_v(1)%start_index,                & 
     6234                                     start_index_on_file,                      &
     6235                                     end_index_on_file,                        &
     6236                                     nxlc, nysc,                               &
     6237                                     nxlf, nxrf, nysf, nynf,                   &
     6238                                     nys_on_file, nyn_on_file,                 &
     6239                                     nxl_on_file,nxr_on_file )
     6240
     6241
     6242           CASE ( 'm_soil_v(2)' )
     6243           
     6244              IF ( k == 1 )  THEN
     6245                 IF ( .NOT.  ALLOCATED( m_soil_v(2)%var_2d ) )                 &
     6246                    ALLOCATE( m_soil_v(2)%var_2d(nzb_soil:nzt_soil+1,          &
     6247                                                 1:surf_lsm_v(2)%ns) )
     6248                 READ ( 13 )  tmp_walltype_v_2d2(2)%var_2d
     6249              ENDIF
     6250              CALL surface_restore_elements(                                   &
     6251                                     m_soil_v(2)%var_2d,                       &
     6252                                     tmp_walltype_v_2d2(2)%var_2d,             &
     6253                                     surf_lsm_v(2)%start_index,                &   
     6254                                     start_index_on_file,                      &
     6255                                     end_index_on_file,                        &
     6256                                     nxlc, nysc,                               &
     6257                                     nxlf, nxrf, nysf, nynf,                   &
     6258                                     nys_on_file, nyn_on_file,                 &
     6259                                     nxl_on_file,nxr_on_file )
     6260
     6261
     6262           CASE ( 'm_soil_v(3)' )
     6263           
     6264              IF ( k == 1 )  THEN
     6265                 IF ( .NOT.  ALLOCATED( m_soil_v(3)%var_2d ) )                 &
     6266                    ALLOCATE( m_soil_v(1)%var_2d(nzb_soil:nzt_soil+1,          &
     6267                                                 1:surf_lsm_v(3)%ns) )
     6268                 READ ( 13 )  tmp_walltype_v_2d2(3)%var_2d
     6269              ENDIF
     6270              CALL surface_restore_elements(                                   &
     6271                                     m_soil_v(3)%var_2d,                       &
     6272                                     tmp_walltype_v_2d2(3)%var_2d,             &
     6273                                     surf_lsm_v(3)%start_index,                & 
     6274                                     start_index_on_file,                      &
     6275                                     end_index_on_file,                        &
     6276                                     nxlc, nysc,                               &
     6277                                     nxlf, nxrf, nysf, nynf,                   &
     6278                                     nys_on_file, nyn_on_file,                 &
     6279                                     nxl_on_file,nxr_on_file )
     6280
     6281
     6282           CASE ( 'm_liq_h' )
     6283           
     6284              IF ( k == 1 )  THEN
     6285                 IF ( .NOT.  ALLOCATED( m_liq_h%var_1d ) )                     &
     6286                    ALLOCATE( m_liq_h%var_1d(1:surf_lsm_h%ns) )
     6287                 READ ( 13 )  tmp_walltype_h_1d%var_1d
     6288              ENDIF
     6289              CALL surface_restore_elements(                                   &
     6290                                         m_liq_h%var_1d,                       &
     6291                                         tmp_walltype_h_1d%var_1d,             &
     6292                                         surf_lsm_h%start_index,               & 
     6293                                         start_index_on_file,                  &
     6294                                         end_index_on_file,                    &
     6295                                         nxlc, nysc,                           &
     6296                                         nxlf, nxrf, nysf, nynf,               &
     6297                                         nys_on_file, nyn_on_file,             &
     6298                                         nxl_on_file,nxr_on_file )
     6299
     6300
     6301           CASE ( 'm_liq_v(0)' )
     6302           
     6303              IF ( k == 1 )  THEN
     6304                 IF ( .NOT.  ALLOCATED( m_liq_v(0)%var_1d ) )                  &
     6305                    ALLOCATE( m_liq_v(0)%var_1d(1:surf_lsm_v(0)%ns) )
     6306                 READ ( 13 )  tmp_walltype_v_1d(0)%var_1d
     6307              ENDIF
     6308              CALL surface_restore_elements(                                   &
     6309                                      m_liq_v(0)%var_1d,                       &
     6310                                      tmp_walltype_v_1d(0)%var_1d,             &
     6311                                      surf_lsm_v(0)%start_index,               &
     6312                                      start_index_on_file,                     &
     6313                                      end_index_on_file,                       &
     6314                                      nxlc, nysc,                              &
     6315                                      nxlf, nxrf, nysf, nynf,                  &
     6316                                      nys_on_file, nyn_on_file,                &
     6317                                      nxl_on_file,nxr_on_file )
     6318
     6319
     6320           CASE ( 'm_liq_v(1)' )
     6321           
     6322              IF ( k == 1 )  THEN
     6323                 IF ( .NOT.  ALLOCATED( m_liq_v(1)%var_1d ) )                  &
     6324                    ALLOCATE( m_liq_v(1)%var_1d(1:surf_lsm_v(1)%ns) )
     6325                 READ ( 13 )  tmp_walltype_v_1d(1)%var_1d
     6326              ENDIF
     6327              CALL surface_restore_elements(                                   &
     6328                                      m_liq_v(1)%var_1d,                       &
     6329                                      tmp_walltype_v_1d(1)%var_1d,             &
     6330                                      surf_lsm_v(1)%start_index,               &
     6331                                      start_index_on_file,                     &
     6332                                      end_index_on_file,                       &
     6333                                      nxlc, nysc,                              &
     6334                                      nxlf, nxrf, nysf, nynf,                  &
     6335                                      nys_on_file, nyn_on_file,                &
     6336                                      nxl_on_file,nxr_on_file )
     6337
     6338
     6339           CASE ( 'm_liq_v(2)' )
     6340           
     6341              IF ( k == 1 )  THEN
     6342                 IF ( .NOT.  ALLOCATED( m_liq_v(2)%var_1d ) )                  &
     6343                    ALLOCATE( m_liq_v(2)%var_1d(1:surf_lsm_v(2)%ns) )
     6344                 READ ( 13 )  tmp_walltype_v_1d(2)%var_1d
     6345              ENDIF
     6346              CALL surface_restore_elements(                                   &
     6347                                      m_liq_v(2)%var_1d,                       &
     6348                                      tmp_walltype_v_1d(2)%var_1d,             &
     6349                                      surf_lsm_v(2)%start_index,               &
     6350                                      start_index_on_file,                     &
     6351                                      end_index_on_file,                       &
     6352                                      nxlc, nysc,                              &
     6353                                      nxlf, nxrf, nysf, nynf,                  &
     6354                                      nys_on_file, nyn_on_file,                &
     6355                                      nxl_on_file,nxr_on_file )
     6356
     6357           CASE ( 'm_liq_v(3)' )
     6358           
     6359              IF ( k == 1 )  THEN
     6360                 IF ( .NOT.  ALLOCATED( m_liq_v(3)%var_1d ) )                  &
     6361                    ALLOCATE( m_liq_v(3)%var_1d(1:surf_lsm_v(3)%ns) )
     6362                 READ ( 13 )  tmp_walltype_v_1d(3)%var_1d
     6363              ENDIF
     6364              CALL surface_restore_elements(                                   &
     6365                                      m_liq_v(3)%var_1d,                       &
     6366                                      tmp_walltype_v_1d(3)%var_1d,             &
     6367                                      surf_lsm_v(3)%start_index,               &
     6368                                      start_index_on_file,                     &
     6369                                      end_index_on_file,                       &
     6370                                      nxlc, nysc,                              &
     6371                                      nxlf, nxrf, nysf, nynf,                  &
     6372                                      nys_on_file, nyn_on_file,                &
     6373                                      nxl_on_file,nxr_on_file )
     6374
     6375
     6376           CASE ( 't_surface_h' )
     6377           
     6378              IF ( k == 1 )  THEN
     6379                 IF ( .NOT.  ALLOCATED( t_surface_h%var_1d ) )                 &
     6380                    ALLOCATE( t_surface_h%var_1d(1:surf_lsm_h%ns) )
     6381                 READ ( 13 )  tmp_walltype_h_1d%var_1d
     6382              ENDIF
     6383              CALL surface_restore_elements(                                   &
     6384                                         t_surface_h%var_1d,                   &
     6385                                         tmp_walltype_h_1d%var_1d,             &
     6386                                         surf_lsm_h%start_index,               &
     6387                                         start_index_on_file,                  &
     6388                                         end_index_on_file,                    &
     6389                                         nxlc, nysc,                           &
     6390                                         nxlf, nxrf, nysf, nynf,               &
     6391                                         nys_on_file, nyn_on_file,             &
     6392                                         nxl_on_file,nxr_on_file )
     6393
     6394           CASE ( 't_surface_v(0)' )
     6395           
     6396              IF ( k == 1 )  THEN
     6397                 IF ( .NOT.  ALLOCATED( t_surface_v(0)%var_1d ) )              &
     6398                    ALLOCATE( t_surface_v(0)%var_1d(1:surf_lsm_v(0)%ns) )
     6399                 READ ( 13 )  tmp_walltype_v_1d(0)%var_1d
     6400              ENDIF
     6401              CALL surface_restore_elements(                                   &
     6402                                      t_surface_v(0)%var_1d,                   &
     6403                                      tmp_walltype_v_1d(0)%var_1d,             &
     6404                                      surf_lsm_v(0)%start_index,               &
     6405                                      start_index_on_file,                     &
     6406                                      end_index_on_file,                       &
     6407                                      nxlc, nysc,                              &
     6408                                      nxlf, nxrf, nysf, nynf,                  &
     6409                                      nys_on_file, nyn_on_file,                &
     6410                                      nxl_on_file,nxr_on_file )
     6411
     6412           CASE ( 't_surface_v(1)' )
     6413           
     6414              IF ( k == 1 )  THEN
     6415                 IF ( .NOT.  ALLOCATED( t_surface_v(1)%var_1d ) )              &
     6416                    ALLOCATE( t_surface_v(1)%var_1d(1:surf_lsm_v(1)%ns) )
     6417                 READ ( 13 )  tmp_walltype_v_1d(1)%var_1d
     6418              ENDIF
     6419              CALL surface_restore_elements(                                   &
     6420                                      t_surface_v(1)%var_1d,                   &
     6421                                      tmp_walltype_v_1d(1)%var_1d,             &
     6422                                      surf_lsm_v(1)%start_index,               &
     6423                                      start_index_on_file,                     &
     6424                                      end_index_on_file,                       &
     6425                                      nxlc, nysc,                              &
     6426                                      nxlf, nxrf, nysf, nynf,                  &
     6427                                      nys_on_file, nyn_on_file,                &
     6428                                      nxl_on_file,nxr_on_file )
     6429
     6430           CASE ( 't_surface_v(2)' )
     6431           
     6432              IF ( k == 1 )  THEN
     6433                 IF ( .NOT.  ALLOCATED( t_surface_v(2)%var_1d ) )              &
     6434                    ALLOCATE( t_surface_v(2)%var_1d(1:surf_lsm_v(2)%ns) )
     6435                 READ ( 13 )  tmp_walltype_v_1d(2)%var_1d
     6436              ENDIF
     6437              CALL surface_restore_elements(                                   &
     6438                                      t_surface_v(2)%var_1d,                   &
     6439                                      tmp_walltype_v_1d(2)%var_1d,             &
     6440                                      surf_lsm_v(2)%start_index,               &
     6441                                      start_index_on_file,                     &
     6442                                      end_index_on_file,                       &
     6443                                      nxlc, nysc,                              &
     6444                                      nxlf, nxrf, nysf, nynf,                  &
     6445                                      nys_on_file, nyn_on_file,                &
     6446                                      nxl_on_file,nxr_on_file )
     6447
     6448           CASE ( 't_surface_v(3)' )
     6449           
     6450              IF ( k == 1 )  THEN
     6451                 IF ( .NOT.  ALLOCATED( t_surface_v(3)%var_1d ) )              &
     6452                    ALLOCATE( t_surface_v(3)%var_1d(1:surf_lsm_v(3)%ns) )
     6453                 READ ( 13 )  tmp_walltype_v_1d(3)%var_1d
     6454              ENDIF
     6455              CALL surface_restore_elements(                                   &
     6456                                      t_surface_v(3)%var_1d,                   &
     6457                                      tmp_walltype_v_1d(3)%var_1d,             &
     6458                                      surf_lsm_v(3)%start_index,               &   
     6459                                      start_index_on_file,                     &
     6460                                      end_index_on_file,                       &
     6461                                      nxlc, nysc,                              &
     6462                                      nxlf, nxrf, nysf, nynf,                  &
     6463                                      nys_on_file, nyn_on_file,                &
     6464                                      nxl_on_file,nxr_on_file )
     6465
     6466          CASE DEFAULT
     6467
     6468                found = .FALSE.
     6469
     6470       END SELECT
     6471
     6472
     6473 END SUBROUTINE lsm_rrd_local
    64086474
    64096475!------------------------------------------------------------------------------!
Note: See TracChangeset for help on using the changeset viewer.