source: palm/trunk/SOURCE/parin.f90 @ 1016

Last change on this file since 1016 was 1015, checked in by raasch, 12 years ago

Starting with changes required for GPU optimization. OpenACC statements for using NVIDIA GPUs added.
Adjustment of mixing length to the Prandtl mixing length at first grid point above ground removed.
mask array is set zero for ghost boundaries

  • Property svn:keywords set to Id
File size: 15.9 KB
Line 
1 SUBROUTINE parin
2
3!------------------------------------------------------------------------------!
4! Current revisions:
5! -----------------
6! -adjust_mixing_length
7!
8! Former revisions:
9! -----------------
10! $Id: parin.f90 1015 2012-09-27 09:23:24Z raasch $
11!
12! 1003 2012-09-14 14:35:53Z raasch
13! -grid_matching
14!
15! 1001 2012-09-13 14:08:46Z raasch
16! -cut_spline_overshoot, long_filter_factor, overshoot_limit_*, ups_limit_*
17!
18! 996 2012-09-07 10:41:47Z raasch
19! -use_prior_plot1d_parameters
20!
21! 978 2012-08-09 08:28:32Z fricke
22! -km_damp_max, outflow_damping_width
23! +pt_damping_factor, pt_damping_width
24! +z0h_factor
25!
26! 964 2012-07-26 09:14:24Z raasch
27! -cross_normalized_x, cross_normalized_y, cross_xtext, z_max_do1d,
28! z_max_do1d_normalized
29!
30! 940 2012-07-09 14:31:00Z raasch
31! +neutral in inipar
32!
33! 927 2012-06-06 19:15:04Z raasch
34! +masking_method in inipar
35!
36! 824 2012-02-17 09:09:57Z raasch
37! +curvature_solution_effects in inipar
38!
39! 809 2012-01-30 13:32:58Z maronga
40! Bugfix: replaced .AND. and .NOT. with && and ! in the preprocessor directives
41!
42! 807 2012-01-25 11:53:51Z maronga
43! New cpp directive "__check" implemented which is used by check_namelist_files
44!
45! 785 2011-11-28 09:47:19Z raasch
46! +scalar_rayleigh_damping in inipar
47!
48! 767 2011-10-14 06:39:12Z raasch
49! +u_profile, v_profile, uv_heights in inipar
50!
51! 759 2011-09-15 13:58:31Z raasch
52! +maximum_parallel_io_streams in envpar,
53! splitting of parallel I/O in blocks of PEs
54!
55! 683 2011-02-09 14:25:15Z raasch
56! +synchronous_exchange in d3par
57!
58! 667 2010-12-23 12:06:00Z suehring/gryschka
59! Steering parameter dissipation_control added in inipar. (commented out)
60!
61! 622 2010-12-10 08:08:13Z raasch
62! +collective_wait in inipar
63!
64! 600 2010-11-24 16:10:51Z raasch
65! parameters moved from d3par to inipar: call_psolver_at_all_substeps,
66! cfl_factor, cycle_mg, mg_cycles, mg_switch_to_pe0_level, ngsrb, nsor,
67! omega_sor, prandtl_number, psolver, rayleigh_damping_factor,
68! rayleigh_damping_height, residual_limit
69!
70! 580 2010-10-05 13:59:11Z heinze
71! Renaming of ws_vertical_gradient to subs_vertical_gradient and
72! ws_vertical_gradient_level to subs_vertical_gradient_level
73!
74! 553 2010-09-01 14:09:06Z weinreis
75! parameters for masked output are replaced by arrays
76!
77! 493 2010-03-01 08:30:24Z raasch
78! +netcdf_data_format in d3par, -netcdf_64bit, -netcdf_64bit_3d
79!
80! 449 2010-02-02 11:23:59Z raasch
81! +wall_humidityflux, wall_scalarflux
82! +ws_vertical_gradient, ws_vertical_gradient_level
83!
84! 410 2009-12-04 17:05:40Z letzel
85! masked data output: + dt_domask, mask_01~20_x|y|z, mask_01~20_x|y|z_loop,
86! mask_scale_x|y|z, masks, skip_time_domask
87!
88! 291 2009-04-16 12:07:26Z raasch
89! +local_dvrserver_running in envpar
90! Output of messages replaced by message handling routine.
91! +canyon_height, canyon_width_x, canyon_width_y, canyon_wall_left,
92! canyon_wall_south, conserve_volume_flow_mode, coupling_start_time,
93! dp_external, dp_level_b, dp_smooth, dpdxy, u_bulk, v_bulk in inipar
94! topography_grid_convention moved from userpar
95!
96! 197 2008-09-16 15:29:03Z raasch
97! +cthf,leaf_surface_concentration, scalar_exchange_coefficient
98! +inflow_damping_height, inflow_damping_width, recycling_width,
99! turbulent_inflow in inipar, -skip_time_dosp in d3par,
100! allocation of hom_sum moved from init_3d_model to here,
101! npex, npey moved from inipar to d3par, setting of myid_char_14 removed,
102! lad is allways allocated
103!
104! 138 2007-11-28 10:03:58Z letzel
105! +canopy_mode, drag_coefficient, lad_surface, lad_vertical_gradient,
106! lad_vertical_gradient_level, pch_index, plant_canopy,
107! +allocation of leaf area density field
108!
109! 108 2007-08-24 15:10:38Z letzel
110! +e_init, top_momentumflux_u|v in inipar, +dt_coupling in d3par
111!
112! 95 2007-06-02 16:48:38Z raasch
113! +bc_sa_t, bottom_salinityflux, ocean, sa_surface, sa_vertical_gradient,
114! sa_vertical_gradient_level, top_salinityflux in inipar,
115! sa_init is allocated
116!
117! 87 2007-05-22 15:46:47Z raasch
118! Size of hom increased by the maximum number of user-defined profiles,
119! var_hom renamed pr_palm
120!
121! 82 2007-04-16 15:40:52Z raasch
122! +return_addres, return_username in envpar
123!
124! 75 2007-03-22 09:54:05Z raasch
125! +dt_max, netcdf_64bit_3d, precipitation_amount_interval in d3par,
126! +loop_optimization, pt_reference in inipar, -data_output_ts,
127! moisture renamed humidity
128!
129! 20 2007-02-26 00:12:32Z raasch
130! +top_heatflux, use_top_fluxes in inipar
131!
132! 3 2007-02-13 11:30:58Z raasch
133! +netcdf_64bit_3d in d3par,
134! RCS Log replace by Id keyword, revision history cleaned up
135!
136! Revision 1.57  2007/02/11 13:11:22  raasch
137! Values of environment variables are now read from file ENVPAR instead of
138! reading them with a system call, + NAMELIST envpar
139!
140! Revision 1.1  1997/07/24 11:22:50  raasch
141! Initial revision
142!
143!
144! Description:
145! ------------
146! This subroutine reads variables controling the run from the NAMELIST files
147!------------------------------------------------------------------------------!
148
149    USE arrays_3d
150    USE averaging
151    USE cloud_parameters
152    USE control_parameters
153    USE dvrp_variables
154    USE grid_variables
155    USE indices
156    USE model_1d
157    USE pegrid
158    USE profil_parameter
159    USE statistics
160
161    IMPLICIT NONE
162
163    INTEGER ::  i, idum
164
165
166    NAMELIST /inipar/  alpha_surface, bc_e_b, bc_lr, &
167                       bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b, &
168             bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t, &
169             bottom_salinityflux, building_height, building_length_x, &
170             building_length_y, building_wall_left, building_wall_south, &
171             call_psolver_at_all_substeps, canopy_mode, canyon_height, &
172             canyon_width_x, canyon_width_y, canyon_wall_left, &
173             canyon_wall_south, cfl_factor, cloud_droplets, cloud_physics, &
174             collective_wait, conserve_volume_flow, conserve_volume_flow_mode, &
175             coupling_start_time, cthf, curvature_solution_effects, &
176             cycle_mg, damp_level_1d, dissipation_1d, & !dissipation_control, &
177             dp_external, dp_level_b, dp_smooth, dpdxy, drag_coefficient, &
178             dt, dt_pr_1d, dt_run_control_1d, dx, dy, dz, dz_max, & 
179             dz_stretch_factor, dz_stretch_level, e_init, e_min, end_time_1d, &
180             fft_method, galilei_transformation, humidity, &
181             inflow_damping_height, inflow_damping_width, &
182             inflow_disturbance_begin, inflow_disturbance_end, &
183             initializing_actions, km_constant, lad_surface, &
184             lad_vertical_gradient, lad_vertical_gradient_level, &
185             leaf_surface_concentration, &
186             loop_optimization, masking_method, mg_cycles, &
187             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec, &
188             netcdf_precision, neutral, ngsrb, nsor, &
189             nsor_ini, nx, ny, nz, ocean, omega, omega_sor, &
190             passive_scalar, pch_index, phi, plant_canopy, prandtl_layer, &
191             prandtl_number, precipitation, psolver, pt_damping_factor, &
192             pt_damping_width, pt_reference, pt_surface, &
193             pt_surface_initial_change, pt_vertical_gradient, &
194             pt_vertical_gradient_level, q_surface, q_surface_initial_change, &
195             q_vertical_gradient, q_vertical_gradient_level, radiation, &
196             random_generator, random_heatflux, rayleigh_damping_factor, &
197             rayleigh_damping_height, recycling_width, residual_limit, &
198             rif_max, rif_min, roughness_length, sa_surface, &
199             sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec, &
200             scalar_exchange_coefficient, scalar_rayleigh_damping, &
201             statistic_regions, subs_vertical_gradient, &
202             subs_vertical_gradient_level, surface_heatflux, surface_pressure, &
203             surface_scalarflux, surface_waterflux, s_surface, &
204             s_surface_initial_change, s_vertical_gradient, &
205             s_vertical_gradient_level, timestep_scheme, &
206             topography, topography_grid_convention, top_heatflux, &
207             top_momentumflux_u, top_momentumflux_v, top_salinityflux, &
208             turbulent_inflow, ug_surface, ug_vertical_gradient, &
209             ug_vertical_gradient_level, use_surface_fluxes, &
210             use_top_fluxes, use_ug_for_galilei_tr, use_upstream_for_tke, &
211             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient, &
212             vg_vertical_gradient_level, v_bulk, v_profile, wall_adjustment, &
213             wall_heatflux, wall_humidityflux, wall_scalarflux, z0h_factor
214
215
216    NAMELIST /d3par/  averaging_interval, averaging_interval_pr, &
217             create_disturbances, &
218             cross_profiles, cross_ts_uymax, cross_ts_uymin, &
219             data_output, data_output_format, data_output_masks, &
220             data_output_pr, data_output_2d_on_each_pe, disturbance_amplitude, &
221             disturbance_energy_limit, disturbance_level_b, &
222             disturbance_level_t, do2d_at_begin, do3d_at_begin, do3d_compress, &
223             do3d_comp_prec, dt, dt_averaging_input, dt_averaging_input_pr, &
224             dt_coupling, dt_data_output, dt_data_output_av, dt_disturb, &
225             dt_domask, dt_dopr, dt_dopr_listing, dt_dots, dt_do2d_xy, &
226             dt_do2d_xz, dt_do2d_yz, dt_do3d, dt_max, dt_restart, &
227             dt_run_control,end_time, force_print_header, mask_scale_x, &
228             mask_scale_y, mask_scale_z, mask_x, mask_y, mask_z, mask_x_loop, &
229             mask_y_loop, mask_z_loop, netcdf_data_format, normalizing_region, &
230             npex, npey, nz_do3d, precipitation_amount_interval, &
231             profile_columns, profile_rows, restart_time, section_xy, &
232             section_xz, section_yz, skip_time_data_output, &
233             skip_time_data_output_av, skip_time_dopr, skip_time_do2d_xy, &
234             skip_time_do2d_xz, skip_time_do2d_yz, skip_time_do3d, &
235             skip_time_domask, synchronous_exchange, termination_time_needed, &
236             z_max_do2d
237
238
239    NAMELIST /envpar/  host, local_dvrserver_running, maximum_cpu_time_allowed,&
240                       maximum_parallel_io_streams, revision, return_addres, &
241                       return_username, run_identifier, tasks_per_node, &
242                       write_binary
243
244!
245!-- First read values of environment variables (this NAMELIST file is
246!-- generated by mrun)
247    OPEN ( 90, FILE='ENVPAR', STATUS='OLD', FORM='FORMATTED', ERR=30 )
248    READ ( 90, envpar, ERR=31, END=32 )
249    CLOSE ( 90 )
250
251!
252!-- Calculate the number of groups into which parallel I/O is split.
253!-- The default for files which are opened by all PEs (or where each
254!-- PE opens his own independent file) is, that all PEs are doing input/output
255!-- in parallel at the same time. This might cause performance or even more
256!-- severe problems depending on the configuration of the underlying file
257!-- system.
258!-- First, set the default:
259    IF ( maximum_parallel_io_streams == -1  .OR. &
260         maximum_parallel_io_streams > numprocs )  THEN
261       maximum_parallel_io_streams = numprocs
262    ENDIF
263!
264!-- Now calculate the number of io_blocks and the io_group to which the
265!-- respective PE belongs. I/O of the groups is done in serial, but in parallel
266!-- for all PEs belonging to the same group.
267!-- These settings are repeated in init_pegrid for the communicator comm2d,
268!-- which is not available here
269    io_blocks = numprocs / maximum_parallel_io_streams
270    io_group  = MOD( myid+1, io_blocks )
271
272!
273!-- Data is read in parallel by groups of PEs
274    DO  i = 0, io_blocks-1
275       IF ( i == io_group )  THEN
276
277!
278!--       Open the NAMELIST-file which is send with this job
279          CALL check_open( 11 )
280
281!
282!--       Read the control parameters for initialization.
283!--       The namelist "inipar" must be provided in the NAMELIST-file.
284          READ ( 11, inipar, ERR=10, END=11 )
285
286#if defined ( __check )
287!
288!--       In case of a namelist file check, &inipar from the p3d file is
289!--       used. The p3d file here must be closed and the p3df file for reading
290!--       3dpar is opened.
291          IF ( check_restart == 1 )  THEN
292             CALL close_file( 11 )
293             check_restart = 2
294             CALL check_open( 11 )             
295             initializing_actions = 'read_restart_data'
296          ENDIF
297#endif
298          GOTO 12
299
300 10       message_string = 'errors in \$inipar &or no \$inipar-namelist ' // &
301                           'found (CRAY-machines only)'
302          CALL message( 'parin', 'PA0271', 1, 2, 0, 6, 0 )
303
304 11       message_string = 'no \$inipar-namelist found'
305          CALL message( 'parin', 'PA0272', 1, 2, 0, 6, 0 )
306
307!
308!--       If required, read control parameters from restart file (produced by
309!--       a prior run). All PEs are reading from file created by PE0 (see
310!--       check_open)
311 12       IF ( TRIM( initializing_actions ) == 'read_restart_data' )  THEN
312#if ! defined ( __check )
313             CALL read_var_list
314!
315!--          The restart file will be reopened when reading the subdomain data
316             CALL close_file( 13 )
317
318!
319!--          Increment the run count
320             runnr = runnr + 1
321#endif
322          ENDIF
323
324!
325!--       Definition of names of areas used for computing statistics. They must
326!--       be defined at this place, because they are allowed to be redefined by
327!--       the user in user_parin.
328          region = 'total domain'
329
330!
331!--       Read runtime parameters given by the user for this run (namelist
332!--       "d3par"). The namelist "d3par" can be omitted. In that case, default
333!--       values are used for the parameters.
334          READ ( 11, d3par, END=20 )
335
336!
337!--       Read control parameters for optionally used model software packages
338 20       CALL package_parin
339
340!
341!--       Read user-defined variables
342          CALL user_parin
343
344!
345!--       Check in case of initial run, if the grid point numbers are well
346!--       defined and allocate some arrays which are already needed in
347!--       init_pegrid or check_parameters. During restart jobs, these arrays
348!--       will be allocated in read_var_list. All other arrays are allocated
349!--       in init_3d_model.
350          IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
351
352             IF ( nx <= 0 )  THEN
353                WRITE( message_string, * ) 'no value or wrong value given', &
354                                           ' for nx: nx=', nx
355                CALL message( 'parin', 'PA0273', 1, 2, 0, 6, 0 )
356             ENDIF
357             IF ( ny <= 0 )  THEN
358                WRITE( message_string, * ) 'no value or wrong value given', &
359                                           ' for ny: ny=', ny
360                CALL message( 'parin', 'PA0274', 1, 2, 0, 6, 0 )
361             ENDIF
362             IF ( nz <= 0 )  THEN
363                WRITE( message_string, * ) 'no value or wrong value given', &
364                                           ' for nz: nz=', nz
365                CALL message( 'parin', 'PA0275', 1, 2, 0, 6, 0 )
366             ENDIF
367!
368!--          ATTENTION: in case of changes to the following statement please
369!--                  also check the allocate statement in routine read_var_list
370             ALLOCATE( lad(0:nz+1),pt_init(0:nz+1), q_init(0:nz+1),           &
371                       sa_init(0:nz+1), ug(0:nz+1), u_init(0:nz+1),           &
372                       v_init(0:nz+1), vg(0:nz+1),                            &
373                       hom(0:nz+1,2,pr_palm+max_pr_user,0:statistic_regions), &
374                       hom_sum(0:nz+1,pr_palm+max_pr_user,0:statistic_regions) )
375
376             hom = 0.0
377
378          ENDIF
379
380!
381!--       NAMELIST-file is not needed anymore
382          CALL close_file( 11 )
383
384       ENDIF
385#if defined( __parallel ) && ! ( __check )
386       CALL MPI_BARRIER( MPI_COMM_WORLD, ierr )
387#endif
388    ENDDO
389
390    RETURN
391
392 30 message_string = 'local file ENVPAR not found' // &
393                     '&some variables for steering may not be properly set'
394    CALL message( 'parin', 'PA0276', 0, 1, 0, 6, 0 )
395    RETURN
396
397 31 message_string = 'errors in local file ENVPAR' // &
398                     '&some variables for steering may not be properly set'
399    CALL message( 'parin', 'PA0277', 0, 1, 0, 6, 0 )
400    RETURN
401
402 32 message_string = 'no envpar-NAMELIST found in local file ENVPAR'  // &
403                     '&some variables for steering may not be properly set'
404    CALL message( 'parin', 'PA0278', 0, 1, 0, 6, 0 )
405
406 END SUBROUTINE parin
Note: See TracBrowser for help on using the repository browser.