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

Reading/Writing? data in case of restart runs revised

File:
1 edited

Legend:

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

    r2805 r2894  
    2626! -----------------
    2727! $Id$
     28! Calculations of the index range of the subdomain on file which overlaps with
     29! the current subdomain are already done in read_restart_data_mod,
     30! usm_read/write_restart_data have been renamed to usm_r/wrd_local, variable
     31! named found has been introduced for checking if restart data was found,
     32! reading of restart strings has been moved completely to
     33! read_restart_data_mod, usm_rrd_local is already inside the overlap loop
     34! programmed in read_restart_data_mod, SAVE attribute added where necessary,
     35! deallocation and allocation of some arrays have been changed to take care of
     36! different restart files that can be opened (index i), the marker *** end usm
     37! *** is not necessary anymore, strings and their respective lengths are
     38! written out and read now in case of restart runs to get rid of prescribed
     39! character lengths
     40!
     41! 2805 2018-02-14 17:00:09Z suehring
    2842! Initialization of resistances.
    2943!
     
    711725    END INTERFACE usm_temperature_near_surface
    712726
    713     INTERFACE usm_read_restart_data
    714        MODULE PROCEDURE usm_read_restart_data
    715     END INTERFACE usm_read_restart_data
     727    INTERFACE usm_rrd_local
     728       MODULE PROCEDURE usm_rrd_local
     729    END INTERFACE usm_rrd_local
    716730
    717731    INTERFACE usm_surface_energy_balance
     
    723737    END INTERFACE usm_swap_timelevel
    724738       
    725     INTERFACE usm_write_restart_data
    726        MODULE PROCEDURE usm_write_restart_data
    727     END INTERFACE usm_write_restart_data
     739    INTERFACE usm_wrd_local
     740       MODULE PROCEDURE usm_wrd_local
     741    END INTERFACE usm_wrd_local
    728742
    729743    INTERFACE usm_allocate_surface
     
    742756!-- Public functions
    743757    PUBLIC usm_boundary_condition, usm_check_parameters, usm_init_urban_surface,&
    744            usm_read_restart_data,                                               &
     758           usm_rrd_local,                                                       &
    745759           usm_surface_energy_balance, usm_material_heat_model,                 &
    746760           usm_swap_timelevel, usm_check_data_output, usm_average_3d_data,      &
    747761           usm_data_output_3d, usm_define_netcdf_grid, usm_parin,               &
    748            usm_write_restart_data, usm_allocate_surface
     762           usm_wrd_local, usm_allocate_surface
    749763
    750764!-- Public parameters, constants and initial values
     
    51965210! Description:
    51975211! ------------
    5198 !> Soubroutine reads t_surf and t_wall data from restart files
     5212!> Soubroutine reads t_surf and t_wall data from restart file(s)
    51995213!kanani: Renamed this routine according to corresponging routines in PALM
    5200 !kanani: Modified the routine to match read_var_list, from where usm_read_restart_data
     5214!kanani: Modified the routine to match rrd_global, from where usm_rrd_local
    52015215!        shall be called in the future. This part has not been tested yet. (see virtual_flight_mod)
    52025216!        Also, I had some trouble with the allocation of t_surf, since this is a pointer.
    52035217!        So, I added some directives here.
    52045218!------------------------------------------------------------------------------!
    5205     SUBROUTINE usm_read_restart_data( ii,                                      &
    5206                                       nxlfa, nxl_on_file, nxrfa, nxr_on_file,  &
    5207                                       nynfa, nyn_on_file, nysfa, nys_on_file,  &
    5208                                       offset_xa, offset_ya, overlap_count )
    5209 
    5210 
    5211        USE pegrid,                                                             &
    5212            ONLY: numprocs_previous_run
     5219    SUBROUTINE usm_rrd_local( i, k, nxlf, nxlc, nxl_on_file, nxrf, nxrc,       &
     5220                              nxr_on_file, nynf, nync, nyn_on_file, nysf, nysc,&
     5221                              nys_on_file, found )
     5222
     5223
     5224       USE control_parameters,                                                 &
     5225           ONLY: length, restart_string
    52135226           
    52145227       IMPLICIT NONE
    52155228
    52165229       CHARACTER (LEN=1)  ::  dum              !< dummy to create correct string for reading input variable
    5217        CHARACTER (LEN=30) ::  field_chr        !< input variable
    52185230
    52195231       INTEGER(iwp)       ::  l                !< index variable for surface type
    5220        INTEGER(iwp)       ::  ii               !< running index over input files
    5221        INTEGER(iwp)       ::  kk               !< running index over previous input files covering current local domain
     5232       INTEGER(iwp)       ::  i                !< running index over input files
     5233       INTEGER(iwp)       ::  k                !< running index over previous input files covering current local domain
    52225234       INTEGER(iwp)       ::  ns_h_on_file_usm !< number of horizontal surface elements (urban type) on file
    52235235       INTEGER(iwp)       ::  nxlc             !< index of left boundary on current subdomain
     
    52265238       INTEGER(iwp)       ::  nxrc             !< index of right boundary on current subdomain
    52275239       INTEGER(iwp)       ::  nxrf             !< index of right boundary on former subdomain
    5228        INTEGER(iwp)       ::  nxr_on_file      !< index of right boundary on former local domain  
     5240       INTEGER(iwp)       ::  nxr_on_file      !< index of right boundary on former local domain
    52295241       INTEGER(iwp)       ::  nync             !< index of north boundary on current subdomain
    52305242       INTEGER(iwp)       ::  nynf             !< index of north boundary on former subdomain
    5231        INTEGER(iwp)       ::  nyn_on_file      !< index of norht boundary on former local domain
     5243       INTEGER(iwp)       ::  nyn_on_file      !< index of north boundary on former local domain
    52325244       INTEGER(iwp)       ::  nysc             !< index of south boundary on current subdomain
    52335245       INTEGER(iwp)       ::  nysf             !< index of south boundary on former subdomain
    5234        INTEGER(iwp)       ::  nys_on_file      !< index of south boundary on former local domain 
    5235        INTEGER(iwp)       ::  overlap_count    !< number of overlaps
     5246       INTEGER(iwp)       ::  nys_on_file      !< index of south boundary on former local domain
    52365247       
    52375248       INTEGER(iwp)       ::  ns_v_on_file_usm(0:3) !< number of vertical surface elements (urban type) on file
     5249       
     5250       INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  start_index_on_file
     5251       INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  end_index_on_file
     5252
     5253       LOGICAL, INTENT(OUT)  ::  found
     5254       
     5255       REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE   ::  tmp_surf_h, tmp_surf_window_h, tmp_surf_green_h
     5256       REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_wall_h, tmp_window_h, tmp_green_h
     5257       
     5258       TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_v, tmp_surf_window_v, tmp_surf_green_v
     5259       TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_wall_v, tmp_window_v, tmp_green_v
     5260
     5261
     5262       found = .TRUE.
     5263
     5264
     5265          SELECT CASE ( restart_string(1:length) )
     5266
     5267             CASE ( 'ns_h_on_file_usm')
     5268                IF ( k == 1 )  THEN
     5269                   READ ( 13 ) ns_h_on_file_usm
     5270               
     5271                   IF ( ALLOCATED( tmp_surf_h ) ) DEALLOCATE( tmp_surf_h )
     5272                   IF ( ALLOCATED( tmp_wall_h ) ) DEALLOCATE( tmp_wall_h )
     5273                   IF ( ALLOCATED( tmp_surf_window_h ) )                       &
     5274                      DEALLOCATE( tmp_surf_window_h )
     5275                   IF ( ALLOCATED( tmp_window_h) ) DEALLOCATE( tmp_window_h )
     5276                   IF ( ALLOCATED( tmp_surf_green_h) )                         &
     5277                      DEALLOCATE( tmp_surf_green_h )
     5278                   IF ( ALLOCATED( tmp_green_h) ) DEALLOCATE( tmp_green_h )
    52385279 
    5239        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa       !<
    5240        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa       !<
    5241        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa       !<
    5242        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa       !<
    5243        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa   !<
    5244        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya   !<
     5280!
     5281!--                Allocate temporary arrays for reading data on file. Note,
     5282!--                the size of allocated surface elements do not necessarily
     5283!--                need  to match the size of present surface elements on
     5284!--                current processor, as the number of processors between
     5285!--                restarts can change.
     5286                   ALLOCATE( tmp_surf_h(1:ns_h_on_file_usm) )
     5287                   ALLOCATE( tmp_wall_h(nzb_wall:nzt_wall+1,                   &
     5288                                        1:ns_h_on_file_usm) )
     5289                   ALLOCATE( tmp_surf_window_h(1:ns_h_on_file_usm) )
     5290                   ALLOCATE( tmp_window_h(nzb_wall:nzt_wall+1,                 &
     5291                                          1:ns_h_on_file_usm) )
     5292                   ALLOCATE( tmp_surf_green_h(1:ns_h_on_file_usm) )
     5293                   ALLOCATE( tmp_green_h(nzb_wall:nzt_wall+1,                  &
     5294                                         1:ns_h_on_file_usm) )
     5295
     5296                ENDIF
     5297
     5298             CASE ( 'ns_v_on_file_usm')
     5299                IF ( k == 1 )  THEN
     5300                   READ ( 13 ) ns_v_on_file_usm
     5301
     5302                   DO  l = 0, 3
     5303                      IF ( ALLOCATED( tmp_surf_v(l)%t ) )                      &
     5304                         DEALLOCATE( tmp_surf_v(l)%t )
     5305                      IF ( ALLOCATED( tmp_wall_v(l)%t ) )                      &
     5306                         DEALLOCATE( tmp_wall_v(l)%t )
     5307                      IF ( ALLOCATED( tmp_surf_window_v(l)%t ) )               &
     5308                         DEALLOCATE( tmp_surf_window_v(l)%t )
     5309                      IF ( ALLOCATED( tmp_window_v(l)%t ) )                    &
     5310                         DEALLOCATE( tmp_window_v(l)%t )
     5311                      IF ( ALLOCATED( tmp_surf_green_v(l)%t ) )                &
     5312                         DEALLOCATE( tmp_surf_green_v(l)%t )
     5313                      IF ( ALLOCATED( tmp_green_v(l)%t ) )                     &
     5314                         DEALLOCATE( tmp_green_v(l)%t )
     5315                   ENDDO
     5316
     5317!
     5318!--                Allocate temporary arrays for reading data on file. Note,
     5319!--                the size of allocated surface elements do not necessarily
     5320!--                need to match the size of present surface elements on
     5321!--                current processor, as the number of processors between
     5322!--                restarts can change.
     5323                   DO  l = 0, 3
     5324                      ALLOCATE( tmp_surf_v(l)%t(1:ns_v_on_file_usm(l)) )
     5325                      ALLOCATE( tmp_wall_v(l)%t(nzb_wall:nzt_wall+1,           &
     5326                                                1:ns_v_on_file_usm(l) ) )
     5327                      ALLOCATE( tmp_surf_window_v(l)%t(1:ns_v_on_file_usm(l)) )
     5328                      ALLOCATE( tmp_window_v(l)%t(nzb_wall:nzt_wall+1,         &
     5329                                                  1:ns_v_on_file_usm(l) ) )
     5330                      ALLOCATE( tmp_surf_green_v(l)%t(1:ns_v_on_file_usm(l)) )
     5331                      ALLOCATE( tmp_green_v(l)%t(nzb_wall:nzt_wall+1,          &
     5332                                                 1:ns_v_on_file_usm(l) ) )
     5333                   ENDDO
     5334
     5335                ENDIF   
     5336         
     5337             CASE ( 'usm_start_index_h', 'usm_start_index_v'  )   
     5338                IF ( k == 1 )  THEN
     5339
     5340                   IF ( ALLOCATED( start_index_on_file ) )                     &
     5341                      DEALLOCATE( start_index_on_file )
     5342
     5343                   ALLOCATE ( start_index_on_file(nys_on_file:nyn_on_file,     &
     5344                                                  nxl_on_file:nxr_on_file) )
     5345
     5346                   READ ( 13 )  start_index_on_file
     5347
     5348                ENDIF
     5349               
     5350             CASE ( 'usm_end_index_h', 'usm_end_index_v' )   
     5351                IF ( k == 1 )  THEN
     5352
     5353                   IF ( ALLOCATED( end_index_on_file ) )                       &
     5354                      DEALLOCATE( end_index_on_file )
     5355
     5356                   ALLOCATE ( end_index_on_file(nys_on_file:nyn_on_file,       &
     5357                                                nxl_on_file:nxr_on_file) )
     5358
     5359                   READ ( 13 )  end_index_on_file
     5360
     5361                ENDIF
     5362         
     5363             CASE ( 't_surf_h' )
     5364#if defined( __nopointer )                   
     5365                IF ( k == 1 )  THEN
     5366                   IF ( .NOT.  ALLOCATED( t_surf_h ) )                         &
     5367                      ALLOCATE( t_surf_h(1:surf_usm_h%ns) )
     5368                   READ ( 13 )  tmp_surf_h
     5369                ENDIF
     5370                CALL surface_restore_elements(                                 &
     5371                                        t_surf_h, tmp_surf_h,                  &
     5372                                        surf_usm_h%start_index,                & 
     5373                                        start_index_on_file,                   &
     5374                                        end_index_on_file,                     &
     5375                                        nxlc, nysc,                            &
     5376                                        nxlf, nxrf, nysf, nynf,                &
     5377                                        nys_on_file, nyn_on_file,              &
     5378                                        nxl_on_file,nxr_on_file )
     5379#else                 
     5380                IF ( k == 1 )  THEN
     5381                   IF ( .NOT.  ALLOCATED( t_surf_h_1 ) )                       &
     5382                      ALLOCATE( t_surf_h_1(1:surf_usm_h%ns) )
     5383                   READ ( 13 )  tmp_surf_h
     5384                ENDIF             
     5385                CALL surface_restore_elements(                                 &
     5386                                        t_surf_h_1, tmp_surf_h,                &
     5387                                        surf_usm_h%start_index,                &
     5388                                        start_index_on_file,                   &
     5389                                        end_index_on_file,                     &
     5390                                        nxlc, nysc,                            &
     5391                                        nxlf, nxrf, nysf, nynf,                &
     5392                                        nys_on_file, nyn_on_file,              &
     5393                                        nxl_on_file,nxr_on_file )
     5394#endif
     5395
     5396             CASE ( 't_surf_v(0)' )
     5397#if defined( __nopointer )           
     5398                IF ( k == 1 )  THEN
     5399                   IF ( .NOT.  ALLOCATED( t_surf_v(0)%t ) )                    &
     5400                      ALLOCATE( t_surf_v(0)%t(1:surf_usm_v(0)%ns) )
     5401                   READ ( 13 )  tmp_surf_v(0)%t
     5402                ENDIF
     5403                CALL surface_restore_elements(                                 &
     5404                                        t_surf_v(0)%t, tmp_surf_v(0)%t,        &
     5405                                        surf_usm_v(0)%start_index,             &
     5406                                        start_index_on_file,                   &
     5407                                        end_index_on_file,                     &
     5408                                        nxlc, nysc,                            &
     5409                                        nxlf, nxrf, nysf, nynf,                &
     5410                                        nys_on_file, nyn_on_file,              &
     5411                                        nxl_on_file,nxr_on_file )
     5412#else                     
     5413                IF ( k == 1 )  THEN
     5414                   IF ( .NOT.  ALLOCATED( t_surf_v_1(0)%t ) )                  &
     5415                      ALLOCATE( t_surf_v_1(0)%t(1:surf_usm_v(0)%ns) )
     5416                   READ ( 13 )  tmp_surf_v(0)%t
     5417                ENDIF
     5418                CALL surface_restore_elements(                                 &
     5419                                        t_surf_v_1(0)%t, tmp_surf_v(0)%t,      &
     5420                                        surf_usm_v(0)%start_index,             &
     5421                                        start_index_on_file,                   &
     5422                                        end_index_on_file,                     &
     5423                                        nxlc, nysc,                            &
     5424                                        nxlf, nxrf, nysf, nynf,                &
     5425                                        nys_on_file, nyn_on_file,              &
     5426                                        nxl_on_file,nxr_on_file )
     5427#endif
     5428                     
     5429             CASE ( 't_surf_v(1)' )
     5430#if defined( __nopointer )       
     5431                IF ( k == 1 )  THEN
     5432                   IF ( .NOT.  ALLOCATED( t_surf_v(1)%t ) )                    &
     5433                      ALLOCATE( t_surf_v(1)%t(1:surf_usm_v(1)%ns) )
     5434                   READ ( 13 )  tmp_surf_v(1)%t
     5435                ENDIF
     5436                CALL surface_restore_elements(                                 &
     5437                                        t_surf_v(1)%t, tmp_surf_v(1)%t,        &
     5438                                        surf_usm_v(1)%start_index,             &
     5439                                        start_index_on_file,                   &
     5440                                        end_index_on_file,                     &
     5441                                        nxlc, nysc,                            &
     5442                                        nxlf, nxrf, nysf, nynf,                &
     5443                                        nys_on_file, nyn_on_file,              &
     5444                                        nxl_on_file,nxr_on_file )                 
     5445#else                     
     5446                IF ( k == 1 )  THEN
     5447                   IF ( .NOT.  ALLOCATED( t_surf_v_1(1)%t ) )                  &
     5448                      ALLOCATE( t_surf_v_1(1)%t(1:surf_usm_v(1)%ns) )
     5449                   READ ( 13 )  tmp_surf_v(1)%t
     5450                ENDIF
     5451                CALL surface_restore_elements(                                 &
     5452                                        t_surf_v_1(1)%t, tmp_surf_v(1)%t,      &
     5453                                        surf_usm_v(1)%start_index,             &
     5454                                        start_index_on_file,                   &
     5455                                        end_index_on_file,                     &
     5456                                        nxlc, nysc,                            &
     5457                                        nxlf, nxrf, nysf, nynf,                &
     5458                                        nys_on_file, nyn_on_file,              &
     5459                                        nxl_on_file,nxr_on_file )
     5460#endif
     5461
     5462             CASE ( 't_surf_v(2)' )
     5463#if defined( __nopointer )         
     5464                IF ( k == 1 )  THEN
     5465                   IF ( .NOT.  ALLOCATED( t_surf_v(2)%t ) )                    &
     5466                      ALLOCATE( t_surf_v(2)%t(1:surf_usm_v(2)%ns) )
     5467                   READ ( 13 )  tmp_surf_v(2)%t
     5468                ENDIF
     5469                CALL surface_restore_elements(                                 &
     5470                                        t_surf_v(2)%t, tmp_surf_v(2)%t,        &
     5471                                        surf_usm_v(2)%start_index,             &
     5472                                        start_index_on_file,                   &
     5473                                        end_index_on_file,                     &
     5474                                        nxlc, nysc,                            &
     5475                                        nxlf, nxrf, nysf, nynf,                &
     5476                                        nys_on_file, nyn_on_file,              &
     5477                                        nxl_on_file,nxr_on_file )
     5478#else                     
     5479                IF ( k == 1 )  THEN
     5480                   IF ( .NOT.  ALLOCATED( t_surf_v_1(2)%t ) )                  &
     5481                      ALLOCATE( t_surf_v_1(2)%t(1:surf_usm_v(2)%ns) )
     5482                   READ ( 13 )  tmp_surf_v(2)%t
     5483                ENDIF
     5484                CALL surface_restore_elements(                                 &
     5485                                        t_surf_v_1(2)%t, tmp_surf_v(2)%t,      &
     5486                                        surf_usm_v(2)%start_index,             & 
     5487                                        start_index_on_file,                   &
     5488                                        end_index_on_file,                     &
     5489                                        nxlc, nysc,                            &
     5490                                        nxlf, nxrf, nysf, nynf,                &
     5491                                        nys_on_file, nyn_on_file,              &
     5492                                        nxl_on_file,nxr_on_file )
     5493#endif
     5494                     
     5495             CASE ( 't_surf_v(3)' )
     5496#if defined( __nopointer )   
     5497                IF ( k == 1 )  THEN
     5498                   IF ( .NOT.  ALLOCATED( t_surf_v(3)%t ) )                    &
     5499                      ALLOCATE( t_surf_v(3)%t(1:surf_usm_v(3)%ns) )
     5500                   READ ( 13 )  tmp_surf_v(3)%t
     5501                ENDIF
     5502                CALL surface_restore_elements(                                 &
     5503                                        t_surf_v(3)%t, tmp_surf_v(3)%t,        &
     5504                                        surf_usm_v(3)%start_index,             &
     5505                                        start_index_on_file,                   &
     5506                                        end_index_on_file,                     &
     5507                                        nxlc, nysc,                            &
     5508                                        nxlf, nxrf, nysf, nynf,                &
     5509                                        nys_on_file, nyn_on_file,              &
     5510                                        nxl_on_file,nxr_on_file )
     5511#else                     
     5512                IF ( k == 1 )  THEN
     5513                   IF ( .NOT.  ALLOCATED( t_surf_v_1(3)%t ) )                  &
     5514                      ALLOCATE( t_surf_v_1(3)%t(1:surf_usm_v(3)%ns) )
     5515                   READ ( 13 )  tmp_surf_v(3)%t
     5516                ENDIF
     5517                CALL surface_restore_elements(                                 &
     5518                                        t_surf_v_1(3)%t, tmp_surf_v(3)%t,      &
     5519                                        surf_usm_v(3)%start_index,             &
     5520                                        start_index_on_file,                   &
     5521                                        end_index_on_file,                     &
     5522                                        nxlc, nysc,                            &
     5523                                        nxlf, nxrf, nysf, nynf,                &
     5524                                        nys_on_file, nyn_on_file,              &
     5525                                        nxl_on_file,nxr_on_file )
     5526#endif
     5527             CASE ( 't_surf_green_h' )
     5528#if defined( __nopointer )                   
     5529                IF ( k == 1 )  THEN
     5530                   IF ( .NOT.  ALLOCATED( t_surf_green_h ) )                   &
     5531                      ALLOCATE( t_surf_green_h(1:surf_usm_h%ns) )
     5532                   READ ( 13 )  tmp_surf_green_h
     5533                ENDIF
     5534                CALL surface_restore_elements(                                 &
     5535                                        t_surf_green_h, tmp_surf_green_h,      &
     5536                                        surf_usm_h%start_index,                &
     5537                                        start_index_on_file,                   &
     5538                                        end_index_on_file,                     &
     5539                                        nxlc, nysc,                            &
     5540                                        nxlf, nxrf, nysf, nynf,                &
     5541                                        nys_on_file, nyn_on_file,              &
     5542                                        nxl_on_file,nxr_on_file )
     5543#else                     
     5544                IF ( k == 1 )  THEN
     5545                   IF ( .NOT.  ALLOCATED( t_surf_green_h_1 ) )                 &
     5546                      ALLOCATE( t_surf_green_h_1(1:surf_usm_h%ns) )
     5547                   READ ( 13 )  tmp_surf_green_h
     5548                ENDIF
     5549                CALL surface_restore_elements(                                 &
     5550                                        t_surf_green_h_1, tmp_surf_green_h,    &
     5551                                        surf_usm_h%start_index,                & 
     5552                                        start_index_on_file,                   &
     5553                                        end_index_on_file,                     &
     5554                                        nxlc, nysc,                            &
     5555                                        nxlf, nxrf, nysf, nynf,                &
     5556                                        nys_on_file, nyn_on_file,              &
     5557                                        nxl_on_file,nxr_on_file )
     5558#endif
     5559
     5560             CASE ( 't_surf_green_v(0)' )
     5561#if defined( __nopointer )           
     5562                IF ( k == 1 )  THEN
     5563                   IF ( .NOT.  ALLOCATED( t_surf_green_v(0)%t ) )              &
     5564                      ALLOCATE( t_surf_green_v(0)%t(1:surf_usm_v(0)%ns) )
     5565                   READ ( 13 )  tmp_surf_green_v(0)%t
     5566                ENDIF
     5567                CALL surface_restore_elements(                                 &
     5568                                        t_surf_green_v(0)%t,                   &
     5569                                        tmp_surf_green_v(0)%t,                 &
     5570                                        surf_usm_v(0)%start_index,             &
     5571                                        start_index_on_file,                   &
     5572                                        end_index_on_file,                     &
     5573                                        nxlc, nysc,                            &
     5574                                        nxlf, nxrf, nysf, nynf,                &
     5575                                        nys_on_file, nyn_on_file,              &
     5576                                        nxl_on_file,nxr_on_file )
     5577#else                     
     5578                IF ( k == 1 )  THEN
     5579                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(0)%t ) )            &
     5580                      ALLOCATE( t_surf_green_v_1(0)%t(1:surf_usm_v(0)%ns) )
     5581                   READ ( 13 )  tmp_surf_green_v(0)%t
     5582                ENDIF
     5583                CALL surface_restore_elements(                                 &
     5584                                        t_surf_green_v_1(0)%t,                 &
     5585                                        tmp_surf_green_v(0)%t,                 &
     5586                                        surf_usm_v(0)%start_index,             &
     5587                                        start_index_on_file,                   &
     5588                                        end_index_on_file,                     &
     5589                                        nxlc, nysc,                            &
     5590                                        nxlf, nxrf, nysf, nynf,                &
     5591                                        nys_on_file, nyn_on_file,              &
     5592                                        nxl_on_file,nxr_on_file )
     5593#endif
     5594                   
     5595             CASE ( 't_surf_green_v(1)' )
     5596#if defined( __nopointer )       
     5597                IF ( k == 1 )  THEN
     5598                   IF ( .NOT.  ALLOCATED( t_surf_green_v(1)%t ) )              &
     5599                      ALLOCATE( t_surf_green_v(1)%t(1:surf_usm_v(1)%ns) )
     5600                   READ ( 13 )  tmp_surf_green_v(1)%t
     5601                ENDIF
     5602                CALL surface_restore_elements(                                 &
     5603                                        t_surf_green_v(1)%t,                   &
     5604                                        tmp_surf_green_v(1)%t,                 &
     5605                                        surf_usm_v(1)%start_index,             &
     5606                                        start_index_on_file,                   &
     5607                                        end_index_on_file,                     &
     5608                                        nxlc, nysc,                            &
     5609                                        nxlf, nxrf, nysf, nynf,                &
     5610                                        nys_on_file, nyn_on_file,              &
     5611                                        nxl_on_file,nxr_on_file )                 
     5612#else                     
     5613                IF ( k == 1 )  THEN
     5614                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(1)%t ) )            &
     5615                      ALLOCATE( t_surf_green_v_1(1)%t(1:surf_usm_v(1)%ns) )
     5616                   READ ( 13 )  tmp_surf_green_v(1)%t
     5617                ENDIF
     5618                CALL surface_restore_elements(                                 &
     5619                                        t_surf_green_v_1(1)%t,                 &
     5620                                        tmp_surf_green_v(1)%t,                 &
     5621                                        surf_usm_v(1)%start_index,             & 
     5622                                        start_index_on_file,                   &
     5623                                        end_index_on_file,                     &
     5624                                        nxlc, nysc,                            &
     5625                                        nxlf, nxrf, nysf, nynf,                &
     5626                                        nys_on_file, nyn_on_file,              &
     5627                                        nxl_on_file,nxr_on_file )
     5628#endif
     5629
     5630             CASE ( 't_surf_green_v(2)' )
     5631#if defined( __nopointer )         
     5632                IF ( k == 1 )  THEN
     5633                   IF ( .NOT.  ALLOCATED( t_surf_green_v(2)%t ) )              &
     5634                      ALLOCATE( t_surf_green_v(2)%t(1:surf_usm_v(2)%ns) )
     5635                   READ ( 13 )  tmp_surf_green_v(2)%t
     5636                ENDIF
     5637                CALL surface_restore_elements(                                 &
     5638                                        t_surf_green_v(2)%t,                   &
     5639                                        tmp_surf_green_v(2)%t,                 &
     5640                                        surf_usm_v(2)%start_index,             &
     5641                                        start_index_on_file,                   &
     5642                                        end_index_on_file,                     &
     5643                                        nxlc, nysc,                            &
     5644                                        nxlf, nxrf, nysf, nynf,                &
     5645                                        nys_on_file, nyn_on_file,              &
     5646                                        nxl_on_file,nxr_on_file )
     5647#else                     
     5648                IF ( k == 1 )  THEN
     5649                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(2)%t ) )            &
     5650                      ALLOCATE( t_surf_green_v_1(2)%t(1:surf_usm_v(2)%ns) )
     5651                   READ ( 13 )  tmp_surf_green_v(2)%t
     5652                ENDIF
     5653                CALL surface_restore_elements(                                 &
     5654                                        t_surf_green_v_1(2)%t,                 &
     5655                                        tmp_surf_green_v(2)%t,                 &
     5656                                        surf_usm_v(2)%start_index,             & 
     5657                                        start_index_on_file,                   &
     5658                                        end_index_on_file,                     &
     5659                                        nxlc, nysc,                            &
     5660                                        nxlf, nxrf, nysf, nynf,                &
     5661                                        nys_on_file, nyn_on_file,              &
     5662                                        nxl_on_file,nxr_on_file )
     5663#endif
     5664                   
     5665             CASE ( 't_surf_green_v(3)' )
     5666#if defined( __nopointer )   
     5667                IF ( k == 1 )  THEN
     5668                   IF ( .NOT.  ALLOCATED( t_surf_green_v(3)%t ) )              &
     5669                      ALLOCATE( t_surf_green_v(3)%t(1:surf_usm_v(3)%ns) )
     5670                   READ ( 13 )  tmp_surf_green_v(3)%t
     5671                ENDIF
     5672                CALL surface_restore_elements(                                 &
     5673                                        t_surf_green_v(3)%t,                   &
     5674                                        tmp_surf_green_v(3)%t,                 &
     5675                                        surf_usm_v(3)%start_index,             &
     5676                                        start_index_on_file,                   &
     5677                                        end_index_on_file,                     &
     5678                                        nxlc, nysc,                            &
     5679                                        nxlf, nxrf, nysf, nynf,                &
     5680                                        nys_on_file, nyn_on_file,              &
     5681                                        nxl_on_file,nxr_on_file )
     5682#else                     
     5683                IF ( k == 1 )  THEN
     5684                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(3)%t ) )            &
     5685                      ALLOCATE( t_surf_green_v_1(3)%t(1:surf_usm_v(3)%ns) )
     5686                   READ ( 13 )  tmp_surf_green_v(3)%t
     5687                ENDIF
     5688                CALL surface_restore_elements(                                 &
     5689                                        t_surf_green_v_1(3)%t,                 &
     5690                                        tmp_surf_green_v(3)%t,                 &
     5691                                        surf_usm_v(3)%start_index,             &
     5692                                        start_index_on_file,                   &
     5693                                        end_index_on_file,                     &
     5694                                        nxlc, nysc,                            &
     5695                                        nxlf, nxrf, nysf, nynf,                &
     5696                                        nys_on_file, nyn_on_file,              &
     5697                                        nxl_on_file,nxr_on_file )
     5698#endif
     5699             CASE ( 't_surf_window_h' )
     5700#if defined( __nopointer )                   
     5701                IF ( k == 1 )  THEN
     5702                   IF ( .NOT.  ALLOCATED( t_surf_window_h ) )                  &
     5703                      ALLOCATE( t_surf_window_h(1:surf_usm_h%ns) )
     5704                   READ ( 13 )  tmp_surf_window_h
     5705                ENDIF
     5706                CALL surface_restore_elements(                                 &
     5707                                        t_surf_window_h, tmp_surf_window_h,    &
     5708                                        surf_usm_h%start_index,                &
     5709                                        start_index_on_file,                   &
     5710                                        end_index_on_file,                     &
     5711                                        nxlc, nysc,                            &
     5712                                        nxlf, nxrf, nysf, nynf,                &
     5713                                        nys_on_file, nyn_on_file,              &
     5714                                        nxl_on_file,nxr_on_file )
     5715#else                     
     5716                IF ( k == 1 )  THEN
     5717                   IF ( .NOT.  ALLOCATED( t_surf_window_h_1 ) )                &
     5718                      ALLOCATE( t_surf_window_h_1(1:surf_usm_h%ns) )
     5719                   READ ( 13 )  tmp_surf_window_h
     5720                ENDIF
     5721                CALL surface_restore_elements(                                 &
     5722                                        t_surf_window_h_1,                     &
     5723                                        tmp_surf_window_h,                     &
     5724                                        surf_usm_h%start_index,                &
     5725                                        start_index_on_file,                   &
     5726                                        end_index_on_file,                     &
     5727                                        nxlc, nysc,                            &
     5728                                        nxlf, nxrf, nysf, nynf,                &
     5729                                        nys_on_file, nyn_on_file,              &
     5730                                        nxl_on_file,nxr_on_file )
     5731#endif
     5732
     5733             CASE ( 't_surf_window_v(0)' )
     5734#if defined( __nopointer )           
     5735                IF ( k == 1 )  THEN
     5736                   IF ( .NOT.  ALLOCATED( t_surf_window_v(0)%t ) )             &
     5737                      ALLOCATE( t_surf_window_v(0)%t(1:surf_usm_v(0)%ns) )
     5738                   READ ( 13 )  tmp_surf_window_v(0)%t
     5739                ENDIF
     5740                CALL surface_restore_elements(                                 &
     5741                                        t_surf_window_v(0)%t,                  &
     5742                                        tmp_surf_window_v(0)%t,                &
     5743                                        surf_usm_v(0)%start_index,             &
     5744                                        start_index_on_file,                   &
     5745                                        end_index_on_file,                     &
     5746                                        nxlc, nysc,                            &
     5747                                        nxlf, nxrf, nysf, nynf,                &
     5748                                        nys_on_file, nyn_on_file,              &
     5749                                        nxl_on_file,nxr_on_file )
     5750#else                     
     5751                IF ( k == 1 )  THEN
     5752                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(0)%t ) )           &
     5753                      ALLOCATE( t_surf_window_v_1(0)%t(1:surf_usm_v(0)%ns) )
     5754                   READ ( 13 )  tmp_surf_window_v(0)%t
     5755                ENDIF
     5756                CALL surface_restore_elements(                                 &
     5757                                        t_surf_window_v_1(0)%t,                &
     5758                                        tmp_surf_window_v(0)%t,                &
     5759                                        surf_usm_v(0)%start_index,             &
     5760                                        start_index_on_file,                   &
     5761                                        end_index_on_file,                     &
     5762                                        nxlc, nysc,                            &
     5763                                        nxlf, nxrf, nysf, nynf,                &
     5764                                        nys_on_file, nyn_on_file,              &
     5765                                        nxl_on_file,nxr_on_file )
     5766#endif
     5767                   
     5768             CASE ( 't_surf_window_v(1)' )
     5769#if defined( __nopointer )       
     5770                IF ( k == 1 )  THEN
     5771                   IF ( .NOT.  ALLOCATED( t_surf_window_v(1)%t ) )             &
     5772                      ALLOCATE( t_surf_window_v(1)%t(1:surf_usm_v(1)%ns) )
     5773                   READ ( 13 )  tmp_surf_window_v(1)%t
     5774                ENDIF
     5775                CALL surface_restore_elements(                                 &
     5776                                        t_surf_window_v(1)%t,                  &
     5777                                        tmp_surf_window_v(1)%t,                &
     5778                                        surf_usm_v(1)%start_index,             &
     5779                                        start_index_on_file,                   &
     5780                                        end_index_on_file,                     &
     5781                                        nxlc, nysc,                            &
     5782                                        nxlf, nxrf, nysf, nynf,                &
     5783                                        nys_on_file, nyn_on_file,              &
     5784                                        nxl_on_file,nxr_on_file )                 
     5785#else                     
     5786                IF ( k == 1 )  THEN
     5787                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(1)%t ) )           &
     5788                      ALLOCATE( t_surf_window_v_1(1)%t(1:surf_usm_v(1)%ns) )
     5789                   READ ( 13 )  tmp_surf_window_v(1)%t
     5790                ENDIF
     5791                CALL surface_restore_elements(                                 &
     5792                                        t_surf_window_v_1(1)%t,                &
     5793                                        tmp_surf_window_v(1)%t,                &
     5794                                        surf_usm_v(1)%start_index,             &
     5795                                        start_index_on_file,                   &
     5796                                        end_index_on_file,                     &
     5797                                        nxlc, nysc,                            &
     5798                                        nxlf, nxrf, nysf, nynf,                &
     5799                                        nys_on_file, nyn_on_file,              &
     5800                                        nxl_on_file,nxr_on_file )
     5801#endif
     5802
     5803             CASE ( 't_surf_window_v(2)' )
     5804#if defined( __nopointer )         
     5805                IF ( k == 1 )  THEN
     5806                   IF ( .NOT.  ALLOCATED( t_surf_window_v(2)%t ) )             &
     5807                      ALLOCATE( t_surf_window_v(2)%t(1:surf_usm_v(2)%ns) )
     5808                   READ ( 13 )  tmp_surf_window_v(2)%t
     5809                ENDIF
     5810                CALL surface_restore_elements(                                 &
     5811                                        t_surf_window_v(2)%t,                  &
     5812                                        tmp_surf_window_v(2)%t,                &
     5813                                        surf_usm_v(2)%start_index,             &   
     5814                                        start_index_on_file,                   &
     5815                                        end_index_on_file,                     &
     5816                                        nxlc, nysc,                            &
     5817                                        nxlf, nxrf, nysf, nynf,                &
     5818                                        nys_on_file, nyn_on_file,              &
     5819                                        nxl_on_file,nxr_on_file )
     5820#else                     
     5821                IF ( k == 1 )  THEN
     5822                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(2)%t ) )           &
     5823                      ALLOCATE( t_surf_window_v_1(2)%t(1:surf_usm_v(2)%ns) )
     5824                   READ ( 13 )  tmp_surf_window_v(2)%t
     5825                ENDIF
     5826                CALL surface_restore_elements(                                 &
     5827                                        t_surf_window_v_1(2)%t,                &
     5828                                        tmp_surf_window_v(2)%t,                &
     5829                                        surf_usm_v(2)%start_index,             &
     5830                                        start_index_on_file,                   &
     5831                                        end_index_on_file,                     &
     5832                                        nxlc, nysc,                            &
     5833                                        nxlf, nxrf, nysf, nynf,                &
     5834                                        nys_on_file, nyn_on_file,              &
     5835                                        nxl_on_file,nxr_on_file )
     5836#endif
     5837                   
     5838             CASE ( 't_surf_window_v(3)' )
     5839#if defined( __nopointer )   
     5840                IF ( k == 1 )  THEN
     5841                   IF ( .NOT.  ALLOCATED( t_surf_window_v(3)%t ) )             &
     5842                      ALLOCATE( t_surf_window_v(3)%t(1:surf_usm_v(3)%ns) )
     5843                   READ ( 13 )  tmp_surf_window_v(3)%t
     5844                ENDIF
     5845                CALL surface_restore_elements(                                 &
     5846                                        t_surf_window_v(3)%t,                  &
     5847                                        tmp_surf_window_v(3)%t,                &
     5848                                        surf_usm_v(3)%start_index,             &
     5849                                        start_index_on_file,                   &
     5850                                        end_index_on_file,                     &
     5851                                        nxlc, nysc,                            &
     5852                                        nxlf, nxrf, nysf, nynf,                &
     5853                                        nys_on_file, nyn_on_file,              &
     5854                                        nxl_on_file,nxr_on_file )
     5855#else                     
     5856                IF ( k == 1 )  THEN
     5857                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(3)%t ) )           &
     5858                      ALLOCATE( t_surf_window_v_1(3)%t(1:surf_usm_v(3)%ns) )
     5859                   READ ( 13 )  tmp_surf_window_v(3)%t
     5860                ENDIF
     5861                CALL surface_restore_elements(                                 &
     5862                                        t_surf_window_v_1(3)%t,                & 
     5863                                        tmp_surf_window_v(3)%t,                &
     5864                                        surf_usm_v(3)%start_index,             &
     5865                                        start_index_on_file,                   &
     5866                                        end_index_on_file,                     &
     5867                                        nxlc, nysc,                            &
     5868                                        nxlf, nxrf, nysf, nynf,                &
     5869                                        nys_on_file, nyn_on_file,              &
     5870                                        nxl_on_file,nxr_on_file )
     5871#endif
     5872             CASE ( 't_wall_h' )
     5873#if defined( __nopointer )
     5874                IF ( k == 1 )  THEN
     5875                   IF ( .NOT.  ALLOCATED( t_wall_h ) )                         &
     5876                      ALLOCATE( t_wall_h(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
     5877                   READ ( 13 )  tmp_wall_h
     5878                ENDIF
     5879                CALL surface_restore_elements(                                 &
     5880                                        t_wall_h, tmp_wall_h,                  &
     5881                                        surf_usm_h%start_index,                &
     5882                                        start_index_on_file,                   &
     5883                                        end_index_on_file,                     &
     5884                                        nxlc, nysc,                            &
     5885                                        nxlf, nxrf, nysf, nynf,                &
     5886                                        nys_on_file, nyn_on_file,              &
     5887                                        nxl_on_file,nxr_on_file )
     5888#else
     5889                IF ( k == 1 )  THEN
     5890                   IF ( .NOT.  ALLOCATED( t_wall_h_1 ) )                       &
     5891                      ALLOCATE( t_wall_h_1(nzb_wall:nzt_wall+1,                &
     5892                                           1:surf_usm_h%ns) )
     5893                   READ ( 13 )  tmp_wall_h
     5894                ENDIF
     5895                CALL surface_restore_elements(                                 &
     5896                                        t_wall_h_1, tmp_wall_h,                &
     5897                                        surf_usm_h%start_index,                &
     5898                                        start_index_on_file,                   &
     5899                                        end_index_on_file,                     &
     5900                                        nxlc, nysc,                            &
     5901                                        nxlf, nxrf, nysf, nynf,                &
     5902                                        nys_on_file, nyn_on_file,              &
     5903                                        nxl_on_file,nxr_on_file )
     5904#endif
     5905             CASE ( 't_wall_v(0)' )
     5906#if defined( __nopointer )
     5907                IF ( k == 1 )  THEN
     5908                   IF ( .NOT.  ALLOCATED( t_wall_v(0)%t ) )                    &
     5909                      ALLOCATE( t_wall_v(0)%t(nzb_wall:nzt_wall+1,             &
     5910                                              1:surf_usm_v(0)%ns) )
     5911                   READ ( 13 )  tmp_wall_v(0)%t
     5912                ENDIF
     5913                CALL surface_restore_elements(                                 &
     5914                                        t_wall_v(0)%t, tmp_wall_v(0)%t,        &
     5915                                        surf_usm_v(0)%start_index,             &   
     5916                                        start_index_on_file,                   &
     5917                                        end_index_on_file,                     &
     5918                                        nxlc, nysc,                            &
     5919                                        nxlf, nxrf, nysf, nynf,                &
     5920                                        nys_on_file, nyn_on_file,              &
     5921                                        nxl_on_file,nxr_on_file )
     5922#else
     5923                IF ( k == 1 )  THEN
     5924                   IF ( .NOT.  ALLOCATED( t_wall_v_1(0)%t ) )                  &
     5925                      ALLOCATE( t_wall_v_1(0)%t(nzb_wall:nzt_wall+1,           &
     5926                                                1:surf_usm_v(0)%ns) )
     5927                   READ ( 13 )  tmp_wall_v(0)%t
     5928                ENDIF
     5929                CALL surface_restore_elements(                                 &
     5930                                        t_wall_v_1(0)%t, tmp_wall_v(0)%t,      &
     5931                                        surf_usm_v(0)%start_index,             & 
     5932                                        start_index_on_file,                   &
     5933                                        end_index_on_file,                     &
     5934                                        nxlc, nysc,                            &
     5935                                        nxlf, nxrf, nysf, nynf,                &
     5936                                        nys_on_file, nyn_on_file,              &
     5937                                        nxl_on_file,nxr_on_file )
     5938#endif
     5939             CASE ( 't_wall_v(1)' )
     5940#if defined( __nopointer )
     5941                IF ( k == 1 )  THEN
     5942                   IF ( .NOT.  ALLOCATED( t_wall_v(1)%t ) )                    &
     5943                      ALLOCATE( t_wall_v(1)%t(nzb_wall:nzt_wall+1,             &
     5944                                              1:surf_usm_v(1)%ns) )
     5945                   READ ( 13 )  tmp_wall_v(1)%t
     5946                ENDIF
     5947                CALL surface_restore_elements(                                 &
     5948                                        t_wall_v(1)%t, tmp_wall_v(1)%t,        &
     5949                                        surf_usm_v(1)%start_index,             &
     5950                                        start_index_on_file,                   &
     5951                                        end_index_on_file ,                    &
     5952                                        nxlc, nysc,                            &
     5953                                        nys_on_file, nyn_on_file,              &
     5954                                        nxl_on_file, nxr_on_file )
     5955#else
     5956                IF ( k == 1 )  THEN
     5957                   IF ( .NOT.  ALLOCATED( t_wall_v_1(1)%t ) )                  &
     5958                      ALLOCATE( t_wall_v_1(1)%t(nzb_wall:nzt_wall+1,           &
     5959                                                1:surf_usm_v(1)%ns) )
     5960                   READ ( 13 )  tmp_wall_v(1)%t
     5961                ENDIF
     5962                CALL surface_restore_elements(                                 &
     5963                                        t_wall_v_1(1)%t, tmp_wall_v(1)%t,      &
     5964                                        surf_usm_v(1)%start_index,             & 
     5965                                        start_index_on_file,                   &
     5966                                        end_index_on_file,                     &
     5967                                        nxlc, nysc,                            &
     5968                                        nxlf, nxrf, nysf, nynf,                &
     5969                                        nys_on_file, nyn_on_file,              &
     5970                                        nxl_on_file,nxr_on_file )
     5971#endif
     5972             CASE ( 't_wall_v(2)' )
     5973#if defined( __nopointer )
     5974                IF ( k == 1 )  THEN
     5975                   IF ( .NOT.  ALLOCATED( t_wall_v(2)%t ) )                    &
     5976                      ALLOCATE( t_wall_v(2)%t(nzb_wall:nzt_wall+1,             &
     5977                                              1:surf_usm_v(2)%ns) )
     5978                   READ ( 13 )  tmp_wall_v(2)%t
     5979                ENDIF
     5980                CALL surface_restore_elements(                                 &
     5981                                        t_wall_v(2)%t, tmp_wall_v(2)%t,        &
     5982                                        surf_usm_v(2)%start_index,             & 
     5983                                        start_index_on_file,                   &
     5984                                        end_index_on_file,                     &
     5985                                        nxlc, nysc,                            &
     5986                                        nxlf, nxrf, nysf, nynf,                &
     5987                                        nys_on_file, nyn_on_file,              &
     5988                                        nxl_on_file,nxr_on_file )
     5989#else
     5990                IF ( k == 1 )  THEN
     5991                   IF ( .NOT.  ALLOCATED( t_wall_v_1(2)%t ) )                  &
     5992                      ALLOCATE( t_wall_v_1(2)%t(nzb_wall:nzt_wall+1,           &
     5993                                                1:surf_usm_v(2)%ns) )
     5994                   READ ( 13 )  tmp_wall_v(2)%t
     5995                ENDIF
     5996                CALL surface_restore_elements(                                 &
     5997                                        t_wall_v_1(2)%t, tmp_wall_v(2)%t,      &
     5998                                        surf_usm_v(2)%start_index,             &
     5999                                        start_index_on_file,                   &
     6000                                        end_index_on_file ,                    &
     6001                                        nxlc, nysc,                            &
     6002                                        nxlf, nxrf, nysf, nynf,                &
     6003                                        nys_on_file, nyn_on_file,              &
     6004                                        nxl_on_file,nxr_on_file )
     6005#endif
     6006             CASE ( 't_wall_v(3)' )
     6007#if defined( __nopointer )
     6008                IF ( k == 1 )  THEN
     6009                   IF ( .NOT.  ALLOCATED( t_wall_v(3)%t ) )                    &
     6010                      ALLOCATE( t_wall_v(3)%t(nzb_wall:nzt_wall+1,             &
     6011                                              1:surf_usm_v(3)%ns) )
     6012                   READ ( 13 )  tmp_wall_v(3)%t
     6013                ENDIF
     6014                CALL surface_restore_elements(                                 &
     6015                                        t_wall_v(3)%t, tmp_wall_v(3)%t,        &
     6016                                        surf_usm_v(3)%start_index,             &   
     6017                                        start_index_on_file,                   &
     6018                                        end_index_on_file,                     &
     6019                                        nxlc, nysc,                            &
     6020                                        nxlf, nxrf, nysf, nynf,                &
     6021                                        nys_on_file, nyn_on_file,              &
     6022                                        nxl_on_file,nxr_on_file )
     6023#else
     6024                IF ( k == 1 )  THEN
     6025                   IF ( .NOT.  ALLOCATED( t_wall_v_1(3)%t ) )                  &
     6026                      ALLOCATE( t_wall_v_1(3)%t(nzb_wall:nzt_wall+1,           &
     6027                                                1:surf_usm_v(3)%ns) )
     6028                   READ ( 13 )  tmp_wall_v(3)%t
     6029                ENDIF
     6030                CALL surface_restore_elements(                                 &
     6031                                        t_wall_v_1(3)%t, tmp_wall_v(3)%t,      &
     6032                                        surf_usm_v(3)%start_index,             &   
     6033                                        start_index_on_file,                   &
     6034                                        end_index_on_file,                     &
     6035                                        nxlc, nysc,                            &
     6036                                        nxlf, nxrf, nysf, nynf,                &
     6037                                        nys_on_file, nyn_on_file,              &
     6038                                        nxl_on_file,nxr_on_file )
     6039#endif
     6040             CASE ( 't_green_h' )
     6041#if defined( __nopointer )
     6042                IF ( k == 1 )  THEN
     6043                   IF ( .NOT.  ALLOCATED( t_green_h ) )                        &
     6044                      ALLOCATE( t_green_h(nzb_wall:nzt_wall+1,                 &
     6045                                          1:surf_usm_h%ns) )
     6046                   READ ( 13 )  tmp_green_h
     6047                ENDIF
     6048                CALL surface_restore_elements(                                 &
     6049                                        t_green_h, tmp_green_h,                &
     6050                                        surf_usm_h%start_index,                &
     6051                                        start_index_on_file,                   &
     6052                                        end_index_on_file,                     &
     6053                                        nxlc, nysc,                            &
     6054                                        nxlf, nxrf, nysf, nynf,                &
     6055                                        nys_on_file, nyn_on_file,              &
     6056                                        nxl_on_file,nxr_on_file )
     6057#else
     6058                IF ( k == 1 )  THEN
     6059                   IF ( .NOT.  ALLOCATED( t_green_h_1 ) )                      &
     6060                      ALLOCATE( t_green_h_1(nzb_wall:nzt_wall+1,               &
     6061                                            1:surf_usm_h%ns) )
     6062                   READ ( 13 )  tmp_green_h
     6063                ENDIF
     6064                CALL surface_restore_elements(                                 &
     6065                                        t_green_h_1, tmp_green_h,              &
     6066                                        surf_usm_h%start_index,                &
     6067                                        start_index_on_file,                   &
     6068                                        end_index_on_file,                     &
     6069                                        nxlc, nysc,                            &
     6070                                        nxlf, nxrf, nysf, nynf,                &
     6071                                        nys_on_file, nyn_on_file,              &
     6072                                        nxl_on_file,nxr_on_file )
     6073#endif
     6074             CASE ( 't_green_v(0)' )
     6075#if defined( __nopointer )
     6076                IF ( k == 1 )  THEN
     6077                   IF ( .NOT.  ALLOCATED( t_green_v(0)%t ) )                   &
     6078                      ALLOCATE( t_green_v(0)%t(nzb_wall:nzt_wall+1,            &
     6079                                               1:surf_usm_v(0)%ns) )
     6080                   READ ( 13 )  tmp_green_v(0)%t
     6081                ENDIF
     6082                CALL surface_restore_elements(                                 &
     6083                                        t_green_v(0)%t, tmp_green_v(0)%t,      &
     6084                                        surf_usm_v(0)%start_index,             &
     6085                                        start_index_on_file,                   &
     6086                                        end_index_on_file,                     &
     6087                                        nxlc, nysc,                            &
     6088                                        nxlf, nxrf, nysf, nynf,                &
     6089                                        nys_on_file, nyn_on_file,              &
     6090                                        nxl_on_file,nxr_on_file )
     6091#else
     6092                IF ( k == 1 )  THEN
     6093                   IF ( .NOT.  ALLOCATED( t_green_v_1(0)%t ) )                 &
     6094                      ALLOCATE( t_green_v_1(0)%t(nzb_wall:nzt_wall+1,          &
     6095                                                 1:surf_usm_v(0)%ns) )
     6096                   READ ( 13 )  tmp_green_v(0)%t
     6097                ENDIF
     6098                CALL surface_restore_elements(                                 &
     6099                                        t_green_v_1(0)%t, tmp_green_v(0)%t,    &
     6100                                        surf_usm_v(0)%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#endif
     6108             CASE ( 't_green_v(1)' )
     6109#if defined( __nopointer )
     6110                IF ( k == 1 )  THEN
     6111                   IF ( .NOT.  ALLOCATED( t_green_v(1)%t ) )                   &
     6112                      ALLOCATE( t_green_v(1)%t(nzb_wall:nzt_wall+1,            &
     6113                                               1:surf_usm_v(1)%ns) )
     6114                   READ ( 13 )  tmp_green_v(1)%t
     6115                ENDIF
     6116                CALL surface_restore_elements(                                 &
     6117                                        t_green_v(1)%t, tmp_green_v(1)%t,      &
     6118                                        surf_usm_v(1)%start_index,             &
     6119                                        start_index_on_file,                   &
     6120                                        end_index_on_file ,                    &
     6121                                        nxlc, nysc,                            &
     6122                                        nys_on_file, nyn_on_file,              &
     6123                                        nxl_on_file,nxr_on_file )
     6124#else
     6125                IF ( k == 1 )  THEN
     6126                   IF ( .NOT.  ALLOCATED( t_green_v_1(1)%t ) )                 &
     6127                      ALLOCATE( t_green_v_1(1)%t(nzb_wall:nzt_wall+1,          &
     6128                                                 1:surf_usm_v(1)%ns) )
     6129                   READ ( 13 )  tmp_green_v(1)%t
     6130                ENDIF
     6131                CALL surface_restore_elements(                                 &
     6132                                        t_green_v_1(1)%t, tmp_green_v(1)%t,    &
     6133                                        surf_usm_v(1)%start_index,             &
     6134                                        start_index_on_file,                   &
     6135                                        end_index_on_file,                     &
     6136                                        nxlc, nysc,                            &
     6137                                        nxlf, nxrf, nysf, nynf,                &
     6138                                        nys_on_file, nyn_on_file,              &
     6139                                        nxl_on_file,nxr_on_file )
     6140#endif
     6141             CASE ( 't_green_v(2)' )
     6142#if defined( __nopointer )
     6143                IF ( k == 1 )  THEN
     6144                   IF ( .NOT.  ALLOCATED( t_green_v(2)%t ) )                   &
     6145                      ALLOCATE( t_green_v(2)%t(nzb_wall:nzt_wall+1,            &
     6146                                               1:surf_usm_v(2)%ns) )
     6147                   READ ( 13 )  tmp_green_v(2)%t
     6148                ENDIF
     6149                CALL surface_restore_elements(                                 &
     6150                                        t_green_v(2)%t, tmp_green_v(2)%t,      &
     6151                                        surf_usm_v(2)%start_index,             &
     6152                                        start_index_on_file,                   &
     6153                                        end_index_on_file,                     &
     6154                                        nxlc, nysc,                            &
     6155                                        nxlf, nxrf, nysf, nynf,                &
     6156                                        nys_on_file, nyn_on_file,              &
     6157                                        nxl_on_file,nxr_on_file )
     6158#else
     6159                IF ( k == 1 )  THEN
     6160                   IF ( .NOT.  ALLOCATED( t_green_v_1(2)%t ) )                 &
     6161                      ALLOCATE( t_green_v_1(2)%t(nzb_wall:nzt_wall+1,          &
     6162                                                 1:surf_usm_v(2)%ns) )
     6163                   READ ( 13 )  tmp_green_v(2)%t
     6164                ENDIF
     6165                CALL surface_restore_elements(                                 &
     6166                                        t_green_v_1(2)%t, tmp_green_v(2)%t,    &
     6167                                        surf_usm_v(2)%start_index,             &
     6168                                        start_index_on_file,                   &
     6169                                        end_index_on_file ,                    &
     6170                                        nxlc, nysc,                            &
     6171                                        nxlf, nxrf, nysf, nynf,                &
     6172                                        nys_on_file, nyn_on_file,              &
     6173                                        nxl_on_file,nxr_on_file )
     6174#endif
     6175             CASE ( 't_green_v(3)' )
     6176#if defined( __nopointer )
     6177                IF ( k == 1 )  THEN
     6178                   IF ( .NOT.  ALLOCATED( t_green_v(3)%t ) )                   &
     6179                      ALLOCATE( t_green_v(3)%t(nzb_wall:nzt_wall+1,            &
     6180                                               1:surf_usm_v(3)%ns) )
     6181                   READ ( 13 )  tmp_green_v(3)%t
     6182                ENDIF
     6183                CALL surface_restore_elements(                                 &
     6184                                        t_green_v(3)%t, tmp_green_v(3)%t,      &
     6185                                        surf_usm_v(3)%start_index,             & 
     6186                                        start_index_on_file,                   &
     6187                                        end_index_on_file,                     &
     6188                                        nxlc, nysc,                            &
     6189                                        nxlf, nxrf, nysf, nynf,                &
     6190                                        nys_on_file, nyn_on_file,              &
     6191                                        nxl_on_file,nxr_on_file )
     6192#else
     6193                IF ( k == 1 )  THEN
     6194                   IF ( .NOT.  ALLOCATED( t_green_v_1(3)%t ) )                 &
     6195                      ALLOCATE( t_green_v_1(3)%t(nzb_wall:nzt_wall+1,          &
     6196                                                 1:surf_usm_v(3)%ns) )
     6197                   READ ( 13 )  tmp_green_v(3)%t
     6198                ENDIF
     6199                CALL surface_restore_elements(                                 &
     6200                                        t_green_v_1(3)%t, tmp_green_v(3)%t,    &
     6201                                        surf_usm_v(3)%start_index,             & 
     6202                                        start_index_on_file,                   &
     6203                                        end_index_on_file,                     &
     6204                                        nxlc, nysc,                            &
     6205                                        nxlf, nxrf, nysf, nynf,                &
     6206                                        nys_on_file, nyn_on_file,              &
     6207                                        nxl_on_file,nxr_on_file )
     6208#endif
     6209             CASE ( 't_window_h' )
     6210#if defined( __nopointer )
     6211                IF ( k == 1 )  THEN
     6212                   IF ( .NOT.  ALLOCATED( t_window_h ) )                       &
     6213                      ALLOCATE( t_window_h(nzb_wall:nzt_wall+1,                &
     6214                                           1:surf_usm_h%ns) )
     6215                   READ ( 13 )  tmp_window_h
     6216                ENDIF
     6217                CALL surface_restore_elements(                                 &
     6218                                        t_window_h, tmp_window_h,              &
     6219                                        surf_usm_h%start_index,                &
     6220                                        start_index_on_file,                   &
     6221                                        end_index_on_file,                     &
     6222                                        nxlc, nysc,                            &
     6223                                        nxlf, nxrf, nysf, nynf,                &
     6224                                        nys_on_file, nyn_on_file,              &
     6225                                        nxl_on_file,nxr_on_file )
     6226#else
     6227                IF ( k == 1 )  THEN
     6228                   IF ( .NOT.  ALLOCATED( t_window_h_1 ) )                     &
     6229                      ALLOCATE( t_window_h_1(nzb_wall:nzt_wall+1,              &
     6230                                             1:surf_usm_h%ns) )
     6231                   READ ( 13 )  tmp_window_h
     6232                ENDIF
     6233                CALL surface_restore_elements(                                 &
     6234                                        t_window_h_1, tmp_window_h,            &
     6235                                        surf_usm_h%start_index,                &
     6236                                        start_index_on_file,                   &
     6237                                        end_index_on_file,                     &
     6238                                        nxlc, nysc,                            &
     6239                                        nxlf, nxrf, nysf, nynf,                &
     6240                                        nys_on_file, nyn_on_file,              &
     6241                                        nxl_on_file, nxr_on_file )
     6242#endif
     6243             CASE ( 't_window_v(0)' )
     6244#if defined( __nopointer )
     6245                IF ( k == 1 )  THEN
     6246                   IF ( .NOT.  ALLOCATED( t_window_v(0)%t ) )                  &
     6247                      ALLOCATE( t_window_v(0)%t(nzb_wall:nzt_wall+1,           &
     6248                                                1:surf_usm_v(0)%ns) )
     6249                   READ ( 13 )  tmp_window_v(0)%t
     6250                ENDIF
     6251                CALL surface_restore_elements(                                 &
     6252                                        t_window_v(0)%t, tmp_window_v(0)%t,    &
     6253                                        surf_usm_v(0)%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#else
     6261                IF ( k == 1 )  THEN
     6262                   IF ( .NOT.  ALLOCATED( t_window_v_1(0)%t ) )                &
     6263                      ALLOCATE( t_window_v_1(0)%t(nzb_wall:nzt_wall+1,         &
     6264                                                  1:surf_usm_v(0)%ns) )
     6265                   READ ( 13 )  tmp_window_v(0)%t
     6266                ENDIF
     6267                CALL surface_restore_elements(                                 &
     6268                                        t_window_v_1(0)%t,                     &
     6269                                        tmp_window_v(0)%t,                     &
     6270                                        surf_usm_v(0)%start_index,             &
     6271                                        start_index_on_file,                   &
     6272                                        end_index_on_file,                     &
     6273                                        nxlc, nysc,                            &
     6274                                        nxlf, nxrf, nysf, nynf,                &
     6275                                        nys_on_file, nyn_on_file,              &
     6276                                        nxl_on_file,nxr_on_file )
     6277#endif
     6278             CASE ( 't_window_v(1)' )
     6279#if defined( __nopointer )
     6280                IF ( k == 1 )  THEN
     6281                   IF ( .NOT.  ALLOCATED( t_window_v(1)%t ) )                  &
     6282                      ALLOCATE( t_window_v(1)%t(nzb_wall:nzt_wall+1,           &
     6283                                                1:surf_usm_v(1)%ns) )
     6284                   READ ( 13 )  tmp_window_v(1)%t
     6285                ENDIF
     6286                CALL surface_restore_elements(                                 &
     6287                                        t_window_v(1)%t, tmp_window_v(1)%t,    &
     6288                                        surf_usm_v(1)%start_index,             &
     6289                                        start_index_on_file,                   &
     6290                                        end_index_on_file ,                    &
     6291                                        nxlc, nysc,                            &
     6292                                        nys_on_file, nyn_on_file,              &
     6293                                        nxl_on_file, nxr_on_file )
     6294#else
     6295                IF ( k == 1 )  THEN
     6296                   IF ( .NOT.  ALLOCATED( t_window_v_1(1)%t ) )                &
     6297                      ALLOCATE( t_window_v_1(1)%t(nzb_wall:nzt_wall+1,         &
     6298                                                  1:surf_usm_v(1)%ns) )
     6299                   READ ( 13 )  tmp_window_v(1)%t
     6300                ENDIF
     6301                CALL surface_restore_elements(                                 &
     6302                                        t_window_v_1(1)%t,                     &
     6303                                        tmp_window_v(1)%t,                     &
     6304                                        surf_usm_v(1)%start_index,             &
     6305                                        start_index_on_file,                   &
     6306                                        end_index_on_file,                     &
     6307                                        nxlc, nysc,                            &
     6308                                        nxlf, nxrf, nysf, nynf,                &
     6309                                        nys_on_file, nyn_on_file,              &
     6310                                        nxl_on_file,nxr_on_file )
     6311#endif
     6312             CASE ( 't_window_v(2)' )
     6313#if defined( __nopointer )
     6314                IF ( k == 1 )  THEN
     6315                   IF ( .NOT.  ALLOCATED( t_window_v(2)%t ) )                  &
     6316                      ALLOCATE( t_window_v(2)%t(nzb_wall:nzt_wall+1,           &
     6317                                                1:surf_usm_v(2)%ns) )
     6318                   READ ( 13 )  tmp_window_v(2)%t
     6319                ENDIF
     6320                CALL surface_restore_elements(                                 &
     6321                                        t_window_v(2)%t, tmp_window_v(2)%t,    &
     6322                                        surf_usm_v(2)%start_index,             &
     6323                                        start_index_on_file,                   &
     6324                                        end_index_on_file,                     &
     6325                                        nxlc, nysc,                            &
     6326                                        nxlf, nxrf, nysf, nynf,                &
     6327                                        nys_on_file, nyn_on_file,              &
     6328                                        nxl_on_file,nxr_on_file )
     6329#else
     6330                IF ( k == 1 )  THEN
     6331                   IF ( .NOT.  ALLOCATED( t_window_v_1(2)%t ) )                &
     6332                      ALLOCATE( t_window_v_1(2)%t(nzb_wall:nzt_wall+1,         &
     6333                                                  1:surf_usm_v(2)%ns) )
     6334                   READ ( 13 )  tmp_window_v(2)%t
     6335                ENDIF
     6336                CALL surface_restore_elements(                                 &
     6337                                        t_window_v_1(2)%t,                     &
     6338                                        tmp_window_v(2)%t,                     &
     6339                                        surf_usm_v(2)%start_index,             & 
     6340                                        start_index_on_file,                   &
     6341                                        end_index_on_file ,                    &
     6342                                        nxlc, nysc,                            &
     6343                                        nxlf, nxrf, nysf, nynf,                &
     6344                                        nys_on_file, nyn_on_file,              &
     6345                                        nxl_on_file,nxr_on_file )
     6346#endif
     6347             CASE ( 't_window_v(3)' )
     6348#if defined( __nopointer )
     6349                IF ( k == 1 )  THEN
     6350                   IF ( .NOT.  ALLOCATED( t_window_v(3)%t ) )                  &
     6351                      ALLOCATE( t_window_v(3)%t(nzb_wall:nzt_wall+1,           &
     6352                                                1:surf_usm_v(3)%ns) )
     6353                   READ ( 13 )  tmp_window_v(3)%t
     6354                ENDIF
     6355                CALL surface_restore_elements(                                 &
     6356                                        t_window_v(3)%t, tmp_window_v(3)%t,    &
     6357                                        surf_usm_v(3)%start_index,             &
     6358                                        start_index_on_file,                   &
     6359                                        end_index_on_file,                     &
     6360                                        nxlc, nysc,                            &
     6361                                        nxlf, nxrf, nysf, nynf,                &
     6362                                        nys_on_file, nyn_on_file,              &
     6363                                        nxl_on_file,nxr_on_file )
     6364#else
     6365                IF ( k == 1 )  THEN
     6366                   IF ( .NOT.  ALLOCATED( t_window_v_1(3)%t ) )                &
     6367                      ALLOCATE( t_window_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
     6368                   READ ( 13 )  tmp_window_v(3)%t
     6369                ENDIF
     6370                CALL surface_restore_elements(                                 &
     6371                                        t_window_v_1(3)%t,                     &
     6372                                        tmp_window_v(3)%t,                     &
     6373                                        surf_usm_v(3)%start_index,             &
     6374                                        start_index_on_file,                   &
     6375                                        end_index_on_file,                     &
     6376                                        nxlc, nysc,                            &
     6377                                        nxlf, nxrf, nysf, nynf,                &
     6378                                        nys_on_file, nyn_on_file,              &
     6379                                        nxl_on_file,nxr_on_file )
     6380#endif
     6381             CASE DEFAULT
     6382
     6383                   found = .FALSE.
     6384
     6385          END SELECT
     6386
    52456387       
    5246        INTEGER(iwp), DIMENSION(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) ::  start_index_on_file
    5247        INTEGER(iwp), DIMENSION(nys_on_file:nyn_on_file,nxl_on_file:nxr_on_file) ::  end_index_on_file
    5248        
    5249        REAL(wp), DIMENSION(:), ALLOCATABLE   ::  tmp_surf_h, tmp_surf_window_h, tmp_surf_green_h
    5250        REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  tmp_wall_h, tmp_window_h, tmp_green_h
    5251        
    5252        TYPE( t_surf_vertical ), DIMENSION(0:3) ::  tmp_surf_v, tmp_surf_window_v, tmp_surf_green_v
    5253        TYPE( t_wall_vertical ), DIMENSION(0:3) ::  tmp_wall_v, tmp_window_v, tmp_green_v
    5254 
    5255        
    5256        IF ( initializing_actions == 'read_restart_data'  .OR.                  &
    5257             initializing_actions == 'cyclic_fill' )  THEN
    5258          
    5259 !
    5260 !--       Read number of respective surface elements on file
    5261           READ ( 13 ) field_chr
    5262           IF ( TRIM( field_chr ) /= 'ns_h_on_file_usm' )  THEN
    5263 !
    5264 !--          Add a proper error message
    5265           ENDIF
    5266           READ ( 13 ) ns_h_on_file_usm
    5267 
    5268           READ ( 13 )  field_chr
    5269           IF ( TRIM( field_chr ) /= 'ns_v_on_file_usm' )  THEN
    5270 !
    5271 !--          Add a proper error message
    5272           ENDIF
    5273           READ ( 13 ) ns_v_on_file_usm
    5274 !
    5275 !--       Allocate temporary arrays for reading data on file. Note, the
    5276 !--       size of allocated surface elements do not necessarily need to match
    5277 !--       the size of present surface elements on current processor, as the
    5278 !--       number of processors between restarts can change.
    5279           ALLOCATE( tmp_surf_h(1:ns_h_on_file_usm) )
    5280           ALLOCATE( tmp_wall_h(nzb_wall:nzt_wall+1,1:ns_h_on_file_usm) )
    5281           ALLOCATE( tmp_surf_window_h(1:ns_h_on_file_usm) )
    5282           ALLOCATE( tmp_window_h(nzb_wall:nzt_wall+1,1:ns_h_on_file_usm) )
    5283           ALLOCATE( tmp_surf_green_h(1:ns_h_on_file_usm) )
    5284           ALLOCATE( tmp_green_h(nzb_wall:nzt_wall+1,1:ns_h_on_file_usm) )
    5285          
    5286           DO  l = 0, 3
    5287              ALLOCATE( tmp_surf_v(l)%t(1:ns_v_on_file_usm(l)) )
    5288              ALLOCATE( tmp_wall_v(l)%t(nzb_wall:nzt_wall+1,1:ns_v_on_file_usm(l) ) )
    5289              ALLOCATE( tmp_surf_window_v(l)%t(1:ns_v_on_file_usm(l)) )
    5290              ALLOCATE( tmp_window_v(l)%t(nzb_wall:nzt_wall+1,1:ns_v_on_file_usm(l) ) )
    5291              ALLOCATE( tmp_surf_green_v(l)%t(1:ns_v_on_file_usm(l)) )
    5292              ALLOCATE( tmp_green_v(l)%t(nzb_wall:nzt_wall+1,1:ns_v_on_file_usm(l) ) )
    5293           ENDDO
    5294          
    5295        
    5296           READ ( 13 )  field_chr
    5297 
    5298           DO  WHILE ( TRIM( field_chr ) /= '*** end usm ***' )
    5299 !
    5300 !--          Map data on file as often as needed (data are read only for k=1)
    5301              DO  kk = 1, overlap_count
    5302 !
    5303 !--             Get the index range of the subdomain on file which overlap with the
    5304 !--             current subdomain
    5305                 nxlf = nxlfa(ii,kk)
    5306                 nxlc = nxlfa(ii,kk) + offset_xa(ii,kk)
    5307                 nxrf = nxrfa(ii,kk)
    5308                 nxrc = nxrfa(ii,kk) + offset_xa(ii,kk)
    5309                 nysf = nysfa(ii,kk)
    5310                 nysc = nysfa(ii,kk) + offset_ya(ii,kk)
    5311                 nynf = nynfa(ii,kk)
    5312                 nync = nynfa(ii,kk) + offset_ya(ii,kk)
    5313 
    5314                 SELECT CASE ( TRIM( field_chr ) )     
    5315                
    5316                    CASE ( 'usm_start_index_h', 'usm_start_index_v'  )   
    5317                       IF ( kk == 1 )                                           &
    5318                          READ ( 13 )  start_index_on_file
    5319                      
    5320                    CASE ( 'usm_end_index_h', 'usm_end_index_v' )   
    5321                       IF ( kk == 1 )                                           &
    5322                          READ ( 13 )  end_index_on_file
    5323                
    5324                    CASE ( 't_surf_h' )
    5325 #if defined( __nopointer )                   
    5326                       IF ( kk == 1 )  THEN
    5327                          IF ( .NOT.  ALLOCATED( t_surf_h ) )                   &
    5328                             ALLOCATE( t_surf_h(1:surf_usm_h%ns) )
    5329                          READ ( 13 )  tmp_surf_h
    5330                       ENDIF
    5331                       CALL surface_restore_elements(                           &
    5332                                               t_surf_h, tmp_surf_h,            &
    5333                                               surf_usm_h%start_index,          &
    5334                                               start_index_on_file,             &
    5335                                               end_index_on_file,               &
    5336                                               nxlc, nysc,                      &
    5337                                               nxlf, nxrf, nysf, nynf,          &
    5338                                               nys_on_file, nyn_on_file,        &
    5339                                               nxl_on_file,nxr_on_file )
    5340 #else                     
    5341                       IF ( kk == 1 )  THEN
    5342                          IF ( .NOT.  ALLOCATED( t_surf_h_1 ) )                 &
    5343                             ALLOCATE( t_surf_h_1(1:surf_usm_h%ns) )
    5344                          READ ( 13 )  tmp_surf_h
    5345                       ENDIF
    5346                       CALL surface_restore_elements(                           &
    5347                                               t_surf_h_1, tmp_surf_h,          &
    5348                                               surf_usm_h%start_index,          &
    5349                                               start_index_on_file,             &
    5350                                               end_index_on_file,               &
    5351                                               nxlc, nysc,                      &
    5352                                               nxlf, nxrf, nysf, nynf,          &
    5353                                               nys_on_file, nyn_on_file,        &
    5354                                               nxl_on_file,nxr_on_file )
    5355 #endif
    5356 
    5357                    CASE ( 't_surf_v(0)' )
    5358 #if defined( __nopointer )           
    5359                       IF ( kk == 1 )  THEN
    5360                          IF ( .NOT.  ALLOCATED( t_surf_v(0)%t ) )              &
    5361                             ALLOCATE( t_surf_v(0)%t(1:surf_usm_v(0)%ns) )
    5362                          READ ( 13 )  tmp_surf_v(0)%t
    5363                       ENDIF
    5364                       CALL surface_restore_elements(                           &
    5365                                               t_surf_v(0)%t, tmp_surf_v(0)%t,  &
    5366                                               surf_usm_v(0)%start_index,       &
    5367                                               start_index_on_file,             &
    5368                                               end_index_on_file,               &
    5369                                               nxlc, nysc,                      &
    5370                                               nxlf, nxrf, nysf, nynf,          &
    5371                                               nys_on_file, nyn_on_file,        &
    5372                                               nxl_on_file,nxr_on_file )
    5373 #else                     
    5374                       IF ( kk == 1 )  THEN
    5375                          IF ( .NOT.  ALLOCATED( t_surf_v_1(0)%t ) )            &
    5376                             ALLOCATE( t_surf_v_1(0)%t(1:surf_usm_v(0)%ns) )
    5377                          READ ( 13 )  tmp_surf_v(0)%t
    5378                       ENDIF
    5379                       CALL surface_restore_elements(                           &
    5380                                               t_surf_v_1(0)%t, tmp_surf_v(0)%t,&
    5381                                               surf_usm_v(0)%start_index,       &
    5382                                               start_index_on_file,             &
    5383                                               end_index_on_file,               &
    5384                                               nxlc, nysc,                      &
    5385                                               nxlf, nxrf, nysf, nynf,          &
    5386                                               nys_on_file, nyn_on_file,        &
    5387                                               nxl_on_file,nxr_on_file )
    5388 #endif
    5389                          
    5390                    CASE ( 't_surf_v(1)' )
    5391 #if defined( __nopointer )       
    5392                       IF ( kk == 1 )  THEN
    5393                          IF ( .NOT.  ALLOCATED( t_surf_v(1)%t ) )              &
    5394                             ALLOCATE( t_surf_v(1)%t(1:surf_usm_v(1)%ns) )
    5395                          READ ( 13 )  tmp_surf_v(1)%t
    5396                       ENDIF
    5397                       CALL surface_restore_elements(                           &
    5398                                               t_surf_v(1)%t, tmp_surf_v(1)%t,  &
    5399                                               surf_usm_v(1)%start_index,       &
    5400                                               start_index_on_file,             &
    5401                                               end_index_on_file,               &
    5402                                               nxlc, nysc,                      &
    5403                                               nxlf, nxrf, nysf, nynf,          &
    5404                                               nys_on_file, nyn_on_file,        &
    5405                                               nxl_on_file,nxr_on_file )                 
    5406 #else                     
    5407                       IF ( kk == 1 )  THEN
    5408                          IF ( .NOT.  ALLOCATED( t_surf_v_1(1)%t ) )            &
    5409                             ALLOCATE( t_surf_v_1(1)%t(1:surf_usm_v(1)%ns) )
    5410                          READ ( 13 )  tmp_surf_v(1)%t
    5411                       ENDIF
    5412                       CALL surface_restore_elements(                           &
    5413                                               t_surf_v_1(1)%t, tmp_surf_v(1)%t,&
    5414                                               surf_usm_v(1)%start_index,       &
    5415                                               start_index_on_file,             &
    5416                                               end_index_on_file,               &
    5417                                               nxlc, nysc,                      &
    5418                                               nxlf, nxrf, nysf, nynf,          &
    5419                                               nys_on_file, nyn_on_file,        &
    5420                                               nxl_on_file,nxr_on_file )
    5421 #endif
    5422 
    5423                    CASE ( 't_surf_v(2)' )
    5424 #if defined( __nopointer )         
    5425                       IF ( kk == 1 )  THEN
    5426                          IF ( .NOT.  ALLOCATED( t_surf_v(2)%t ) )              &
    5427                             ALLOCATE( t_surf_v(2)%t(1:surf_usm_v(2)%ns) )
    5428                          READ ( 13 )  tmp_surf_v(2)%t
    5429                       ENDIF
    5430                       CALL surface_restore_elements(                           &
    5431                                               t_surf_v(2)%t, tmp_surf_v(2)%t,  &
    5432                                               surf_usm_v(2)%start_index,       &
    5433                                               start_index_on_file,             &
    5434                                               end_index_on_file,               &
    5435                                               nxlc, nysc,                      &
    5436                                               nxlf, nxrf, nysf, nynf,          &
    5437                                               nys_on_file, nyn_on_file,        &
    5438                                               nxl_on_file,nxr_on_file )
    5439 #else                     
    5440                       IF ( kk == 1 )  THEN
    5441                          IF ( .NOT.  ALLOCATED( t_surf_v_1(2)%t ) )            &
    5442                             ALLOCATE( t_surf_v_1(2)%t(1:surf_usm_v(2)%ns) )
    5443                          READ ( 13 )  tmp_surf_v(2)%t
    5444                       ENDIF
    5445                       CALL surface_restore_elements(                           &
    5446                                               t_surf_v_1(2)%t, tmp_surf_v(2)%t,&
    5447                                               surf_usm_v(2)%start_index,       &
    5448                                               start_index_on_file,             &
    5449                                               end_index_on_file,               &
    5450                                               nxlc, nysc,                      &
    5451                                               nxlf, nxrf, nysf, nynf,          &
    5452                                               nys_on_file, nyn_on_file,        &
    5453                                               nxl_on_file,nxr_on_file )
    5454 #endif
    5455                          
    5456                    CASE ( 't_surf_v(3)' )
    5457 #if defined( __nopointer )   
    5458                       IF ( kk == 1 )  THEN
    5459                          IF ( .NOT.  ALLOCATED( t_surf_v(3)%t ) )              &
    5460                             ALLOCATE( t_surf_v(3)%t(1:surf_usm_v(3)%ns) )
    5461                          READ ( 13 )  tmp_surf_v(3)%t
    5462                       ENDIF
    5463                       CALL surface_restore_elements(                           &
    5464                                               t_surf_v(3)%t, tmp_surf_v(3)%t,  &
    5465                                               surf_usm_v(3)%start_index,       &
    5466                                               start_index_on_file,             &
    5467                                               end_index_on_file,               &
    5468                                               nxlc, nysc,                      &
    5469                                               nxlf, nxrf, nysf, nynf,          &
    5470                                               nys_on_file, nyn_on_file,        &
    5471                                               nxl_on_file,nxr_on_file )
    5472 #else                     
    5473                       IF ( kk == 1 )  THEN
    5474                          IF ( .NOT.  ALLOCATED( t_surf_v_1(3)%t ) )            &
    5475                             ALLOCATE( t_surf_v_1(3)%t(1:surf_usm_v(3)%ns) )
    5476                          READ ( 13 )  tmp_surf_v(3)%t
    5477                       ENDIF
    5478                       CALL surface_restore_elements(                           &
    5479                                               t_surf_v_1(3)%t, tmp_surf_v(3)%t,&
    5480                                               surf_usm_v(3)%start_index,       &
    5481                                               start_index_on_file,             &
    5482                                               end_index_on_file,               &
    5483                                               nxlc, nysc,                      &
    5484                                               nxlf, nxrf, nysf, nynf,          &
    5485                                               nys_on_file, nyn_on_file,        &
    5486                                               nxl_on_file,nxr_on_file )
    5487 #endif
    5488                    CASE ( 't_surf_green_h' )
    5489 #if defined( __nopointer )                   
    5490                       IF ( kk == 1 )  THEN
    5491                          IF ( .NOT.  ALLOCATED( t_surf_green_h ) )                   &
    5492                             ALLOCATE( t_surf_green_h(1:surf_usm_h%ns) )
    5493                          READ ( 13 )  tmp_surf_green_h
    5494                       ENDIF
    5495                       CALL surface_restore_elements(                           &
    5496                                               t_surf_green_h, tmp_surf_green_h, &
    5497                                               surf_usm_h%start_index,          &
    5498                                               start_index_on_file,             &
    5499                                               end_index_on_file,               &
    5500                                               nxlc, nysc,                      &
    5501                                               nxlf, nxrf, nysf, nynf,          &
    5502                                               nys_on_file, nyn_on_file,        &
    5503                                               nxl_on_file,nxr_on_file )
    5504 #else                     
    5505                       IF ( kk == 1 )  THEN
    5506                          IF ( .NOT.  ALLOCATED( t_surf_green_h_1 ) )                 &
    5507                             ALLOCATE( t_surf_green_h_1(1:surf_usm_h%ns) )
    5508                          READ ( 13 )  tmp_surf_green_h
    5509                       ENDIF
    5510                       CALL surface_restore_elements(                           &
    5511                                               t_surf_green_h_1, tmp_surf_green_h, &
    5512                                               surf_usm_h%start_index,          &
    5513                                               start_index_on_file,             &
    5514                                               end_index_on_file,               &
    5515                                               nxlc, nysc,                      &
    5516                                               nxlf, nxrf, nysf, nynf,          &
    5517                                               nys_on_file, nyn_on_file,        &
    5518                                               nxl_on_file,nxr_on_file )
    5519 #endif
    5520 
    5521                    CASE ( 't_surf_green_v(0)' )
    5522 #if defined( __nopointer )           
    5523                       IF ( kk == 1 )  THEN
    5524                          IF ( .NOT.  ALLOCATED( t_surf_green_v(0)%t ) )              &
    5525                             ALLOCATE( t_surf_green_v(0)%t(1:surf_usm_v(0)%ns) )
    5526                          READ ( 13 )  tmp_surf_green_v(0)%t
    5527                       ENDIF
    5528                       CALL surface_restore_elements(                           &
    5529                                               t_surf_green_v(0)%t, tmp_surf_green_v(0)%t,  &
    5530                                               surf_usm_v(0)%start_index,       &
    5531                                               start_index_on_file,             &
    5532                                               end_index_on_file,               &
    5533                                               nxlc, nysc,                      &
    5534                                               nxlf, nxrf, nysf, nynf,          &
    5535                                               nys_on_file, nyn_on_file,        &
    5536                                               nxl_on_file,nxr_on_file )
    5537 #else                     
    5538                       IF ( kk == 1 )  THEN
    5539                          IF ( .NOT.  ALLOCATED( t_surf_green_v_1(0)%t ) )            &
    5540                             ALLOCATE( t_surf_green_v_1(0)%t(1:surf_usm_v(0)%ns) )
    5541                          READ ( 13 )  tmp_surf_green_v(0)%t
    5542                       ENDIF
    5543                       CALL surface_restore_elements(                           &
    5544                                               t_surf_green_v_1(0)%t, tmp_surf_green_v(0)%t,&
    5545                                               surf_usm_v(0)%start_index,       &
    5546                                               start_index_on_file,             &
    5547                                               end_index_on_file,               &
    5548                                               nxlc, nysc,                      &
    5549                                               nxlf, nxrf, nysf, nynf,          &
    5550                                               nys_on_file, nyn_on_file,        &
    5551                                               nxl_on_file,nxr_on_file )
    5552 #endif
    5553                          
    5554                    CASE ( 't_surf_green_v(1)' )
    5555 #if defined( __nopointer )       
    5556                       IF ( kk == 1 )  THEN
    5557                          IF ( .NOT.  ALLOCATED( t_surf_green_v(1)%t ) )              &
    5558                             ALLOCATE( t_surf_green_v(1)%t(1:surf_usm_v(1)%ns) )
    5559                          READ ( 13 )  tmp_surf_green_v(1)%t
    5560                       ENDIF
    5561                       CALL surface_restore_elements(                           &
    5562                                               t_surf_green_v(1)%t, tmp_surf_green_v(1)%t,  &
    5563                                               surf_usm_v(1)%start_index,       &
    5564                                               start_index_on_file,             &
    5565                                               end_index_on_file,               &
    5566                                               nxlc, nysc,                      &
    5567                                               nxlf, nxrf, nysf, nynf,          &
    5568                                               nys_on_file, nyn_on_file,        &
    5569                                               nxl_on_file,nxr_on_file )                 
    5570 #else                     
    5571                       IF ( kk == 1 )  THEN
    5572                          IF ( .NOT.  ALLOCATED( t_surf_green_v_1(1)%t ) )            &
    5573                             ALLOCATE( t_surf_green_v_1(1)%t(1:surf_usm_v(1)%ns) )
    5574                          READ ( 13 )  tmp_surf_green_v(1)%t
    5575                       ENDIF
    5576                       CALL surface_restore_elements(                           &
    5577                                               t_surf_green_v_1(1)%t, tmp_surf_green_v(1)%t,&
    5578                                               surf_usm_v(1)%start_index,       &
    5579                                               start_index_on_file,             &
    5580                                               end_index_on_file,               &
    5581                                               nxlc, nysc,                      &
    5582                                               nxlf, nxrf, nysf, nynf,          &
    5583                                               nys_on_file, nyn_on_file,        &
    5584                                               nxl_on_file,nxr_on_file )
    5585 #endif
    5586 
    5587                    CASE ( 't_surf_green_v(2)' )
    5588 #if defined( __nopointer )         
    5589                       IF ( kk == 1 )  THEN
    5590                          IF ( .NOT.  ALLOCATED( t_surf_green_v(2)%t ) )              &
    5591                             ALLOCATE( t_surf_green_v(2)%t(1:surf_usm_v(2)%ns) )
    5592                          READ ( 13 )  tmp_surf_green_v(2)%t
    5593                       ENDIF
    5594                       CALL surface_restore_elements(                           &
    5595                                               t_surf_green_v(2)%t, tmp_surf_green_v(2)%t,  &
    5596                                               surf_usm_v(2)%start_index,       &
    5597                                               start_index_on_file,             &
    5598                                               end_index_on_file,               &
    5599                                               nxlc, nysc,                      &
    5600                                               nxlf, nxrf, nysf, nynf,          &
    5601                                               nys_on_file, nyn_on_file,        &
    5602                                               nxl_on_file,nxr_on_file )
    5603 #else                     
    5604                       IF ( kk == 1 )  THEN
    5605                          IF ( .NOT.  ALLOCATED( t_surf_green_v_1(2)%t ) )            &
    5606                             ALLOCATE( t_surf_green_v_1(2)%t(1:surf_usm_v(2)%ns) )
    5607                          READ ( 13 )  tmp_surf_green_v(2)%t
    5608                       ENDIF
    5609                       CALL surface_restore_elements(                           &
    5610                                               t_surf_green_v_1(2)%t, tmp_surf_green_v(2)%t,&
    5611                                               surf_usm_v(2)%start_index,       &
    5612                                               start_index_on_file,             &
    5613                                               end_index_on_file,               &
    5614                                               nxlc, nysc,                      &
    5615                                               nxlf, nxrf, nysf, nynf,          &
    5616                                               nys_on_file, nyn_on_file,        &
    5617                                               nxl_on_file,nxr_on_file )
    5618 #endif
    5619                          
    5620                    CASE ( 't_surf_green_v(3)' )
    5621 #if defined( __nopointer )   
    5622                       IF ( kk == 1 )  THEN
    5623                          IF ( .NOT.  ALLOCATED( t_surf_green_v(3)%t ) )              &
    5624                             ALLOCATE( t_surf_green_v(3)%t(1:surf_usm_v(3)%ns) )
    5625                          READ ( 13 )  tmp_surf_green_v(3)%t
    5626                       ENDIF
    5627                       CALL surface_restore_elements(                           &
    5628                                               t_surf_green_v(3)%t, tmp_surf_green_v(3)%t,  &
    5629                                               surf_usm_v(3)%start_index,       &
    5630                                               start_index_on_file,             &
    5631                                               end_index_on_file,               &
    5632                                               nxlc, nysc,                      &
    5633                                               nxlf, nxrf, nysf, nynf,          &
    5634                                               nys_on_file, nyn_on_file,        &
    5635                                               nxl_on_file,nxr_on_file )
    5636 #else                     
    5637                       IF ( kk == 1 )  THEN
    5638                          IF ( .NOT.  ALLOCATED( t_surf_green_v_1(3)%t ) )            &
    5639                             ALLOCATE( t_surf_green_v_1(3)%t(1:surf_usm_v(3)%ns) )
    5640                          READ ( 13 )  tmp_surf_green_v(3)%t
    5641                       ENDIF
    5642                       CALL surface_restore_elements(                           &
    5643                                               t_surf_green_v_1(3)%t, tmp_surf_green_v(3)%t,&
    5644                                               surf_usm_v(3)%start_index,       &
    5645                                               start_index_on_file,             &
    5646                                               end_index_on_file,               &
    5647                                               nxlc, nysc,                      &
    5648                                               nxlf, nxrf, nysf, nynf,          &
    5649                                               nys_on_file, nyn_on_file,        &
    5650                                               nxl_on_file,nxr_on_file )
    5651 #endif
    5652                    CASE ( 't_surf_window_h' )
    5653 #if defined( __nopointer )                   
    5654                       IF ( kk == 1 )  THEN
    5655                          IF ( .NOT.  ALLOCATED( t_surf_window_h ) )                   &
    5656                             ALLOCATE( t_surf_window_h(1:surf_usm_h%ns) )
    5657                          READ ( 13 )  tmp_surf_window_h
    5658                       ENDIF
    5659                       CALL surface_restore_elements(                           &
    5660                                               t_surf_window_h, tmp_surf_window_h,            &
    5661                                               surf_usm_h%start_index,          &
    5662                                               start_index_on_file,             &
    5663                                               end_index_on_file,               &
    5664                                               nxlc, nysc,                      &
    5665                                               nxlf, nxrf, nysf, nynf,          &
    5666                                               nys_on_file, nyn_on_file,        &
    5667                                               nxl_on_file,nxr_on_file )
    5668 #else                     
    5669                       IF ( kk == 1 )  THEN
    5670                          IF ( .NOT.  ALLOCATED( t_surf_window_h_1 ) )                 &
    5671                             ALLOCATE( t_surf_window_h_1(1:surf_usm_h%ns) )
    5672                          READ ( 13 )  tmp_surf_window_h
    5673                       ENDIF
    5674                       CALL surface_restore_elements(                           &
    5675                                               t_surf_window_h_1, tmp_surf_window_h,          &
    5676                                               surf_usm_h%start_index,          &
    5677                                               start_index_on_file,             &
    5678                                               end_index_on_file,               &
    5679                                               nxlc, nysc,                      &
    5680                                               nxlf, nxrf, nysf, nynf,          &
    5681                                               nys_on_file, nyn_on_file,        &
    5682                                               nxl_on_file,nxr_on_file )
    5683 #endif
    5684 
    5685                    CASE ( 't_surf_window_v(0)' )
    5686 #if defined( __nopointer )           
    5687                       IF ( kk == 1 )  THEN
    5688                          IF ( .NOT.  ALLOCATED( t_surf_window_v(0)%t ) )              &
    5689                             ALLOCATE( t_surf_window_v(0)%t(1:surf_usm_v(0)%ns) )
    5690                          READ ( 13 )  tmp_surf_window_v(0)%t
    5691                       ENDIF
    5692                       CALL surface_restore_elements(                           &
    5693                                               t_surf_window_v(0)%t, tmp_surf_window_v(0)%t,  &
    5694                                               surf_usm_v(0)%start_index,       &
    5695                                               start_index_on_file,             &
    5696                                               end_index_on_file,               &
    5697                                               nxlc, nysc,                      &
    5698                                               nxlf, nxrf, nysf, nynf,          &
    5699                                               nys_on_file, nyn_on_file,        &
    5700                                               nxl_on_file,nxr_on_file )
    5701 #else                     
    5702                       IF ( kk == 1 )  THEN
    5703                          IF ( .NOT.  ALLOCATED( t_surf_window_v_1(0)%t ) )            &
    5704                             ALLOCATE( t_surf_window_v_1(0)%t(1:surf_usm_v(0)%ns) )
    5705                          READ ( 13 )  tmp_surf_window_v(0)%t
    5706                       ENDIF
    5707                       CALL surface_restore_elements(                           &
    5708                                               t_surf_window_v_1(0)%t, tmp_surf_window_v(0)%t,&
    5709                                               surf_usm_v(0)%start_index,       &
    5710                                               start_index_on_file,             &
    5711                                               end_index_on_file,               &
    5712                                               nxlc, nysc,                      &
    5713                                               nxlf, nxrf, nysf, nynf,          &
    5714                                               nys_on_file, nyn_on_file,        &
    5715                                               nxl_on_file,nxr_on_file )
    5716 #endif
    5717                          
    5718                    CASE ( 't_surf_window_v(1)' )
    5719 #if defined( __nopointer )       
    5720                       IF ( kk == 1 )  THEN
    5721                          IF ( .NOT.  ALLOCATED( t_surf_window_v(1)%t ) )              &
    5722                             ALLOCATE( t_surf_window_v(1)%t(1:surf_usm_v(1)%ns) )
    5723                          READ ( 13 )  tmp_surf_window_v(1)%t
    5724                       ENDIF
    5725                       CALL surface_restore_elements(                           &
    5726                                               t_surf_window_v(1)%t, tmp_surf_window_v(1)%t,  &
    5727                                               surf_usm_v(1)%start_index,       &
    5728                                               start_index_on_file,             &
    5729                                               end_index_on_file,               &
    5730                                               nxlc, nysc,                      &
    5731                                               nxlf, nxrf, nysf, nynf,          &
    5732                                               nys_on_file, nyn_on_file,        &
    5733                                               nxl_on_file,nxr_on_file )                 
    5734 #else                     
    5735                       IF ( kk == 1 )  THEN
    5736                          IF ( .NOT.  ALLOCATED( t_surf_window_v_1(1)%t ) )            &
    5737                             ALLOCATE( t_surf_window_v_1(1)%t(1:surf_usm_v(1)%ns) )
    5738                          READ ( 13 )  tmp_surf_window_v(1)%t
    5739                       ENDIF
    5740                       CALL surface_restore_elements(                           &
    5741                                               t_surf_window_v_1(1)%t, tmp_surf_window_v(1)%t,&
    5742                                               surf_usm_v(1)%start_index,       &
    5743                                               start_index_on_file,             &
    5744                                               end_index_on_file,               &
    5745                                               nxlc, nysc,                      &
    5746                                               nxlf, nxrf, nysf, nynf,          &
    5747                                               nys_on_file, nyn_on_file,        &
    5748                                               nxl_on_file,nxr_on_file )
    5749 #endif
    5750 
    5751                    CASE ( 't_surf_window_v(2)' )
    5752 #if defined( __nopointer )         
    5753                       IF ( kk == 1 )  THEN
    5754                          IF ( .NOT.  ALLOCATED( t_surf_window_v(2)%t ) )              &
    5755                             ALLOCATE( t_surf_window_v(2)%t(1:surf_usm_v(2)%ns) )
    5756                          READ ( 13 )  tmp_surf_window_v(2)%t
    5757                       ENDIF
    5758                       CALL surface_restore_elements(                           &
    5759                                               t_surf_window_v(2)%t, tmp_surf_window_v(2)%t,  &
    5760                                               surf_usm_v(2)%start_index,       &
    5761                                               start_index_on_file,             &
    5762                                               end_index_on_file,               &
    5763                                               nxlc, nysc,                      &
    5764                                               nxlf, nxrf, nysf, nynf,          &
    5765                                               nys_on_file, nyn_on_file,        &
    5766                                               nxl_on_file,nxr_on_file )
    5767 #else                     
    5768                       IF ( kk == 1 )  THEN
    5769                          IF ( .NOT.  ALLOCATED( t_surf_window_v_1(2)%t ) )            &
    5770                             ALLOCATE( t_surf_window_v_1(2)%t(1:surf_usm_v(2)%ns) )
    5771                          READ ( 13 )  tmp_surf_window_v(2)%t
    5772                       ENDIF
    5773                       CALL surface_restore_elements(                           &
    5774                                               t_surf_window_v_1(2)%t, tmp_surf_window_v(2)%t,&
    5775                                               surf_usm_v(2)%start_index,       &
    5776                                               start_index_on_file,             &
    5777                                               end_index_on_file,               &
    5778                                               nxlc, nysc,                      &
    5779                                               nxlf, nxrf, nysf, nynf,          &
    5780                                               nys_on_file, nyn_on_file,        &
    5781                                               nxl_on_file,nxr_on_file )
    5782 #endif
    5783                          
    5784                    CASE ( 't_surf_window_v(3)' )
    5785 #if defined( __nopointer )   
    5786                       IF ( kk == 1 )  THEN
    5787                          IF ( .NOT.  ALLOCATED( t_surf_window_v(3)%t ) )              &
    5788                             ALLOCATE( t_surf_window_v(3)%t(1:surf_usm_v(3)%ns) )
    5789                          READ ( 13 )  tmp_surf_window_v(3)%t
    5790                       ENDIF
    5791                       CALL surface_restore_elements(                           &
    5792                                               t_surf_window_v(3)%t, tmp_surf_window_v(3)%t,  &
    5793                                               surf_usm_v(3)%start_index,       &
    5794                                               start_index_on_file,             &
    5795                                               end_index_on_file,               &
    5796                                               nxlc, nysc,                      &
    5797                                               nxlf, nxrf, nysf, nynf,          &
    5798                                               nys_on_file, nyn_on_file,        &
    5799                                               nxl_on_file,nxr_on_file )
    5800 #else                     
    5801                       IF ( kk == 1 )  THEN
    5802                          IF ( .NOT.  ALLOCATED( t_surf_window_v_1(3)%t ) )            &
    5803                             ALLOCATE( t_surf_window_v_1(3)%t(1:surf_usm_v(3)%ns) )
    5804                          READ ( 13 )  tmp_surf_window_v(3)%t
    5805                       ENDIF
    5806                       CALL surface_restore_elements(                           &
    5807                                               t_surf_window_v_1(3)%t, tmp_surf_window_v(3)%t,&
    5808                                               surf_usm_v(3)%start_index,       &
    5809                                               start_index_on_file,             &
    5810                                               end_index_on_file,               &
    5811                                               nxlc, nysc,                      &
    5812                                               nxlf, nxrf, nysf, nynf,          &
    5813                                               nys_on_file, nyn_on_file,        &
    5814                                               nxl_on_file,nxr_on_file )
    5815 #endif
    5816                    CASE ( 't_wall_h' )
    5817 #if defined( __nopointer )
    5818                       IF ( kk == 1 )  THEN
    5819                          IF ( .NOT.  ALLOCATED( t_wall_h ) )                   &
    5820                             ALLOCATE( t_wall_h(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    5821                          READ ( 13 )  tmp_wall_h
    5822                       ENDIF
    5823                       CALL surface_restore_elements(                           &
    5824                                               t_wall_h, tmp_wall_h,            &
    5825                                               surf_usm_h%start_index,          &
    5826                                               start_index_on_file,             &
    5827                                               end_index_on_file,               &
    5828                                               nxlc, nysc,                      &
    5829                                               nxlf, nxrf, nysf, nynf,          &
    5830                                               nys_on_file, nyn_on_file,        &
    5831                                               nxl_on_file,nxr_on_file )
    5832 #else
    5833                       IF ( kk == 1 )  THEN
    5834                          IF ( .NOT.  ALLOCATED( t_wall_h_1 ) )                 &
    5835                             ALLOCATE( t_wall_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    5836                          READ ( 13 )  tmp_wall_h
    5837                       ENDIF
    5838                       CALL surface_restore_elements(                           &
    5839                                               t_wall_h_1, tmp_wall_h,          &
    5840                                               surf_usm_h%start_index,          &
    5841                                               start_index_on_file,             &
    5842                                               end_index_on_file,               &
    5843                                               nxlc, nysc,                      &
    5844                                               nxlf, nxrf, nysf, nynf,          &
    5845                                               nys_on_file, nyn_on_file,        &
    5846                                               nxl_on_file,nxr_on_file )
    5847 #endif
    5848                    CASE ( 't_wall_v(0)' )
    5849 #if defined( __nopointer )
    5850                       IF ( kk == 1 )  THEN
    5851                          IF ( .NOT.  ALLOCATED( t_wall_v(0)%t ) )              &
    5852                             ALLOCATE( t_wall_v(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    5853                          READ ( 13 )  tmp_wall_v(0)%t
    5854                       ENDIF
    5855                       CALL surface_restore_elements(                           &
    5856                                               t_wall_v(0)%t, tmp_wall_v(0)%t,  &
    5857                                               surf_usm_v(0)%start_index,       &
    5858                                               start_index_on_file,             &
    5859                                               end_index_on_file,               &
    5860                                               nxlc, nysc,                      &
    5861                                               nxlf, nxrf, nysf, nynf,          &
    5862                                               nys_on_file, nyn_on_file,        &
    5863                                               nxl_on_file,nxr_on_file )
    5864 #else
    5865                       IF ( kk == 1 )  THEN
    5866                          IF ( .NOT.  ALLOCATED( t_wall_v_1(0)%t ) )            &
    5867                             ALLOCATE( t_wall_v_1(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    5868                          READ ( 13 )  tmp_wall_v(0)%t
    5869                       ENDIF
    5870                       CALL surface_restore_elements(                           &
    5871                                               t_wall_v_1(0)%t, tmp_wall_v(0)%t,&
    5872                                               surf_usm_v(0)%start_index,       &
    5873                                               start_index_on_file,             &
    5874                                               end_index_on_file,               &
    5875                                               nxlc, nysc,                      &
    5876                                               nxlf, nxrf, nysf, nynf,          &
    5877                                               nys_on_file, nyn_on_file,        &
    5878                                               nxl_on_file,nxr_on_file )
    5879 #endif
    5880                    CASE ( 't_wall_v(1)' )
    5881 #if defined( __nopointer )
    5882                       IF ( kk == 1 )  THEN
    5883                          IF ( .NOT.  ALLOCATED( t_wall_v(1)%t ) )              &
    5884                             ALLOCATE( t_wall_v(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    5885                          READ ( 13 )  tmp_wall_v(1)%t
    5886                       ENDIF
    5887                       CALL surface_restore_elements(                           &
    5888                                               t_wall_v(1)%t, tmp_wall_v(1)%t,  &
    5889                                               surf_usm_v(1)%start_index,       &
    5890                                               start_index_on_file,             &
    5891                                               end_index_on_file ,              &
    5892                                               nxlc, nysc,                      &
    5893                                               nys_on_file, nyn_on_file,        &
    5894                                               nxl_on_file, nxr_on_file )
    5895 #else
    5896                       IF ( kk == 1 )  THEN
    5897                          IF ( .NOT.  ALLOCATED( t_wall_v_1(1)%t ) )            &
    5898                             ALLOCATE( t_wall_v_1(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    5899                          READ ( 13 )  tmp_wall_v(1)%t
    5900                       ENDIF
    5901                       CALL surface_restore_elements(                           &
    5902                                               t_wall_v_1(1)%t, tmp_wall_v(1)%t,&
    5903                                               surf_usm_v(1)%start_index,       &
    5904                                               start_index_on_file,             &
    5905                                               end_index_on_file,               &
    5906                                               nxlc, nysc,                      &
    5907                                               nxlf, nxrf, nysf, nynf,          &
    5908                                               nys_on_file, nyn_on_file,        &
    5909                                               nxl_on_file,nxr_on_file )
    5910 #endif
    5911                    CASE ( 't_wall_v(2)' )
    5912 #if defined( __nopointer )
    5913                       IF ( kk == 1 )  THEN
    5914                          IF ( .NOT.  ALLOCATED( t_wall_v(2)%t ) )              &
    5915                             ALLOCATE( t_wall_v(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    5916                          READ ( 13 )  tmp_wall_v(2)%t
    5917                       ENDIF
    5918                       CALL surface_restore_elements(                           &
    5919                                               t_wall_v(2)%t, tmp_wall_v(2)%t,  &
    5920                                               surf_usm_v(2)%start_index,       &
    5921                                               start_index_on_file,             &
    5922                                               end_index_on_file,               &
    5923                                               nxlc, nysc,                      &
    5924                                               nxlf, nxrf, nysf, nynf,          &
    5925                                               nys_on_file, nyn_on_file,        &
    5926                                               nxl_on_file,nxr_on_file )
    5927 #else
    5928                       IF ( kk == 1 )  THEN
    5929                          IF ( .NOT.  ALLOCATED( t_wall_v_1(2)%t ) )            &
    5930                             ALLOCATE( t_wall_v_1(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    5931                          READ ( 13 )  tmp_wall_v(2)%t
    5932                       ENDIF
    5933                       CALL surface_restore_elements(                           &
    5934                                               t_wall_v_1(2)%t, tmp_wall_v(2)%t,&
    5935                                               surf_usm_v(2)%start_index,       &
    5936                                               start_index_on_file,             &
    5937                                               end_index_on_file ,               &
    5938                                               nxlc, nysc,                      &
    5939                                               nxlf, nxrf, nysf, nynf,          &
    5940                                               nys_on_file, nyn_on_file,        &
    5941                                               nxl_on_file,nxr_on_file )
    5942 #endif
    5943                    CASE ( 't_wall_v(3)' )
    5944 #if defined( __nopointer )
    5945                       IF ( kk == 1 )  THEN
    5946                          IF ( .NOT.  ALLOCATED( t_wall_v(3)%t ) )              &
    5947                             ALLOCATE( t_wall_v(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    5948                          READ ( 13 )  tmp_wall_v(3)%t
    5949                       ENDIF
    5950                       CALL surface_restore_elements(                           &
    5951                                               t_wall_v(3)%t, tmp_wall_v(3)%t,  &
    5952                                               surf_usm_v(3)%start_index,       &
    5953                                               start_index_on_file,             &
    5954                                               end_index_on_file,               &
    5955                                               nxlc, nysc,                      &
    5956                                               nxlf, nxrf, nysf, nynf,          &
    5957                                               nys_on_file, nyn_on_file,        &
    5958                                               nxl_on_file,nxr_on_file )
    5959 #else
    5960                       IF ( kk == 1 )  THEN
    5961                          IF ( .NOT.  ALLOCATED( t_wall_v_1(3)%t ) )            &
    5962                             ALLOCATE( t_wall_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    5963                          READ ( 13 )  tmp_wall_v(3)%t
    5964                       ENDIF
    5965                       CALL surface_restore_elements(                           &
    5966                                               t_wall_v_1(3)%t, tmp_wall_v(3)%t,&
    5967                                               surf_usm_v(3)%start_index,       &
    5968                                               start_index_on_file,             &
    5969                                               end_index_on_file,               &
    5970                                               nxlc, nysc,                      &
    5971                                               nxlf, nxrf, nysf, nynf,          &
    5972                                               nys_on_file, nyn_on_file,        &
    5973                                               nxl_on_file,nxr_on_file )
    5974 #endif
    5975                    CASE ( 't_green_h' )
    5976 #if defined( __nopointer )
    5977                       IF ( kk == 1 )  THEN
    5978                          IF ( .NOT.  ALLOCATED( t_green_h ) )                   &
    5979                             ALLOCATE( t_green_h(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    5980                          READ ( 13 )  tmp_green_h
    5981                       ENDIF
    5982                       CALL surface_restore_elements(                           &
    5983                                               t_green_h, tmp_green_h,            &
    5984                                               surf_usm_h%start_index,          &
    5985                                               start_index_on_file,             &
    5986                                               end_index_on_file,               &
    5987                                               nxlc, nysc,                      &
    5988                                               nxlf, nxrf, nysf, nynf,          &
    5989                                               nys_on_file, nyn_on_file,        &
    5990                                               nxl_on_file,nxr_on_file )
    5991 #else
    5992                       IF ( kk == 1 )  THEN
    5993                          IF ( .NOT.  ALLOCATED( t_green_h_1 ) )                 &
    5994                             ALLOCATE( t_green_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    5995                          READ ( 13 )  tmp_green_h
    5996                       ENDIF
    5997                       CALL surface_restore_elements(                           &
    5998                                               t_green_h_1, tmp_green_h,          &
    5999                                               surf_usm_h%start_index,          &
    6000                                               start_index_on_file,             &
    6001                                               end_index_on_file,               &
    6002                                               nxlc, nysc,                      &
    6003                                               nxlf, nxrf, nysf, nynf,          &
    6004                                               nys_on_file, nyn_on_file,        &
    6005                                               nxl_on_file,nxr_on_file )
    6006 #endif
    6007                    CASE ( 't_green_v(0)' )
    6008 #if defined( __nopointer )
    6009                       IF ( kk == 1 )  THEN
    6010                          IF ( .NOT.  ALLOCATED( t_green_v(0)%t ) )              &
    6011                             ALLOCATE( t_green_v(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    6012                          READ ( 13 )  tmp_green_v(0)%t
    6013                       ENDIF
    6014                       CALL surface_restore_elements(                           &
    6015                                               t_green_v(0)%t, tmp_green_v(0)%t,  &
    6016                                               surf_usm_v(0)%start_index,       &
    6017                                               start_index_on_file,             &
    6018                                               end_index_on_file,               &
    6019                                               nxlc, nysc,                      &
    6020                                               nxlf, nxrf, nysf, nynf,          &
    6021                                               nys_on_file, nyn_on_file,        &
    6022                                               nxl_on_file,nxr_on_file )
    6023 #else
    6024                       IF ( kk == 1 )  THEN
    6025                          IF ( .NOT.  ALLOCATED( t_green_v_1(0)%t ) )            &
    6026                             ALLOCATE( t_green_v_1(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    6027                          READ ( 13 )  tmp_green_v(0)%t
    6028                       ENDIF
    6029                       CALL surface_restore_elements(                           &
    6030                                               t_green_v_1(0)%t, tmp_green_v(0)%t,&
    6031                                               surf_usm_v(0)%start_index,       &
    6032                                               start_index_on_file,             &
    6033                                               end_index_on_file,               &
    6034                                               nxlc, nysc,                      &
    6035                                               nxlf, nxrf, nysf, nynf,          &
    6036                                               nys_on_file, nyn_on_file,        &
    6037                                               nxl_on_file,nxr_on_file )
    6038 #endif
    6039                    CASE ( 't_green_v(1)' )
    6040 #if defined( __nopointer )
    6041                       IF ( kk == 1 )  THEN
    6042                          IF ( .NOT.  ALLOCATED( t_green_v(1)%t ) )              &
    6043                             ALLOCATE( t_green_v(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    6044                          READ ( 13 )  tmp_green_v(1)%t
    6045                       ENDIF
    6046                       CALL surface_restore_elements(                           &
    6047                                               t_green_v(1)%t, tmp_green_v(1)%t,  &
    6048                                               surf_usm_v(1)%start_index,       &
    6049                                               start_index_on_file,             &
    6050                                               end_index_on_file ,              &
    6051                                               nxlc, nysc,                      &
    6052                                               nys_on_file, nyn_on_file,        &
    6053                                               nxl_on_file,nxr_on_file )
    6054 #else
    6055                       IF ( kk == 1 )  THEN
    6056                          IF ( .NOT.  ALLOCATED( t_green_v_1(1)%t ) )            &
    6057                             ALLOCATE( t_green_v_1(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    6058                          READ ( 13 )  tmp_green_v(1)%t
    6059                       ENDIF
    6060                       CALL surface_restore_elements(                           &
    6061                                               t_green_v_1(1)%t, tmp_green_v(1)%t,&
    6062                                               surf_usm_v(1)%start_index,       &
    6063                                               start_index_on_file,             &
    6064                                               end_index_on_file,               &
    6065                                               nxlc, nysc,                      &
    6066                                               nxlf, nxrf, nysf, nynf,          &
    6067                                               nys_on_file, nyn_on_file,        &
    6068                                               nxl_on_file,nxr_on_file )
    6069 #endif
    6070                    CASE ( 't_green_v(2)' )
    6071 #if defined( __nopointer )
    6072                       IF ( kk == 1 )  THEN
    6073                          IF ( .NOT.  ALLOCATED( t_green_v(2)%t ) )              &
    6074                             ALLOCATE( t_green_v(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    6075                          READ ( 13 )  tmp_green_v(2)%t
    6076                       ENDIF
    6077                       CALL surface_restore_elements(                           &
    6078                                               t_green_v(2)%t, tmp_green_v(2)%t,  &
    6079                                               surf_usm_v(2)%start_index,       &
    6080                                               start_index_on_file,             &
    6081                                               end_index_on_file,               &
    6082                                               nxlc, nysc,                      &
    6083                                               nxlf, nxrf, nysf, nynf,          &
    6084                                               nys_on_file, nyn_on_file,        &
    6085                                               nxl_on_file,nxr_on_file )
    6086 #else
    6087                       IF ( kk == 1 )  THEN
    6088                          IF ( .NOT.  ALLOCATED( t_green_v_1(2)%t ) )            &
    6089                             ALLOCATE( t_green_v_1(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    6090                          READ ( 13 )  tmp_green_v(2)%t
    6091                       ENDIF
    6092                       CALL surface_restore_elements(                           &
    6093                                               t_green_v_1(2)%t, tmp_green_v(2)%t,&
    6094                                               surf_usm_v(2)%start_index,       &
    6095                                               start_index_on_file,             &
    6096                                               end_index_on_file ,               &
    6097                                               nxlc, nysc,                      &
    6098                                               nxlf, nxrf, nysf, nynf,          &
    6099                                               nys_on_file, nyn_on_file,        &
    6100                                               nxl_on_file,nxr_on_file )
    6101 #endif
    6102                    CASE ( 't_green_v(3)' )
    6103 #if defined( __nopointer )
    6104                       IF ( kk == 1 )  THEN
    6105                          IF ( .NOT.  ALLOCATED( t_green_v(3)%t ) )              &
    6106                             ALLOCATE( t_green_v(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    6107                          READ ( 13 )  tmp_green_v(3)%t
    6108                       ENDIF
    6109                       CALL surface_restore_elements(                           &
    6110                                               t_green_v(3)%t, tmp_green_v(3)%t,  &
    6111                                               surf_usm_v(3)%start_index,       &
    6112                                               start_index_on_file,             &
    6113                                               end_index_on_file,               &
    6114                                               nxlc, nysc,                      &
    6115                                               nxlf, nxrf, nysf, nynf,          &
    6116                                               nys_on_file, nyn_on_file,        &
    6117                                               nxl_on_file,nxr_on_file )
    6118 #else
    6119                       IF ( kk == 1 )  THEN
    6120                          IF ( .NOT.  ALLOCATED( t_green_v_1(3)%t ) )            &
    6121                             ALLOCATE( t_green_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    6122                          READ ( 13 )  tmp_green_v(3)%t
    6123                       ENDIF
    6124                       CALL surface_restore_elements(                           &
    6125                                               t_green_v_1(3)%t, tmp_green_v(3)%t,&
    6126                                               surf_usm_v(3)%start_index,       &
    6127                                               start_index_on_file,             &
    6128                                               end_index_on_file,               &
    6129                                               nxlc, nysc,                      &
    6130                                               nxlf, nxrf, nysf, nynf,          &
    6131                                               nys_on_file, nyn_on_file,        &
    6132                                               nxl_on_file,nxr_on_file )
    6133 #endif
    6134                    CASE ( 't_window_h' )
    6135 #if defined( __nopointer )
    6136                       IF ( kk == 1 )  THEN
    6137                          IF ( .NOT.  ALLOCATED( t_window_h ) )                   &
    6138                             ALLOCATE( t_window_h(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    6139                          READ ( 13 )  tmp_window_h
    6140                       ENDIF
    6141                       CALL surface_restore_elements(                           &
    6142                                               t_window_h, tmp_window_h,            &
    6143                                               surf_usm_h%start_index,          &
    6144                                               start_index_on_file,             &
    6145                                               end_index_on_file,               &
    6146                                               nxlc, nysc,                      &
    6147                                               nxlf, nxrf, nysf, nynf,          &
    6148                                               nys_on_file, nyn_on_file,        &
    6149                                               nxl_on_file,nxr_on_file )
    6150 #else
    6151                       IF ( kk == 1 )  THEN
    6152                          IF ( .NOT.  ALLOCATED( t_window_h_1 ) )                 &
    6153                             ALLOCATE( t_window_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    6154                          READ ( 13 )  tmp_window_h
    6155                       ENDIF
    6156                       CALL surface_restore_elements(                           &
    6157                                               t_window_h_1, tmp_window_h,          &
    6158                                               surf_usm_h%start_index,          &
    6159                                               start_index_on_file,             &
    6160                                               end_index_on_file,               &
    6161                                               nxlc, nysc,                      &
    6162                                               nxlf, nxrf, nysf, nynf,          &
    6163                                               nys_on_file, nyn_on_file,        &
    6164                                               nxl_on_file, nxr_on_file )
    6165 #endif
    6166                    CASE ( 't_window_v(0)' )
    6167 #if defined( __nopointer )
    6168                       IF ( kk == 1 )  THEN
    6169                          IF ( .NOT.  ALLOCATED( t_window_v(0)%t ) )              &
    6170                             ALLOCATE( t_window_v(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    6171                          READ ( 13 )  tmp_window_v(0)%t
    6172                       ENDIF
    6173                       CALL surface_restore_elements(                           &
    6174                                               t_window_v(0)%t, tmp_window_v(0)%t,  &
    6175                                               surf_usm_v(0)%start_index,       &
    6176                                               start_index_on_file,             &
    6177                                               end_index_on_file,               &
    6178                                               nxlc, nysc,                      &
    6179                                               nxlf, nxrf, nysf, nynf,          &
    6180                                               nys_on_file, nyn_on_file,        &
    6181                                               nxl_on_file, nxr_on_file )
    6182 #else
    6183                       IF ( kk == 1 )  THEN
    6184                          IF ( .NOT.  ALLOCATED( t_window_v_1(0)%t ) )            &
    6185                             ALLOCATE( t_window_v_1(0)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(0)%ns) )
    6186                          READ ( 13 )  tmp_window_v(0)%t
    6187                       ENDIF
    6188                       CALL surface_restore_elements(                           &
    6189                                               t_window_v_1(0)%t, tmp_window_v(0)%t,&
    6190                                               surf_usm_v(0)%start_index,       &
    6191                                               start_index_on_file,             &
    6192                                               end_index_on_file,               &
    6193                                               nxlc, nysc,                      &
    6194                                               nxlf, nxrf, nysf, nynf,          &
    6195                                               nys_on_file, nyn_on_file,        &
    6196                                               nxl_on_file,nxr_on_file )
    6197 #endif
    6198                    CASE ( 't_window_v(1)' )
    6199 #if defined( __nopointer )
    6200                       IF ( kk == 1 )  THEN
    6201                          IF ( .NOT.  ALLOCATED( t_window_v(1)%t ) )              &
    6202                             ALLOCATE( t_window_v(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    6203                          READ ( 13 )  tmp_window_v(1)%t
    6204                       ENDIF
    6205                       CALL surface_restore_elements(                           &
    6206                                               t_window_v(1)%t, tmp_window_v(1)%t,  &
    6207                                               surf_usm_v(1)%start_index,       &
    6208                                               start_index_on_file,             &
    6209                                               end_index_on_file ,              &
    6210                                               nxlc, nysc,                      &
    6211                                               nys_on_file, nyn_on_file,        &
    6212                                               nxl_on_file, nxr_on_file )
    6213 #else
    6214                       IF ( kk == 1 )  THEN
    6215                          IF ( .NOT.  ALLOCATED( t_window_v_1(1)%t ) )            &
    6216                             ALLOCATE( t_window_v_1(1)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(1)%ns) )
    6217                          READ ( 13 )  tmp_window_v(1)%t
    6218                       ENDIF
    6219                       CALL surface_restore_elements(                           &
    6220                                               t_window_v_1(1)%t, tmp_window_v(1)%t,&
    6221                                               surf_usm_v(1)%start_index,       &
    6222                                               start_index_on_file,             &
    6223                                               end_index_on_file,               &
    6224                                               nxlc, nysc,                      &
    6225                                               nxlf, nxrf, nysf, nynf,          &
    6226                                               nys_on_file, nyn_on_file,        &
    6227                                               nxl_on_file,nxr_on_file )
    6228 #endif
    6229                    CASE ( 't_window_v(2)' )
    6230 #if defined( __nopointer )
    6231                       IF ( kk == 1 )  THEN
    6232                          IF ( .NOT.  ALLOCATED( t_window_v(2)%t ) )              &
    6233                             ALLOCATE( t_window_v(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    6234                          READ ( 13 )  tmp_window_v(2)%t
    6235                       ENDIF
    6236                       CALL surface_restore_elements(                           &
    6237                                               t_window_v(2)%t, tmp_window_v(2)%t,  &
    6238                                               surf_usm_v(2)%start_index,       &
    6239                                               start_index_on_file,             &
    6240                                               end_index_on_file,               &
    6241                                               nxlc, nysc,                      &
    6242                                               nxlf, nxrf, nysf, nynf,          &
    6243                                               nys_on_file, nyn_on_file,        &
    6244                                               nxl_on_file,nxr_on_file )
    6245 #else
    6246                       IF ( kk == 1 )  THEN
    6247                          IF ( .NOT.  ALLOCATED( t_window_v_1(2)%t ) )            &
    6248                             ALLOCATE( t_window_v_1(2)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(2)%ns) )
    6249                          READ ( 13 )  tmp_window_v(2)%t
    6250                       ENDIF
    6251                       CALL surface_restore_elements(                           &
    6252                                               t_window_v_1(2)%t, tmp_window_v(2)%t,&
    6253                                               surf_usm_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 #endif
    6261                    CASE ( 't_window_v(3)' )
    6262 #if defined( __nopointer )
    6263                       IF ( kk == 1 )  THEN
    6264                          IF ( .NOT.  ALLOCATED( t_window_v(3)%t ) )              &
    6265                             ALLOCATE( t_window_v(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    6266                          READ ( 13 )  tmp_window_v(3)%t
    6267                       ENDIF
    6268                       CALL surface_restore_elements(                           &
    6269                                               t_window_v(3)%t, tmp_window_v(3)%t,  &
    6270                                               surf_usm_v(3)%start_index,       &
    6271                                               start_index_on_file,             &
    6272                                               end_index_on_file,               &
    6273                                               nxlc, nysc,                      &
    6274                                               nxlf, nxrf, nysf, nynf,          &
    6275                                               nys_on_file, nyn_on_file,        &
    6276                                               nxl_on_file,nxr_on_file )
    6277 #else
    6278                       IF ( kk == 1 )  THEN
    6279                          IF ( .NOT.  ALLOCATED( t_window_v_1(3)%t ) )            &
    6280                             ALLOCATE( t_window_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    6281                          READ ( 13 )  tmp_window_v(3)%t
    6282                       ENDIF
    6283                       CALL surface_restore_elements(                           &
    6284                                               t_window_v_1(3)%t, tmp_window_v(3)%t,&
    6285                                               surf_usm_v(3)%start_index,       &
    6286                                               start_index_on_file,             &
    6287                                               end_index_on_file,               &
    6288                                               nxlc, nysc,                      &
    6289                                               nxlf, nxrf, nysf, nynf,          &
    6290                                               nys_on_file, nyn_on_file,        &
    6291                                               nxl_on_file,nxr_on_file )
    6292 #endif
    6293                    CASE DEFAULT
    6294                       WRITE ( message_string, * )  'unknown variable named "', &
    6295                                         TRIM( field_chr ), '" found in',       &
    6296                                         '&data from prior run on PE ', myid
    6297                       CALL message( 'user_read_restart_data', 'UI0012', 1, 2, 0, 6, 0 )
    6298 
    6299                 END SELECT
    6300 
    6301              ENDDO
    6302 
    6303              READ ( 13 )  field_chr
    6304 
    6305           ENDDO
    6306 
    6307        ENDIF
    6308        
    6309     END SUBROUTINE usm_read_restart_data
     6388    END SUBROUTINE usm_rrd_local
    63106389   
    63116390
     
    73567435! Description:
    73577436! ------------
    7358 !> Subroutine writes t_surf and t_wall data into restart files
     7437!> Subroutine writes t_surf and t_wall data into restart files. It is necessary
     7438!> to write start_index and end_index several times
    73597439!kanani: Renamed this routine according to corresponging routines in PALM
    7360 !kanani: Modified the routine to match write_var_list, from where usm_write_restart_data
     7440!kanani: Modified the routine to match wrd_global, from where usm_wrd_local
    73617441!        shall be called in the future. This part has not been tested yet. (see virtual_flight_mod)
    73627442!        Also, I had some trouble with the allocation of t_surf, since this is a pointer.
    73637443!        So, I added some directives here.
    73647444!------------------------------------------------------------------------------!
    7365     SUBROUTINE usm_write_restart_data
     7445    SUBROUTINE usm_wrd_local
     7446
    73667447   
    73677448       IMPLICIT NONE
     
    73697450       CHARACTER(LEN=1) ::  dum     !< dummy string to create output-variable name 
    73707451       INTEGER(iwp)     ::  l       !< index surface type orientation
     7452
     7453       CALL wrd_write_string( 'ns_h_on_file_usm' )
     7454       WRITE ( 14 )  surf_usm_h%ns
     7455
     7456       CALL wrd_write_string( 'ns_v_on_file_usm' )
     7457       WRITE ( 14 )  surf_usm_v(0:3)%ns
     7458
     7459       CALL wrd_write_string( 'usm_start_index_h' )
     7460       WRITE ( 14 )  surf_usm_h%start_index
     7461
     7462       CALL wrd_write_string( 'usm_end_index_h' )
     7463       WRITE ( 14 )  surf_usm_h%end_index
     7464
     7465       CALL wrd_write_string( 't_surf_h' )
     7466       WRITE ( 14 )  t_surf_h
     7467
     7468       CALL wrd_write_string( 't_surf_window_h' )
     7469       WRITE ( 14 )  t_surf_window_h
     7470
     7471       CALL wrd_write_string( 't_surf_green_h' )
     7472       WRITE ( 14 )  t_surf_green_h
     7473
     7474       DO  l = 0, 3
     7475
     7476          CALL wrd_write_string( 'usm_start_index_v' )
     7477          WRITE ( 14 )  surf_usm_v(l)%start_index
     7478
     7479          CALL wrd_write_string( 'usm_end_index_v' )
     7480          WRITE ( 14 )  surf_usm_v(l)%end_index
     7481
     7482          WRITE( dum, '(I1)')  l         
     7483
     7484          CALL wrd_write_string( 't_surf_v(' // dum // ')' )
     7485          WRITE ( 14 )  t_surf_v(l)%t
     7486
     7487          CALL wrd_write_string( 't_surf_window_v(' // dum // ')' )
     7488          WRITE ( 14 ) t_surf_window_v(l)%t     
     7489
     7490          CALL wrd_write_string( 't_surf_green_v(' // dum // ')' )
     7491          WRITE ( 14 ) t_surf_green_v(l)%t   
     7492         
     7493       ENDDO
     7494
     7495       CALL wrd_write_string( 'usm_start_index_h' )
     7496       WRITE ( 14 )  surf_usm_h%start_index
     7497
     7498       CALL wrd_write_string( 'usm_end_index_h' )
     7499       WRITE ( 14 )  surf_usm_h%end_index
     7500
     7501       CALL wrd_write_string( 't_wall_h' )
     7502       WRITE ( 14 )  t_wall_h
     7503
     7504       CALL wrd_write_string( 't_window_h' )
     7505       WRITE ( 14 )  t_window_h
     7506
     7507       CALL wrd_write_string( 't_green_h' )
     7508       WRITE ( 14 )  t_green_h
     7509
     7510       DO  l = 0, 3
     7511
     7512          CALL wrd_write_string( 'usm_start_index_v' )
     7513          WRITE ( 14 )  surf_usm_v(l)%start_index
     7514
     7515          CALL wrd_write_string( 'usm_end_index_v' )
     7516          WRITE ( 14 )  surf_usm_v(l)%end_index
     7517
     7518          WRITE( dum, '(I1)')  l     
     7519
     7520          CALL wrd_write_string( 't_wall_v(' // dum // ')' )
     7521          WRITE ( 14 )  t_wall_v(l)%t
     7522
     7523          CALL wrd_write_string( 't_window_v(' // dum // ')' )
     7524          WRITE ( 14 )  t_window_v(l)%t
     7525
     7526          CALL wrd_write_string( 't_green_v(' // dum // ')' )
     7527          WRITE ( 14 )  t_green_v(l)%t
    73717528       
    7372        WRITE ( 14 ) 'ns_h_on_file_usm              '
    7373        WRITE ( 14 ) surf_usm_h%ns
    7374        WRITE ( 14 ) 'ns_v_on_file_usm              '
    7375        WRITE ( 14 ) surf_usm_v(0:3)%ns
     7529       ENDDO
     7530
    73767531       
    7377        WRITE ( 14 ) 'usm_start_index_h             '
    7378        WRITE ( 14 ) surf_usm_h%start_index
    7379        WRITE ( 14 ) 'usm_end_index_h               '
    7380        WRITE ( 14 ) surf_usm_h%end_index
    7381        WRITE ( 14 ) 't_surf_h                      '
    7382        WRITE ( 14 ) t_surf_h
    7383        WRITE ( 14 ) 't_surf_window_h               '
    7384        WRITE ( 14 ) t_surf_window_h
    7385        WRITE ( 14 ) 't_surf_green_h                '
    7386        WRITE ( 14 ) t_surf_green_h
    7387        
    7388        DO  l = 0, 3
    7389           WRITE ( 14 ) 'usm_start_index_v             '
    7390           WRITE ( 14 ) surf_usm_v(l)%start_index
    7391           WRITE ( 14 ) 'usm_end_index_v               '
    7392           WRITE ( 14 ) surf_usm_v(l)%end_index
    7393           WRITE( dum, '(I1)')  l         
    7394           WRITE ( 14 ) 't_surf_v(' // dum // ')                   '
    7395           WRITE ( 14 ) t_surf_v(l)%t         
    7396           WRITE ( 14 ) 't_surf_window_v(' // dum // ')            '
    7397           WRITE ( 14 ) t_surf_window_v(l)%t         
    7398           WRITE ( 14 ) 't_surf_green_v(' // dum // ')             '
    7399           WRITE ( 14 ) t_surf_green_v(l)%t         
    7400        ENDDO
    7401 
    7402        WRITE ( 14 ) 'usm_start_index_h             '
    7403        WRITE ( 14 ) surf_usm_h%start_index
    7404        WRITE ( 14 ) 'usm_end_index_h               '
    7405        WRITE ( 14 ) surf_usm_h%end_index
    7406        WRITE ( 14 ) 't_wall_h                      '
    7407        WRITE ( 14 ) t_wall_h
    7408        WRITE ( 14 ) 't_window_h                    '
    7409        WRITE ( 14 ) t_window_h
    7410        WRITE ( 14 ) 't_green_h                     '
    7411        WRITE ( 14 ) t_green_h
    7412        DO  l = 0, 3
    7413           WRITE ( 14 ) 'usm_start_index_v             '
    7414           WRITE ( 14 ) surf_usm_v(l)%start_index
    7415           WRITE ( 14 ) 'usm_end_index_v               '
    7416           WRITE ( 14 ) surf_usm_v(l)%end_index
    7417           WRITE( dum, '(I1)')  l         
    7418           WRITE ( 14 )  't_wall_v(' // dum // ')                   '
    7419           WRITE ( 14 )  t_wall_v(l)%t         
    7420           WRITE ( 14 )  't_window_v(' // dum // ')                 '
    7421           WRITE ( 14 )  t_window_v(l)%t         
    7422           WRITE ( 14 )  't_green_v(' // dum // ')                  '
    7423           WRITE ( 14 )  t_green_v(l)%t         
    7424        ENDDO
    7425 
    7426        WRITE ( 14 )  '*** end usm ***               '
    7427        
    7428     END SUBROUTINE usm_write_restart_data
     7532    END SUBROUTINE usm_wrd_local
    74297533
    74307534!
Note: See TracChangeset for help on using the changeset viewer.