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

Reading/Writing? data in case of restart runs revised

File:
1 edited

Legend:

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

    r2813 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! surface_read/write_restart_data was renamed to surface_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, surface_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
     37! surf *** 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 (Giersch)
     40!
     41! 2813 2018-02-16 16:28:14Z suehring
    2842! Some more bugfixes concerning restart runs
    2943!
     
    432446    END INTERFACE init_surface_arrays
    433447
    434     INTERFACE surface_read_restart_data
    435        MODULE PROCEDURE surface_read_restart_data
    436     END INTERFACE surface_read_restart_data
    437 
    438     INTERFACE surface_write_restart_data
    439        MODULE PROCEDURE surface_write_restart_data
    440     END INTERFACE surface_write_restart_data
     448    INTERFACE surface_rrd_local
     449       MODULE PROCEDURE surface_rrd_local
     450    END INTERFACE surface_rrd_local
     451
     452    INTERFACE surface_wrd_local
     453       MODULE PROCEDURE surface_wrd_local
     454    END INTERFACE surface_wrd_local
    441455
    442456    INTERFACE surface_last_actions
     
    457471    PUBLIC get_topography_top_index, get_topography_top_index_ji, init_bc,     &
    458472           init_surfaces,                                                      &
    459            init_surface_arrays, surface_read_restart_data,                     &
    460            surface_restore_elements, surface_write_restart_data,               &
     473           init_surface_arrays, surface_rrd_local,                     &
     474           surface_restore_elements, surface_wrd_local,               &
    461475           surface_last_actions
    462476
     
    888902    END SUBROUTINE init_surface_arrays
    889903
     904
     905!------------------------------------------------------------------------------!
     906! Description:
     907! ------------
     908!> Deallocating memory for upward and downward-facing horizontal surface types,
     909!> except for top fluxes.
     910!------------------------------------------------------------------------------!
     911    SUBROUTINE deallocate_surface_attributes_h( surfaces )
     912
     913       IMPLICIT NONE
     914
     915
     916       TYPE(surf_type) ::  surfaces  !< respective surface type
     917
     918
     919       DEALLOCATE ( surfaces%start_index )
     920       DEALLOCATE ( surfaces%end_index )
     921!
     922!--    Indices to locate surface element
     923       DEALLOCATE ( surfaces%i )
     924       DEALLOCATE ( surfaces%j )
     925       DEALLOCATE ( surfaces%k )
     926!
     927!--    Surface-layer height
     928       DEALLOCATE ( surfaces%z_mo )
     929!
     930!--    Surface orientation
     931       DEALLOCATE ( surfaces%facing )
     932!
     933!--    Surface-parallel wind velocity
     934       DEALLOCATE ( surfaces%uvw_abs )
     935!
     936!--    Roughness
     937       DEALLOCATE ( surfaces%z0 )
     938       DEALLOCATE ( surfaces%z0h )
     939       DEALLOCATE ( surfaces%z0q )
     940!
     941!--    Friction velocity
     942       DEALLOCATE ( surfaces%us )
     943!
     944!--    Stability parameter
     945       DEALLOCATE ( surfaces%ol )
     946!
     947!--    Bulk Richardson number
     948       DEALLOCATE ( surfaces%rib )
     949!
     950!--    Vertical momentum fluxes of u and v
     951       DEALLOCATE ( surfaces%usws ) 
     952       DEALLOCATE ( surfaces%vsws ) 
     953!
     954!--    Required in production_e
     955       IF ( .NOT. constant_diffusion )  THEN   
     956          DEALLOCATE ( surfaces%u_0 ) 
     957          DEALLOCATE ( surfaces%v_0 )
     958       ENDIF
     959!
     960!--    Characteristic temperature and surface flux of sensible heat
     961       DEALLOCATE ( surfaces%ts )   
     962       DEALLOCATE ( surfaces%shf )   
     963!
     964!--    surface temperature
     965       DEALLOCATE ( surfaces%pt_surface )
     966!
     967!--    Characteristic humidity and surface flux of latent heat
     968       IF ( humidity )  THEN
     969          DEALLOCATE ( surfaces%qs )
     970          DEALLOCATE ( surfaces%qsws )     
     971       ENDIF
     972!
     973!--    Characteristic scalar and surface flux of scalar
     974       IF ( passive_scalar )  THEN
     975          DEALLOCATE ( surfaces%ss )   
     976          DEALLOCATE ( surfaces%ssws )
     977       ENDIF
     978!
     979!--    Scaling parameter (cs*) and surface flux of chemical species
     980       IF ( air_chemistry )  THEN
     981          DEALLOCATE ( surfaces%css )   
     982          DEALLOCATE ( surfaces%cssws )
     983       ENDIF
     984!
     985!--    Arrays for storing potential temperature and
     986!--    specific humidity at first grid level
     987       DEALLOCATE ( surfaces%pt1 )
     988       DEALLOCATE ( surfaces%qv1 )
     989!
     990!--       
     991       IF ( cloud_physics .AND. microphysics_morrison)  THEN
     992          DEALLOCATE ( surfaces%qcs )
     993          DEALLOCATE ( surfaces%ncs )
     994          DEALLOCATE ( surfaces%qcsws )
     995          DEALLOCATE ( surfaces%ncsws )
     996       ENDIF
     997!
     998!--       
     999       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1000          DEALLOCATE ( surfaces%qrs )
     1001          DEALLOCATE ( surfaces%nrs )
     1002          DEALLOCATE ( surfaces%qrsws )
     1003          DEALLOCATE ( surfaces%nrsws )
     1004       ENDIF
     1005!
     1006!--    Salinity surface flux
     1007       IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1008
     1009    END SUBROUTINE deallocate_surface_attributes_h
     1010
     1011
    8901012!------------------------------------------------------------------------------!
    8911013! Description:
     
    9161038!--    might exist for given (j,i).
    9171039!--    If no surface of respective type exist at current (j,i), set indicies
    918 !--    such that loop in diffusion routines will not be entered. 
     1040!--    such that loop in diffusion routines will not be entered.
    9191041       ALLOCATE ( surfaces%start_index(nys_l:nyn_l,nxl_l:nxr_l) )
    9201042       ALLOCATE ( surfaces%end_index(nys_l:nyn_l,nxl_l:nxr_l)   )
     
    10151137! Description:
    10161138! ------------
     1139!> Deallocating memory for model-top fluxes 
     1140!------------------------------------------------------------------------------!
     1141    SUBROUTINE deallocate_surface_attributes_h_top( surfaces )
     1142
     1143       IMPLICIT NONE
     1144
     1145
     1146       TYPE(surf_type) ::  surfaces !< respective surface type
     1147
     1148       DEALLOCATE ( surfaces%start_index )
     1149       DEALLOCATE ( surfaces%end_index )
     1150!
     1151!--    Indices to locate surface (model-top) element
     1152       DEALLOCATE ( surfaces%i )
     1153       DEALLOCATE ( surfaces%j )
     1154       DEALLOCATE ( surfaces%k )
     1155
     1156       IF ( .NOT. constant_diffusion )  THEN   
     1157          DEALLOCATE ( surfaces%u_0 ) 
     1158          DEALLOCATE ( surfaces%v_0 )
     1159       ENDIF
     1160!
     1161!--    Vertical momentum fluxes of u and v
     1162       DEALLOCATE ( surfaces%usws ) 
     1163       DEALLOCATE ( surfaces%vsws ) 
     1164!
     1165!--    Sensible heat flux
     1166       DEALLOCATE ( surfaces%shf )   
     1167!
     1168!--    Latent heat flux
     1169       IF ( humidity .OR. coupling_mode == 'ocean_to_atmosphere')  THEN
     1170          DEALLOCATE ( surfaces%qsws )     
     1171       ENDIF
     1172!
     1173!--    Scalar flux
     1174       IF ( passive_scalar )  THEN
     1175          DEALLOCATE ( surfaces%ssws )
     1176       ENDIF
     1177!
     1178!--    Chemical species flux
     1179       IF ( air_chemistry )  THEN
     1180          DEALLOCATE ( surfaces%cssws )
     1181       ENDIF
     1182!
     1183!--       
     1184       IF ( cloud_physics .AND. microphysics_morrison)  THEN
     1185          DEALLOCATE ( surfaces%qcsws )
     1186          DEALLOCATE ( surfaces%ncsws )
     1187       ENDIF
     1188!
     1189!--       
     1190       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1191          DEALLOCATE ( surfaces%qrsws )
     1192          DEALLOCATE ( surfaces%nrsws )
     1193       ENDIF
     1194!
     1195!--    Salinity flux
     1196       IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1197
     1198    END SUBROUTINE deallocate_surface_attributes_h_top
     1199
     1200
     1201!------------------------------------------------------------------------------!
     1202! Description:
     1203! ------------
    10171204!> Allocating memory for model-top fluxes 
    10181205!------------------------------------------------------------------------------!
     
    10821269
    10831270    END SUBROUTINE allocate_surface_attributes_h_top
     1271
     1272
     1273!------------------------------------------------------------------------------!
     1274! Description:
     1275! ------------
     1276!> Deallocating memory for vertical surface types.
     1277!------------------------------------------------------------------------------!
     1278    SUBROUTINE deallocate_surface_attributes_v( surfaces )
     1279
     1280       IMPLICIT NONE
     1281
     1282
     1283       TYPE(surf_type) ::  surfaces !< respective surface type
     1284
     1285!
     1286!--    Allocate arrays for start and end index of vertical surface type
     1287!--    for each (j,i)-grid point. This is required in diffion_x, which is
     1288!--    called for each (j,i). In order to find the location where the
     1289!--    respective flux is store within the surface-type, start- and end-
     1290!--    index are stored for each (j,i). For example, each (j,i) can have
     1291!--    several entries where fluxes for vertical surfaces might be stored. 
     1292!--    In the flat case, where no vertical walls exit, set indicies such
     1293!--    that loop in diffusion routines will not be entered.
     1294       DEALLOCATE ( surfaces%start_index )
     1295       DEALLOCATE ( surfaces%end_index )
     1296!
     1297!--    Indices to locate surface element.
     1298       DEALLOCATE ( surfaces%i )
     1299       DEALLOCATE ( surfaces%j )
     1300       DEALLOCATE ( surfaces%k )
     1301!
     1302!--    Surface-layer height
     1303       DEALLOCATE ( surfaces%z_mo )
     1304!
     1305!--    Surface orientation
     1306       DEALLOCATE ( surfaces%facing )
     1307!
     1308!--    Surface parallel wind velocity
     1309       DEALLOCATE ( surfaces%uvw_abs )
     1310!
     1311!--    Roughness
     1312       DEALLOCATE ( surfaces%z0 )
     1313       DEALLOCATE ( surfaces%z0h )
     1314       DEALLOCATE ( surfaces%z0q )
     1315
     1316!
     1317!--    Friction velocity
     1318       DEALLOCATE ( surfaces%us )
     1319!
     1320!--    Allocate Obukhov length and bulk Richardson number. Actually, at
     1321!--    vertical surfaces these are only required for natural surfaces. 
     1322!--    for natural land surfaces
     1323       DEALLOCATE( surfaces%ol )
     1324       DEALLOCATE( surfaces%rib )
     1325!
     1326!--    Allocate arrays for surface momentum fluxes for u and v. For u at north-
     1327!--    and south-facing surfaces, for v at east- and west-facing surfaces.
     1328       DEALLOCATE ( surfaces%mom_flux_uv )
     1329!
     1330!--    Allocate array for surface momentum flux for w - wsus and wsvs
     1331       DEALLOCATE ( surfaces%mom_flux_w )
     1332!
     1333!--    Allocate array for surface momentum flux for subgrid-scale tke wsus and
     1334!--    wsvs; first index usvs or vsws, second index for wsus or wsvs, depending
     1335!--    on surface.
     1336       DEALLOCATE ( surfaces%mom_flux_tke ) 
     1337!
     1338!--    Characteristic temperature and surface flux of sensible heat
     1339       DEALLOCATE ( surfaces%ts )   
     1340       DEALLOCATE ( surfaces%shf )
     1341!
     1342!--    surface temperature
     1343       DEALLOCATE ( surfaces%pt_surface )
     1344!
     1345!--    Characteristic humidity and surface flux of latent heat
     1346       IF ( humidity )  THEN
     1347          DEALLOCATE ( surfaces%qs )
     1348          DEALLOCATE ( surfaces%qsws )     
     1349       ENDIF
     1350!
     1351!--    Characteristic scalar and surface flux of scalar
     1352       IF ( passive_scalar )  THEN
     1353          DEALLOCATE ( surfaces%ss )   
     1354          DEALLOCATE ( surfaces%ssws )
     1355       ENDIF
     1356!
     1357!--    Scaling parameter (cs*) and surface flux of chemical species
     1358       IF ( air_chemistry )  THEN
     1359             DEALLOCATE ( surfaces%css )   
     1360             DEALLOCATE ( surfaces%cssws )
     1361       ENDIF
     1362!
     1363!--    Arrays for storing potential temperature and
     1364!--    specific humidity at first grid level
     1365       DEALLOCATE ( surfaces%pt1 )
     1366       DEALLOCATE ( surfaces%qv1 )
     1367
     1368       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1369          DEALLOCATE ( surfaces%qcs )
     1370          DEALLOCATE ( surfaces%ncs )
     1371          DEALLOCATE ( surfaces%qcsws )
     1372          DEALLOCATE ( surfaces%ncsws )
     1373       ENDIF
     1374
     1375       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1376          DEALLOCATE ( surfaces%qrs )
     1377          DEALLOCATE ( surfaces%nrs )
     1378          DEALLOCATE ( surfaces%qrsws )
     1379          DEALLOCATE ( surfaces%nrsws )
     1380       ENDIF
     1381!
     1382!--    Salinity surface flux
     1383       IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1384
     1385    END SUBROUTINE deallocate_surface_attributes_v
     1386
    10841387
    10851388!------------------------------------------------------------------------------!
     
    12031506
    12041507    END SUBROUTINE allocate_surface_attributes_v
     1508
    12051509
    12061510!------------------------------------------------------------------------------!
     
    21752479!> type) onto a surface type, and writes binary data into restart files.
    21762480!------------------------------------------------------------------------------!
    2177     SUBROUTINE surface_write_restart_data
     2481    SUBROUTINE surface_wrd_local
     2482
    21782483
    21792484       IMPLICIT NONE
     
    26372942
    26382943
    2639        WRITE ( 14 )  'ns_h_on_file                  '
    2640        WRITE ( 14 )   ns_h_on_file
    2641        WRITE ( 14 )  'ns_v_on_file                  '
    2642        WRITE ( 14 )   ns_v_on_file
     2944       CALL wrd_write_string( 'ns_h_on_file' )
     2945       WRITE ( 14 )  ns_h_on_file
     2946
     2947       CALL wrd_write_string( 'ns_v_on_file' )
     2948       WRITE ( 14 )  ns_v_on_file
     2949
    26432950!
    26442951!--    Write required restart data.
     
    26462953       DO  l = 0, 2
    26472954          WRITE( dum, '(I1)')  l
    2648          
    2649           WRITE ( 14 )  'surf_h(' // dum // ')%start_index         ' 
    2650           WRITE ( 14 )   surf_h(l)%start_index
    2651           WRITE ( 14 )  'surf_h(' // dum // ')%end_index           ' 
    2652           WRITE ( 14 )   surf_h(l)%end_index
     2955
     2956          CALL wrd_write_string( 'surf_h(' // dum // ')%start_index' )
     2957          WRITE ( 14 )  surf_h(l)%start_index
     2958
     2959          CALL wrd_write_string( 'surf_h(' // dum // ')%end_index' )
     2960          WRITE ( 14 )  surf_h(l)%end_index
    26532961
    26542962          IF ( ALLOCATED ( surf_h(l)%us ) )  THEN
    2655              WRITE ( 14 )  'surf_h(' // dum // ')%us                  '
     2963             CALL wrd_write_string( 'surf_h(' // dum // ')%us' )
    26562964             WRITE ( 14 )  surf_h(l)%us
    2657           ENDIF
     2965          ENDIF
     2966
    26582967          IF ( ALLOCATED ( surf_h(l)%ts ) )  THEN
    2659              WRITE ( 14 )  'surf_h(' // dum // ')%ts                  '
     2968             CALL wrd_write_string( 'surf_h(' // dum // ')%ts' )
    26602969             WRITE ( 14 )  surf_h(l)%ts
    26612970          ENDIF
     2971         
    26622972          IF ( ALLOCATED ( surf_h(l)%qs ) )  THEN
    2663              WRITE ( 14 )  'surf_h(' // dum // ')%qs                  ' 
     2973             CALL wrd_write_string( 'surf_h(' // dum // ')%qs' ) 
    26642974             WRITE ( 14 )  surf_h(l)%qs
    26652975          ENDIF
     2976
    26662977          IF ( ALLOCATED ( surf_h(l)%ss ) )  THEN
    2667              WRITE ( 14 )  'surf_h(' // dum // ')%ss                  ' 
     2978             CALL wrd_write_string( 'surf_h(' // dum // ')%ss' ) 
    26682979             WRITE ( 14 )  surf_h(l)%ss
    26692980          ENDIF
     2981
    26702982          IF ( ALLOCATED ( surf_h(l)%qcs ) )  THEN 
    2671              WRITE ( 14 )  'surf_h(' // dum // ')%qcs                 '
     2983             CALL wrd_write_string( 'surf_h(' // dum // ')%qcs' )
    26722984             WRITE ( 14 )  surf_h(l)%qcs
    26732985          ENDIF
     2986
    26742987          IF ( ALLOCATED ( surf_h(l)%ncs ) )  THEN
    2675              WRITE ( 14 )  'surf_h(' // dum // ')%ncs                 '
     2988             CALL wrd_write_string( 'surf_h(' // dum // ')%ncs' )
    26762989             WRITE ( 14 )  surf_h(l)%ncs
    26772990          ENDIF
     2991
    26782992          IF ( ALLOCATED ( surf_h(l)%qrs ) )  THEN 
    2679              WRITE ( 14 )  'surf_h(' // dum // ')%qrs                 '
     2993             CALL wrd_write_string( 'surf_h(' // dum // ')%qrs' )
    26802994             WRITE ( 14 )  surf_h(l)%qrs
    26812995          ENDIF
     2996
    26822997          IF ( ALLOCATED ( surf_h(l)%nrs ) )  THEN
    2683              WRITE ( 14 )  'surf_h(' // dum // ')%nrs                 ' 
     2998             CALL wrd_write_string( 'surf_h(' // dum // ')%nrs' ) 
    26842999             WRITE ( 14 )  surf_h(l)%nrs
    26853000          ENDIF
     3001
    26863002          IF ( ALLOCATED ( surf_h(l)%ol ) )  THEN
    2687              WRITE ( 14 )  'surf_h(' // dum // ')%ol                  ' 
     3003             CALL wrd_write_string( 'surf_h(' // dum // ')%ol' ) 
    26883004             WRITE ( 14 )  surf_h(l)%ol
    2689           ENDIF
     3005          ENDIF
     3006
    26903007          IF ( ALLOCATED ( surf_h(l)%rib ) )  THEN
    2691              WRITE ( 14 )  'surf_h(' // dum // ')%rib                 '
     3008            CALL wrd_write_string( 'surf_h(' // dum // ')%rib' )
    26923009             WRITE ( 14 )  surf_h(l)%rib
    2693           ENDIF
     3010          ENDIF
     3011
    26943012          IF ( ALLOCATED ( surf_h(l)%pt_surface ) )  THEN
    2695              WRITE ( 14 )  'surf_h(' // dum // ')%pt_surface          '
     3013             CALL wrd_write_string( 'surf_h(' // dum // ')%pt_surface' )
    26963014             WRITE ( 14 )  surf_h(l)%pt_surface
    2697           ENDIF
     3015          ENDIF
     3016
    26983017          IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
    2699              WRITE ( 14 )  'surf_h(' // dum // ')%usws                '
     3018             CALL wrd_write_string( 'surf_h(' // dum // ')%usws' )
    27003019             WRITE ( 14 )  surf_h(l)%usws
    27013020          ENDIF
     3021
    27023022          IF ( ALLOCATED ( surf_h(l)%vsws ) )  THEN
    2703              WRITE ( 14 )  'surf_h(' // dum // ')%vsws                ' 
     3023             CALL wrd_write_string( 'surf_h(' // dum // ')%vsws' ) 
    27043024             WRITE ( 14 )  surf_h(l)%vsws
    27053025          ENDIF
     3026         
    27063027          IF ( ALLOCATED ( surf_h(l)%shf ) )  THEN
    2707              WRITE ( 14 )  'surf_h(' // dum // ')%shf                 '
     3028             CALL wrd_write_string( 'surf_h(' // dum // ')%shf' )
    27083029             WRITE ( 14 )  surf_h(l)%shf
    27093030          ENDIF
     3031
    27103032          IF ( ALLOCATED ( surf_h(l)%qsws ) )  THEN
    2711              WRITE ( 14 )  'surf_h(' // dum // ')%qsws                ' 
     3033             CALL wrd_write_string( 'surf_h(' // dum // ')%qsws' ) 
    27123034             WRITE ( 14 )  surf_h(l)%qsws
    27133035          ENDIF
     3036
    27143037          IF ( ALLOCATED ( surf_h(l)%ssws ) )  THEN
    2715              WRITE ( 14 )  'surf_h(' // dum // ')%ssws                ' 
     3038             CALL wrd_write_string( 'surf_h(' // dum // ')%ssws' ) 
    27163039             WRITE ( 14 )  surf_h(l)%ssws
    27173040          ENDIF
     3041
    27183042          IF ( ALLOCATED ( surf_h(l)%css ) )  THEN
    2719              WRITE ( 14 )  'surf_h(' // dum // ')%css                 '
     3043             CALL wrd_write_string( 'surf_h(' // dum // ')%css' )
    27203044             WRITE ( 14 )  surf_h(l)%css
    27213045          ENDIF
     3046
    27223047          IF ( ALLOCATED ( surf_h(l)%cssws ) )  THEN
    2723              WRITE ( 14 )  'surf_h(' // dum // ')%cssws               '
     3048             CALL wrd_write_string( 'surf_h(' // dum // ')%cssws' )
    27243049             WRITE ( 14 )  surf_h(l)%cssws
    27253050          ENDIF
     3051
    27263052          IF ( ALLOCATED ( surf_h(l)%qcsws ) )  THEN
    2727              WRITE ( 14 )  'surf_h(' // dum // ')%qcsws               ' 
     3053             CALL wrd_write_string( 'surf_h(' // dum // ')%qcsws' ) 
    27283054             WRITE ( 14 )  surf_h(l)%qcsws
    27293055          ENDIF
     3056
    27303057          IF ( ALLOCATED ( surf_h(l)%ncsws ) )  THEN
    2731              WRITE ( 14 )  'surf_h(' // dum // ')%ncsws               ' 
     3058             CALL wrd_write_string( 'surf_h(' // dum // ')%ncsws' ) 
    27323059             WRITE ( 14 )  surf_h(l)%ncsws
    27333060          ENDIF
     3061
    27343062          IF ( ALLOCATED ( surf_h(l)%qrsws ) )  THEN
    2735              WRITE ( 14 )  'surf_h(' // dum // ')%qrsws               ' 
     3063             CALL wrd_write_string( 'surf_h(' // dum // ')%qrsws' ) 
    27363064             WRITE ( 14 )  surf_h(l)%qrsws
    27373065          ENDIF
     3066
    27383067          IF ( ALLOCATED ( surf_h(l)%nrsws ) )  THEN
    2739              WRITE ( 14 )  'surf_h(' // dum // ')%nrsws               ' 
     3068             CALL wrd_write_string( 'surf_h(' // dum // ')%nrsws' ) 
    27403069             WRITE ( 14 )  surf_h(l)%nrsws
    27413070          ENDIF
     3071
    27423072          IF ( ALLOCATED ( surf_h(l)%sasws ) )  THEN
    2743              WRITE ( 14 )  'surf_h(' // dum // ')%sasws               '
     3073             CALL wrd_write_string( 'surf_h(' // dum // ')%sasws' )
    27443074             WRITE ( 14 )  surf_h(l)%sasws
    2745           ENDIF
     3075          ENDIF     
     3076 
    27463077       ENDDO
    27473078!
     
    27503081          WRITE( dum, '(I1)')  l
    27513082
    2752           WRITE ( 14 )  'surf_v(' // dum // ')%start_index         ' 
    2753           WRITE ( 14 )   surf_v(l)%start_index
    2754           WRITE ( 14 )  'surf_v(' // dum // ')%end_index           ' 
     3083          CALL wrd_write_string( 'surf_v(' // dum // ')%start_index' )
     3084          WRITE ( 14 )  surf_v(l)%start_index
     3085
     3086          CALL wrd_write_string( 'surf_v(' // dum // ')%end_index' )
    27553087          WRITE ( 14 )   surf_v(l)%end_index
    27563088
    27573089          IF ( ALLOCATED ( surf_v(l)%us ) )  THEN
    2758              WRITE ( 14 )  'surf_v(' // dum // ')%us                  ' 
     3090             CALL wrd_write_string( 'surf_v(' // dum // ')%us' ) 
    27593091             WRITE ( 14 )  surf_v(l)%us
    2760           ENDIF
     3092          ENDIF 
     3093
    27613094          IF ( ALLOCATED ( surf_v(l)%ts ) )  THEN
    2762              WRITE ( 14 )  'surf_v(' // dum // ')%ts                  '
     3095             CALL wrd_write_string( 'surf_v(' // dum // ')%ts' )
    27633096             WRITE ( 14 )  surf_v(l)%ts
    27643097          ENDIF
     3098
    27653099          IF ( ALLOCATED ( surf_v(l)%qs ) )  THEN
    2766              WRITE ( 14 )  'surf_v(' // dum // ')%qs                  ' 
     3100             CALL wrd_write_string( 'surf_v(' // dum // ')%qs' ) 
    27673101             WRITE ( 14 )  surf_v(l)%qs
    2768           ENDIF
     3102          ENDIF 
     3103
    27693104          IF ( ALLOCATED ( surf_v(l)%ss ) )  THEN
    2770              WRITE ( 14 )  'surf_v(' // dum // ')%ss                  '
     3105             CALL wrd_write_string( 'surf_v(' // dum // ')%ss' )
    27713106             WRITE ( 14 )  surf_v(l)%ss
    2772           ENDIF
     3107          ENDIF 
     3108         
    27733109          IF ( ALLOCATED ( surf_v(l)%qcs ) )  THEN
    2774              WRITE ( 14 )  'surf_v(' // dum // ')%qcs                 '
     3110             CALL wrd_write_string( 'surf_v(' // dum // ')%qcs' )
    27753111             WRITE ( 14 )  surf_v(l)%qcs
    27763112          ENDIF
     3113
    27773114          IF ( ALLOCATED ( surf_v(l)%ncs ) )  THEN
    2778              WRITE ( 14 )  'surf_v(' // dum // ')%ncs                 '
     3115             CALL wrd_write_string( 'surf_v(' // dum // ')%ncs' )
    27793116             WRITE ( 14 )  surf_v(l)%ncs
    27803117          ENDIF
     3118
    27813119          IF ( ALLOCATED ( surf_v(l)%qrs ) )  THEN
    2782              WRITE ( 14 )  'surf_v(' // dum // ')%qrs                 ' 
     3120             CALL wrd_write_string( 'surf_v(' // dum // ')%qrs' ) 
    27833121             WRITE ( 14 )  surf_v(l)%qrs
    27843122          ENDIF
     3123
    27853124          IF ( ALLOCATED ( surf_v(l)%nrs ) )  THEN
    2786              WRITE ( 14 )  'surf_v(' // dum // ')%nrs                 '
     3125             CALL wrd_write_string( 'surf_v(' // dum // ')%nrs' )
    27873126             WRITE ( 14 )  surf_v(l)%nrs
    2788           ENDIF
     3127          ENDIF 
     3128
    27893129          IF ( ALLOCATED ( surf_v(l)%ol ) )  THEN
    2790              WRITE ( 14 )  'surf_v(' // dum // ')%ol                  ' 
     3130             CALL wrd_write_string( 'surf_v(' // dum // ')%ol' ) 
    27913131             WRITE ( 14 )  surf_v(l)%ol
    27923132          ENDIF
     3133
    27933134          IF ( ALLOCATED ( surf_v(l)%rib ) )  THEN
    2794              WRITE ( 14 )  'surf_v(' // dum // ')%rib                 ' 
     3135             CALL wrd_write_string( 'surf_v(' // dum // ')%rib' )
    27953136             WRITE ( 14 )  surf_v(l)%rib
    27963137          ENDIF
     3138
    27973139          IF ( ALLOCATED ( surf_v(l)%pt_surface ) )  THEN
    2798              WRITE ( 14 )  'surf_v(' // dum // ')%pt_surface          ' 
     3140             CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' )
    27993141             WRITE ( 14 )  surf_v(l)%pt_surface
    2800           ENDIF
     3142          ENDIF
     3143
    28013144          IF ( ALLOCATED ( surf_v(l)%shf ) )  THEN
    2802              WRITE ( 14 )  'surf_v(' // dum // ')%shf                 ' 
     3145             CALL wrd_write_string( 'surf_v(' // dum // ')%shf' ) 
    28033146             WRITE ( 14 )  surf_v(l)%shf
    28043147          ENDIF
     3148
    28053149          IF ( ALLOCATED ( surf_v(l)%qsws ) )  THEN
    2806              WRITE ( 14 )  'surf_v(' // dum // ')%qsws                ' 
     3150             CALL wrd_write_string( 'surf_v(' // dum // ')%qsws' ) 
    28073151             WRITE ( 14 )  surf_v(l)%qsws
    28083152          ENDIF
     3153
    28093154          IF ( ALLOCATED ( surf_v(l)%ssws ) )  THEN
    2810              WRITE ( 14 )  'surf_v(' // dum // ')%ssws                ' 
     3155             CALL wrd_write_string( 'surf_v(' // dum // ')%ssws' ) 
    28113156             WRITE ( 14 )  surf_v(l)%ssws
    28123157          ENDIF
     3158
    28133159          IF ( ALLOCATED ( surf_v(l)%css ) )  THEN
    2814              WRITE ( 14 )  'surf_v(' // dum // ')%css                 ' 
     3160             CALL wrd_write_string( 'surf_v(' // dum // ')%css' ) 
    28153161             WRITE ( 14 )  surf_v(l)%css
    2816           ENDIF
     3162          ENDIF
     3163
    28173164          IF ( ALLOCATED ( surf_v(l)%cssws ) )  THEN
    2818              WRITE ( 14 )  'surf_v(' // dum // ')%cssws               '
     3165             CALL wrd_write_string( 'surf_v(' // dum // ')%cssws' )
    28193166             WRITE ( 14 )  surf_v(l)%cssws
    2820           ENDIF
     3167          ENDIF 
     3168
    28213169          IF ( ALLOCATED ( surf_v(l)%qcsws ) )  THEN
    2822              WRITE ( 14 )  'surf_v(' // dum // ')%qcsws               '
     3170             CALL wrd_write_string( 'surf_v(' // dum // ')%qcsws' )
    28233171             WRITE ( 14 )  surf_v(l)%qcsws
    2824           ENDIF
     3172          ENDIF 
     3173
    28253174          IF ( ALLOCATED ( surf_v(l)%ncsws ) )  THEN
    2826              WRITE ( 14 )  'surf_v(' // dum // ')%ncsws               '
     3175             CALL wrd_write_string( 'surf_v(' // dum // ')%ncsws' )
    28273176             WRITE ( 14 )  surf_v(l)%ncsws
    28283177          ENDIF
     3178
    28293179          IF ( ALLOCATED ( surf_v(l)%qrsws ) )  THEN
    2830              WRITE ( 14 )  'surf_v(' // dum // ')%qrsws               ' 
     3180             CALL wrd_write_string( 'surf_v(' // dum // ')%qrsws' ) 
    28313181             WRITE ( 14 )  surf_v(l)%qrsws
    2832           ENDIF
     3182          ENDIF 
     3183
    28333184          IF ( ALLOCATED ( surf_v(l)%nrsws ) )  THEN
    2834              WRITE ( 14 )  'surf_v(' // dum // ')%nrsws               ' 
     3185             CALL wrd_write_string( 'surf_v(' // dum // ')%nrsws' ) 
    28353186             WRITE ( 14 )  surf_v(l)%nrsws
    28363187          ENDIF
     3188
    28373189          IF ( ALLOCATED ( surf_v(l)%sasws ) )  THEN
    2838              WRITE ( 14 )  'surf_v(' // dum // ')%sasws               '
     3190             CALL wrd_write_string( 'surf_v(' // dum // ')%sasws' )
    28393191             WRITE ( 14 )  surf_v(l)%sasws
    28403192          ENDIF
     3193
    28413194          IF ( ALLOCATED ( surf_v(l)%mom_flux_uv ) )  THEN
    2842              WRITE ( 14 )  'surf_v(' // dum // ')%mom_uv              ' 
     3195             CALL wrd_write_string( 'surf_v(' // dum // ')%mom_uv' ) 
    28433196             WRITE ( 14 )  surf_v(l)%mom_flux_uv
    28443197          ENDIF
     3198
    28453199          IF ( ALLOCATED ( surf_v(l)%mom_flux_w ) )  THEN
    2846              WRITE ( 14 )  'surf_v(' // dum // ')%mom_w               '
     3200             CALL wrd_write_string( 'surf_v(' // dum // ')%mom_w' )
    28473201             WRITE ( 14 )  surf_v(l)%mom_flux_w
    28483202          ENDIF
     3203
    28493204          IF ( ALLOCATED ( surf_v(l)%mom_flux_tke ) )  THEN
    2850              WRITE ( 14 )  'surf_v(' // dum // ')%mom_tke             ' 
     3205             CALL wrd_write_string( 'surf_v(' // dum // ')%mom_tke' ) 
    28513206             WRITE ( 14 )  surf_v(l)%mom_flux_tke
    2852           ENDIF
     3207          ENDIF 
    28533208
    28543209       ENDDO
    28553210
    2856        WRITE ( 14 )  '*** end surf ***              '
    2857 
    2858     END SUBROUTINE surface_write_restart_data
     3211
     3212    END SUBROUTINE surface_wrd_local
    28593213
    28603214
     
    28703224!> of cyclic_fill mode.
    28713225!------------------------------------------------------------------------------!
    2872     SUBROUTINE surface_read_restart_data( ii,                                  &
    2873                                        nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
    2874                                        nynfa, nyn_on_file, nysfa, nys_on_file, &
    2875                                        offset_xa, offset_ya, overlap_count )
     3226    SUBROUTINE surface_rrd_local( ii, kk, nxlf, nxlc, nxl_on_file, nxrf, nxrc, &
     3227                                  nxr_on_file, nynf, nync, nyn_on_file, nysf,  &
     3228                                  nysc, nys_on_file, found )
    28763229
    28773230       USE pegrid,                                                             &
    2878            ONLY: numprocs_previous_run
     3231           ONLY: myid, numprocs_previous_run
     3232
     3233       IMPLICIT NONE
    28793234
    28803235       CHARACTER (LEN=1)  ::  dum         !< dummy to create correct string for reading input variable
    2881        CHARACTER (LEN=30) ::  field_chr   !< input variable
    28823236
    28833237       INTEGER(iwp)       ::  i           !< running index along x-direction, refers to former domain size
     
    28863240       INTEGER(iwp)       ::  jc          !< running index along y-direction, refers to former domain size
    28873241       INTEGER(iwp)       ::  k           !< running index along z-direction
    2888        INTEGER(iwp)       ::  l           !< index variable for surface type
    28893242       INTEGER(iwp)       ::  m           !< running index for surface elements, refers to gathered array encompassing all surface types
    28903243       INTEGER(iwp)       ::  mm          !< running index for surface elements, refers to individual surface types
    2891 
    28923244       INTEGER(iwp)       ::  ii               !< running index over input files
    28933245       INTEGER(iwp)       ::  kk               !< running index over previous input files covering current local domain
     
    29043256       INTEGER(iwp)       ::  nysf             !< index of south boundary on former subdomain
    29053257       INTEGER(iwp)       ::  nys_on_file      !< index of south boundary on former local domain 
    2906        INTEGER(iwp)       ::  overlap_count    !< number of overlaps
    2907  
    2908        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa       !<
    2909        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa       !<
    2910        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa       !<
    2911        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa       !<
    2912        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa   !<
    2913        INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya   !<
    2914 
    2915 
    2916        LOGICAL                         ::  horizontal_surface !< flag indicating horizontal surfaces
     3258
     3259       INTEGER(iwp), SAVE  ::  l           !< index variable for surface type
     3260
    29173261       LOGICAL                         ::  surf_match_def     !< flag indicating that surface element is of default type
    29183262       LOGICAL                         ::  surf_match_lsm     !< flag indicating that surface element is of natural type
    29193263       LOGICAL                         ::  surf_match_usm     !< flag indicating that surface element is of urban type
    2920        LOGICAL                         ::  vertical_surface   !< flag indicating vertical surfaces
    2921 
    2922        TYPE(surf_type), DIMENSION(0:2) ::  surf_h             !< horizontal surface type on file
    2923        TYPE(surf_type), DIMENSION(0:3) ::  surf_v             !< vertical surface type on file
    2924 
    2925 !
    2926 !--    Read number of respective surface elements on file
    2927        READ ( 13 )  field_chr
    2928        IF ( TRIM( field_chr ) /= 'ns_h_on_file' )  THEN
    2929 !
    2930 !--       Add a proper error message
    2931        ENDIF
    2932        READ ( 13 ) ns_h_on_file
    2933 
    2934        READ ( 13 )  field_chr
    2935        IF ( TRIM( field_chr ) /= 'ns_v_on_file' )  THEN
    2936 !
    2937 !--       Add a proper error message
    2938        ENDIF
    2939        READ ( 13 ) ns_v_on_file
    2940 !
    2941 !--    Allocate memory for number of surface elements on file. Please note,
    2942 !--    these number is not necessarily the same as the final number of surface
    2943 !--    elements on local domain, which is the case if processor topology changes
    2944 !--    during restart runs.
    2945 !--    Horizontal upward facing
    2946        surf_h(0)%ns = ns_h_on_file(0)
    2947        CALL allocate_surface_attributes_h( surf_h(0),                          &
     3264
     3265       LOGICAL, INTENT(OUT) ::  found
     3266
     3267       LOGICAL, SAVE ::  horizontal_surface !< flag indicating horizontal surfaces
     3268       LOGICAL, SAVE ::  vertical_surface   !< flag indicating vertical surfaces
     3269
     3270       TYPE(surf_type), DIMENSION(0:2), SAVE ::  surf_h             !< horizontal surface type on file
     3271       TYPE(surf_type), DIMENSION(0:3), SAVE ::  surf_v             !< vertical surface type on file
     3272
     3273
     3274       found              = .TRUE.
     3275
     3276
     3277       SELECT CASE ( restart_string(1:length) )
     3278
     3279          CASE ( 'ns_h_on_file' )
     3280             IF ( kk == 1 )  THEN
     3281                READ ( 13 )  ns_h_on_file
     3282
     3283                IF ( ALLOCATED( surf_h(0)%start_index ) )                      &
     3284                   CALL deallocate_surface_attributes_h( surf_h(0) )           
     3285                IF ( ALLOCATED( surf_h(1)%start_index ) )                      &
     3286                   CALL deallocate_surface_attributes_h( surf_h(1) )           
     3287                IF ( ALLOCATED( surf_h(2)%start_index ) )                      &
     3288                   CALL deallocate_surface_attributes_h_top( surf_h(2) )       
     3289
     3290!--             Allocate memory for number of surface elements on file.
     3291!--             Please note, these number is not necessarily the same as
     3292!--             the final number of surface elements on local domain,
     3293!--             which is the case if processor topology changes during
     3294!--             restart runs. 
     3295!--             Horizontal upward facing
     3296                surf_h(0)%ns = ns_h_on_file(0)
     3297                CALL allocate_surface_attributes_h( surf_h(0),                 &
     3298                                        nys_on_file, nyn_on_file,              &
     3299                                        nxl_on_file, nxr_on_file )
     3300
     3301!--             Horizontal downward facing
     3302                surf_h(1)%ns = ns_h_on_file(1)
     3303                CALL allocate_surface_attributes_h( surf_h(1),                 &
     3304                                        nys_on_file, nyn_on_file,              &
     3305                                        nxl_on_file, nxr_on_file )
     3306
     3307!--             Model top
     3308                surf_h(2)%ns = ns_h_on_file(2)
     3309                CALL allocate_surface_attributes_h_top( surf_h(2),             &
     3310                                            nys_on_file, nyn_on_file,          &
     3311                                            nxl_on_file, nxr_on_file )
     3312
     3313!
     3314!--             Initial setting of flags for horizontal and vertical surfaces,
     3315!--             will be set after start- and end-indices are read.
     3316                horizontal_surface = .FALSE.
     3317                vertical_surface   = .FALSE.
     3318
     3319             ENDIF   
     3320
     3321          CASE ( 'ns_v_on_file' )
     3322             IF ( kk == 1 ) THEN
     3323                READ ( 13 )  ns_v_on_file
     3324
     3325                DO  l = 0, 3
     3326                   IF ( ALLOCATED( surf_v(l)%start_index ) )                   &
     3327                      CALL deallocate_surface_attributes_v( surf_v(l) )
     3328                ENDDO
     3329
     3330!--                Vertical surfaces
     3331                DO  l = 0, 3
     3332                   surf_v(l)%ns = ns_v_on_file(l)
     3333                   CALL allocate_surface_attributes_v( surf_v(l),              &
    29483334                                           nys_on_file, nyn_on_file,           &
    29493335                                           nxl_on_file, nxr_on_file )
    2950 !
    2951 !--    Horizontal downward facing
    2952        surf_h(1)%ns = ns_h_on_file(1)
    2953        CALL allocate_surface_attributes_h( surf_h(1),                          &
    2954                                            nys_on_file, nyn_on_file,           &
    2955                                            nxl_on_file, nxr_on_file )
    2956 !
    2957 !--    Model top
    2958        surf_h(2)%ns = ns_h_on_file(2)
    2959        CALL allocate_surface_attributes_h_top( surf_h(2),                      &
    2960                                                nys_on_file, nyn_on_file,       &
    2961                                                nxl_on_file, nxr_on_file )
    2962 !
    2963 !--    Vertical surfaces
    2964        DO  l = 0, 3
    2965           surf_v(l)%ns = ns_v_on_file(l)
    2966           CALL allocate_surface_attributes_v( surf_v(l),                       &
    2967                                               nys_on_file, nyn_on_file,        &
    2968                                               nxl_on_file, nxr_on_file )
    2969        ENDDO
    2970 
    2971        IF ( initializing_actions == 'read_restart_data'  .OR.                  &
    2972             initializing_actions == 'cyclic_fill' )  THEN
    2973 !
    2974 !--       Initial setting of flags for horizontal and vertical surfaces, will
    2975 !--       be set after start- and end-indices are read.
    2976           horizontal_surface = .FALSE.
    2977           vertical_surface   = .FALSE.
    2978 
    2979           READ ( 13 )  field_chr
    2980 
    2981           DO  WHILE ( TRIM( field_chr ) /= '*** end surf ***' )
    2982 !
    2983 !--          Map data on file as often as needed (data are read only for k=1)
    2984              DO  kk = 1, overlap_count
    2985 !
    2986 !--             Get the index range of the subdomain on file which overlap with the
    2987 !--             current subdomain
    2988                 nxlf = nxlfa(ii,kk)
    2989                 nxlc = nxlfa(ii,kk) + offset_xa(ii,kk)
    2990                 nxrf = nxrfa(ii,kk)
    2991                 nxrc = nxrfa(ii,kk) + offset_xa(ii,kk)
    2992                 nysf = nysfa(ii,kk)
    2993                 nysc = nysfa(ii,kk) + offset_ya(ii,kk)
    2994                 nynf = nynfa(ii,kk)
    2995                 nync = nynfa(ii,kk) + offset_ya(ii,kk)
    2996 
    2997                 SELECT CASE ( TRIM( field_chr ) )
    2998 
    2999                    CASE ( 'surf_h(0)%start_index' )
    3000                       IF ( kk == 1 )                                           &
    3001                          READ ( 13 )  surf_h(0)%start_index
    3002                       l = 0
    3003                    CASE ( 'surf_h(0)%end_index' )   
    3004                       IF ( kk == 1 )                                           &
    3005                          READ ( 13 )  surf_h(0)%end_index
    3006                       horizontal_surface = .TRUE.
    3007                       vertical_surface   = .FALSE.
    3008                    CASE ( 'surf_h(0)%us' )         
    3009                       IF ( ALLOCATED( surf_h(0)%us )  .AND.  kk == 1 )         &
    3010                          READ ( 13 )  surf_h(0)%us
    3011                    CASE ( 'surf_h(0)%ts' )         
    3012                       IF ( ALLOCATED( surf_h(0)%ts )  .AND.  kk == 1 )         &
    3013                          READ ( 13 )  surf_h(0)%ts
    3014                    CASE ( 'surf_h(0)%qs' )         
    3015                       IF ( ALLOCATED( surf_h(0)%qs )  .AND.  kk == 1 )         &
    3016                          READ ( 13 )  surf_h(0)%qs
    3017                    CASE ( 'surf_h(0)%ss' )         
    3018                       IF ( ALLOCATED( surf_h(0)%ss )  .AND.  kk == 1 )         &
    3019                          READ ( 13 )  surf_h(0)%ss
    3020                    CASE ( 'surf_h(0)%qcs' )         
    3021                       IF ( ALLOCATED( surf_h(0)%qcs )  .AND.  kk == 1 )        &
    3022                          READ ( 13 )  surf_h(0)%qcs
    3023                    CASE ( 'surf_h(0)%ncs' )         
    3024                       IF ( ALLOCATED( surf_h(0)%ncs )  .AND.  kk == 1 )        &
    3025                          READ ( 13 )  surf_h(0)%ncs
    3026                    CASE ( 'surf_h(0)%qrs' )         
    3027                       IF ( ALLOCATED( surf_h(0)%qrs )  .AND.  kk == 1 )        &
    3028                          READ ( 13 )  surf_h(0)%qrs
    3029                    CASE ( 'surf_h(0)%nrs' )         
    3030                       IF ( ALLOCATED( surf_h(0)%nrs )  .AND.  kk == 1 )        &
    3031                          READ ( 13 )  surf_h(0)%nrs
    3032                    CASE ( 'surf_h(0)%ol' )         
    3033                       IF ( ALLOCATED( surf_h(0)%ol )  .AND.  kk == 1 )         &
    3034                          READ ( 13 )  surf_h(0)%ol
    3035                    CASE ( 'surf_h(0)%rib' )         
    3036                       IF ( ALLOCATED( surf_h(0)%rib )  .AND.  kk == 1 )        &
    3037                          READ ( 13 )  surf_h(0)%rib
    3038                    CASE ( 'surf_h(0)%pt_surface' )         
    3039                       IF ( ALLOCATED( surf_h(0)%pt_surface )  .AND.  kk == 1 ) &
    3040                          READ ( 13 )  surf_h(0)%pt_surface
    3041                    CASE ( 'surf_h(0)%usws' )         
    3042                       IF ( ALLOCATED( surf_h(0)%usws )  .AND.  kk == 1 )       &
    3043                          READ ( 13 )  surf_h(0)%usws
    3044                    CASE ( 'surf_h(0)%vsws' )         
    3045                       IF ( ALLOCATED( surf_h(0)%vsws )  .AND.  kk == 1 )       &
    3046                          READ ( 13 )  surf_h(0)%vsws
    3047                    CASE ( 'surf_h(0)%shf' )         
    3048                       IF ( ALLOCATED( surf_h(0)%shf )  .AND.  kk == 1 )        &
    3049                          READ ( 13 )  surf_h(0)%shf
    3050                    CASE ( 'surf_h(0)%qsws' )         
    3051                       IF ( ALLOCATED( surf_h(0)%qsws )  .AND.  kk == 1 )       &
    3052                          READ ( 13 )  surf_h(0)%qsws
    3053                    CASE ( 'surf_h(0)%ssws' )         
    3054                       IF ( ALLOCATED( surf_h(0)%ssws )  .AND.  kk == 1 )       &
    3055                          READ ( 13 )  surf_h(0)%ssws
    3056                    CASE ( 'surf_h(0)%css' )
    3057                       IF ( ALLOCATED( surf_h(0)%css )  .AND.  kk == 1 )        &
    3058                          READ ( 13 )  surf_h(0)%css
    3059                    CASE ( 'surf_h(0)%cssws' )         
    3060                       IF ( ALLOCATED( surf_h(0)%cssws )  .AND.  kk == 1 )      &
    3061                          READ ( 13 )  surf_h(0)%cssws
    3062                    CASE ( 'surf_h(0)%qcsws' )         
    3063                       IF ( ALLOCATED( surf_h(0)%qcsws )  .AND.  kk == 1 )      &
    3064                          READ ( 13 )  surf_h(0)%qcsws
    3065                    CASE ( 'surf_h(0)%ncsws' )         
    3066                       IF ( ALLOCATED( surf_h(0)%ncsws )  .AND.  kk == 1 )      &
    3067                          READ ( 13 )  surf_h(0)%ncsws
    3068                    CASE ( 'surf_h(0)%qrsws' )         
    3069                       IF ( ALLOCATED( surf_h(0)%qrsws )  .AND.  kk == 1 )      &
    3070                          READ ( 13 )  surf_h(0)%qrsws
    3071                    CASE ( 'surf_h(0)%nrsws' )         
    3072                       IF ( ALLOCATED( surf_h(0)%nrsws )  .AND.  kk == 1 )      &
    3073                          READ ( 13 )  surf_h(0)%nrsws
    3074                    CASE ( 'surf_h(0)%sasws' )         
    3075                       IF ( ALLOCATED( surf_h(0)%sasws )  .AND.  kk == 1 )      &
    3076                          READ ( 13 )  surf_h(0)%sasws
    3077 
    3078                    CASE ( 'surf_h(1)%start_index' )   
    3079                       IF ( kk == 1 )                                           &
    3080                          READ ( 13 )  surf_h(1)%start_index
    3081                       l = 1
    3082                    CASE ( 'surf_h(1)%end_index' )   
    3083                       IF ( kk == 1 )                                           &
    3084                          READ ( 13 )  surf_h(1)%end_index
    3085                    CASE ( 'surf_h(1)%us' )         
    3086                       IF ( ALLOCATED( surf_h(1)%us )  .AND.  kk == 1 )         &
    3087                          READ ( 13 )  surf_h(1)%us
    3088                    CASE ( 'surf_h(1)%ts' )         
    3089                       IF ( ALLOCATED( surf_h(1)%ts )  .AND.  kk == 1 )         &
    3090                          READ ( 13 )  surf_h(1)%ts
    3091                    CASE ( 'surf_h(1)%qs' )         
    3092                       IF ( ALLOCATED( surf_h(1)%qs )  .AND.  kk == 1 )         &
    3093                          READ ( 13 )  surf_h(1)%qs
    3094                    CASE ( 'surf_h(1)%ss' )         
    3095                       IF ( ALLOCATED( surf_h(1)%ss )  .AND.  kk == 1 )         &
    3096                          READ ( 13 )  surf_h(1)%ss
    3097                    CASE ( 'surf_h(1)%qcs' )         
    3098                       IF ( ALLOCATED( surf_h(1)%qcs )  .AND.  kk == 1 )        &
    3099                          READ ( 13 )  surf_h(1)%qcs
    3100                    CASE ( 'surf_h(1)%ncs' )         
    3101                       IF ( ALLOCATED( surf_h(1)%ncs )  .AND.  kk == 1 )        &
    3102                          READ ( 13 )  surf_h(1)%ncs
    3103                    CASE ( 'surf_h(1)%qrs' )         
    3104                       IF ( ALLOCATED( surf_h(1)%qrs )  .AND.  kk == 1 )        &
    3105                          READ ( 13 )  surf_h(1)%qrs
    3106                    CASE ( 'surf_h(1)%nrs' )         
    3107                       IF ( ALLOCATED( surf_h(1)%nrs )  .AND.  kk == 1 )        &
    3108                          READ ( 13 )  surf_h(1)%nrs
    3109                    CASE ( 'surf_h(1)%ol' )         
    3110                       IF ( ALLOCATED( surf_h(1)%ol )  .AND.  kk == 1 )         &
    3111                          READ ( 13 )  surf_h(1)%ol
    3112                    CASE ( 'surf_h(1)%rib' )         
    3113                       IF ( ALLOCATED( surf_h(1)%rib )  .AND.  kk == 1 )        &
    3114                          READ ( 13 )  surf_h(1)%rib
    3115                    CASE ( 'surf_h(1)%pt_surface' )         
    3116                       IF ( ALLOCATED( surf_h(1)%pt_surface )  .AND.  kk == 1 ) &
    3117                          READ ( 13 )  surf_h(1)%pt_surface
    3118                    CASE ( 'surf_h(1)%usws' )         
    3119                       IF ( ALLOCATED( surf_h(1)%usws )  .AND.  kk == 1 )       &
    3120                          READ ( 13 )  surf_h(1)%usws
    3121                    CASE ( 'surf_h(1)%vsws' )         
    3122                       IF ( ALLOCATED( surf_h(1)%vsws )  .AND.  kk == 1 )       &
    3123                          READ ( 13 )  surf_h(1)%vsws
    3124                    CASE ( 'surf_h(1)%shf' )         
    3125                       IF ( ALLOCATED( surf_h(1)%shf )  .AND.  kk == 1 )        &
    3126                          READ ( 13 )  surf_h(1)%shf
    3127                    CASE ( 'surf_h(1)%qsws' )         
    3128                       IF ( ALLOCATED( surf_h(1)%qsws )  .AND.  kk == 1 )       &
    3129                          READ ( 13 )  surf_h(1)%qsws
    3130                    CASE ( 'surf_h(1)%ssws' )         
    3131                       IF ( ALLOCATED( surf_h(1)%ssws )  .AND.  kk == 1 )       &
    3132                          READ ( 13 )  surf_h(1)%ssws
    3133                    CASE ( 'surf_h(1)%css' )
    3134                       IF ( ALLOCATED( surf_h(1)%css )  .AND.  kk == 1 )        &
    3135                          READ ( 13 )  surf_h(1)%css
    3136                    CASE ( 'surf_h(1)%cssws' )         
    3137                       IF ( ALLOCATED( surf_h(1)%cssws )  .AND.  kk == 1 )      &
    3138                          READ ( 13 )  surf_h(1)%cssws
    3139                    CASE ( 'surf_h(1)%qcsws' )         
    3140                       IF ( ALLOCATED( surf_h(1)%qcsws )  .AND.  kk == 1 )      &
    3141                          READ ( 13 )  surf_h(1)%qcsws
    3142                    CASE ( 'surf_h(1)%ncsws' )         
    3143                       IF ( ALLOCATED( surf_h(1)%ncsws )  .AND.  kk == 1 )      &
    3144                          READ ( 13 )  surf_h(1)%ncsws
    3145                    CASE ( 'surf_h(1)%qrsws' )         
    3146                       IF ( ALLOCATED( surf_h(1)%qrsws )  .AND.  kk == 1 )      &
    3147                          READ ( 13 )  surf_h(1)%qrsws
    3148                    CASE ( 'surf_h(1)%nrsws' )         
    3149                       IF ( ALLOCATED( surf_h(1)%nrsws )  .AND.  kk == 1 )      &
    3150                          READ ( 13 )  surf_h(1)%nrsws
    3151                    CASE ( 'surf_h(1)%sasws' )         
    3152                       IF ( ALLOCATED( surf_h(1)%sasws )  .AND.  kk == 1 )      &
    3153                          READ ( 13 )  surf_h(1)%sasws
    3154 
    3155                    CASE ( 'surf_h(2)%start_index' )   
    3156                       IF ( kk == 1 )                                           &
    3157                          READ ( 13 )  surf_h(2)%start_index
    3158                       l = 2
    3159                    CASE ( 'surf_h(2)%end_index' )   
    3160                       IF ( kk == 1 )                                           &
    3161                          READ ( 13 )  surf_h(2)%end_index
    3162                    CASE ( 'surf_h(2)%us' )         
    3163                       IF ( ALLOCATED( surf_h(2)%us )  .AND.  kk == 1 )         &
    3164                          READ ( 13 )  surf_h(2)%us
    3165                    CASE ( 'surf_h(2)%ts' )         
    3166                       IF ( ALLOCATED( surf_h(2)%ts )  .AND.  kk == 1 )         &
    3167                          READ ( 13 )  surf_h(2)%ts
    3168                    CASE ( 'surf_h(2)%qs' )       
    3169                       IF ( ALLOCATED( surf_h(2)%qs )  .AND.  kk == 1 )         &
    3170                          READ ( 13 )  surf_h(2)%qs
    3171                    CASE ( 'surf_h(2)%ss' )         
    3172                       IF ( ALLOCATED( surf_h(2)%ss )  .AND.  kk == 1 )         &
    3173                          READ ( 13 )  surf_h(2)%ss
    3174                    CASE ( 'surf_h(2)%qcs' )         
    3175                       IF ( ALLOCATED( surf_h(2)%qcs )  .AND.  kk == 1 )        &
    3176                          READ ( 13 )  surf_h(2)%qcs
    3177                    CASE ( 'surf_h(2)%ncs' )         
    3178                       IF ( ALLOCATED( surf_h(2)%ncs )  .AND.  kk == 1 )        &
    3179                          READ ( 13 )  surf_h(2)%ncs
    3180                    CASE ( 'surf_h(2)%qrs' )         
    3181                       IF ( ALLOCATED( surf_h(2)%qrs )  .AND.  kk == 1 )        &
    3182                          READ ( 13 )  surf_h(2)%qrs
    3183                    CASE ( 'surf_h(2)%nrs' )         
    3184                       IF ( ALLOCATED( surf_h(2)%nrs )  .AND.  kk == 1 )        &
    3185                          READ ( 13 )  surf_h(2)%nrs
    3186                    CASE ( 'surf_h(2)%ol' )         
    3187                       IF ( ALLOCATED( surf_h(2)%ol )  .AND.  kk == 1 )         &
    3188                          READ ( 13 )  surf_h(2)%ol
    3189                    CASE ( 'surf_h(2)%rib' )         
    3190                       IF ( ALLOCATED( surf_h(2)%rib )  .AND.  kk == 1 )        &
    3191                          READ ( 13 )  surf_h(2)%rib
    3192                    CASE ( 'surf_h(2)%usws' )         
    3193                       IF ( ALLOCATED( surf_h(2)%usws )  .AND.  kk == 1 )       &
    3194                          READ ( 13 )  surf_h(2)%usws
    3195                    CASE ( 'surf_h(2)%vsws' )         
    3196                       IF ( ALLOCATED( surf_h(2)%vsws )  .AND.  kk == 1 )       &
    3197                          READ ( 13 )  surf_h(2)%vsws
    3198                    CASE ( 'surf_h(2)%shf' )         
    3199                       IF ( ALLOCATED( surf_h(2)%shf )  .AND.  kk == 1 )        &
    3200                          READ ( 13 )  surf_h(2)%shf
    3201                    CASE ( 'surf_h(2)%qsws' )         
    3202                       IF ( ALLOCATED( surf_h(2)%qsws )  .AND.  kk == 1 )       &
    3203                          READ ( 13 )  surf_h(2)%qsws
    3204                    CASE ( 'surf_h(2)%ssws' )         
    3205                       IF ( ALLOCATED( surf_h(2)%ssws )  .AND.  kk == 1 )       &
    3206                          READ ( 13 )  surf_h(2)%ssws
    3207                    CASE ( 'surf_h(2)%css' )
    3208                       IF ( ALLOCATED( surf_h(2)%css )  .AND.  kk == 1 )        &
    3209                          READ ( 13 )  surf_h(2)%css
    3210                    CASE ( 'surf_h(2)%cssws' )         
    3211                       IF ( ALLOCATED( surf_h(2)%cssws )  .AND.  kk == 1 )      &
    3212                          READ ( 13 )  surf_h(2)%cssws
    3213                    CASE ( 'surf_h(2)%qcsws' )         
    3214                       IF ( ALLOCATED( surf_h(2)%qcsws )  .AND.  kk == 1 )      &
    3215                          READ ( 13 )  surf_h(2)%qcsws
    3216                    CASE ( 'surf_h(2)%ncsws' )         
    3217                       IF ( ALLOCATED( surf_h(2)%ncsws )  .AND.  kk == 1 )      &
    3218                          READ ( 13 )  surf_h(2)%ncsws
    3219                    CASE ( 'surf_h(2)%qrsws' )         
    3220                       IF ( ALLOCATED( surf_h(2)%qrsws )  .AND.  kk == 1 )      &
    3221                          READ ( 13 )  surf_h(2)%qrsws
    3222                    CASE ( 'surf_h(2)%nrsws' )         
    3223                       IF ( ALLOCATED( surf_h(2)%nrsws )  .AND.  kk == 1 )      &
    3224                          READ ( 13 )  surf_h(2)%nrsws
    3225                    CASE ( 'surf_h(2)%sasws' )         
    3226                       IF ( ALLOCATED( surf_h(2)%sasws )  .AND.  kk == 1 )      &
    3227                          READ ( 13 )  surf_h(2)%sasws
    3228 
    3229                    CASE ( 'surf_v(0)%start_index' )   
    3230                       IF ( kk == 1 )                                           &
    3231                          READ ( 13 )  surf_v(0)%start_index
    3232                       l = 0
    3233                       horizontal_surface = .FALSE.
    3234                       vertical_surface   = .TRUE.
    3235                    CASE ( 'surf_v(0)%end_index' )   
    3236                       IF ( kk == 1 )                                           &
    3237                          READ ( 13 )  surf_v(0)%end_index
    3238                    CASE ( 'surf_v(0)%us' )         
    3239                       IF ( ALLOCATED( surf_v(0)%us )  .AND.  kk == 1 )         &
    3240                          READ ( 13 )  surf_v(0)%us
    3241                    CASE ( 'surf_v(0)%ts' )         
    3242                       IF ( ALLOCATED( surf_v(0)%ts )  .AND.  kk == 1 )         &
    3243                          READ ( 13 )  surf_v(0)%ts
    3244                    CASE ( 'surf_v(0)%qs' )         
    3245                       IF ( ALLOCATED( surf_v(0)%qs )  .AND.  kk == 1 )         &
    3246                          READ ( 13 )  surf_v(0)%qs
    3247                    CASE ( 'surf_v(0)%ss' )         
    3248                       IF ( ALLOCATED( surf_v(0)%ss )  .AND.  kk == 1 )         &
    3249                          READ ( 13 )  surf_v(0)%ss
    3250                    CASE ( 'surf_v(0)%qcs' )         
    3251                       IF ( ALLOCATED( surf_v(0)%qcs )  .AND.  kk == 1 )        &
    3252                          READ ( 13 )  surf_v(0)%qcs
    3253                    CASE ( 'surf_v(0)%ncs' )         
    3254                       IF ( ALLOCATED( surf_v(0)%ncs )  .AND.  kk == 1 )        &
    3255                          READ ( 13 )  surf_v(0)%ncs
    3256                    CASE ( 'surf_v(0)%qrs' )         
    3257                       IF ( ALLOCATED( surf_v(0)%qrs )  .AND.  kk == 1 )        &
    3258                          READ ( 13 )  surf_v(0)%qrs
    3259                    CASE ( 'surf_v(0)%nrs' )         
    3260                       IF ( ALLOCATED( surf_v(0)%nrs )  .AND.  kk == 1 )        &
    3261                          READ ( 13 )  surf_v(0)%nrs
    3262                    CASE ( 'surf_v(0)%ol' )         
    3263                       IF ( ALLOCATED( surf_v(0)%ol )  .AND.  kk == 1 )         &
    3264                          READ ( 13 )  surf_v(0)%ol
    3265                    CASE ( 'surf_v(0)%rib' )         
    3266                       IF ( ALLOCATED( surf_v(0)%rib )  .AND.  kk == 1 )        &
    3267                          READ ( 13 )  surf_v(0)%rib
    3268                    CASE ( 'surf_v(0)%pt_surface' )         
    3269                       IF ( ALLOCATED( surf_v(0)%pt_surface )  .AND.  kk == 1 ) &
    3270                          READ ( 13 )  surf_v(0)%pt_surface
    3271                    CASE ( 'surf_v(0)%shf' )         
    3272                       IF ( ALLOCATED( surf_v(0)%shf )  .AND.  kk == 1 )        &
    3273                          READ ( 13 )  surf_v(0)%shf
    3274                    CASE ( 'surf_v(0)%qsws' )         
    3275                       IF ( ALLOCATED( surf_v(0)%qsws )  .AND.  kk == 1 )       &
    3276                          READ ( 13 )  surf_v(0)%qsws
    3277                    CASE ( 'surf_v(0)%ssws' )         
    3278                       IF ( ALLOCATED( surf_v(0)%ssws )  .AND.  kk == 1 )       &
    3279                          READ ( 13 )  surf_v(0)%ssws
    3280                    CASE ( 'surf_v(0)%css' )
    3281                       IF ( ALLOCATED( surf_v(0)%css )  .AND.  kk == 1 )        &
    3282                          READ ( 13 )  surf_v(0)%css
    3283                    CASE ( 'surf_v(0)%cssws' )         
    3284                       IF ( ALLOCATED( surf_v(0)%cssws )  .AND.  kk == 1 )      &
    3285                          READ ( 13 )  surf_v(0)%cssws
    3286                    CASE ( 'surf_v(0)%qcsws' )         
    3287                       IF ( ALLOCATED( surf_v(0)%qcsws )  .AND.  kk == 1 )      &
    3288                          READ ( 13 )  surf_v(0)%qcsws
    3289                    CASE ( 'surf_v(0)%ncsws' )         
    3290                       IF ( ALLOCATED( surf_v(0)%ncsws )  .AND.  kk == 1 )      &
    3291                          READ ( 13 )  surf_v(0)%ncsws
    3292                    CASE ( 'surf_v(0)%qrsws' )         
    3293                       IF ( ALLOCATED( surf_v(0)%qrsws )  .AND.  kk == 1 )      &
    3294                          READ ( 13 )  surf_v(0)%qrsws
    3295                    CASE ( 'surf_v(0)%nrsws' )         
    3296                       IF ( ALLOCATED( surf_v(0)%nrsws )  .AND.  kk == 1 )      &
    3297                          READ ( 13 )  surf_v(0)%nrsws
    3298                    CASE ( 'surf_v(0)%sasws' )         
    3299                       IF ( ALLOCATED( surf_v(0)%sasws )  .AND.  kk == 1 )      &
    3300                          READ ( 13 )  surf_v(0)%sasws
    3301                    CASE ( 'surf_v(0)%mom_uv' )         
    3302                       IF ( ALLOCATED( surf_v(0)%mom_flux_uv )  .AND.  kk == 1 )&
    3303                          READ ( 13 )  surf_v(0)%mom_flux_uv
    3304                    CASE ( 'surf_v(0)%mom_w' )         
    3305                       IF ( ALLOCATED( surf_v(0)%mom_flux_w )  .AND.  kk == 1 ) &
    3306                          READ ( 13 )  surf_v(0)%mom_flux_w
    3307                    CASE ( 'surf_v(0)%mom_tke' )         
    3308                       IF ( ALLOCATED( surf_v(0)%mom_flux_tke )  .AND.  kk == 1 )&
    3309                          READ ( 13 )  surf_v(0)%mom_flux_tke
    3310 
    3311                    CASE ( 'surf_v(1)%start_index' )   
    3312                       IF ( kk == 1 )                                           &
    3313                          READ ( 13 )  surf_v(1)%start_index
    3314                       l = 1
    3315                    CASE ( 'surf_v(1)%end_index' )   
    3316                       IF ( kk == 1 )                                           &
    3317                          READ ( 13 )  surf_v(1)%end_index
    3318                    CASE ( 'surf_v(1)%us' )         
    3319                       IF ( ALLOCATED( surf_v(1)%us )  .AND.  kk == 1 )         &
    3320                          READ ( 13 )  surf_v(1)%us
    3321                    CASE ( 'surf_v(1)%ts' )         
    3322                       IF ( ALLOCATED( surf_v(1)%ts )  .AND.  kk == 1 )         &
    3323                          READ ( 13 )  surf_v(1)%ts
    3324                    CASE ( 'surf_v(1)%qs' )         
    3325                       IF ( ALLOCATED( surf_v(1)%qs )  .AND.  kk == 1 )         &
    3326                          READ ( 13 )  surf_v(1)%qs
    3327                    CASE ( 'surf_v(1)%ss' )         
    3328                       IF ( ALLOCATED( surf_v(1)%ss )  .AND.  kk == 1 )         &
    3329                          READ ( 13 )  surf_v(1)%ss
    3330                    CASE ( 'surf_v(1)%qcs' )         
    3331                       IF ( ALLOCATED( surf_v(1)%qcs )  .AND.  kk == 1 )        &
    3332                          READ ( 13 )  surf_v(1)%qcs
    3333                    CASE ( 'surf_v(1)%ncs' )         
    3334                       IF ( ALLOCATED( surf_v(1)%ncs )  .AND.  kk == 1 )        &
    3335                          READ ( 13 )  surf_v(1)%ncs
    3336                    CASE ( 'surf_v(1)%qrs' )         
    3337                       IF ( ALLOCATED( surf_v(1)%qrs )  .AND.  kk == 1 )        &
    3338                          READ ( 13 )  surf_v(1)%qrs
    3339                    CASE ( 'surf_v(1)%nrs' )         
    3340                       IF ( ALLOCATED( surf_v(1)%nrs )  .AND.  kk == 1 )        &
    3341                          READ ( 13 )  surf_v(1)%nrs
    3342                    CASE ( 'surf_v(1)%ol' )         
    3343                       IF ( ALLOCATED( surf_v(1)%ol )  .AND.  kk == 1 )         &
    3344                          READ ( 13 )  surf_v(1)%ol
    3345                    CASE ( 'surf_v(1)%rib' )         
    3346                       IF ( ALLOCATED( surf_v(1)%rib )  .AND.  kk == 1 )        &
    3347                          READ ( 13 )  surf_v(1)%rib
    3348                    CASE ( 'surf_v(1)%pt_surface' )         
    3349                       IF ( ALLOCATED( surf_v(1)%pt_surface )  .AND.  kk == 1 ) &
    3350                          READ ( 13 )  surf_v(1)%pt_surface
    3351                    CASE ( 'surf_v(1)%shf' )         
    3352                       IF ( ALLOCATED( surf_v(1)%shf )  .AND.  kk == 1 )        &
    3353                          READ ( 13 )  surf_v(1)%shf
    3354                    CASE ( 'surf_v(1)%qsws' )         
    3355                       IF ( ALLOCATED( surf_v(1)%qsws )  .AND.  kk == 1 )       &
    3356                          READ ( 13 )  surf_v(1)%qsws
    3357                    CASE ( 'surf_v(1)%ssws' )         
    3358                       IF ( ALLOCATED( surf_v(1)%ssws )  .AND.  kk == 1 )       &
    3359                          READ ( 13 )  surf_v(1)%ssws
    3360                    CASE ( 'surf_v(1)%css' )
    3361                       IF ( ALLOCATED( surf_v(1)%css )  .AND.  kk == 1 )        &
    3362                          READ ( 13 )  surf_v(1)%css
    3363                    CASE ( 'surf_v(1)%cssws' )         
    3364                       IF ( ALLOCATED( surf_v(1)%cssws )  .AND.  kk == 1 )      &
    3365                          READ ( 13 )  surf_v(1)%cssws
    3366                    CASE ( 'surf_v(1)%qcsws' )         
    3367                       IF ( ALLOCATED( surf_v(1)%qcsws )  .AND.  kk == 1 )      &
    3368                          READ ( 13 )  surf_v(1)%qcsws
    3369                    CASE ( 'surf_v(1)%ncsws' )         
    3370                       IF ( ALLOCATED( surf_v(1)%ncsws )  .AND.  kk == 1 )      &
    3371                          READ ( 13 )  surf_v(1)%ncsws
    3372                    CASE ( 'surf_v(1)%qrsws' )         
    3373                       IF ( ALLOCATED( surf_v(1)%qrsws )  .AND.  kk == 1 )      &
    3374                          READ ( 13 )  surf_v(1)%qrsws
    3375                    CASE ( 'surf_v(1)%nrsws' )         
    3376                       IF ( ALLOCATED( surf_v(1)%nrsws )  .AND.  kk == 1 )      &
    3377                          READ ( 13 )  surf_v(1)%nrsws
    3378                    CASE ( 'surf_v(1)%sasws' )         
    3379                       IF ( ALLOCATED( surf_v(1)%sasws )  .AND.  kk == 1 )      &
    3380                          READ ( 13 )  surf_v(1)%sasws
    3381                    CASE ( 'surf_v(1)%mom_uv' )         
    3382                       IF ( ALLOCATED( surf_v(1)%mom_flux_uv )  .AND.  kk == 1 )&
    3383                          READ ( 13 )  surf_v(1)%mom_flux_uv
    3384                    CASE ( 'surf_v(1)%mom_w' )         
    3385                       IF ( ALLOCATED( surf_v(1)%mom_flux_w )  .AND.  kk == 1 ) &
    3386                          READ ( 13 )  surf_v(1)%mom_flux_w
    3387                    CASE ( 'surf_v(1)%mom_tke' )         
    3388                       IF ( ALLOCATED( surf_v(1)%mom_flux_tke )  .AND.  kk == 1 )&
    3389                          READ ( 13 )  surf_v(1)%mom_flux_tke
    3390 
    3391                    CASE ( 'surf_v(2)%start_index' )   
    3392                       IF ( kk == 1 )                                           &
    3393                          READ ( 13 )  surf_v(2)%start_index
    3394                       l = 2
    3395                    CASE ( 'surf_v(2)%end_index' )   
    3396                       IF ( kk == 1 )                                           &
    3397                          READ ( 13 )  surf_v(2)%end_index
    3398                    CASE ( 'surf_v(2)%us' )         
    3399                       IF ( ALLOCATED( surf_v(2)%us )  .AND.  kk == 1 )         &
    3400                          READ ( 13 )  surf_v(2)%us
    3401                    CASE ( 'surf_v(2)%ts' )         
    3402                       IF ( ALLOCATED( surf_v(2)%ts )  .AND.  kk == 1 )         &
    3403                          READ ( 13 )  surf_v(2)%ts
    3404                    CASE ( 'surf_v(2)%qs' )         
    3405                       IF ( ALLOCATED( surf_v(2)%qs )  .AND.  kk == 1 )         &
    3406                          READ ( 13 )  surf_v(2)%qs
    3407                    CASE ( 'surf_v(2)%ss' )         
    3408                       IF ( ALLOCATED( surf_v(2)%ss )  .AND.  kk == 1 )         &
    3409                          READ ( 13 )  surf_v(2)%ss
    3410                    CASE ( 'surf_v(2)%qcs' )         
    3411                       IF ( ALLOCATED( surf_v(2)%qcs )  .AND.  kk == 1 )        &
    3412                          READ ( 13 )  surf_v(2)%qcs
    3413                    CASE ( 'surf_v(2)%ncs' )         
    3414                       IF ( ALLOCATED( surf_v(2)%ncs )  .AND.  kk == 1 )        &
    3415                          READ ( 13 )  surf_v(2)%ncs
    3416                    CASE ( 'surf_v(2)%qrs' )         
    3417                       IF ( ALLOCATED( surf_v(2)%qrs )  .AND.  kk == 1 )        &
    3418                          READ ( 13 )  surf_v(2)%qrs
    3419                    CASE ( 'surf_v(2)%nrs' )         
    3420                       IF ( ALLOCATED( surf_v(2)%nrs )  .AND.  kk == 1 )        &
    3421                          READ ( 13 )  surf_v(2)%nrs
    3422                    CASE ( 'surf_v(2)%ol' )         
    3423                       IF ( ALLOCATED( surf_v(2)%ol )  .AND.  kk == 1 )         &
    3424                          READ ( 13 )  surf_v(2)%ol
    3425                    CASE ( 'surf_v(2)%rib' )         
    3426                       IF ( ALLOCATED( surf_v(2)%rib )  .AND.  kk == 1 )        &
    3427                          READ ( 13 )  surf_v(2)%rib
    3428                    CASE ( 'surf_v(2)%pt_surface' )         
    3429                       IF ( ALLOCATED( surf_v(2)%pt_surface )  .AND.  kk == 1 ) &
    3430                          READ ( 13 )  surf_v(2)%pt_surface
    3431                    CASE ( 'surf_v(2)%shf' )         
    3432                       IF ( ALLOCATED( surf_v(2)%shf )  .AND.  kk == 1 )        &
    3433                          READ ( 13 )  surf_v(2)%shf
    3434                    CASE ( 'surf_v(2)%qsws' )         
    3435                       IF ( ALLOCATED( surf_v(2)%qsws )  .AND.  kk == 1 )       &
    3436                          READ ( 13 )  surf_v(2)%qsws
    3437                    CASE ( 'surf_v(2)%ssws' )         
    3438                       IF ( ALLOCATED( surf_v(2)%ssws )  .AND.  kk == 1 )       &
    3439                          READ ( 13 )  surf_v(2)%ssws
    3440                    CASE ( 'surf_v(2)%css' )
    3441                       IF ( ALLOCATED( surf_v(2)%css )  .AND.  kk == 1 )        &
    3442                          READ ( 13 )  surf_v(2)%css
    3443                    CASE ( 'surf_v(2)%cssws' )         
    3444                       IF ( ALLOCATED( surf_v(2)%cssws )  .AND.  kk == 1 )      &
    3445                          READ ( 13 )  surf_v(2)%cssws
    3446                    CASE ( 'surf_v(2)%qcsws' )         
    3447                       IF ( ALLOCATED( surf_v(2)%qcsws )  .AND.  kk == 1 )      &
    3448                          READ ( 13 )  surf_v(2)%qcsws
    3449                    CASE ( 'surf_v(2)%ncsws' )         
    3450                       IF ( ALLOCATED( surf_v(2)%ncsws )  .AND.  kk == 1 )      &
    3451                          READ ( 13 )  surf_v(2)%ncsws
    3452                    CASE ( 'surf_v(2)%qrsws' )         
    3453                       IF ( ALLOCATED( surf_v(2)%qrsws )  .AND.  kk == 1 )      &
    3454                          READ ( 13 )  surf_v(2)%qrsws
    3455                    CASE ( 'surf_v(2)%nrsws' )         
    3456                       IF ( ALLOCATED( surf_v(2)%nrsws )  .AND.  kk == 1 )      &
    3457                          READ ( 13 )  surf_v(2)%nrsws
    3458                    CASE ( 'surf_v(2)%sasws' )         
    3459                       IF ( ALLOCATED( surf_v(2)%sasws )  .AND.  kk == 1 )      &
    3460                          READ ( 13 )  surf_v(2)%sasws
    3461                    CASE ( 'surf_v(2)%mom_uv' )         
    3462                       IF ( ALLOCATED( surf_v(2)%mom_flux_uv )  .AND.  kk == 1 )&
    3463                          READ ( 13 )  surf_v(2)%mom_flux_uv
    3464                    CASE ( 'surf_v(2)%mom_w' )         
    3465                       IF ( ALLOCATED( surf_v(2)%mom_flux_w )  .AND.  kk == 1 ) &
    3466                          READ ( 13 )  surf_v(2)%mom_flux_w
    3467                    CASE ( 'surf_v(2)%mom_tke' )         
    3468                       IF ( ALLOCATED( surf_v(2)%mom_flux_tke )  .AND.  kk == 1 )&
    3469                          READ ( 13 )  surf_v(2)%mom_flux_tke
    3470 
    3471                    CASE ( 'surf_v(3)%start_index' )   
    3472                       IF ( kk == 1 )                                           &
    3473                          READ ( 13 )  surf_v(3)%start_index
    3474                       l = 3
    3475                    CASE ( 'surf_v(3)%end_index' )   
    3476                       IF ( kk == 1 )                                           &
    3477                          READ ( 13 )  surf_v(3)%end_index
    3478                    CASE ( 'surf_v(3)%us' )         
    3479                       IF ( ALLOCATED( surf_v(3)%us )  .AND.  kk == 1 )         &
    3480                          READ ( 13 )  surf_v(3)%us
    3481                    CASE ( 'surf_v(3)%ts' )         
    3482                       IF ( ALLOCATED( surf_v(3)%ts )  .AND.  kk == 1 )         &
    3483                          READ ( 13 )  surf_v(3)%ts
    3484                    CASE ( 'surf_v(3)%qs' )       
    3485                       IF ( ALLOCATED( surf_v(3)%qs )  .AND.  kk == 1 )         &
    3486                          READ ( 13 )  surf_v(3)%qs
    3487                    CASE ( 'surf_v(3)%ss' )         
    3488                       IF ( ALLOCATED( surf_v(3)%ss )  .AND.  kk == 1 )         &
    3489                          READ ( 13 )  surf_v(3)%ss
    3490                    CASE ( 'surf_v(3)%qcs' )         
    3491                       IF ( ALLOCATED( surf_v(3)%qcs )  .AND.  kk == 1 )        &
    3492                          READ ( 13 )  surf_v(3)%qcs
    3493                    CASE ( 'surf_v(3)%ncs' )         
    3494                       IF ( ALLOCATED( surf_v(3)%ncs )  .AND.  kk == 1 )        &
    3495                          READ ( 13 )  surf_v(3)%ncs
    3496                    CASE ( 'surf_v(3)%qrs' )         
    3497                       IF ( ALLOCATED( surf_v(3)%qrs )  .AND.  kk == 1 )        &
    3498                          READ ( 13 )  surf_v(3)%qrs
    3499                    CASE ( 'surf_v(3)%nrs' )         
    3500                       IF ( ALLOCATED( surf_v(3)%nrs )  .AND.  kk == 1 )        &
    3501                          READ ( 13 )  surf_v(3)%nrs
    3502                    CASE ( 'surf_v(3)%ol' )         
    3503                       IF ( ALLOCATED( surf_v(3)%ol )  .AND.  kk == 1 )         &
    3504                          READ ( 13 )  surf_v(3)%ol
    3505                    CASE ( 'surf_v(3)%rib' )         
    3506                       IF ( ALLOCATED( surf_v(3)%rib )  .AND.  kk == 1 )        &
    3507                          READ ( 13 )  surf_v(3)%rib
    3508                    CASE ( 'surf_v(3)%pt_surface' )         
    3509                       IF ( ALLOCATED( surf_v(3)%pt_surface )  .AND.  kk == 1 ) &
    3510                          READ ( 13 )  surf_v(3)%pt_surface
    3511                    CASE ( 'surf_v(3)%shf' )         
    3512                       IF ( ALLOCATED( surf_v(3)%shf )  .AND.  kk == 1 )        &
    3513                          READ ( 13 )  surf_v(3)%shf
    3514                    CASE ( 'surf_v(3)%qsws' )         
    3515                       IF ( ALLOCATED( surf_v(3)%qsws )  .AND.  kk == 1 )       &
    3516                          READ ( 13 )  surf_v(3)%qsws
    3517                    CASE ( 'surf_v(3)%ssws' )         
    3518                       IF ( ALLOCATED( surf_v(3)%ssws )  .AND.  kk == 1 )       &
    3519                          READ ( 13 )  surf_v(3)%ssws
    3520                    CASE ( 'surf_v(3)%css' )
    3521                       IF ( ALLOCATED( surf_v(3)%css )  .AND.  kk == 1 )        &
    3522                          READ ( 13 )  surf_v(3)%css
    3523                    CASE ( 'surf_v(3)%cssws' )         
    3524                       IF ( ALLOCATED( surf_v(3)%cssws )  .AND.  kk == 1 )      &
    3525                          READ ( 13 )  surf_v(3)%cssws
    3526                    CASE ( 'surf_v(3)%qcsws' )         
    3527                       IF ( ALLOCATED( surf_v(3)%qcsws )  .AND.  kk == 1 )      &
    3528                          READ ( 13 )  surf_v(3)%qcsws
    3529                    CASE ( 'surf_v(3)%ncsws' )         
    3530                       IF ( ALLOCATED( surf_v(3)%ncsws )  .AND.  kk == 1 )      &
    3531                          READ ( 13 )  surf_v(3)%ncsws
    3532                    CASE ( 'surf_v(3)%qrsws' )         
    3533                       IF ( ALLOCATED( surf_v(3)%qrsws )  .AND.  kk == 1 )      &
    3534                          READ ( 13 )  surf_v(3)%qrsws
    3535                    CASE ( 'surf_v(3)%nrsws' )         
    3536                       IF ( ALLOCATED( surf_v(3)%nrsws )  .AND.  kk == 1 )      &
    3537                          READ ( 13 )  surf_v(3)%nrsws
    3538                    CASE ( 'surf_v(3)%sasws' )         
    3539                       IF ( ALLOCATED( surf_v(3)%sasws )  .AND.  kk == 1 )      &
    3540                          READ ( 13 )  surf_v(3)%sasws
    3541                    CASE ( 'surf_v(3)%mom_uv' )         
    3542                       IF ( ALLOCATED( surf_v(3)%mom_flux_uv )  .AND.  kk == 1 )&
    3543                          READ ( 13 )  surf_v(3)%mom_flux_uv
    3544                    CASE ( 'surf_v(3)%mom_w' )         
    3545                       IF ( ALLOCATED( surf_v(3)%mom_flux_w )  .AND.  kk == 1 ) &
    3546                          READ ( 13 )  surf_v(3)%mom_flux_w
    3547                    CASE ( 'surf_v(3)%mom_tke' )         
    3548                       IF ( ALLOCATED( surf_v(3)%mom_flux_tke )  .AND.  kk == 1 )&
    3549                          READ ( 13 )  surf_v(3)%mom_flux_tke
    3550 
    3551                 END SELECT
    3552 !
    3553 !--             Redistribute surface elements on its respective type.
    3554                 IF ( horizontal_surface )  THEN
    3555                    ic = nxlc
    3556                    DO  i = nxlf, nxrf
    3557                       jc = nysc
    3558                       DO  j = nysf, nynf
    3559 
    3560                          surf_match_def  = surf_def_h(l)%end_index(jc,ic) >=   &
    3561                                            surf_def_h(l)%start_index(jc,ic)
    3562                          surf_match_lsm  = ( surf_lsm_h%end_index(jc,ic)  >=   &
    3563                                              surf_lsm_h%start_index(jc,ic) )   &
    3564                                      .AND.  l == 0
    3565                          surf_match_usm  = ( surf_usm_h%end_index(jc,ic)  >=   &
    3566                                              surf_usm_h%start_index(jc,ic) )   &
    3567                                      .AND.  l == 0
    3568 
    3569                          IF ( surf_match_def )  THEN
    3570                             mm = surf_def_h(l)%start_index(jc,ic)
    3571                             DO  m = surf_h(l)%start_index(j,i),                &
    3572                                     surf_h(l)%end_index(j,i)
    3573                                CALL restore_surface_elements( surf_def_h(l),   &
    3574                                                               mm, surf_h(l), m )
    3575                                mm = mm + 1
    3576                             ENDDO
    3577                          ENDIF
    3578 
    3579                          IF ( surf_match_lsm )  THEN
    3580                             mm = surf_lsm_h%start_index(jc,ic)
    3581                             DO  m = surf_h(l)%start_index(j,i),                &
    3582                                     surf_h(l)%end_index(j,i)
    3583                                CALL restore_surface_elements( surf_lsm_h,      &
    3584                                                               mm, surf_h(l), m )
    3585                                mm = mm + 1
    3586                             ENDDO
    3587                          ENDIF
    3588 
    3589                          IF ( surf_match_usm )  THEN
    3590                             mm = surf_usm_h%start_index(jc,ic)
    3591                             DO  m = surf_h(l)%start_index(j,i),                &
    3592                                     surf_h(l)%end_index(j,i)
    3593                                CALL restore_surface_elements( surf_usm_h,      &
    3594                                                               mm, surf_h(l), m )
    3595                                mm = mm + 1
    3596                             ENDDO
    3597                          ENDIF
    3598 
    3599                          jc = jc + 1
    3600                       ENDDO
    3601                       ic = ic + 1
    3602                    ENDDO
    3603                 ELSEIF ( vertical_surface )  THEN
    3604                    ic = nxlc
    3605                    DO  i = nxlf, nxrf
    3606                       jc = nysc
    3607                       DO  j = nysf, nynf
    3608 
    3609                          surf_match_def  = surf_def_v(l)%end_index(jc,ic) >=   &
    3610                                            surf_def_v(l)%start_index(jc,ic)
    3611                          surf_match_lsm  = surf_lsm_v(l)%end_index(jc,ic) >=   &
    3612                                            surf_lsm_v(l)%start_index(jc,ic)
    3613                          surf_match_usm  = surf_usm_v(l)%end_index(jc,ic) >=   &
    3614                                            surf_usm_v(l)%start_index(jc,ic)
    3615 
    3616                          IF ( surf_match_def )  THEN
    3617                             mm = surf_def_v(l)%start_index(jc,ic)
    3618                             DO  m = surf_v(l)%start_index(j,i),                &
    3619                                     surf_v(l)%end_index(j,i)
    3620                                CALL restore_surface_elements( surf_def_v(l),   &
    3621                                                               mm, surf_v(l), m )
    3622                                mm = mm + 1
    3623                             ENDDO
    3624                          ENDIF
    3625 
    3626                          IF ( surf_match_lsm )  THEN
    3627                             mm = surf_lsm_v(l)%start_index(jc,ic)
    3628                             DO  m = surf_v(l)%start_index(j,i),                &
    3629                                     surf_v(l)%end_index(j,i)
    3630                                CALL restore_surface_elements( surf_lsm_v(l),   &
    3631                                                               mm, surf_v(l), m )
    3632                                mm = mm + 1
    3633                             ENDDO
    3634                          ENDIF
    3635    
    3636                          IF ( surf_match_usm )  THEN
    3637                             mm = surf_usm_v(l)%start_index(jc,ic)
    3638                             DO  m = surf_v(l)%start_index(j,i),                &
    3639                                     surf_v(l)%end_index(j,i)
    3640                                CALL restore_surface_elements( surf_usm_v(l),   &
    3641                                                               mm, surf_v(l), m )
    3642                                mm = mm + 1
    3643                             ENDDO
    3644                          ENDIF
    3645 
    3646                          jc = jc + 1
    3647                       ENDDO
    3648                       ic = ic + 1
     3336               ENDDO
     3337
     3338             ENDIF
     3339
     3340          CASE ( 'surf_h(0)%start_index' )
     3341             IF ( kk == 1 )                                                    &
     3342                READ ( 13 )  surf_h(0)%start_index
     3343             l = 0
     3344          CASE ( 'surf_h(0)%end_index' )   
     3345             IF ( kk == 1 )                                                    &
     3346                READ ( 13 )  surf_h(0)%end_index
     3347             horizontal_surface = .TRUE.
     3348             vertical_surface   = .FALSE.
     3349          CASE ( 'surf_h(0)%us' )         
     3350             IF ( ALLOCATED( surf_h(0)%us )  .AND.  kk == 1 )                  &
     3351                READ ( 13 )  surf_h(0)%us
     3352          CASE ( 'surf_h(0)%ts' )         
     3353             IF ( ALLOCATED( surf_h(0)%ts )  .AND.  kk == 1 )                  &
     3354                READ ( 13 )  surf_h(0)%ts
     3355          CASE ( 'surf_h(0)%qs' )         
     3356             IF ( ALLOCATED( surf_h(0)%qs )  .AND.  kk == 1 )                  &
     3357                READ ( 13 )  surf_h(0)%qs
     3358          CASE ( 'surf_h(0)%ss' )         
     3359             IF ( ALLOCATED( surf_h(0)%ss )  .AND.  kk == 1 )                  &
     3360                READ ( 13 )  surf_h(0)%ss
     3361          CASE ( 'surf_h(0)%qcs' )         
     3362             IF ( ALLOCATED( surf_h(0)%qcs )  .AND.  kk == 1 )                 &
     3363                READ ( 13 )  surf_h(0)%qcs
     3364          CASE ( 'surf_h(0)%ncs' )         
     3365             IF ( ALLOCATED( surf_h(0)%ncs )  .AND.  kk == 1 )                 &
     3366                READ ( 13 )  surf_h(0)%ncs
     3367          CASE ( 'surf_h(0)%qrs' )         
     3368             IF ( ALLOCATED( surf_h(0)%qrs )  .AND.  kk == 1 )                 &
     3369                READ ( 13 )  surf_h(0)%qrs
     3370          CASE ( 'surf_h(0)%nrs' )         
     3371             IF ( ALLOCATED( surf_h(0)%nrs )  .AND.  kk == 1 )                 &
     3372                READ ( 13 )  surf_h(0)%nrs
     3373          CASE ( 'surf_h(0)%ol' )         
     3374             IF ( ALLOCATED( surf_h(0)%ol )  .AND.  kk == 1 )                  &
     3375                READ ( 13 )  surf_h(0)%ol
     3376          CASE ( 'surf_h(0)%rib' )         
     3377             IF ( ALLOCATED( surf_h(0)%rib )  .AND.  kk == 1 )                 &
     3378                READ ( 13 )  surf_h(0)%rib
     3379          CASE ( 'surf_h(0)%pt_surface' )         
     3380             IF ( ALLOCATED( surf_h(0)%pt_surface )  .AND.  kk == 1 )          &
     3381                READ ( 13 )  surf_h(0)%pt_surface
     3382          CASE ( 'surf_h(0)%usws' )         
     3383             IF ( ALLOCATED( surf_h(0)%usws )  .AND.  kk == 1 )                &
     3384                READ ( 13 )  surf_h(0)%usws
     3385          CASE ( 'surf_h(0)%vsws' )         
     3386             IF ( ALLOCATED( surf_h(0)%vsws )  .AND.  kk == 1 )                &
     3387                READ ( 13 )  surf_h(0)%vsws
     3388          CASE ( 'surf_h(0)%shf' )         
     3389             IF ( ALLOCATED( surf_h(0)%shf )  .AND.  kk == 1 )                 &
     3390                READ ( 13 )  surf_h(0)%shf
     3391          CASE ( 'surf_h(0)%qsws' )         
     3392             IF ( ALLOCATED( surf_h(0)%qsws )  .AND.  kk == 1 )                &
     3393                READ ( 13 )  surf_h(0)%qsws
     3394          CASE ( 'surf_h(0)%ssws' )         
     3395             IF ( ALLOCATED( surf_h(0)%ssws )  .AND.  kk == 1 )                &
     3396                READ ( 13 )  surf_h(0)%ssws
     3397          CASE ( 'surf_h(0)%css' )
     3398             IF ( ALLOCATED( surf_h(0)%css )  .AND.  kk == 1 )                 &
     3399                READ ( 13 )  surf_h(0)%css
     3400          CASE ( 'surf_h(0)%cssws' )         
     3401             IF ( ALLOCATED( surf_h(0)%cssws )  .AND.  kk == 1 )               &
     3402                READ ( 13 )  surf_h(0)%cssws
     3403          CASE ( 'surf_h(0)%qcsws' )         
     3404             IF ( ALLOCATED( surf_h(0)%qcsws )  .AND.  kk == 1 )               &
     3405                READ ( 13 )  surf_h(0)%qcsws
     3406          CASE ( 'surf_h(0)%ncsws' )         
     3407             IF ( ALLOCATED( surf_h(0)%ncsws )  .AND.  kk == 1 )               &
     3408                READ ( 13 )  surf_h(0)%ncsws
     3409          CASE ( 'surf_h(0)%qrsws' )         
     3410             IF ( ALLOCATED( surf_h(0)%qrsws )  .AND.  kk == 1 )               &
     3411                READ ( 13 )  surf_h(0)%qrsws
     3412          CASE ( 'surf_h(0)%nrsws' )         
     3413             IF ( ALLOCATED( surf_h(0)%nrsws )  .AND.  kk == 1 )               &
     3414                READ ( 13 )  surf_h(0)%nrsws
     3415          CASE ( 'surf_h(0)%sasws' )         
     3416             IF ( ALLOCATED( surf_h(0)%sasws )  .AND.  kk == 1 )               &
     3417                READ ( 13 )  surf_h(0)%sasws
     3418
     3419          CASE ( 'surf_h(1)%start_index' )   
     3420             IF ( kk == 1 )                                                    &
     3421                READ ( 13 )  surf_h(1)%start_index
     3422             l = 1
     3423          CASE ( 'surf_h(1)%end_index' )   
     3424             IF ( kk == 1 )                                                    &
     3425                READ ( 13 )  surf_h(1)%end_index
     3426          CASE ( 'surf_h(1)%us' )         
     3427             IF ( ALLOCATED( surf_h(1)%us )  .AND.  kk == 1 )                  &
     3428                READ ( 13 )  surf_h(1)%us
     3429          CASE ( 'surf_h(1)%ts' )         
     3430             IF ( ALLOCATED( surf_h(1)%ts )  .AND.  kk == 1 )                  &
     3431                READ ( 13 )  surf_h(1)%ts
     3432          CASE ( 'surf_h(1)%qs' )         
     3433             IF ( ALLOCATED( surf_h(1)%qs )  .AND.  kk == 1 )                  &
     3434                READ ( 13 )  surf_h(1)%qs
     3435          CASE ( 'surf_h(1)%ss' )         
     3436             IF ( ALLOCATED( surf_h(1)%ss )  .AND.  kk == 1 )                  &
     3437                READ ( 13 )  surf_h(1)%ss
     3438          CASE ( 'surf_h(1)%qcs' )         
     3439             IF ( ALLOCATED( surf_h(1)%qcs )  .AND.  kk == 1 )                 &
     3440                READ ( 13 )  surf_h(1)%qcs
     3441          CASE ( 'surf_h(1)%ncs' )         
     3442             IF ( ALLOCATED( surf_h(1)%ncs )  .AND.  kk == 1 )                 &
     3443                READ ( 13 )  surf_h(1)%ncs
     3444          CASE ( 'surf_h(1)%qrs' )         
     3445             IF ( ALLOCATED( surf_h(1)%qrs )  .AND.  kk == 1 )                 &
     3446                READ ( 13 )  surf_h(1)%qrs
     3447          CASE ( 'surf_h(1)%nrs' )         
     3448             IF ( ALLOCATED( surf_h(1)%nrs )  .AND.  kk == 1 )                 &
     3449                READ ( 13 )  surf_h(1)%nrs
     3450          CASE ( 'surf_h(1)%ol' )         
     3451             IF ( ALLOCATED( surf_h(1)%ol )  .AND.  kk == 1 )                  &
     3452                READ ( 13 )  surf_h(1)%ol
     3453          CASE ( 'surf_h(1)%rib' )         
     3454             IF ( ALLOCATED( surf_h(1)%rib )  .AND.  kk == 1 )                 &
     3455                READ ( 13 )  surf_h(1)%rib
     3456          CASE ( 'surf_h(1)%pt_surface' )         
     3457             IF ( ALLOCATED( surf_h(1)%pt_surface )  .AND.  kk == 1 )          &
     3458                READ ( 13 )  surf_h(1)%pt_surface
     3459          CASE ( 'surf_h(1)%usws' )         
     3460             IF ( ALLOCATED( surf_h(1)%usws )  .AND.  kk == 1 )                &
     3461                READ ( 13 )  surf_h(1)%usws
     3462          CASE ( 'surf_h(1)%vsws' )         
     3463             IF ( ALLOCATED( surf_h(1)%vsws )  .AND.  kk == 1 )                &
     3464                READ ( 13 )  surf_h(1)%vsws
     3465          CASE ( 'surf_h(1)%shf' )         
     3466             IF ( ALLOCATED( surf_h(1)%shf )  .AND.  kk == 1 )                 &
     3467                READ ( 13 )  surf_h(1)%shf
     3468          CASE ( 'surf_h(1)%qsws' )         
     3469             IF ( ALLOCATED( surf_h(1)%qsws )  .AND.  kk == 1 )                &
     3470                READ ( 13 )  surf_h(1)%qsws
     3471          CASE ( 'surf_h(1)%ssws' )         
     3472             IF ( ALLOCATED( surf_h(1)%ssws )  .AND.  kk == 1 )                &
     3473                READ ( 13 )  surf_h(1)%ssws
     3474          CASE ( 'surf_h(1)%css' )
     3475             IF ( ALLOCATED( surf_h(1)%css )  .AND.  kk == 1 )                 &
     3476                READ ( 13 )  surf_h(1)%css
     3477          CASE ( 'surf_h(1)%cssws' )         
     3478             IF ( ALLOCATED( surf_h(1)%cssws )  .AND.  kk == 1 )               &
     3479                READ ( 13 )  surf_h(1)%cssws
     3480          CASE ( 'surf_h(1)%qcsws' )         
     3481             IF ( ALLOCATED( surf_h(1)%qcsws )  .AND.  kk == 1 )               &
     3482                READ ( 13 )  surf_h(1)%qcsws
     3483          CASE ( 'surf_h(1)%ncsws' )         
     3484             IF ( ALLOCATED( surf_h(1)%ncsws )  .AND.  kk == 1 )               &
     3485                READ ( 13 )  surf_h(1)%ncsws
     3486          CASE ( 'surf_h(1)%qrsws' )         
     3487             IF ( ALLOCATED( surf_h(1)%qrsws )  .AND.  kk == 1 )               &
     3488                READ ( 13 )  surf_h(1)%qrsws
     3489          CASE ( 'surf_h(1)%nrsws' )         
     3490             IF ( ALLOCATED( surf_h(1)%nrsws )  .AND.  kk == 1 )               &
     3491                READ ( 13 )  surf_h(1)%nrsws
     3492          CASE ( 'surf_h(1)%sasws' )         
     3493             IF ( ALLOCATED( surf_h(1)%sasws )  .AND.  kk == 1 )               &
     3494                READ ( 13 )  surf_h(1)%sasws
     3495
     3496          CASE ( 'surf_h(2)%start_index' )   
     3497             IF ( kk == 1 )                                                    &
     3498                READ ( 13 )  surf_h(2)%start_index
     3499             l = 2
     3500          CASE ( 'surf_h(2)%end_index' )   
     3501             IF ( kk == 1 )                                                    &
     3502                READ ( 13 )  surf_h(2)%end_index
     3503          CASE ( 'surf_h(2)%us' )         
     3504             IF ( ALLOCATED( surf_h(2)%us )  .AND.  kk == 1 )                  &
     3505                READ ( 13 )  surf_h(2)%us
     3506          CASE ( 'surf_h(2)%ts' )         
     3507             IF ( ALLOCATED( surf_h(2)%ts )  .AND.  kk == 1 )                  &
     3508                READ ( 13 )  surf_h(2)%ts
     3509          CASE ( 'surf_h(2)%qs' )       
     3510             IF ( ALLOCATED( surf_h(2)%qs )  .AND.  kk == 1 )                  &
     3511                READ ( 13 )  surf_h(2)%qs
     3512          CASE ( 'surf_h(2)%ss' )         
     3513             IF ( ALLOCATED( surf_h(2)%ss )  .AND.  kk == 1 )                  &
     3514                READ ( 13 )  surf_h(2)%ss
     3515          CASE ( 'surf_h(2)%qcs' )         
     3516             IF ( ALLOCATED( surf_h(2)%qcs )  .AND.  kk == 1 )                 &
     3517                READ ( 13 )  surf_h(2)%qcs
     3518          CASE ( 'surf_h(2)%ncs' )         
     3519             IF ( ALLOCATED( surf_h(2)%ncs )  .AND.  kk == 1 )                 &
     3520                READ ( 13 )  surf_h(2)%ncs
     3521          CASE ( 'surf_h(2)%qrs' )         
     3522             IF ( ALLOCATED( surf_h(2)%qrs )  .AND.  kk == 1 )                 &
     3523                READ ( 13 )  surf_h(2)%qrs
     3524          CASE ( 'surf_h(2)%nrs' )         
     3525             IF ( ALLOCATED( surf_h(2)%nrs )  .AND.  kk == 1 )                 &
     3526                READ ( 13 )  surf_h(2)%nrs
     3527          CASE ( 'surf_h(2)%ol' )         
     3528             IF ( ALLOCATED( surf_h(2)%ol )  .AND.  kk == 1 )                  &
     3529                READ ( 13 )  surf_h(2)%ol
     3530          CASE ( 'surf_h(2)%rib' )         
     3531             IF ( ALLOCATED( surf_h(2)%rib )  .AND.  kk == 1 )                 &
     3532                READ ( 13 )  surf_h(2)%rib
     3533          CASE ( 'surf_h(2)%pt_surface' )         
     3534             IF ( ALLOCATED( surf_h(2)%pt_surface )  .AND.  kk == 1 )          &
     3535                READ ( 13 )  surf_h(2)%pt_surface
     3536          CASE ( 'surf_h(2)%usws' )         
     3537             IF ( ALLOCATED( surf_h(2)%usws )  .AND.  kk == 1 )                &
     3538                READ ( 13 )  surf_h(2)%usws
     3539          CASE ( 'surf_h(2)%vsws' )         
     3540             IF ( ALLOCATED( surf_h(2)%vsws )  .AND.  kk == 1 )                &
     3541                READ ( 13 )  surf_h(2)%vsws
     3542          CASE ( 'surf_h(2)%shf' )         
     3543             IF ( ALLOCATED( surf_h(2)%shf )  .AND.  kk == 1 )                 &
     3544                READ ( 13 )  surf_h(2)%shf
     3545          CASE ( 'surf_h(2)%qsws' )         
     3546             IF ( ALLOCATED( surf_h(2)%qsws )  .AND.  kk == 1 )                &
     3547                READ ( 13 )  surf_h(2)%qsws
     3548          CASE ( 'surf_h(2)%ssws' )         
     3549             IF ( ALLOCATED( surf_h(2)%ssws )  .AND.  kk == 1 )                &
     3550                READ ( 13 )  surf_h(2)%ssws
     3551          CASE ( 'surf_h(2)%css' )
     3552             IF ( ALLOCATED( surf_h(2)%css )  .AND.  kk == 1 )                 &
     3553                READ ( 13 )  surf_h(2)%css
     3554          CASE ( 'surf_h(2)%cssws' )         
     3555             IF ( ALLOCATED( surf_h(2)%cssws )  .AND.  kk == 1 )               &
     3556                READ ( 13 )  surf_h(2)%cssws
     3557          CASE ( 'surf_h(2)%qcsws' )         
     3558             IF ( ALLOCATED( surf_h(2)%qcsws )  .AND.  kk == 1 )               &
     3559                READ ( 13 )  surf_h(2)%qcsws
     3560          CASE ( 'surf_h(2)%ncsws' )         
     3561             IF ( ALLOCATED( surf_h(2)%ncsws )  .AND.  kk == 1 )               &
     3562                READ ( 13 )  surf_h(2)%ncsws
     3563          CASE ( 'surf_h(2)%qrsws' )         
     3564             IF ( ALLOCATED( surf_h(2)%qrsws )  .AND.  kk == 1 )               &
     3565                READ ( 13 )  surf_h(2)%qrsws
     3566          CASE ( 'surf_h(2)%nrsws' )         
     3567             IF ( ALLOCATED( surf_h(2)%nrsws )  .AND.  kk == 1 )               &
     3568                READ ( 13 )  surf_h(2)%nrsws
     3569          CASE ( 'surf_h(2)%sasws' )         
     3570             IF ( ALLOCATED( surf_h(2)%sasws )  .AND.  kk == 1 )               &
     3571                READ ( 13 )  surf_h(2)%sasws
     3572
     3573          CASE ( 'surf_v(0)%start_index' )   
     3574             IF ( kk == 1 )                                                    &
     3575                READ ( 13 )  surf_v(0)%start_index
     3576             l = 0
     3577             horizontal_surface = .FALSE.
     3578             vertical_surface   = .TRUE.
     3579          CASE ( 'surf_v(0)%end_index' )   
     3580             IF ( kk == 1 )                                                    &
     3581                READ ( 13 )  surf_v(0)%end_index
     3582          CASE ( 'surf_v(0)%us' )         
     3583             IF ( ALLOCATED( surf_v(0)%us )  .AND.  kk == 1 )                  &
     3584                READ ( 13 )  surf_v(0)%us
     3585          CASE ( 'surf_v(0)%ts' )         
     3586             IF ( ALLOCATED( surf_v(0)%ts )  .AND.  kk == 1 )                  &
     3587                READ ( 13 )  surf_v(0)%ts
     3588          CASE ( 'surf_v(0)%qs' )         
     3589             IF ( ALLOCATED( surf_v(0)%qs )  .AND.  kk == 1 )                  &
     3590                READ ( 13 )  surf_v(0)%qs
     3591          CASE ( 'surf_v(0)%ss' )         
     3592             IF ( ALLOCATED( surf_v(0)%ss )  .AND.  kk == 1 )                  &
     3593                READ ( 13 )  surf_v(0)%ss
     3594          CASE ( 'surf_v(0)%qcs' )         
     3595             IF ( ALLOCATED( surf_v(0)%qcs )  .AND.  kk == 1 )                 &
     3596                READ ( 13 )  surf_v(0)%qcs
     3597          CASE ( 'surf_v(0)%ncs' )         
     3598             IF ( ALLOCATED( surf_v(0)%ncs )  .AND.  kk == 1 )                 &
     3599                READ ( 13 )  surf_v(0)%ncs
     3600          CASE ( 'surf_v(0)%qrs' )         
     3601             IF ( ALLOCATED( surf_v(0)%qrs )  .AND.  kk == 1 )                 &
     3602                READ ( 13 )  surf_v(0)%qrs
     3603          CASE ( 'surf_v(0)%nrs' )         
     3604             IF ( ALLOCATED( surf_v(0)%nrs )  .AND.  kk == 1 )                 &
     3605                READ ( 13 )  surf_v(0)%nrs
     3606          CASE ( 'surf_v(0)%ol' )         
     3607             IF ( ALLOCATED( surf_v(0)%ol )  .AND.  kk == 1 )                  &
     3608                READ ( 13 )  surf_v(0)%ol
     3609          CASE ( 'surf_v(0)%rib' )         
     3610             IF ( ALLOCATED( surf_v(0)%rib )  .AND.  kk == 1 )                 &
     3611                READ ( 13 )  surf_v(0)%rib
     3612          CASE ( 'surf_v(0)%pt_surface' )         
     3613             IF ( ALLOCATED( surf_v(0)%pt_surface )  .AND.  kk == 1 )          &
     3614                READ ( 13 )  surf_v(0)%pt_surface
     3615          CASE ( 'surf_v(0)%shf' )         
     3616             IF ( ALLOCATED( surf_v(0)%shf )  .AND.  kk == 1 )                 &
     3617                READ ( 13 )  surf_v(0)%shf
     3618          CASE ( 'surf_v(0)%qsws' )         
     3619             IF ( ALLOCATED( surf_v(0)%qsws )  .AND.  kk == 1 )                &
     3620                READ ( 13 )  surf_v(0)%qsws
     3621          CASE ( 'surf_v(0)%ssws' )         
     3622             IF ( ALLOCATED( surf_v(0)%ssws )  .AND.  kk == 1 )                &
     3623                READ ( 13 )  surf_v(0)%ssws
     3624          CASE ( 'surf_v(0)%css' )
     3625             IF ( ALLOCATED( surf_v(0)%css )  .AND.  kk == 1 )                 &
     3626                READ ( 13 )  surf_v(0)%css
     3627          CASE ( 'surf_v(0)%cssws' )         
     3628             IF ( ALLOCATED( surf_v(0)%cssws )  .AND.  kk == 1 )               &
     3629                READ ( 13 )  surf_v(0)%cssws
     3630          CASE ( 'surf_v(0)%qcsws' )         
     3631             IF ( ALLOCATED( surf_v(0)%qcsws )  .AND.  kk == 1 )               &
     3632                READ ( 13 )  surf_v(0)%qcsws
     3633          CASE ( 'surf_v(0)%ncsws' )         
     3634             IF ( ALLOCATED( surf_v(0)%ncsws )  .AND.  kk == 1 )               &
     3635                READ ( 13 )  surf_v(0)%ncsws
     3636          CASE ( 'surf_v(0)%qrsws' )         
     3637             IF ( ALLOCATED( surf_v(0)%qrsws )  .AND.  kk == 1 )               &
     3638                READ ( 13 )  surf_v(0)%qrsws
     3639          CASE ( 'surf_v(0)%nrsws' )         
     3640             IF ( ALLOCATED( surf_v(0)%nrsws )  .AND.  kk == 1 )               &
     3641                READ ( 13 )  surf_v(0)%nrsws
     3642          CASE ( 'surf_v(0)%sasws' )         
     3643             IF ( ALLOCATED( surf_v(0)%sasws )  .AND.  kk == 1 )               &
     3644                READ ( 13 )  surf_v(0)%sasws
     3645          CASE ( 'surf_v(0)%mom_uv' )         
     3646             IF ( ALLOCATED( surf_v(0)%mom_flux_uv )  .AND.  kk == 1 )         &
     3647                READ ( 13 )  surf_v(0)%mom_flux_uv
     3648          CASE ( 'surf_v(0)%mom_w' )         
     3649             IF ( ALLOCATED( surf_v(0)%mom_flux_w )  .AND.  kk == 1 )          &
     3650                READ ( 13 )  surf_v(0)%mom_flux_w
     3651          CASE ( 'surf_v(0)%mom_tke' )         
     3652             IF ( ALLOCATED( surf_v(0)%mom_flux_tke )  .AND.  kk == 1 )        &
     3653                READ ( 13 )  surf_v(0)%mom_flux_tke
     3654
     3655          CASE ( 'surf_v(1)%start_index' )   
     3656             IF ( kk == 1 )                                                    &
     3657                READ ( 13 )  surf_v(1)%start_index
     3658             l = 1
     3659          CASE ( 'surf_v(1)%end_index' )   
     3660             IF ( kk == 1 )                                                    &
     3661                READ ( 13 )  surf_v(1)%end_index
     3662          CASE ( 'surf_v(1)%us' )         
     3663             IF ( ALLOCATED( surf_v(1)%us )  .AND.  kk == 1 )                  &
     3664                READ ( 13 )  surf_v(1)%us
     3665          CASE ( 'surf_v(1)%ts' )         
     3666             IF ( ALLOCATED( surf_v(1)%ts )  .AND.  kk == 1 )                  &
     3667                READ ( 13 )  surf_v(1)%ts
     3668          CASE ( 'surf_v(1)%qs' )         
     3669             IF ( ALLOCATED( surf_v(1)%qs )  .AND.  kk == 1 )                  &
     3670                READ ( 13 )  surf_v(1)%qs
     3671          CASE ( 'surf_v(1)%ss' )         
     3672             IF ( ALLOCATED( surf_v(1)%ss )  .AND.  kk == 1 )                  &
     3673                READ ( 13 )  surf_v(1)%ss
     3674          CASE ( 'surf_v(1)%qcs' )         
     3675             IF ( ALLOCATED( surf_v(1)%qcs )  .AND.  kk == 1 )                 &
     3676                READ ( 13 )  surf_v(1)%qcs
     3677          CASE ( 'surf_v(1)%ncs' )         
     3678             IF ( ALLOCATED( surf_v(1)%ncs )  .AND.  kk == 1 )                 &
     3679                READ ( 13 )  surf_v(1)%ncs
     3680          CASE ( 'surf_v(1)%qrs' )         
     3681             IF ( ALLOCATED( surf_v(1)%qrs )  .AND.  kk == 1 )                 &
     3682                READ ( 13 )  surf_v(1)%qrs
     3683          CASE ( 'surf_v(1)%nrs' )         
     3684             IF ( ALLOCATED( surf_v(1)%nrs )  .AND.  kk == 1 )                 &
     3685                READ ( 13 )  surf_v(1)%nrs
     3686          CASE ( 'surf_v(1)%ol' )         
     3687             IF ( ALLOCATED( surf_v(1)%ol )  .AND.  kk == 1 )                  &
     3688                READ ( 13 )  surf_v(1)%ol
     3689          CASE ( 'surf_v(1)%rib' )         
     3690             IF ( ALLOCATED( surf_v(1)%rib )  .AND.  kk == 1 )                 &
     3691                READ ( 13 )  surf_v(1)%rib
     3692          CASE ( 'surf_v(1)%pt_surface' )         
     3693             IF ( ALLOCATED( surf_v(1)%pt_surface )  .AND.  kk == 1 )          &
     3694                READ ( 13 )  surf_v(1)%pt_surface
     3695          CASE ( 'surf_v(1)%shf' )         
     3696             IF ( ALLOCATED( surf_v(1)%shf )  .AND.  kk == 1 )                 &
     3697                READ ( 13 )  surf_v(1)%shf
     3698          CASE ( 'surf_v(1)%qsws' )         
     3699             IF ( ALLOCATED( surf_v(1)%qsws )  .AND.  kk == 1 )                &
     3700                READ ( 13 )  surf_v(1)%qsws
     3701          CASE ( 'surf_v(1)%ssws' )         
     3702             IF ( ALLOCATED( surf_v(1)%ssws )  .AND.  kk == 1 )                &
     3703                READ ( 13 )  surf_v(1)%ssws
     3704          CASE ( 'surf_v(1)%css' )
     3705             IF ( ALLOCATED( surf_v(1)%css )  .AND.  kk == 1 )                 &
     3706                READ ( 13 )  surf_v(1)%css
     3707          CASE ( 'surf_v(1)%cssws' )         
     3708             IF ( ALLOCATED( surf_v(1)%cssws )  .AND.  kk == 1 )               &
     3709                READ ( 13 )  surf_v(1)%cssws
     3710          CASE ( 'surf_v(1)%qcsws' )         
     3711             IF ( ALLOCATED( surf_v(1)%qcsws )  .AND.  kk == 1 )               &
     3712                READ ( 13 )  surf_v(1)%qcsws
     3713          CASE ( 'surf_v(1)%ncsws' )         
     3714             IF ( ALLOCATED( surf_v(1)%ncsws )  .AND.  kk == 1 )               &
     3715                READ ( 13 )  surf_v(1)%ncsws
     3716          CASE ( 'surf_v(1)%qrsws' )         
     3717             IF ( ALLOCATED( surf_v(1)%qrsws )  .AND.  kk == 1 )               &
     3718                READ ( 13 )  surf_v(1)%qrsws
     3719          CASE ( 'surf_v(1)%nrsws' )         
     3720             IF ( ALLOCATED( surf_v(1)%nrsws )  .AND.  kk == 1 )               &
     3721                READ ( 13 )  surf_v(1)%nrsws
     3722          CASE ( 'surf_v(1)%sasws' )         
     3723             IF ( ALLOCATED( surf_v(1)%sasws )  .AND.  kk == 1 )               &
     3724                READ ( 13 )  surf_v(1)%sasws
     3725          CASE ( 'surf_v(1)%mom_uv' )         
     3726             IF ( ALLOCATED( surf_v(1)%mom_flux_uv )  .AND.  kk == 1 )         &
     3727                READ ( 13 )  surf_v(1)%mom_flux_uv
     3728          CASE ( 'surf_v(1)%mom_w' )         
     3729             IF ( ALLOCATED( surf_v(1)%mom_flux_w )  .AND.  kk == 1 )          &
     3730                READ ( 13 )  surf_v(1)%mom_flux_w
     3731          CASE ( 'surf_v(1)%mom_tke' )         
     3732             IF ( ALLOCATED( surf_v(1)%mom_flux_tke )  .AND.  kk == 1 )        &
     3733                READ ( 13 )  surf_v(1)%mom_flux_tke
     3734
     3735          CASE ( 'surf_v(2)%start_index' )   
     3736             IF ( kk == 1 )                                                    &
     3737                READ ( 13 )  surf_v(2)%start_index
     3738             l = 2
     3739          CASE ( 'surf_v(2)%end_index' )   
     3740             IF ( kk == 1 )                                                    &
     3741                READ ( 13 )  surf_v(2)%end_index
     3742          CASE ( 'surf_v(2)%us' )         
     3743             IF ( ALLOCATED( surf_v(2)%us )  .AND.  kk == 1 )                  &
     3744                READ ( 13 )  surf_v(2)%us
     3745          CASE ( 'surf_v(2)%ts' )         
     3746             IF ( ALLOCATED( surf_v(2)%ts )  .AND.  kk == 1 )                  &
     3747                READ ( 13 )  surf_v(2)%ts
     3748          CASE ( 'surf_v(2)%qs' )         
     3749             IF ( ALLOCATED( surf_v(2)%qs )  .AND.  kk == 1 )                  &
     3750                READ ( 13 )  surf_v(2)%qs
     3751          CASE ( 'surf_v(2)%ss' )         
     3752             IF ( ALLOCATED( surf_v(2)%ss )  .AND.  kk == 1 )                  &
     3753                READ ( 13 )  surf_v(2)%ss
     3754          CASE ( 'surf_v(2)%qcs' )         
     3755             IF ( ALLOCATED( surf_v(2)%qcs )  .AND.  kk == 1 )                 &
     3756                READ ( 13 )  surf_v(2)%qcs
     3757          CASE ( 'surf_v(2)%ncs' )         
     3758             IF ( ALLOCATED( surf_v(2)%ncs )  .AND.  kk == 1 )                 &
     3759                READ ( 13 )  surf_v(2)%ncs
     3760          CASE ( 'surf_v(2)%qrs' )         
     3761             IF ( ALLOCATED( surf_v(2)%qrs )  .AND.  kk == 1 )                 &
     3762                READ ( 13 )  surf_v(2)%qrs
     3763          CASE ( 'surf_v(2)%nrs' )         
     3764             IF ( ALLOCATED( surf_v(2)%nrs )  .AND.  kk == 1 )                 &
     3765                READ ( 13 )  surf_v(2)%nrs
     3766          CASE ( 'surf_v(2)%ol' )         
     3767             IF ( ALLOCATED( surf_v(2)%ol )  .AND.  kk == 1 )                  &
     3768                READ ( 13 )  surf_v(2)%ol
     3769          CASE ( 'surf_v(2)%rib' )         
     3770             IF ( ALLOCATED( surf_v(2)%rib )  .AND.  kk == 1 )                 &
     3771                READ ( 13 )  surf_v(2)%rib
     3772          CASE ( 'surf_v(2)%pt_surface' )         
     3773             IF ( ALLOCATED( surf_v(2)%pt_surface )  .AND.  kk == 1 )          &
     3774                READ ( 13 )  surf_v(2)%pt_surface
     3775          CASE ( 'surf_v(2)%shf' )         
     3776             IF ( ALLOCATED( surf_v(2)%shf )  .AND.  kk == 1 )                 &
     3777                READ ( 13 )  surf_v(2)%shf
     3778          CASE ( 'surf_v(2)%qsws' )         
     3779             IF ( ALLOCATED( surf_v(2)%qsws )  .AND.  kk == 1 )                &
     3780                READ ( 13 )  surf_v(2)%qsws
     3781          CASE ( 'surf_v(2)%ssws' )         
     3782             IF ( ALLOCATED( surf_v(2)%ssws )  .AND.  kk == 1 )                &
     3783                READ ( 13 )  surf_v(2)%ssws
     3784          CASE ( 'surf_v(2)%css' )
     3785             IF ( ALLOCATED( surf_v(2)%css )  .AND.  kk == 1 )                 &
     3786                READ ( 13 )  surf_v(2)%css
     3787          CASE ( 'surf_v(2)%cssws' )         
     3788             IF ( ALLOCATED( surf_v(2)%cssws )  .AND.  kk == 1 )               &
     3789                READ ( 13 )  surf_v(2)%cssws
     3790          CASE ( 'surf_v(2)%qcsws' )         
     3791             IF ( ALLOCATED( surf_v(2)%qcsws )  .AND.  kk == 1 )               &
     3792                READ ( 13 )  surf_v(2)%qcsws
     3793          CASE ( 'surf_v(2)%ncsws' )         
     3794             IF ( ALLOCATED( surf_v(2)%ncsws )  .AND.  kk == 1 )               &
     3795                READ ( 13 )  surf_v(2)%ncsws
     3796          CASE ( 'surf_v(2)%qrsws' )         
     3797             IF ( ALLOCATED( surf_v(2)%qrsws )  .AND.  kk == 1 )               &
     3798                READ ( 13 )  surf_v(2)%qrsws
     3799          CASE ( 'surf_v(2)%nrsws' )         
     3800             IF ( ALLOCATED( surf_v(2)%nrsws )  .AND.  kk == 1 )               &
     3801                READ ( 13 )  surf_v(2)%nrsws
     3802          CASE ( 'surf_v(2)%sasws' )         
     3803             IF ( ALLOCATED( surf_v(2)%sasws )  .AND.  kk == 1 )               &
     3804                READ ( 13 )  surf_v(2)%sasws
     3805          CASE ( 'surf_v(2)%mom_uv' )         
     3806             IF ( ALLOCATED( surf_v(2)%mom_flux_uv )  .AND.  kk == 1 )         &
     3807                READ ( 13 )  surf_v(2)%mom_flux_uv
     3808          CASE ( 'surf_v(2)%mom_w' )         
     3809             IF ( ALLOCATED( surf_v(2)%mom_flux_w )  .AND.  kk == 1 )          &
     3810                READ ( 13 )  surf_v(2)%mom_flux_w
     3811          CASE ( 'surf_v(2)%mom_tke' )         
     3812             IF ( ALLOCATED( surf_v(2)%mom_flux_tke )  .AND.  kk == 1 )        &
     3813                READ ( 13 )  surf_v(2)%mom_flux_tke
     3814
     3815          CASE ( 'surf_v(3)%start_index' )   
     3816             IF ( kk == 1 )                                                    &
     3817                READ ( 13 )  surf_v(3)%start_index
     3818             l = 3
     3819          CASE ( 'surf_v(3)%end_index' )   
     3820             IF ( kk == 1 )                                                    &
     3821                READ ( 13 )  surf_v(3)%end_index
     3822          CASE ( 'surf_v(3)%us' )         
     3823             IF ( ALLOCATED( surf_v(3)%us )  .AND.  kk == 1 )                  &
     3824                READ ( 13 )  surf_v(3)%us
     3825          CASE ( 'surf_v(3)%ts' )         
     3826             IF ( ALLOCATED( surf_v(3)%ts )  .AND.  kk == 1 )                  &
     3827                READ ( 13 )  surf_v(3)%ts
     3828          CASE ( 'surf_v(3)%qs' )       
     3829             IF ( ALLOCATED( surf_v(3)%qs )  .AND.  kk == 1 )                  &
     3830                READ ( 13 )  surf_v(3)%qs
     3831          CASE ( 'surf_v(3)%ss' )         
     3832             IF ( ALLOCATED( surf_v(3)%ss )  .AND.  kk == 1 )                  &
     3833                READ ( 13 )  surf_v(3)%ss
     3834          CASE ( 'surf_v(3)%qcs' )         
     3835             IF ( ALLOCATED( surf_v(3)%qcs )  .AND.  kk == 1 )                 &
     3836                READ ( 13 )  surf_v(3)%qcs
     3837          CASE ( 'surf_v(3)%ncs' )         
     3838             IF ( ALLOCATED( surf_v(3)%ncs )  .AND.  kk == 1 )                 &
     3839                READ ( 13 )  surf_v(3)%ncs
     3840          CASE ( 'surf_v(3)%qrs' )         
     3841             IF ( ALLOCATED( surf_v(3)%qrs )  .AND.  kk == 1 )                 &
     3842                READ ( 13 )  surf_v(3)%qrs
     3843          CASE ( 'surf_v(3)%nrs' )         
     3844             IF ( ALLOCATED( surf_v(3)%nrs )  .AND.  kk == 1 )                 &
     3845                READ ( 13 )  surf_v(3)%nrs
     3846          CASE ( 'surf_v(3)%ol' )         
     3847             IF ( ALLOCATED( surf_v(3)%ol )  .AND.  kk == 1 )                  &
     3848                READ ( 13 )  surf_v(3)%ol
     3849          CASE ( 'surf_v(3)%rib' )         
     3850             IF ( ALLOCATED( surf_v(3)%rib )  .AND.  kk == 1 )                 &
     3851                READ ( 13 )  surf_v(3)%rib
     3852          CASE ( 'surf_v(3)%pt_surface' )         
     3853             IF ( ALLOCATED( surf_v(3)%pt_surface )  .AND.  kk == 1 )          &
     3854                READ ( 13 )  surf_v(3)%pt_surface
     3855          CASE ( 'surf_v(3)%shf' )         
     3856             IF ( ALLOCATED( surf_v(3)%shf )  .AND.  kk == 1 )                 &
     3857                READ ( 13 )  surf_v(3)%shf
     3858          CASE ( 'surf_v(3)%qsws' )         
     3859             IF ( ALLOCATED( surf_v(3)%qsws )  .AND.  kk == 1 )                &
     3860                READ ( 13 )  surf_v(3)%qsws
     3861          CASE ( 'surf_v(3)%ssws' )         
     3862             IF ( ALLOCATED( surf_v(3)%ssws )  .AND.  kk == 1 )                &
     3863                READ ( 13 )  surf_v(3)%ssws
     3864          CASE ( 'surf_v(3)%css' )
     3865             IF ( ALLOCATED( surf_v(3)%css )  .AND.  kk == 1 )                 &
     3866                READ ( 13 )  surf_v(3)%css
     3867          CASE ( 'surf_v(3)%cssws' )         
     3868             IF ( ALLOCATED( surf_v(3)%cssws )  .AND.  kk == 1 )               &
     3869                READ ( 13 )  surf_v(3)%cssws
     3870          CASE ( 'surf_v(3)%qcsws' )         
     3871             IF ( ALLOCATED( surf_v(3)%qcsws )  .AND.  kk == 1 )               &
     3872                READ ( 13 )  surf_v(3)%qcsws
     3873          CASE ( 'surf_v(3)%ncsws' )         
     3874             IF ( ALLOCATED( surf_v(3)%ncsws )  .AND.  kk == 1 )               &
     3875                READ ( 13 )  surf_v(3)%ncsws
     3876          CASE ( 'surf_v(3)%qrsws' )         
     3877             IF ( ALLOCATED( surf_v(3)%qrsws )  .AND.  kk == 1 )               &
     3878                READ ( 13 )  surf_v(3)%qrsws
     3879          CASE ( 'surf_v(3)%nrsws' )         
     3880             IF ( ALLOCATED( surf_v(3)%nrsws )  .AND.  kk == 1 )               &
     3881                READ ( 13 )  surf_v(3)%nrsws
     3882          CASE ( 'surf_v(3)%sasws' )         
     3883             IF ( ALLOCATED( surf_v(3)%sasws )  .AND.  kk == 1 )               &
     3884                READ ( 13 )  surf_v(3)%sasws
     3885          CASE ( 'surf_v(3)%mom_uv' )         
     3886             IF ( ALLOCATED( surf_v(3)%mom_flux_uv )  .AND.  kk == 1 )         &
     3887                READ ( 13 )  surf_v(3)%mom_flux_uv
     3888          CASE ( 'surf_v(3)%mom_w' )         
     3889             IF ( ALLOCATED( surf_v(3)%mom_flux_w )  .AND.  kk == 1 )          &
     3890                READ ( 13 )  surf_v(3)%mom_flux_w
     3891          CASE ( 'surf_v(3)%mom_tke' )         
     3892             IF ( ALLOCATED( surf_v(3)%mom_flux_tke )  .AND.  kk == 1 )        &
     3893                READ ( 13 )  surf_v(3)%mom_flux_tke
     3894
     3895          CASE DEFAULT
     3896
     3897                found = .FALSE.
     3898
     3899       END SELECT
     3900
     3901!
     3902!--    Redistribute surface elements on its respective type.
     3903       IF ( horizontal_surface )  THEN
     3904          ic = nxlc
     3905          DO  i = nxlf, nxrf
     3906             jc = nysc
     3907             DO  j = nysf, nynf
     3908
     3909                surf_match_def  = surf_def_h(l)%end_index(jc,ic) >=            &
     3910                                  surf_def_h(l)%start_index(jc,ic)
     3911                surf_match_lsm  = ( surf_lsm_h%end_index(jc,ic)  >=            &
     3912                                    surf_lsm_h%start_index(jc,ic) )            &
     3913                            .AND.  l == 0
     3914                surf_match_usm  = ( surf_usm_h%end_index(jc,ic)  >=            &
     3915                                    surf_usm_h%start_index(jc,ic) )            &
     3916                            .AND.  l == 0
     3917
     3918                IF ( surf_match_def )  THEN
     3919                   mm = surf_def_h(l)%start_index(jc,ic)
     3920                   DO  m = surf_h(l)%start_index(j,i),                         &
     3921                           surf_h(l)%end_index(j,i)
     3922                      CALL restore_surface_elements( surf_def_h(l),            &
     3923                                                     mm, surf_h(l), m )
     3924                      mm = mm + 1
    36493925                   ENDDO
    36503926                ENDIF
    36513927
     3928                IF ( surf_match_lsm )  THEN
     3929                   mm = surf_lsm_h%start_index(jc,ic)
     3930                   DO  m = surf_h(l)%start_index(j,i),                         &
     3931                           surf_h(l)%end_index(j,i)
     3932                      CALL restore_surface_elements( surf_lsm_h,               &
     3933                                                     mm, surf_h(l), m )
     3934                      mm = mm + 1
     3935                   ENDDO
     3936                ENDIF
     3937
     3938                IF ( surf_match_usm )  THEN
     3939                   mm = surf_usm_h%start_index(jc,ic)
     3940                   DO  m = surf_h(l)%start_index(j,i),                         &
     3941                           surf_h(l)%end_index(j,i)
     3942                      CALL restore_surface_elements( surf_usm_h,               &
     3943                                                     mm, surf_h(l), m )
     3944                      mm = mm + 1
     3945                   ENDDO
     3946                ENDIF
     3947
     3948                jc = jc + 1
    36523949             ENDDO
    3653 
    3654              READ ( 13 )  field_chr
    3655 
     3950             ic = ic + 1
    36563951          ENDDO
    3657 
     3952       ELSEIF ( vertical_surface )  THEN
     3953          ic = nxlc
     3954          DO  i = nxlf, nxrf
     3955             jc = nysc
     3956             DO  j = nysf, nynf
     3957
     3958                surf_match_def  = surf_def_v(l)%end_index(jc,ic) >=            &
     3959                                  surf_def_v(l)%start_index(jc,ic)
     3960                surf_match_lsm  = surf_lsm_v(l)%end_index(jc,ic) >=            &
     3961                                  surf_lsm_v(l)%start_index(jc,ic)
     3962                surf_match_usm  = surf_usm_v(l)%end_index(jc,ic) >=            &
     3963                                  surf_usm_v(l)%start_index(jc,ic)
     3964
     3965                IF ( surf_match_def )  THEN
     3966                   mm = surf_def_v(l)%start_index(jc,ic)
     3967                   DO  m = surf_v(l)%start_index(j,i),                         &
     3968                           surf_v(l)%end_index(j,i)
     3969                      CALL restore_surface_elements( surf_def_v(l),            &
     3970                                                     mm, surf_v(l), m )
     3971                      mm = mm + 1
     3972                   ENDDO
     3973                ENDIF
     3974
     3975                IF ( surf_match_lsm )  THEN
     3976                   mm = surf_lsm_v(l)%start_index(jc,ic)
     3977                   DO  m = surf_v(l)%start_index(j,i),                         &
     3978                           surf_v(l)%end_index(j,i)
     3979                      CALL restore_surface_elements( surf_lsm_v(l),            &
     3980                                                     mm, surf_v(l), m )
     3981                      mm = mm + 1
     3982                   ENDDO
     3983                ENDIF
     3984
     3985                IF ( surf_match_usm )  THEN
     3986                   mm = surf_usm_v(l)%start_index(jc,ic)
     3987                   DO  m = surf_v(l)%start_index(j,i),                         &
     3988                           surf_v(l)%end_index(j,i)
     3989                      CALL restore_surface_elements( surf_usm_v(l),            &
     3990                                                     mm, surf_v(l), m )
     3991                      mm = mm + 1
     3992                   ENDDO
     3993                ENDIF
     3994
     3995                jc = jc + 1
     3996             ENDDO
     3997             ic = ic + 1
     3998          ENDDO
    36583999       ENDIF
    36594000
    3660        CONTAINS
     4001
     4002    CONTAINS
    36614003!------------------------------------------------------------------------------!
    36624004! Description:
     
    36764018             TYPE( surf_type ) ::  surf_file   !< surface type on file
    36774019
    3678              IF ( INDEX( TRIM( field_chr ), '%us' ) /= 0 )  THEN
     4020             IF ( INDEX( restart_string(1:length), '%us' ) /= 0 )  THEN
    36794021                IF ( ALLOCATED( surf_target%us )  .AND.                        &
    36804022                     ALLOCATED( surf_file%us   ) )                             &
     
    36824024             ENDIF
    36834025
    3684              IF ( INDEX( TRIM( field_chr ), '%ol' ) /= 0 )  THEN
     4026             IF ( INDEX( restart_string(1:length), '%ol' ) /= 0 )  THEN
    36854027                IF ( ALLOCATED( surf_target%ol )  .AND.                        &
    36864028                     ALLOCATED( surf_file%ol   ) )                             &
     
    36884030             ENDIF
    36894031
    3690              IF ( INDEX( TRIM( field_chr ), '%pt_surface' ) /= 0 )  THEN
     4032             IF ( INDEX( restart_string(1:length), '%pt_surface' ) /= 0 )  THEN
    36914033                IF ( ALLOCATED( surf_target%pt_surface )  .AND.                &
    36924034                     ALLOCATED( surf_file%pt_surface   ) )                     &
     
    36944036             ENDIF
    36954037
    3696              IF ( INDEX( TRIM( field_chr ), '%usws' ) /= 0 )  THEN
     4038             IF ( INDEX( restart_string(1:length), '%usws' ) /= 0 )  THEN
    36974039                IF ( ALLOCATED( surf_target%usws )  .AND.                      &
    36984040                     ALLOCATED( surf_file%usws   ) )                           &
     
    37004042             ENDIF
    37014043
    3702              IF ( INDEX( TRIM( field_chr ), '%vsws' ) /= 0 )  THEN
     4044             IF ( INDEX( restart_string(1:length), '%vsws' ) /= 0 )  THEN
    37034045                IF ( ALLOCATED( surf_target%vsws )  .AND.                      &
    37044046                     ALLOCATED( surf_file%vsws   ) )                           &
     
    37064048             ENDIF
    37074049
    3708              IF ( INDEX( TRIM( field_chr ), '%ts' ) /= 0 )  THEN
     4050             IF ( INDEX( restart_string(1:length), '%ts' ) /= 0 )  THEN
    37094051                IF ( ALLOCATED( surf_target%ts )  .AND.                        &
    37104052                     ALLOCATED( surf_file%ts   ) )                             &
     
    37124054             ENDIF
    37134055
    3714              IF ( INDEX( TRIM( field_chr ), '%shf' ) /= 0 )  THEN
     4056             IF ( INDEX( restart_string(1:length), '%shf' ) /= 0 )  THEN
    37154057                IF ( ALLOCATED( surf_target%shf )  .AND.                       &
    37164058                     ALLOCATED( surf_file%shf   ) )                            &
     
    37184060             ENDIF
    37194061
    3720              IF ( INDEX( TRIM( field_chr ), '%qs' ) /= 0 )  THEN
     4062             IF ( INDEX( restart_string(1:length), '%qs' ) /= 0 )  THEN
    37214063                IF ( ALLOCATED( surf_target%qs )  .AND.                        &
    37224064                     ALLOCATED( surf_file%qs   ) )                             &
     
    37244066             ENDIF
    37254067
    3726              IF ( INDEX( TRIM( field_chr ), '%qsws' ) /= 0 )  THEN
     4068             IF ( INDEX( restart_string(1:length), '%qsws' ) /= 0 )  THEN
    37274069                IF ( ALLOCATED( surf_target%qsws )  .AND.                      &
    37284070                     ALLOCATED( surf_file%qsws   ) )                           &
     
    37304072             ENDIF
    37314073
    3732              IF ( INDEX( TRIM( field_chr ), '%ss' ) /= 0 )  THEN
     4074             IF ( INDEX( restart_string(1:length), '%ss' ) /= 0 )  THEN
    37334075                IF ( ALLOCATED( surf_target%ss )  .AND.                        &
    37344076                     ALLOCATED( surf_file%ss   ) )                             &
     
    37364078             ENDIF
    37374079
    3738              IF ( INDEX( TRIM( field_chr ), '%ssws' ) /= 0 )  THEN
     4080             IF ( INDEX( restart_string(1:length), '%ssws' ) /= 0 )  THEN
    37394081                IF ( ALLOCATED( surf_target%ssws )  .AND.                      &
    37404082                     ALLOCATED( surf_file%ssws   ) )                           &
     
    37424084             ENDIF
    37434085
    3744              IF ( INDEX( TRIM( field_chr ), '%css' ) /= 0 )  THEN
     4086             IF ( INDEX( restart_string(1:length), '%css' ) /= 0 )  THEN
    37454087                IF ( ALLOCATED( surf_target%css )  .AND.                     &
    37464088                     ALLOCATED( surf_file%css   ) )  THEN                 
     
    37504092                ENDIF
    37514093             ENDIF
    3752              IF ( INDEX( TRIM( field_chr ), '%cssws' ) /= 0 )  THEN
     4094             IF ( INDEX( restart_string(1:length), '%cssws' ) /= 0 )  THEN
    37534095                IF ( ALLOCATED( surf_target%cssws )  .AND.                     &
    37544096                     ALLOCATED( surf_file%cssws   ) )  THEN                 
     
    37594101             ENDIF
    37604102
    3761              IF ( INDEX( TRIM( field_chr ), '%qcs' ) /= 0 )  THEN
     4103             IF ( INDEX( restart_string(1:length), '%qcs' ) /= 0 )  THEN
    37624104                IF ( ALLOCATED( surf_target%qcs )  .AND.                       &
    37634105                     ALLOCATED( surf_file%qcs   ) )                            &
     
    37654107             ENDIF
    37664108
    3767              IF ( INDEX( TRIM( field_chr ), '%qcsws' ) /= 0 )  THEN
     4109             IF ( INDEX( restart_string(1:length), '%qcsws' ) /= 0 )  THEN
    37684110                IF ( ALLOCATED( surf_target%qcsws )  .AND.                     &
    37694111                     ALLOCATED( surf_file%qcsws   ) )                          &
     
    37714113             ENDIF
    37724114
    3773              IF ( INDEX( TRIM( field_chr ), '%ncs' ) /= 0 )  THEN
     4115             IF ( INDEX( restart_string(1:length), '%ncs' ) /= 0 )  THEN
    37744116                IF ( ALLOCATED( surf_target%ncs )  .AND.                       &
    37754117                     ALLOCATED( surf_file%ncs   ) )                            &
     
    37774119             ENDIF
    37784120
    3779              IF ( INDEX( TRIM( field_chr ), '%ncsws' ) /= 0 )  THEN
     4121             IF ( INDEX( restart_string(1:length), '%ncsws' ) /= 0 )  THEN
    37804122                IF ( ALLOCATED( surf_target%ncsws )  .AND.                     &
    37814123                     ALLOCATED( surf_file%ncsws   ) )                          &
     
    37834125             ENDIF
    37844126
    3785              IF ( INDEX( TRIM( field_chr ), '%qrs' ) /= 0 )  THEN
     4127             IF ( INDEX( restart_string(1:length), '%qrs' ) /= 0 )  THEN
    37864128                IF ( ALLOCATED( surf_target%qrs )  .AND.                       &
    37874129                     ALLOCATED( surf_file%qrs   ) )                            &
     
    37894131             ENDIF
    37904132
    3791              IF ( INDEX( TRIM( field_chr ), '%qrsws' ) /= 0 )  THEN
     4133             IF ( INDEX( restart_string(1:length), '%qrsws' ) /= 0 )  THEN
    37924134                IF ( ALLOCATED( surf_target%qrsws )  .AND.                     &
    37934135                     ALLOCATED( surf_file%qrsws   ) )                          &
     
    37954137             ENDIF
    37964138
    3797              IF ( INDEX( TRIM( field_chr ), '%nrs' ) /= 0 )  THEN
     4139             IF ( INDEX( restart_string(1:length), '%nrs' ) /= 0 )  THEN
    37984140                IF ( ALLOCATED( surf_target%nrs )  .AND.                       &
    37994141                     ALLOCATED( surf_file%nrs   ) )                            &
     
    38014143             ENDIF
    38024144
    3803              IF ( INDEX( TRIM( field_chr ), '%nrsws' ) /= 0 )  THEN
     4145             IF ( INDEX( restart_string(1:length), '%nrsws' ) /= 0 )  THEN
    38044146                IF ( ALLOCATED( surf_target%nrsws )  .AND.                     &
    38054147                     ALLOCATED( surf_file%nrsws   ) )                          &
     
    38074149             ENDIF
    38084150
    3809              IF ( INDEX( TRIM( field_chr ), '%sasws' ) /= 0 )  THEN
     4151             IF ( INDEX( restart_string(1:length), '%sasws' ) /= 0 )  THEN
    38104152                IF ( ALLOCATED( surf_target%sasws )  .AND.                     &
    38114153                     ALLOCATED( surf_file%sasws   ) )                          &
     
    38134155             ENDIF
    38144156
    3815              IF ( INDEX( TRIM( field_chr ), '%mom_uv' ) /= 0 )  THEN
     4157             IF ( INDEX( restart_string(1:length), '%mom_uv' ) /= 0 )  THEN
    38164158                IF ( ALLOCATED( surf_target%mom_flux_uv )  .AND.               &
    38174159                     ALLOCATED( surf_file%mom_flux_uv   ) )                    &
     
    38204162             ENDIF
    38214163
    3822              IF ( INDEX( TRIM( field_chr ), '%mom_w' ) /= 0 )  THEN
     4164             IF ( INDEX( restart_string(1:length), '%mom_w' ) /= 0 )  THEN
    38234165                IF ( ALLOCATED( surf_target%mom_flux_w )  .AND.                &
    38244166                     ALLOCATED( surf_file%mom_flux_w   ) )                     &
     
    38274169             ENDIF
    38284170
    3829              IF ( INDEX( TRIM( field_chr ), '%mom_tke' ) /= 0 )  THEN
     4171             IF ( INDEX( restart_string(1:length), '%mom_tke' ) /= 0 )  THEN
    38304172                IF ( ALLOCATED( surf_target%mom_flux_tke )  .AND.              &
    38314173                     ALLOCATED( surf_file%mom_flux_tke   ) )                   &
     
    38344176             ENDIF
    38354177
     4178
    38364179          END SUBROUTINE restore_surface_elements
    38374180
    3838     END SUBROUTINE surface_read_restart_data
     4181
     4182    END SUBROUTINE surface_rrd_local
    38394183
    38404184 
     
    39034247       REAL(wp), DIMENSION(:) ::  surf_target !< target surface type
    39044248       REAL(wp), DIMENSION(:) ::  surf_file   !< surface type on file
    3905        
     4249
    39064250       ic = nxlc
    39074251       DO  i = nxlf, nxrf
Note: See TracChangeset for help on using the changeset viewer.