source: palm/trunk/SOURCE/read_3d_binary.f90 @ 400

Last change on this file since 400 was 392, checked in by raasch, 15 years ago

New:
---

Adapted for machine lck
(mrun, mbuild, subjob)

bc_lr/bc_ns in most subroutines replaced by LOGICAL variables bc_lr_cyc,
bc_ns_cyc for speed optimization
(check_parameters, diffusion_u, diffusion_v, diffusion_w, modules)

Additional timestep criterion in case of simulations with plant canopy (timestep)

Check for illegal entries in section_xy|xz|yz that exceed nz+1|ny+1|nx+1
(check_parameters)

Clipping of dvrp output implemented. Default colourtable for particles
implemented, particle attributes (color, dvrp_size) can be set with new
parameters particle_color, particle_dvrpsize, color_interval,
dvrpsize_interval (init_dvrp, data_output_dvrp, modules, user_data_output_dvrp).
Slicer attributes (dvrp) are set with new routine set_slicer_attributes_dvrp
and are controlled with existing parameters slicer_range_limits.
(set_slicer_attributes_dvrp)

Ocean atmosphere coupling allows to use independent precursor runs in order
to account for different spin-up times. The time when coupling has to be
started is given by new inipar parameter coupling_start_time. The precursor
ocean run has to be started using new mrun option "-y" in order to add
appendix "_O" to all output files.
(check_for_restart, check_parameters, data_output_2d, data_output_3d,
data_output_profiles, data_output_ptseries, data_output_spectra,
data_output_tseries, header, init_coupling, modules, mrun,
parin, read_var_list, surface_coupler, time_integration, write_var_list)

Polygon reduction for topography and ground plate isosurface. Reduction level
for buildings can be chosen with parameter cluster_size. (init_dvrp)

External pressure gradient (check_parameters, header, init_3d_model, modules,
parin, prognostic_equations, read_var_list, write_var_list)

New topography case 'single_street_canyon' (header, init_grid, modules, parin,
read_var_list, user_check_parameters, user_header, user_init_grid, write_var_list)

Option to predefine a target bulk velocity for conserve_volume_flow
(check_parameters, header, init_3d_model, modules, parin, read_var_list,
write_var_list)

Option for user defined 2D data output in xy cross sections at z=nzb+1
(data_output_2d, user_data_output_2d)

xy cross section output of surface heatfluxes (latent, sensible)
(average_3d_data, check_parameters, data_output_2d, modules, read_3d_binary,
sum_up_3d_data, write_3d_binary)

average_3d_data, check_for_restart, check_parameters, data_output_2d, data_output_3d, data_output_dvrp, data_output_profiles, data_output_ptseries, data_output_spectra, data_output_tseries, init_coupling, init_dvrp, init_grid, init_3d_model, header, mbuild, modules, mrun, package_parin, parin, prognostic_equations, read_3d_binary, read_var_list, subjob, surface_coupler, timestep, time_integration, user_check_parameters, user_data_output_2d, user_data_output_dvrp, user_header, user_init_grid, write_3d_binary, write_var_list

New: set_particle_attributes, set_slicer_attributes_dvrp

Changed:


lcmuk changed to lc to avoid problems with Intel compiler on sgi-ice
(poisfft)

For extended NetCDF files, the updated title attribute includes an update of
time_average_text where appropriate. (netcdf)

In case of restart runs without extension, initial profiles are not written
to NetCDF-file anymore. (data_output_profiles, modules, read_var_list, write_var_list)

Small change in formatting of the message handling routine concering the output in the
job protocoll. (message)

initializing_actions='read_data_for_recycling' renamed to 'cyclic_fill', now
independent of turbulent_inflow (check_parameters, header, init_3d_model)

2 NetCDF error numbers changed. (data_output_3d)

A Link to the website appendix_a.html is printed for further information
about the possible errors. (message)

Temperature gradient criterion for estimating the boundary layer height
replaced by the gradient criterion of Sullivan et al. (1998). (flow_statistics)

NetCDF unit attribute in timeseries output in case of statistic regions added
(netcdf)

Output of NetCDF messages with aid of message handling routine.
(check_open, close_file, data_output_2d, data_output_3d,
data_output_profiles, data_output_ptseries, data_output_spectra,
data_output_tseries, netcdf, output_particles_netcdf)

Output of messages replaced by message handling routine.
(advec_particles, advec_s_bc, buoyancy, calc_spectra, check_for_restart,
check_open, coriolis, cpu_log, data_output_2d, data_output_3d, data_output_dvrp,
data_output_profiles, data_output_spectra, fft_xy, flow_statistics, header,
init_1d_model, init_3d_model, init_dvrp, init_grid, init_particles, init_pegrid,
netcdf, parin, plant_canopy_model, poisfft_hybrid, poismg, read_3d_binary,
read_var_list, surface_coupler, temperton_fft, timestep, user_actions,
user_data_output_dvrp, user_dvrp_coltab, user_init_grid, user_init_plant_canopy,
user_parin, user_read_restart_data, user_spectra )

Maximum number of tails is calculated from maximum number of particles and
skip_particles_for_tail (init_particles)

Value of vertical_particle_advection may differ for each particle group
(advec_particles, header, modules)

First constant in array den also defined as type double. (eqn_state_seawater)

Parameter dvrp_psize moved from particles_par to dvrp_graphics_par. (package_parin)

topography_grid_convention moved from userpar to inipar (check_parameters,
header, parin, read_var_list, user_check_parameters, user_header,
user_init_grid, user_parin, write_var_list)

Default value of grid_matching changed to strict.

Adjustments for runs on lcxt4 (necessary due to an software update on CRAY) and
for coupled runs on ibmy (mrun, subjob)

advec_particles, advec_s_bc, buoyancy, calc_spectra, check_for_restart, check_open, check_parameters, close_file, coriolis, cpu_log, data_output_2d, data_output_3d, data_output_dvrp, data_output_profiles, data_output_ptseries, data_output_spectra, data_output_tseries, eqn_state_seawater, fft_xy, flow_statistics, header, init_1d_model, init_3d_model, init_dvrp, init_grid, init_particles, init_pegrid, message, mrun, netcdf, output_particles_netcdf, package_parin, parin, plant_canopy_model, poisfft, poisfft_hybrid, poismg, read_3d_binary, read_var_list, sort_particles, subjob, user_check_parameters, user_header, user_init_grid, user_parin, surface_coupler, temperton_fft, timestep, user_actions, user_data_output_dvrp, user_dvrp_coltab, user_init_grid, user_init_plant_canopy, user_parin, user_read_restart_data, user_spectra, write_var_list

Errors:


Bugfix: Initial hydrostatic pressure profile in case of ocean runs is now
calculated in 5 iteration steps. (init_ocean)

Bugfix: wrong sign in buoyancy production of ocean part in case of not using
the reference density (only in 3D routine production_e) (production_e)

Bugfix: output of averaged 2d/3d quantities requires that an avaraging
interval has been set, respective error message is included (check_parameters)

Bugfix: Output on unit 14 only if requested by write_binary.
(user_last_actions)

Bugfix to avoid zero division by km_neutral (production_e)

Bugfix for extended NetCDF files: In order to avoid 'data mode' errors if
updated attributes are larger than their original size, NF90_PUT_ATT is called
in 'define mode' enclosed by NF90_REDEF and NF90_ENDDEF calls. This implies a
possible performance loss; an alternative strategy would be to ensure equal
attribute size in a job chain. (netcdf)

Bugfix: correction of initial volume flow for non-flat topography (init_3d_model)
Bugfix: zero initialization of arrays within buildings for 'cyclic_fill' (init_3d_model)

Bugfix: to_be_resorted => s_av for time-averaged scalars (data_output_2d, data_output_3d)

Bugfix: error in formatting the output (message)

Bugfix: avoid that ngp_2dh_s_inner becomes zero (init_3_model)

Typographical error: unit of wpt in dots_unit (modules)

Bugfix: error in check, if particles moved further than one subdomain length.
This check must not be applied for newly released particles. (advec_particles)

Bugfix: several tail counters are initialized, particle_tail_coordinates is
only written to file if its third index is > 0, arrays for tails are allocated
with a minimum size of 10 tails if there is no tail initially (init_particles,
advec_particles)

Bugfix: pressure included for profile output (check_parameters)

Bugfix: Type of count and count_rate changed to default INTEGER on NEC machines
(cpu_log)

Bugfix: output if particle time series only if particle advection is switched
on. (time_integration)

Bugfix: qsws was calculated in case of constant heatflux = .FALSE. (prandtl_fluxes)

Bugfix: averaging along z is not allowed for 2d quantities (e.g. u* and z0) (data_output_2d)

Typographical errors (netcdf)

If the inversion height calculated by the prerun is zero, inflow_damping_height
must be explicitly specified (init_3d_model)

Small bugfix concerning 3d 64bit netcdf output format (header)

Bugfix: dt_fixed removed from the restart file, because otherwise, no change
from a fixed to a variable timestep would be possible in restart runs.
(read_var_list, write_var_list)

Bugfix: initial setting of time_coupling in coupled restart runs (time_integration)

advec_particles, check_parameters, cpu_log, data_output_2d, data_output_3d, header, init_3d_model, init_particles, init_ocean, modules, netcdf, prandtl_fluxes, production_e, read_var_list, time_integration, user_last_actions, write_var_list

  • Property svn:keywords set to Id
File size: 41.9 KB
Line 
1 SUBROUTINE read_3d_binary
2
3!------------------------------------------------------------------------------!
4! Current revisions:
5! -----------------
6!
7!
8! Former revisions:
9! -----------------
10! $Id: read_3d_binary.f90 392 2009-09-24 10:39:14Z letzel $
11!
12! 367 2009-08-25 08:35:52Z maronga
13! Output of messages replaced by message handling routine.
14! +shf_av, qsws_av
15!
16! 220 2008-12-18 07:00:36Z raasch
17! reading mechanism completely revised (subdomain/total domain size can vary
18! arbitrarily between current and previous run)
19! Bugfix: reading of spectrum_x|y from restart files ignored if total numbers
20! of grid points do not match
21!
22! 150 2008-02-29 08:19:58Z raasch
23! Files from which restart data are to be read are determined and subsequently
24! opened. The total domain on the restart file is allowed to be smaller than
25! the current total domain. In this case it will be periodically mapped on the
26! current domain (needed for recycling method).
27! +call of user_read_restart_data, -dopr_time_count,
28! hom_sum, volume_flow_area, volume_flow_initial moved to read_var_list,
29! reading of old profil parameters (cross_..., dopr_crossindex, profile_***)
30! removed, initialization of spectrum_x|y removed
31!
32! 102 2007-07-27 09:09:17Z raasch
33! +uswst, uswst_m, vswst, vswst_m
34!
35! 96 2007-06-04 08:07:41Z raasch
36! +rho_av, sa, sa_av, saswsb, saswst
37!
38! 73 2007-03-20 08:33:14Z raasch
39! +precipitation_amount, precipitation_rate_av, rif_wall, u_m_l, u_m_r, etc.,
40! z0_av
41!
42! 19 2007-02-23 04:53:48Z raasch
43! +qswst, qswst_m, tswst, tswst_m
44!
45! RCS Log replace by Id keyword, revision history cleaned up
46!
47! Revision 1.4  2006/08/04 15:02:32  raasch
48! +iran, iran_part
49!
50! Revision 1.1  2004/04/30 12:47:27  raasch
51! Initial revision
52!
53!
54! Description:
55! ------------
56! Binary input of variables and arrays from restart file
57!------------------------------------------------------------------------------!
58
59    USE arrays_3d
60    USE averaging
61    USE cloud_parameters
62    USE control_parameters
63    USE cpulog
64    USE indices
65    USE interfaces
66    USE particle_attributes
67    USE pegrid
68    USE profil_parameter
69    USE random_function_mod
70    USE statistics
71
72    IMPLICIT NONE
73
74    CHARACTER (LEN=5)  ::  myid_char_save
75    CHARACTER (LEN=10) ::  binary_version, version_on_file
76    CHARACTER (LEN=20) ::  field_chr
77
78    INTEGER ::  files_to_be_opened, i, j, k, myid_on_file,                    &
79                numprocs_on_file, nxlc, nxlf, nxlpr, nxl_on_file, nxrc, nxrf, &
80                nxrpr, nxr_on_file, nync, nynf, nynpr, nyn_on_file, nysc,     &
81                nysf, nyspr, nys_on_file, nzb_on_file, nzt_on_file, offset_x, &
82                offset_y, shift_x, shift_y
83
84    INTEGER, DIMENSION(numprocs_previous_run) ::  file_list, overlap_count
85
86    INTEGER, DIMENSION(numprocs_previous_run,1000) ::  nxlfa, nxrfa, nynfa, &
87                                                       nysfa, offset_xa, &
88                                                       offset_ya
89    REAL ::  rdummy
90
91    REAL, DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d
92    REAL, DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d, tmp_3dwul, tmp_3dwun,    &
93                                              tmp_3dwur, tmp_3dwus, tmp_3dwvl, &
94                                              tmp_3dwvn, tmp_3dwvr, tmp_3dwvs, &
95                                              tmp_3dwwl, tmp_3dwwn, tmp_3dwwr, &
96                                              tmp_3dwws
97    REAL, DIMENSION(:,:,:,:), ALLOCATABLE ::  tmp_4d
98
99
100!
101!-- Read data from previous model run.
102    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'start' )
103
104!
105!-- Check which of the restart files contain data needed for the subdomain
106!-- of this PE
107    files_to_be_opened = 0
108
109    DO  i = 1, numprocs_previous_run
110!
111!--    Store array bounds of the previous run ("pr") in temporary scalars
112       nxlpr = hor_index_bounds_previous_run(1,i-1)
113       nxrpr = hor_index_bounds_previous_run(2,i-1)
114       nyspr = hor_index_bounds_previous_run(3,i-1)
115       nynpr = hor_index_bounds_previous_run(4,i-1)
116
117!
118!--    Determine the offsets. They may be non-zero in case that the total domain
119!--    on file is smaller than the current total domain.
120       offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
121       offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
122
123!
124!--    Start with this offset and then check, if the subdomain on file
125!--    matches another time(s) in the current subdomain by shifting it
126!--    for nx_on_file+1, ny_on_file+1 respectively
127
128       shift_y = 0
129       j       = 0  ! counter for the number of files to be opened
130
131       DO WHILE ( nyspr+shift_y <= nyn-offset_y  .AND.  &
132                  nynpr+shift_y >= nys-offset_y )
133
134          shift_x = 0
135
136          DO WHILE ( nxlpr+shift_x <= nxr-offset_x  .AND. &
137                     nxrpr+shift_x >= nxl-offset_x )
138
139             j = j +1
140
141             IF ( j > 1000 )  THEN
142!
143!--             Array bound exceeded
144                message_string = 'data from subdomain of previous' // &
145                                 ' run mapped more than 1000 times'
146                CALL message( 'read_3d_binary', 'PA0284', 2, 2, -1, 6, 1 )
147 
148             ENDIF
149
150             IF ( j == 1 )  THEN
151                files_to_be_opened = files_to_be_opened + 1
152                file_list(files_to_be_opened) = i-1
153             ENDIF
154
155             offset_xa(files_to_be_opened,j) = offset_x + shift_x
156             offset_ya(files_to_be_opened,j) = offset_y + shift_y
157
158!
159!--          Index bounds of overlapping data
160             nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
161             nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
162             nysfa(files_to_be_opened,j) = MAX( nys-offset_y, nyspr )
163             nynfa(files_to_be_opened,j) = MIN( nyn-offset_y, nynpr )
164
165             shift_x = shift_x + ( nx_on_file + 1 )
166
167          ENDDO
168
169          shift_y = shift_y + ( ny_on_file + 1 )
170
171       ENDDO
172
173       IF ( j > 0 )  overlap_count(files_to_be_opened) = j
174
175!
176!--    Test output, to be removed later
177       IF ( j > 0 )  THEN
178          WRITE (9,*) '*** reading from file: ', i, j, ' times'
179          WRITE (9,*) '    nxl = ', nxl, ' nxr = ', nxr, ' nys = ', nys, ' nyn = ', nyn
180          WRITE (9,*) ' '
181          DO  k = 1, j
182             WRITE (9,*) 'k = ', k
183             WRITE (9,'(6(A,I2))')  'nxlfa = ', nxlfa(files_to_be_opened,k), &
184                         ' nxrfa = ', nxrfa(files_to_be_opened,k), &
185                         ' offset_xa = ', offset_xa(files_to_be_opened,k), &
186                         ' nysfa = ', nysfa(files_to_be_opened,k), &
187                         ' nynfa = ', nynfa(files_to_be_opened,k), &
188                         ' offset_ya = ', offset_ya(files_to_be_opened,k)
189          ENDDO
190          CALL local_flush( 9 )
191       ENDIF
192
193    ENDDO
194
195!
196!-- Save the id-string of the current process, since myid_char may now be used
197!-- to open files created by PEs with other id.
198    myid_char_save = myid_char
199
200!
201!-- Test output (remove later)
202    DO i = 1, numprocs_previous_run
203       WRITE (9,*) 'i=',i-1, ' ibs= ',hor_index_bounds_previous_run(1:4,i-1)
204    ENDDO
205    CALL local_flush( 9 )
206
207    IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run ) &
208    THEN
209       WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed ', &
210                        'in restart run&  PE', myid, ' will read from files ', &
211                         file_list(1:files_to_be_opened)
212       CALL message( 'read_3d_binary', 'PA0285', 0, 0, 0, 6, 0 )
213    ENDIF
214
215!
216!-- Read data from all restart files determined above
217    DO  i = 1, files_to_be_opened
218
219       j = file_list(i)
220!
221!--    Set the filename (underscore followed by four digit processor id)
222       WRITE (myid_char,'(''_'',I4.4)')  j
223       WRITE (9,*) 'myid=',myid,' opening file "',myid_char,'"'
224       CALL local_flush( 9 )
225
226!
227!--    Open the restart file. If this file has been created by PE0 (_0000),
228!--    the global variables at the beginning of the file have to be skipped
229!--    first.
230       CALL check_open( 13 )
231       WRITE (9,*) 'before skipping'
232       CALL local_flush( 9 )
233       IF ( j == 0 )  CALL skip_var_list
234       WRITE (9,*) 'skipping done'
235       CALL local_flush( 9 )
236
237!
238!--    First compare the version numbers
239       READ ( 13 )  version_on_file
240       binary_version = '3.1'
241       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
242          WRITE( message_string, * ) 'version mismatch concerning data ',      &
243                      'from prior run',                                        &
244                      '&version on file    = "', TRIM( version_on_file ), '"', &
245                      '&version in program = "', TRIM( binary_version ), '"'
246          CALL message( 'read_3d_binary', 'PA0286', 1, 2, 0, 6, 0 )
247       ENDIF
248
249!
250!--    Read number of processors, processor-id, and array ranges.
251!--    Compare the array ranges with those stored in the index bound array.
252       READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, &
253                    nys_on_file, nyn_on_file, nzb_on_file, nzt_on_file
254
255       IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
256          WRITE( message_string, * ) 'problem with index bound nxl on ',  &
257                            'restart file "', myid_char, '"',             &
258                            '&nxl = ', nxl_on_file, ' but it should be',  &
259                            '&= ', hor_index_bounds_previous_run(1,j),    &
260                            '&from the index bound information array'
261          CALL message( 'read_3d_binary', 'PA0287', 2, 2, -1, 6, 1 )
262       ENDIF
263
264       IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
265           WRITE( message_string, * ) 'problem with index bound nxr on ',   &
266                               'restart file "', myid_char, '"'  ,          &
267                               '&nxr = ', nxr_on_file, ' but it should be', &
268                               '&= ', hor_index_bounds_previous_run(2,j),   &
269                               '&from the index bound information array' 
270          CALL message( 'read_3d_binary', 'PA0288', 2, 2, -1, 6, 1 )
271
272       ENDIF
273
274       IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
275          WRITE( message_string, * ) 'problem with index bound nys on ',      &
276                                 'restart file "', myid_char, '"',            &
277                                 '&nys = ', nys_on_file, ' but it should be', &
278                                 '&= ', hor_index_bounds_previous_run(3,j),   &
279                                     '&from the index bound information array'
280          CALL message( 'read_3d_binary', 'PA0289', 2, 2, -1, 6, 1 ) 
281       ENDIF
282
283       IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
284          WRITE( message_string, * ) 'problem with index bound nyn on ',    &
285                               'restart file "', myid_char, '"',            &
286                               '&nyn = ', nyn_on_file, ' but it should be', &
287                               '&= ', hor_index_bounds_previous_run(4,j),   &
288                               '&from the index bound information array'
289          CALL message( 'read_3d_binary', 'PA0290', 2, 2, -1, 6, 1 ) 
290       ENDIF
291
292       IF ( nzb_on_file /= nzb )  THEN
293          WRITE( message_string, * ) 'mismatch between actual data and data ', &
294                                     '&from prior run on PE ', myid,           &
295                                     '&nzb on file = ', nzb_on_file,           &
296                                     '&nzb         = ', nzb
297          CALL message( 'read_3d_binary', 'PA0291', 1, 2, 0, 6, 0 ) 
298       ENDIF
299
300       IF ( nzt_on_file /= nzt )  THEN
301          WRITE( message_string, * ) 'mismatch between actual data and data ', &
302                                     '&from prior run on PE ', myid,           &
303                                     '&nzt on file = ', nzt_on_file,           &
304                                     '&nzt         = ', nzt
305          CALL message( 'read_3d_binary', 'PA0292', 1, 2, 0, 6, 0 ) 
306       ENDIF
307
308!
309!--    Allocate temporary arrays sized as the arrays on the restart file
310       ALLOCATE( tmp_2d(nys_on_file-1:nyn_on_file+1,           &
311                        nxl_on_file-1:nxr_on_file+1),          &
312                 tmp_3d(nzb:nzt+1,nys_on_file-1:nyn_on_file+1, &
313                        nxl_on_file-1:nxr_on_file+1) )
314
315!
316!--    Read arrays
317!--    ATTENTION: If the following read commands have been altered, the
318!--    ---------- version number of the variable binary_version must be altered,
319!--               too. Furthermore, the output list of arrays in write_3d_binary
320!--               must also be altered accordingly.
321       READ ( 13 )  field_chr
322       DO  WHILE ( TRIM( field_chr ) /= '*** end ***' )
323
324!
325!--       Map data on file as often as needed (data are read only for k=1)
326          DO  k = 1, overlap_count(i)
327
328!
329!--          Get the index range of the subdomain on file which overlap with the
330!--          current subdomain
331             nxlf = nxlfa(i,k)
332             nxlc = nxlfa(i,k) + offset_xa(i,k)
333             nxrf = nxrfa(i,k)
334             nxrc = nxrfa(i,k) + offset_xa(i,k)
335             nysf = nysfa(i,k)
336             nysc = nysfa(i,k) + offset_ya(i,k)
337             nynf = nynfa(i,k)
338             nync = nynfa(i,k) + offset_ya(i,k)
339
340
341             WRITE (9,*) 'var = ', field_chr
342             CALL local_flush( 9 )
343
344             SELECT CASE ( TRIM( field_chr ) )
345
346                CASE ( 'e' )
347                   IF ( k == 1 )  READ ( 13 )  tmp_3d
348                   e(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
349                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
350
351                CASE ( 'e_av' )
352                   IF ( .NOT. ALLOCATED( e_av ) )  THEN
353                      ALLOCATE( e_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
354                   ENDIF
355                   IF ( k == 1 )  READ ( 13 )  tmp_3d
356                   e_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
357                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
358
359                CASE ( 'e_m' )
360                   IF ( k == 1 )  READ ( 13 )  tmp_3d
361                   e_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
362                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
363
364                CASE ( 'iran' ) ! matching random numbers is still unresolved
365                                ! issue
366                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
367
368                CASE ( 'kh' )
369                   IF ( k == 1 )  READ ( 13 )  tmp_3d
370                   kh(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
371                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
372
373                CASE ( 'kh_m' )
374                   IF ( k == 1 )  READ ( 13 )  tmp_3d
375                   kh_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
376                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
377
378                CASE ( 'km' )
379                   IF ( k == 1 )  READ ( 13 )  tmp_3d
380                   km(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
381                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
382
383                CASE ( 'km_m' )
384                   IF ( k == 1 )  READ ( 13 )  tmp_3d
385                   km_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
386                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
387
388                CASE ( 'lwp_av' )
389                   IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
390                      ALLOCATE( lwp_av(nys-1:nyn+1,nxl-1:nxr+1) )
391                   ENDIF
392                   IF ( k == 1 )  READ ( 13 )  tmp_2d
393                   lwp_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
394                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
395
396                CASE ( 'p' )
397                   IF ( k == 1 )  READ ( 13 )  tmp_3d
398                   p(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
399                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
400
401                CASE ( 'p_av' )
402                   IF ( .NOT. ALLOCATED( p_av ) )  THEN
403                      ALLOCATE( p_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
404                   ENDIF
405                   IF ( k == 1 )  READ ( 13 )  tmp_3d
406                   p_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
407                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
408
409                CASE ( 'pc_av' )
410                   IF ( .NOT. ALLOCATED( pc_av ) )  THEN
411                      ALLOCATE( pc_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
412                   ENDIF
413                   IF ( k == 1 )  READ ( 13 )  tmp_3d
414                   pc_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
415                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
416
417                CASE ( 'pr_av' )
418                   IF ( .NOT. ALLOCATED( pr_av ) )  THEN
419                      ALLOCATE( pr_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
420                   ENDIF
421                   IF ( k == 1 )  READ ( 13 )  tmp_3d
422                   pr_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
423                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
424
425                CASE ( 'precipitation_amount' )
426                   IF ( k == 1 )  READ ( 13 )  tmp_2d
427                   precipitation_amount(nysc-1:nync+1,nxlc-1:nxrc+1) = &
428                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
429
430                CASE ( 'precipitation_rate_a' )
431                   IF ( .NOT. ALLOCATED( precipitation_rate_av ) )  THEN
432                      ALLOCATE( precipitation_rate_av(nys-1:nyn+1,nxl-1:nxr+1) )
433                   ENDIF
434                   IF ( k == 1 )  READ ( 13 )  tmp_2d
435                   precipitation_rate_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
436                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
437
438                CASE ( 'pt' )
439                   IF ( k == 1 )  READ ( 13 )  tmp_3d
440                   pt(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
441                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
442
443                CASE ( 'pt_av' )
444                   IF ( .NOT. ALLOCATED( pt_av ) )  THEN
445                      ALLOCATE( pt_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
446                   ENDIF
447                   IF ( k == 1 )  READ ( 13 )  tmp_3d
448                   pt_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
449                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
450
451                CASE ( 'pt_m' )
452                   IF ( k == 1 )  READ ( 13 )  tmp_3d
453                   pt_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
454                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
455
456                CASE ( 'q' )
457                   IF ( k == 1 )  READ ( 13 )  tmp_3d
458                   q(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
459                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
460
461                CASE ( 'q_av' )
462                   IF ( .NOT. ALLOCATED( q_av ) )  THEN
463                      ALLOCATE( q_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
464                   ENDIF
465                   IF ( k == 1 )  READ ( 13 )  tmp_3d
466                   q_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
467                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
468
469                CASE ( 'q_m' )
470                   IF ( k == 1 )  READ ( 13 )  tmp_3d
471                   q_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
472                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
473
474                CASE ( 'ql' )
475                   IF ( k == 1 )  READ ( 13 )  tmp_3d
476                   ql(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
477                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
478
479                CASE ( 'ql_av' )
480                   IF ( .NOT. ALLOCATED( ql_av ) )  THEN
481                      ALLOCATE( ql_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
482                   ENDIF
483                   IF ( k == 1 )  READ ( 13 )  tmp_3d
484                   ql_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
485                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
486
487                CASE ( 'ql_c_av' )
488                   IF ( .NOT. ALLOCATED( ql_c_av ) )  THEN
489                      ALLOCATE( ql_c_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
490                   ENDIF
491                   IF ( k == 1 )  READ ( 13 )  tmp_3d
492                   ql_c_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
493                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
494
495                CASE ( 'ql_v_av' )
496                   IF ( .NOT. ALLOCATED( ql_v_av ) )  THEN
497                      ALLOCATE( ql_v_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
498                   ENDIF
499                   IF ( k == 1 )  READ ( 13 )  tmp_3d
500                   ql_v_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
501                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
502
503                CASE ( 'ql_vp_av' )
504                   IF ( .NOT. ALLOCATED( ql_vp_av ) )  THEN
505                      ALLOCATE( ql_vp_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
506                   ENDIF
507                   IF ( k == 1 )  READ ( 13 )  tmp_3d
508                   ql_vp_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
509                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
510
511                CASE ( 'qs' )
512                   IF ( k == 1 )  READ ( 13 )  tmp_2d
513                   qs(nysc-1:nync+1,nxlc-1:nxrc+1) = &
514                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
515
516                CASE ( 'qsws' )
517                   IF ( k == 1 )  READ ( 13 )  tmp_2d
518                   qsws(nysc-1:nync+1,nxlc-1:nxrc+1) = &
519                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
520
521                CASE ( 'qsws_m' )
522                   IF ( k == 1 )  READ ( 13 )  tmp_2d
523                   qsws_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
524                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
525
526                CASE ( 'qsws_av' )
527                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
528                      ALLOCATE( qsws_av(nys-1:nyn+1,nxl-1:nxr+1) )
529                   ENDIF 
530                   IF ( k == 1 )  READ ( 13 )  tmp_2d
531                   qsws_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
532                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
533
534                CASE ( 'qswst' )
535                   IF ( k == 1 )  READ ( 13 )  tmp_2d
536                   qswst(nysc-1:nync+1,nxlc-1:nxrc+1) = &
537                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
538
539                CASE ( 'qswst_m' )
540                   IF ( k == 1 )  READ ( 13 )  tmp_2d
541                   qswst_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
542                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
543
544                CASE ( 'qv_av' )
545                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
546                      ALLOCATE( qv_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
547                   ENDIF
548                   IF ( k == 1 )  READ ( 13 )  tmp_3d
549                   qv_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
550                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
551
552                CASE ( 'random_iv' )  ! still unresolved issue
553                   IF ( k == 1 )  READ ( 13 )  random_iv
554                   IF ( k == 1 )  READ ( 13 )  random_iy
555
556                CASE ( 'rho_av' )
557                   IF ( .NOT. ALLOCATED( rho_av ) )  THEN
558                      ALLOCATE( rho_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
559                   ENDIF
560                   IF ( k == 1 )  READ ( 13 )  tmp_3d
561                   rho_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
562                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
563
564                CASE ( 'rif' )
565                   IF ( k == 1 )  READ ( 13 )  tmp_2d
566                   rif(nysc-1:nync+1,nxlc-1:nxrc+1) = &
567                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
568
569                CASE ( 'rif_m' )
570                   IF ( k == 1 )  READ ( 13 )  tmp_2d
571                   rif_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
572                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
573
574                CASE ( 'rif_wall' )
575                   IF ( k == 1 )  THEN
576                      ALLOCATE( tmp_4d(nzb:nzt+1,nys_on_file-1:nyn_on_file+1, &
577                                       nxl_on_file-1:nxr_on_file+1,1:4) )
578                      READ ( 13 )  tmp_4d
579                   ENDIF
580                   rif_wall(:,nysc-1:nync+1,nxlc-1:nxrc+1,:) = &
581                                         tmp_4d(:,nysf-1:nynf+1,nxlf-1:nxrf+1,:)
582
583                CASE ( 's_av' )
584                   IF ( .NOT. ALLOCATED( s_av ) )  THEN
585                      ALLOCATE( s_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
586                   ENDIF
587                   IF ( k == 1 )  READ ( 13 )  tmp_3d
588                   s_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
589                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
590
591                CASE ( 'sa' )
592                   IF ( k == 1 )  READ ( 13 )  tmp_3d
593                   sa(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
594                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
595
596                CASE ( 'sa_av' )
597                   IF ( .NOT. ALLOCATED( sa_av ) )  THEN
598                      ALLOCATE( sa_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
599                   ENDIF
600                   IF ( k == 1 )  READ ( 13 )  tmp_3d
601                   sa_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
602                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
603
604                CASE ( 'saswsb' )
605                   IF ( k == 1 )  READ ( 13 )  tmp_2d
606                   saswsb(nysc-1:nync+1,nxlc-1:nxrc+1) = &
607                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
608
609                CASE ( 'saswst' )
610                   IF ( k == 1 )  READ ( 13 )  tmp_2d
611                   saswst(nysc-1:nync+1,nxlc-1:nxrc+1) = &
612                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
613
614                CASE ( 'shf' )
615                   IF ( k == 1 )  READ ( 13 )  tmp_2d
616                   shf(nysc-1:nync+1,nxlc-1:nxrc+1) = &
617                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
618
619                CASE ( 'shf_m' )
620                   IF ( k == 1 )  READ ( 13 )  tmp_2d
621                   shf_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
622                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
623                CASE ( 'shf_av' )
624                   IF ( .NOT. ALLOCATED( shf_av ) )  THEN
625                      ALLOCATE( shf_av(nys-1:nyn+1,nxl-1:nxr+1) )
626                   ENDIF
627                   IF ( k == 1 )  READ ( 13 )  tmp_2d
628                   shf_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
629                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
630                CASE ( 'spectrum_x' )
631                   IF ( k == 1 )  THEN
632                      IF ( nx_on_file /= nx )  THEN
633                         message_string = 'read_3d_binary: spectrum_x ' // &
634                                     'on restart file ignored because' // &
635                                     '&total numbers of grid points (nx) ' // &
636                                     'do not match'
637                         CALL message( 'read_3d_binary', 'PA0293',&
638                                                                 0, 1, 0, 6, 0 )
639                         READ ( 13 )  rdummy
640                      ELSE
641                         READ ( 13 )  spectrum_x
642                      ENDIF
643                   ENDIF
644
645                CASE ( 'spectrum_y' )
646                   IF ( k == 1 )  THEN
647                      IF ( ny_on_file /= ny )  THEN
648                         message_string = 'read_3d_binary: spectrum_y ' //   &
649                                     'on restart file ignored because' //    &
650                                     '&total numbers of grid points (ny) '// &
651                                     'do not match'
652                         CALL message( 'read_3d_binary', 'PA0294', &
653                                                                 0, 1, 0, 6, 0 )
654                      READ ( 13 )  rdummy
655                      ELSE
656                         READ ( 13 )  spectrum_y
657                      ENDIF
658                   ENDIF
659
660                CASE ( 'ts' )
661                   IF ( k == 1 )  READ ( 13 )  tmp_2d
662                   ts(nysc-1:nync+1,nxlc-1:nxrc+1) = &
663                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
664
665                CASE ( 'ts_av' )
666                   IF ( .NOT. ALLOCATED( ts_av ) )  THEN
667                      ALLOCATE( ts_av(nys-1:nyn+1,nxl-1:nxr+1) )
668                   ENDIF
669                   IF ( k == 1 )  READ ( 13 )  tmp_2d
670                   ts_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
671                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
672
673                CASE ( 'tswst' )
674                   IF ( k == 1 )  READ ( 13 )  tmp_2d
675                   tswst(nysc-1:nync+1,nxlc-1:nxrc+1) = &
676                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
677
678                CASE ( 'tswst_m' )
679                   IF ( k == 1 )  READ ( 13 )  tmp_2d
680                   tswst_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
681                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
682
683                CASE ( 'u' )
684                   IF ( k == 1 )  READ ( 13 )  tmp_3d
685                   u(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
686                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
687
688                CASE ( 'u_av' )
689                   IF ( .NOT. ALLOCATED( u_av ) )  THEN
690                      ALLOCATE( u_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
691                   ENDIF
692                   IF ( k == 1 )  READ ( 13 )  tmp_3d
693                   u_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
694                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
695
696                CASE ( 'u_m' )
697                   IF ( k == 1 )  READ ( 13 )  tmp_3d
698                   u_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
699                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
700
701                CASE ( 'u_m_l' )
702                   IF ( k == 1 )  THEN
703                      ALLOCATE( tmp_3dwul(nzb:nzt+1, &
704                                          nys_on_file-1:nyn_on_file+1,1:2) )
705                      READ ( 13 )  tmp_3dwul
706                   ENDIF
707                   IF ( outflow_l )  THEN
708                      u_m_l(:,nysc-1:nync+1,:) = tmp_3dwul(:,nysf-1:nynf+1,:)
709                   ENDIF
710
711                CASE ( 'u_m_n' )
712                   IF ( k == 1 )  THEN
713                      ALLOCATE( tmp_3dwun(nzb:nzt+1,ny-1:ny, &
714                                          nxl_on_file-1:nxr_on_file+1) )
715                      READ ( 13 )  tmp_3dwun
716                   ENDIF
717                   IF ( outflow_n )  THEN
718                      u_m_n(:,:,nxlc-1:nxrc+1) = tmp_3dwun(:,:,nxlf-1:nxrf+1)
719                   ENDIF
720
721                CASE ( 'u_m_r' )
722                   IF ( k == 1 )  THEN
723                      ALLOCATE( tmp_3dwur(nzb:nzt+1,&
724                                          nys_on_file-1:nyn_on_file+1,nx-1:nx) )
725                      READ ( 13 )  tmp_3dwur
726                   ENDIF
727                   IF ( outflow_r )  THEN
728                      u_m_r(:,nysc-1:nync+1,:) = tmp_3dwur(:,nysf-1:nynf+1,:)
729                   ENDIF
730
731                CASE ( 'u_m_s' )
732                   IF ( k == 1 )  THEN
733                      ALLOCATE( tmp_3dwus(nzb:nzt+1,0:1, &
734                                          nxl_on_file-1:nxr_on_file+1) )
735                      READ ( 13 )  tmp_3dwus
736                   ENDIF
737                   IF ( outflow_s )  THEN
738                      u_m_s(:,:,nxlc-1:nxrc+1) = tmp_3dwus(:,:,nxlf-1:nxrf+1)
739                   ENDIF
740
741                CASE ( 'us' )
742                   IF ( k == 1 )  READ ( 13 )  tmp_2d
743                   us(nysc-1:nync+1,nxlc-1:nxrc+1) = &
744                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
745
746                CASE ( 'usws' )
747                   IF ( k == 1 )  READ ( 13 )  tmp_2d
748                   usws(nysc-1:nync+1,nxlc-1:nxrc+1) = &
749                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
750
751                CASE ( 'uswst' )
752                   IF ( k == 1 )  READ ( 13 )  tmp_2d
753                   uswst(nysc-1:nync+1,nxlc-1:nxrc+1) = &
754                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
755
756                CASE ( 'usws_m' )
757                   IF ( k == 1 )  READ ( 13 )  tmp_2d
758                   usws_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
759                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
760
761                CASE ( 'uswst_m' )
762                   IF ( k == 1 )  READ ( 13 )  tmp_2d
763                   uswst_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
764                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
765
766                CASE ( 'us_av' )
767                   IF ( .NOT. ALLOCATED( us_av ) )  THEN
768                      ALLOCATE( us_av(nys-1:nyn+1,nxl-1:nxr+1) )
769                   ENDIF
770                   IF ( k == 1 )  READ ( 13 )  tmp_2d
771                   us_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
772                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
773
774                CASE ( 'v' )
775                   IF ( k == 1 )  READ ( 13 )  tmp_3d
776                   v(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
777                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
778
779                CASE ( 'v_av' )
780                   IF ( .NOT. ALLOCATED( v_av ) )  THEN
781                      ALLOCATE( v_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
782                   ENDIF
783                   IF ( k == 1 )  READ ( 13 )  tmp_3d
784                   v_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
785                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
786
787                CASE ( 'v_m' )
788                   IF ( k == 1 )  READ ( 13 )  tmp_3d
789                   v_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
790                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
791
792                CASE ( 'v_m_l' )
793                   IF ( k == 1 )  THEN
794                      ALLOCATE( tmp_3dwvl(nzb:nzt+1,&
795                                          nys_on_file-1:nyn_on_file+1,0:1) )
796                      READ ( 13 )  tmp_3dwvl
797                   ENDIF
798                   IF ( outflow_l )  THEN
799                      v_m_l(:,nysc-1:nync+1,:) = tmp_3dwvl(:,nysf-1:nynf+1,:)
800                   ENDIF
801
802                CASE ( 'v_m_n' )
803                   IF ( k == 1 )  THEN
804                      ALLOCATE( tmp_3dwvn(nzb:nzt+1,ny-1:ny, &
805                                          nxl_on_file-1:nxr_on_file+1) )
806                      READ ( 13 )  tmp_3dwvn
807                   ENDIF
808                   IF ( outflow_n )  THEN
809                      v_m_n(:,:,nxlc-1:nxrc+1) = tmp_3dwvn(:,:,nxlf-1:nxrf+1)
810                   ENDIF
811
812                CASE ( 'v_m_r' )
813                   IF ( k == 1 )  THEN
814                      ALLOCATE( tmp_3dwvr(nzb:nzt+1,&
815                                          nys_on_file-1:nyn_on_file+1,nx-1:nx) )
816                      READ ( 13 )  tmp_3dwvr
817                   ENDIF
818                   IF ( outflow_r )  THEN
819                      v_m_r(:,nysc-1:nync+1,:) = tmp_3dwvr(:,nysf-1:nynf+1,:)
820                   ENDIF
821
822                CASE ( 'v_m_s' )
823                   IF ( k == 1 )  THEN
824                      ALLOCATE( tmp_3dwvs(nzb:nzt+1,1:2, &
825                                          nxl_on_file-1:nxr_on_file+1) )
826                      READ ( 13 )  tmp_3dwvs
827                   ENDIF
828                   IF ( outflow_s )  THEN
829                      v_m_s(:,:,nxlc-1:nxrc+1) = tmp_3dwvs(:,:,nxlf-1:nxrf+1)
830                   ENDIF
831
832                CASE ( 'vpt' )
833                   IF ( k == 1 )  READ ( 13 )  tmp_3d
834                   vpt(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
835                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
836
837                CASE ( 'vpt_av' )
838                   IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
839                      ALLOCATE( vpt_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
840                   ENDIF
841                   IF ( k == 1 )  READ ( 13 )  tmp_3d
842                   vpt_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
843                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
844
845                CASE ( 'vpt_m' )
846                   IF ( k == 1 )  READ ( 13 )  tmp_3d
847                   vpt_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
848                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
849
850                CASE ( 'vsws' )
851                   IF ( k == 1 )  READ ( 13 )  tmp_2d
852                   vsws(nysc-1:nync+1,nxlc-1:nxrc+1) = &
853                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
854
855                CASE ( 'vswst' )
856                   IF ( k == 1 )  READ ( 13 )  tmp_2d
857                   vswst(nysc-1:nync+1,nxlc-1:nxrc+1) = &
858                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
859
860                CASE ( 'vsws_m' )
861                   IF ( k == 1 )  READ ( 13 )  tmp_2d
862                   vsws_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
863                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
864
865                CASE ( 'vswst_m' )
866                   IF ( k == 1 )  READ ( 13 )  tmp_2d
867                   vswst_m(nysc-1:nync+1,nxlc-1:nxrc+1) = &
868                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
869
870                CASE ( 'w' )
871                   IF ( k == 1 )  READ ( 13 )  tmp_3d
872                   w(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
873                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
874
875                CASE ( 'w_av' )
876                   IF ( .NOT. ALLOCATED( w_av ) )  THEN
877                      ALLOCATE( w_av(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) )
878                   ENDIF
879                   IF ( k == 1 )  READ ( 13 )  tmp_3d
880                   w_av(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
881                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
882
883                CASE ( 'w_m' )
884                   IF ( k == 1 )  READ ( 13 )  tmp_3d
885                   w_m(:,nysc-1:nync+1,nxlc-1:nxrc+1) = &
886                                          tmp_3d(:,nysf-1:nynf+1,nxlf-1:nxrf+1)
887
888                CASE ( 'w_m_l' )
889                   IF ( k == 1 )  THEN
890                      ALLOCATE( tmp_3dwwl(nzb:nzt+1,&
891                                          nys_on_file-1:nyn_on_file+1,0:1) )
892                      READ ( 13 )  tmp_3dwwl
893                   ENDIF
894                   IF ( outflow_l )  THEN
895                      w_m_l(:,nysc-1:nync+1,:) = tmp_3dwwl(:,nysf-1:nynf+1,:)
896                   ENDIF
897
898                CASE ( 'w_m_n' )
899                   IF ( k == 1 )  THEN
900                      ALLOCATE( tmp_3dwwn(nzb:nzt+1,ny-1:ny, &
901                                          nxl_on_file-1:nxr_on_file+1) )
902                      READ ( 13 )  tmp_3dwwn
903                   ENDIF
904                   IF ( outflow_n )  THEN
905                      w_m_n(:,:,nxlc-1:nxrc+1) = tmp_3dwwn(:,:,nxlf-1:nxrf+1)
906                   ENDIF
907
908                CASE ( 'w_m_r' )
909                   IF ( k == 1 )  THEN
910                      ALLOCATE( tmp_3dwwr(nzb:nzt+1,&
911                                          nys_on_file-1:nyn_on_file+1,nx-1:nx) )
912                      READ ( 13 )  tmp_3dwwr
913                   ENDIF
914                   IF ( outflow_r )  THEN
915                      w_m_r(:,nysc-1:nync+1,:) = tmp_3dwwr(:,nysf-1:nynf+1,:)
916                   ENDIF
917
918                CASE ( 'w_m_s' )
919                   IF ( k == 1 )  THEN
920                      ALLOCATE( tmp_3dwws(nzb:nzt+1,0:1, &
921                                          nxl_on_file-1:nxr_on_file+1) )
922                      READ ( 13 )  tmp_3dwws
923                   ENDIF
924                   IF ( outflow_s )  THEN
925                      w_m_s(:,:,nxlc-1:nxrc+1) = tmp_3dwws(:,:,nxlf-1:nxrf+1)
926                   ENDIF
927                   DEALLOCATE( tmp_3dwws )
928
929                CASE ( 'z0' )
930                   IF ( k == 1 )  READ ( 13 )  tmp_2d
931                   z0(nysc-1:nync+1,nxlc-1:nxrc+1) = &
932                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
933
934                CASE ( 'z0_av' )
935                   IF ( .NOT. ALLOCATED( z0_av ) )  THEN
936                      ALLOCATE( z0_av(nys-1:nyn+1,nxl-1:nxr+1) )
937                   ENDIF
938                   IF ( k == 1 )  READ ( 13 )  tmp_2d
939                   z0_av(nysc-1:nync+1,nxlc-1:nxrc+1) = &
940                                          tmp_2d(nysf-1:nynf+1,nxlf-1:nxrf+1)
941
942                CASE DEFAULT
943                   WRITE( message_string, * ) 'unknown field named "', &
944                                              TRIM( field_chr ), '" found in', &
945                                              '&data from prior run on PE ',myid
946                    CALL message( 'read_3d_binary', 'PA0295', 1, 2, 0, 6, 0 ) 
947                   
948             END SELECT
949
950          ENDDO  ! overlap loop
951
952!
953!--       Deallocate arrays needed for specific variables only
954          IF ( ALLOCATED( tmp_3dwul ) )  DEALLOCATE( tmp_3dwul )
955          IF ( ALLOCATED( tmp_3dwun ) )  DEALLOCATE( tmp_3dwun )
956          IF ( ALLOCATED( tmp_3dwur ) )  DEALLOCATE( tmp_3dwur )
957          IF ( ALLOCATED( tmp_3dwus ) )  DEALLOCATE( tmp_3dwus )
958          IF ( ALLOCATED( tmp_3dwvl ) )  DEALLOCATE( tmp_3dwvl )
959          IF ( ALLOCATED( tmp_3dwvn ) )  DEALLOCATE( tmp_3dwvn )
960          IF ( ALLOCATED( tmp_3dwvr ) )  DEALLOCATE( tmp_3dwvr )
961          IF ( ALLOCATED( tmp_3dwvs ) )  DEALLOCATE( tmp_3dwvs )
962          IF ( ALLOCATED( tmp_3dwwl ) )  DEALLOCATE( tmp_3dwwl )
963          IF ( ALLOCATED( tmp_3dwwn ) )  DEALLOCATE( tmp_3dwwn )
964          IF ( ALLOCATED( tmp_3dwwr ) )  DEALLOCATE( tmp_3dwwr )
965          IF ( ALLOCATED( tmp_3dwws ) )  DEALLOCATE( tmp_3dwws )
966          IF ( ALLOCATED( tmp_4d ) )  DEALLOCATE( tmp_4d )
967
968!
969!--       Read next character string
970          READ ( 13 )  field_chr
971
972       ENDDO  ! loop over variables
973
974!
975!--    Read user-defined restart data
976       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
977                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
978                                    offset_xa, offset_ya, overlap_count(i),    &
979                                    tmp_2d, tmp_3d )
980
981!
982!--    Close the restart file
983       CALL close_file( 13 )
984
985       DEALLOCATE( tmp_2d, tmp_3d )
986
987    ENDDO  ! loop over restart files
988
989
990!
991!-- Restore the original filename for the restart file to be written
992    myid_char = myid_char_save
993
994
995!
996!-- End of time measuring for reading binary data
997    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'stop' )
998
999 END SUBROUTINE read_3d_binary
Note: See TracBrowser for help on using the repository browser.