source: palm/trunk/DOC/app/chapter_4.5.1.html @ 771

Last change on this file since 771 was 493, checked in by raasch, 15 years ago

New:
---
Output in NetCDF4-format. New d3par-parameter netcdf_data_format.

(check_open, check_parameters, close_file, data_output_2d, data_output_3d, header, modules, netcdf, parin)

Modules to be loaded for compilation (mbuild) or job execution (mrun)
can be given in the configuration file using variable modules. Example:

%modules ifort/11.0.069:netcdf lcsgih parallel

This method replaces the (undocumented) mpilib-variable.

WARNING: All fixed settings of modules in the scripts mbuild, mrun, and subjob
have been removed! Please set the modules variable appropriately in your
configuration file. (mbuild, mrun, subjob)

Changed:


Parameters netcdf_64bit and netcdf_64bit_3d have been removed. Use
netcdf_data_format = 2 for choosing the classic 64bit-offset format (this is
the default). The offset-format can not be set independently for the
3d-output-data any more.

Parameters netcdf_format_mask, netcdf_format_mask_av, and variables
nc_format_mask, format_parallel_io removed. They are replaced by the new
parameter netcdf_data_format. (check_open, close_file,
data_output_mask, header, init_masks, modules, parin)

Errors:


bugfix in trunk/UTIL/Makefile: forgot to compile for interpret_config

Bugfix: timeseries data have to be collected by PE0 (user_statistics)

  • Property svn:keywords set to Id
File size: 41.0 KB
RevLine 
[5]1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<html><head>
[493]3
[62]4<meta content="text/html; charset=windows-1252" http-equiv="CONTENT-TYPE"><title>PALM chapter 4.5.1</title>
5<meta content="StarOffice 7 (Win32)" name="GENERATOR">
6<meta content="Siegfried Raasch" name="AUTHOR"> <meta content="20041022;12155949" name="CREATED"> <meta content="20041117;11232134" name="CHANGED"> <meta content="parallel LES model" name="KEYWORDS"> <style>
[5]7<!--
8@page { size: 21cm 29.7cm }
9-->
[493]10</style></head><body style="direction: ltr;" lang="en-US"><h4 style="line-height: 100%;"><font size="4">4.5.1
[5]11NetCDF data output&nbsp;<span style="color: rgb(255, 0, 0);"></span></font></h4>
12<p style="line-height: 100%;">The standard data output of
13PALM is NetCDF (<span style="font-weight: bold;">Net</span>work
[493]14<span style="font-weight: bold;">C</span>ommon <span style="font-weight: bold;">D</span>ata <span style="font-weight: bold;">F</span>orm) in 64-bit offset format. NetCDF is an
15interface to a library of data access functions for
[5]16storing and retrieving data in the form of arrays. NetCDF is an
17abstraction that supports a view of data as a collection of
18self-describing, <span style="font-weight: bold;">portable</span>
19objects that can be accessed through a simple interface (protable means
[62]20that NetCDF data files can be read on any machine regardless of where
21they
[5]22have been created). Array values may be accessed directly, without
23knowing details of how the data are stored. Auxiliary information about
24the data, such as what units are used, may be stored with the data.
25Generic utilities and application programs can access NetCDF datasets
26(files) and transform, combine, analyze, or display specified fields of
27the data, e.g. the contents of a NetCDF dataset can be viewed using the
28command <span style="font-family: monospace;">ncdump</span>
29(see <a href="#ncdump">further below</a>).
30Many (public domain) graphic software has built in interfaces to read
[62]31NetCDF datasets (e.g. <span style="font-weight: bold;">ferret</span>
32or <span style="font-weight: bold;">NCL</span>).
33The complete NetCDF documentation
[5]34is available from the <a href="http://www.unidata.ucar.edu/packages/netcdf/docs.html">NetCDF
35homepage</a>. The NetCDF tutorial for FORTRAN90 can also be found
36on <a href="http://www.muk.uni-hannover.de/%7Eraasch/PALM_group/manual/netcdf/netcdf-3_f90_tutorial.pdf">our
37web server</a>.</p><p style="line-height: 100%;">The
[493]38general output format of PALM data is determined by the runtime-parameter <a href="chapter_4.2.html#data_output_format">data_output_format</a>
[5]39(<span style="font-weight: bold;">data_output_format</span>
40= <span style="font-style: italic;">'netcdf'</span>,
41by default). For historical reasons, some alternative formats can be
42selected (see <a href="chapter_4.2.html#data_output_format">data_output_format</a>).
43The accuracy of the NetCDF output data can be set with parameter <a href="chapter_4.1.html#netcdf_precision">netcdf_precision</a>.
[493]44By default, data have single (4 byte) precision. Runtime-parameter <a href="chapter_4.2.html#netcdf_data_format">netcdf_data_format</a>
45can be used to choose between the different NetCDF file formats
46(classic, 64-bit offset, NetCDF4/HDF5). The 64-bit offset format allows
47creating large files (file size only limited by the underlying file
48system), but each output variable (array) is still limited to 2GB. In
49NetCDF4 format, there is no limit for the size of variables, and it
50also allows parallel I/O into one output file. However, some (graphic)
51software still does not support NetCDF4 format.<br></p>PALM allows the output of
[5]52various
53data (e.g. cross sections, vertical profiles, timeseries, etc.) into
54different files. The following table gives an overview about the
55different kind of NetCDF output data offered by PALM. Beside the local
[62]56names of the files, the table also lists the minimum parameter settings
57which
[5]58are necessary to switch on the output, as well as the parameters to be
59used to control the output.<br><br><table style="text-align: left; width: 750px; height: 226px;" border="1" cellpadding="2" cellspacing="2"><tbody><tr><td align="left" valign="top"><span style="font-weight: bold;">kind of data</span></td><td align="left" valign="top"><span style="font-weight: bold;">local filename</span></td><td align="left" valign="top"><span style="font-weight: bold;">parameter settings necessary to
60switch on output</span></td><td align="left" valign="top"><span style="font-weight: bold;">further
61parameters for output control</span></td></tr><tr><td align="left" valign="top">vertical profiles</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_1D_PR_NETCDF">DATA_1D_PR_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_pr">data_output_pr</a>,
62<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
63(or <a href="chapter_4.2.html#dt_dopr">dt_dopr</a>)</td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>,
64(or <a href="chapter_4.2.html#averaging_interval_pr">averaging_interval_pr</a>),
65<a href="chapter_4.2.html#data_output_format">data_output_format</a>,
66<a href="chapter_4.2.html#dt_averaging_input">dt_averaging_input</a>,
67<a href="chapter_4.2.html#dt_averaging_input_pr">dt_averaging_input_pr</a>,
68<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
69(or <a href="chapter_4.2.html#skip_time_dopr">skip_time_dopr</a>),
[62]70<a href="chapter_4.1.html#statistic_regions">statistic_regions</a></td></tr><tr><td align="left" valign="top">timeseries</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_1D_TS_NETCDF">DATA_1D_TS_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#dt_dots">dt_dots</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_format">data_output_format</a>,
71<a href="chapter_4.1.html#statistic_regions">statistic_regions</a></td></tr><tr><td align="left" valign="top">spectra</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_1D_SP_NETCDF">DATA_1D_SP_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#comp_spectra_level">comp_spectra_level</a>,
[5]72<a href="chapter_4.2.html#data_output_sp">data_output_sp</a>,
73<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
74(or <a href="chapter_4.2.html#dt_dosp">dt_dosp</a>),
75<a href="chapter_4.2.html#spectra_direction">spectra_direction</a></td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>&nbsp;(or
76<a href="chapter_4.2.html#averaging_interval_sp">averaging_interval_sp</a>),
77<a href="chapter_4.2.html#data_output_format">data_output_format</a>,
78<a href="chapter_4.2.html#dt_averaging_input_pr">dt_averaging_input_pr</a>,
79<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
80(or <a href="chapter_4.2.html#skip_time_dosp">skip_time_dosp)</a></td></tr><tr><td align="left" valign="top">2d cross section (xy)</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_XY_NETCDF">DATA_2D_XY_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
81(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
82<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
83(or <a href="chapter_4.2.html#dt_do2d_xy">dt_do2d_xy</a>),
84<a href="chapter_4.2.html#section_xy">section_xy</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_format">data_output_format</a>,
85<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
86<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
87<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
88(or <a href="chapter_4.2.html#skip_time_do2d_xy">skip_time_do2d_xy</a>)</td></tr><tr><td align="left" valign="top">2d cross section (xy),
89time-averaged</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_XY_AV_NETCDF">DATA_2D_XY_AV_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
90(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
91<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
92(or <a href="chapter_4.2.html#dt_data_output_av">dt_data_output_av</a>&nbsp;or
93<a href="chapter_4.2.html#dt_do2d_xy">dt_do2d_xy</a>),
94<a href="chapter_4.2.html#section_xy">section_xy</a></td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>,
95<a href="chapter_4.2.html#dt_averaging_input">dt_averaging_input</a>,
96<a href="chapter_4.2.html#data_output_format">data_output_format</a>,
97<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
98<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
99<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
100(or <a href="chapter_4.2.html#skip_time_data_output_av">skip_time_data_output_av</a>,
101or <a href="chapter_4.2.html#skip_time_do2d_xy">skip_time_do2d_xy</a>)</td></tr><tr><td align="left" valign="top">2d cross section (xz)</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_XZ_NETCDF">DATA_2D_XZ_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
102(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
103<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
104(or <a href="chapter_4.2.html#dt_do2d_xz">dt_do2d_xz</a>),
105<a href="chapter_4.2.html#section_xz">section_xz</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_format">data_output_format</a>,
106<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
107<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
108<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
109(or <a href="chapter_4.2.html#skip_time_do2d_xz">skip_time_do2d_xz</a>)</td></tr><tr><td align="left" valign="top">2d cross section (xz),
110time-averaged</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_XZ_AV_NETCDF">DATA_2D_XZ_AV_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
111(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
112<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
113(or <a href="chapter_4.2.html#dt_data_output_av">dt_data_output_av</a>&nbsp;or
114<a href="chapter_4.2.html#dt_do2d_xz">dt_do2d_xz</a>),
115<a href="chapter_4.2.html#section_xz">section_xz</a></td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>,
116<a href="chapter_4.2.html#dt_averaging_input">dt_averaging_input</a>,
117<a href="chapter_4.2.html#data_output_format">data_output_format</a>,
118<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
119<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
120<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
121(or <a href="chapter_4.2.html#skip_time_data_output_av">skip_time_data_output_av</a>,
122or <a href="chapter_4.2.html#skip_time_do2d_xz">skip_time_do2d_xz</a>)</td></tr><tr><td align="left" valign="top">2d cross section (yz)</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_YZ_NETCDF">DATA_2D_YZ_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
123(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
124<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
125(or <a href="chapter_4.2.html#dt_do2d_yz">dt_do2d_yz</a>),
126<a href="chapter_4.2.html#section_yz">section_yz</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_format">data_output_format</a>,
127<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
128<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
129<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
130(or <a href="chapter_4.2.html#skip_time_do2d_yz">skip_time_do2d_yz</a>)</td></tr><tr><td align="left" valign="top">2d cross section (yz),
131time-averaged</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_2D_YZ_AV_NETCDF">DATA_2D_YZ_AV_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
132(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
133<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
134(or <a href="chapter_4.2.html#dt_data_output_av">dt_data_output_av</a>&nbsp;or
135<a href="chapter_4.2.html#dt_do2d_yz">dt_do2d_yz</a>),
136<a href="chapter_4.2.html#section_yz">section_yz</a></td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>,
137<a href="chapter_4.2.html#dt_averaging_input">dt_averaging_input</a>,
138<a href="chapter_4.2.html#data_output_format">data_output_format</a>,
139<a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>,
140<a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>,
141<a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
142(or <a href="chapter_4.2.html#skip_time_data_output_av">skip_time_data_output_av</a>,
143or <a href="chapter_4.2.html#skip_time_do2d_yz">skip_time_do2d_yz</a>)</td></tr><tr><td align="left" valign="top">3d volume</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_3D_NETCDF">DATA_3D_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
144(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
145<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
146(or <a href="chapter_4.2.html#dt_do3d">dt_do3d</a>)</td><td align="left" valign="top"><a href="chapter_4.2.html#data_output_format">data_output_format</a>,
147<a href="chapter_4.2.html#do3d_at_begin">do3d_at_begin</a>,
148<a href="chapter_4.2.html#nz_do3d">nz_do3d</a>, <a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
149(or <a href="chapter_4.2.html#skip_time_do3d">skip_time_do3d</a>)</td></tr><tr><td align="left" valign="top">3d volume, time-averaged</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_3D_AV_NETCDF">DATA_3D_AV_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#data_output">data_output</a>
150(or <a href="chapter_4.3.html#data_output_user">data_output_user</a>),
151<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
152(or <a href="chapter_4.2.html#dt_data_output_av">dt_data_output_av</a>&nbsp;or
153<a href="chapter_4.2.html#dt_do3d">dt_do3d</a>)</td><td align="left" valign="top"><a href="chapter_4.2.html#averaging_interval">averaging_interval</a>,
154<a href="chapter_4.2.html#dt_averaging_input">dt_averaging_input</a>,
155<a href="chapter_4.2.html#data_output_format">data_output_format</a>,&nbsp;<a href="chapter_4.2.html#do3d_at_begin">do3d_at_begin</a>,
156<a href="chapter_4.2.html#nz_do3d">nz_do3d</a>, <a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
157(or <a href="chapter_4.2.html#skip_time_data_output_av">skip_time_data_output_av</a>,
[62]158or <a href="chapter_4.2.html#skip_time_do3d">skip_time_do3d</a>)</td></tr><tr><td align="undefined" valign="undefined">particle
159timeseries</td><td style="vertical-align: top;"><a href="chapter_3.4.html#DATA_1D_PTS_NETCDF">DATA_1D_PTS_NETCDF</a></td><td style="vertical-align: top;"><a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
[493]160(or <a href="chapter_4.2.html#dt_dopts">dt_dopts</a>)</td><td align="undefined" valign="undefined"><br>
161</td></tr><tr><td align="left" valign="top">particle attributes</td><td align="left" valign="top"><a href="chapter_3.4.html#DATA_PRT_NETCDF">DATA_PRT_NETCDF</a></td><td align="left" valign="top"><a href="chapter_4.2.html#dt_write_particle_data">dt_write_particle_data</a></td><td align="left" valign="top"><br>
162</td></tr></tbody></table><br><br><span style="font-weight: bold;">Creating, contents and
[5]163post-processing of a PALM NetCDF file</span><br><br>This
164section describes, step-by-step, the creation, storage, and
165post-processing of PALM NetCDF datasets considering the output of 2d
166horizontal (xy) cross sections as example. The parameter settings
167described below are those of the <a href="http://www.muk.uni-hannover.de/%7Eraasch/PALM_group/INSTALL/example_p3d">example
[97]168parameter file</a> (see <a href="chapter_4.4.1.html">chapter
1694.4.1</a>) so this parameter file can be used to retrace the
[5]170following explanations.<br><br><ol><li>Output
171of xy cross
172sections requires to set at least three parameters: first, the temporal
173interval of the output time (run parameter <a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
174or <a href="chapter_4.2.html#dt_do2d_xy"><u>dt_do2d_xy)</u></a><span style="text-decoration: none;">, second<span style="text-decoration: none;"></span>,
175the names of the quantities for which cross section output is wanted</span><span style="text-decoration: none;"><span style="text-decoration: none;"> (<a href="chapter_4.2.html#data_output">data_output</a></span></span>),
176and third, the position (height level given as gridpoint index) of the
177cross sections (<a href="chapter_4.2.html#section_xy">section_xy</a>).
178The string <span style="font-style: italic;">'_xy'</span>
179must be appended to the name strings assigned to <span style="font-weight: bold;">data_output</span> in
180either case. Output times
181cannot be defined
182directly but only via the output time interval, starting from the
183beginning of the initial 3d run (t=0, but no cross sections are
184written at the time t=0; exceptions see <a href="chapter_4.2.html#do2d_at_begin">do2d_at_begin</a>).
185As an exception, the first output time can be set independently with
186parameter <a href="chapter_4.2.html#skip_time_data_output">skip_time_data_output</a>
187(or <a href="chapter_4.2.html#skip_time_do2d_xy">skip_time_do2d_xy</a>).<br><br><span style="font-weight: bold;">Very important:</span><br>If
188no values have been assigned to <b>data_output</b> , <span style="font-weight: bold;">dt_data_output</span> (or <span style="font-weight: bold;">dt_do2d_xy</span>), and <b>section_xy</b>,
189or
190if the values given for <span style="font-weight: bold;">dt_data_output</span>
191(or <b>dt_do2d_xy</b>) or <span style="font-weight: bold;">skip_time_data_output</span>
192(or <span style="font-weight: bold;">skip_time_do2d_xy</span>)
193are
194larger than the simulated time (see <a href="chapter_4.1.html#end_time">end_time</a>),
195<b>then there will be no output!<br><br></b>For
196output of time-averaged data, the string <span style="font-style: italic;">'_av'</span> has to be
197additionally appended to the respective name string (see <a href="chapter_4.2.html#data_output">data_output</a>).<br><br><br></li><li>
[62]198<p style="line-height: 100%;">Instantaneous data are
199output in NetCDF
[5]200format
201into the
202local file&nbsp;<a href="chapter_3.4.html#DATA_2D_XY_NETCDF">DATA_2D_XY_NETCDF</a>.
203This file must be linked with a permanent file by
204using a file connection statement in the <b>mrun</b>
205configuration
206file (see e.g. <a href="chapter_3.2.html">chapter
2073.2</a>). At the end of the run the local file is copied to this
208file. Such a statement can look like this:<br><br><span style="font-family: monospace;">&nbsp;
209&nbsp;DATA_2D_XY_NETCDF out:loc:tr&nbsp;&nbsp;xy#&nbsp;
210~/$fname/OUTPUT/$fname&nbsp; _xy nc &nbsp; .</span><br><br>If
211the respective <b>mrun</b> call is
212like<br><br><span style="font-family: monospace;">&nbsp;
[493]213&nbsp;mrun -d&nbsp; test -r “xy#” ... </span><br style="font-family: monospace;"><br>then the local
[5]214file <tt><font style="font-size: 10pt;" size="2">DATA_2D_XY_NETCDF</font></tt>
215is copied to the permanent file <tt><font style="font-size: 10pt;" size="2">~/test/OUTPUT/test/test_xy.nc</font>
216</tt>. However, the character string <span style="font-family: mon; font-style: italic;">'</span><tt style="font-style: italic;"><font style="font-size: 10pt;" size="2">xy#</font></tt><span style="font-style: italic;">'</span> activating the
217file connection statement (see third column of the
218statement) must be given in the <b>mrun</b> call as
219argument of the
220option -r (and/or -o)<b>.</b> <span style="text-decoration: none;">If
221t</span>his is forgotten by mistake, the model outputs the data
222to
223the local file, but this is not copied to the permanent file and thus
224the data are not available for the user after the run has finished.<br><br>The
225last (6th) column of the file connection statement, which defines the
226additional file suffix, should be the string <span style="font-style: italic;">'nc'</span>, because many
227application programs expect NetCDF files to have the file extension <span style="font-style: italic;">'.nc'</span>. (This
[62]228additional suffix given in the 6th column is always put at the very end
229of the filename, even
230in case of cycle numbers.)<br><br>Time averaged data are
231output into local file&nbsp;<a href="chapter_3.4.html#DATA_2D_XY_AV_NETCDF">DATA_2D_XY_AV_NETCDF</a>
232which requires an additional file connection statement<br><br><span style="font-family: monospace;">&nbsp;&nbsp;
233DATA_2D_XY_AV_NETCDF out:loc:tr&nbsp; xy#&nbsp;
[493]234~/$fname/OUTPUT/$fname&nbsp; _xy_av nc&nbsp;&nbsp; .</span><br></p></li><li>Using <a href="chapter_4.2.html#netcdf_data_format">netcdf_data_format</a> &gt; <span style="font-style: italic;">2</span> or <a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a> = <span style="font-style: italic;">.F.</span> generates a single NetCDF file containing data from all propcessors. However, with
[5]235parallel runs and choice of <a href="chapter_4.2.html#data_output_2d_on_each_pe">data_output_2d_on_each_pe</a>
236= <i>.T.</i>
237each PE outputs the data of its subdomain
238not directly to the NetCDF file but to a separate file with the name
239PLOT2D_XY_&lt;processor-Id&gt;,
240where &lt;processor-Id&gt; is a four digit number (e.g.
241PLOT2D_XY_0000). These files have FORTRAN binary format. After PALM has
242finished, their content is merged into the final local destination file
[62]243DATA_2D_XY_NETCDF by the program <span style="font-family: monospace;">combine_plot_fields</span>.&nbsp;<span style="font-weight: bold;"></span>This is done by
244adding the following output command to the configuration file:<br><br><span style="font-family: monospace;">&nbsp; &nbsp;OC:[[$
[5]245( echo $localhost | cut -c1-3 ) = imbh ]] &amp;&amp;
246combine_plot_fields.x &nbsp; &nbsp; .</span><br><br>Using
247this call, possibly existing
248files of the other cross sections (xz, yz) and of 3d volume data are
249also merged to their respective NetCDF files.&nbsp;The tool writes
250informative messages about the actions accomplished into the job
251protocol, even if no files were found (i.e. the output command
252may remain in the configuration file, even if no appropriate files
253are created during the simulation).&nbsp;<br><br><br></li><li><a name="ncdump"></a>The contents of a NetCDF dataset can
254be simply analyzed with the tool <span style="font-family: monospace;">ncdump</span>
255(which is part of the NetCDF software). It can be used to display the
256dimension (coordinate) names and lengths; variable names, types, and
257shapes; attribute names and values; and optionally,<br>the values
258of
259data for all variables or selected variables in a netCDF dataset. The
260file content (without displaying the gridpoint data of the quantities)
261can be displayed with the command<br><br><span style="font-family: monospace;">&nbsp; &nbsp;ncdump
262-c &lt;filename&gt; &nbsp; &nbsp; .</span><br><br>Usage
263of the <span style="font-family: monospace;">ncdump</span>
264command requires that the path to the NetCDF software is appropriately
265set. On the IMUK-Linux-cluster this path is set by default, on the
266HLRN-IBM-Regatta, the user has to execute the command<br><br><span style="font-family: monospace;">&nbsp; &nbsp;module
267load netcdf &nbsp; &nbsp; .</span><br><br>Please
268refer to the&nbsp;system documentation or system administrator on
269how
270to setup the correct NetCDF path on the respective host.<br><br>An
271example how to interpret the <span style="font-family: monospace;">ncdump</span>-output
272will be given <a href="#NetCDF_example">further below</a>.<br><br></li><li>There
273are several application programs which can be used for graphical
274display of NetCDF datasets. One of the easiest ways to display the PALM
275data is the <a style="font-family: monospace;" href="http://ferret.wrc.noaa.gov/Ferret/">ferret</a>
[62]276graphical user interface (GUI). On the IMUK-Linux-cluster, this can be
277called by
[5]278executing the command<br><br><span style="font-family: monospace;">&nbsp; &nbsp;ferret
279-gui &nbsp; &nbsp; .</span><br><br><span style="font-family: monospace;">ferret</span> is also
280available at <a href="http://www.hlrn.de/doc/ferret/index.html">HLRN</a>.
281Another possible tool is <span style="font-family: monospace;">ncview</span>,
282which is also available at HLRN (see the <a href="http://www.hlrn.de/doc/ncview/index.html">HLRN
283documentation</a>). Beside these general tools, the PALM group
284will develop a&nbsp;graphical interface based on <a href="http://www.ncl.ucar.edu/">NCL</a>
285(NCAR Command Language). This interface will be&nbsp;specially
286designed
287to display the PALM Data. A detailed documentation will be linked here
288as soon as available.<br><br><br></li><li><a name="netcdf_example_program"></a>One
289of the most flexible general ways for postprocessing NetCDF data
[62]290is&nbsp;reading these data into a FORTRAN program. The&nbsp;<a href="http://www.muk.uni-hannover.de/%7Eraasch/PALM_group/INSTALL/read_palm_netcdf_data.f90"><font color="#000080">example program</font></a> shows
291how to read 2d or 3d NetCDF datasets created by PALM. Compiling this
292program requires that the
[5]293NetCDF library is installed (if neccessary, please ask your system
[62]294administrator). Some compilation instructions are given in the header
295of the
[5]296example program.<br><br><br></li><li>By
297default, each PALM job creates its own NetCDF files. If permanent files
[493]298with respective filenames are already existing, then new files with
[5]299higher cycle numbers will be created. However, in case of a job chain,
300it is possible to extend the NetCDF datasets created by the initial
[62]301run&nbsp;with data from the restart run(s). As a result, data of
302all
[5]303output times of the complete job chain are contained in one file and
304the number of data files to be handled by the user may be reduced
[62]305significantly.<br>To extend a NetCDF dataset (created by a
306previous run
[5]307of a job chain) with data from the current run requires that this
308dataset must be provided as an INPUT file. This may be difficult in
309case that PALM is running on a remote host because typically the output
[62]310data files from the previous run have been already transferred by <span style="font-weight: bold;">mrun</span> to the local
311workstation with a file connection statement like<br><br><span style="font-family: monospace;">&nbsp;
312&nbsp;DATA_2D_XY_NETCDF
313&nbsp;out:loc:tr&nbsp;&nbsp;xy#:xyf
314&nbsp;~/palm/current_version/JOBS/$fname/OUTPUT
315&nbsp;_xy&nbsp; nc</span><br><br>and thus
316they are not available on the remote host any more. <br>A
[5]317workaround for solving this problem is to create an additional copy of
318the output file on the remote machine by adding the file connection
[62]319statement<br><br><span style="font-family: monospace;">&nbsp;&nbsp;
320DATA_2D_XY_NETCDF&nbsp; out:loc&nbsp; xy#:xyf&nbsp;
321~/palm/current_version/JOBS/$fname/OUTPUT&nbsp; _xy&nbsp; nc</span><br><br>This
322additional copy can then be accessed from a restart job as an input
323file using the file connection statement<br><br><span style="font-family: monospace;">&nbsp;&nbsp;
324DATA_2D_XY_NETCDF&nbsp; in:locopt&nbsp;&nbsp;xyf&nbsp;
325~/palm/current_version/JOBS/$fname/OUTPUT&nbsp; _xy&nbsp; nc</span><br><br>Here
326the file attribut <span style="font-family: monospace;">locopt</span>
[5]327(2nd column) guarantees that the job continues if a permanent file does
328not exist (e.g. in case of an initial run). Otherwise, the job would be
[62]329aborted.<br>Although the dataset created by the last run of a job
330chain
[5]331will contain data from all selected time levels of the complete job
332chain, the main disadvantage of this workaround is that the datasets
333created by the remaining jobs (with lower cycle numbers) still exist
334and may consume large disc space. They have to be deleted "by hand" by
335the user on the local machine as well as on the remote
[62]336machine&nbsp;because they only contain redundant data from the
337earlier
338time levels which are already contained&nbsp;in the dataset created
339by
340the last job of the job chain.<br><br><span style="font-weight: bold;">Note:</span><br>Extension
341of PALM NetCDF datasets of 2d horizontal cross sections requires that
342parameters <a href="chapter_4.2.html#data-output">data_output</a>
343and <a href="chapter_4.2.html#section_xy">section_xy</a>&nbsp;
[5]344for the restart runs are set identical to the initial run. In case of a
345value mismatch between initial and restart runs, a warning is issued in
346the job protocol file and the dataset will contain only data from those
[62]347timelevels calculated within the restart run.<br>Similar
348restrictions apply for all other PALM NetCDF datasets (i.e. profiles,
349vertical cross sections, volume data, etc.).</li></ol><br>&nbsp;<br><span style="font-weight: bold;"><a name="NetCDF_example"></a>Example
350of a PALM NetCDF dataset</span><br><br>The
[5]351NetCDF dataset described here contains data of instantaneous horizontal
352cross sections and has been created using the settings of the <a href="http://www.muk.uni-hannover.de/%7Eraasch/PALM_group/INSTALL/example_p3d">example
[97]353parameter file</a> (see <a href="chapter_4.4.1.html">chapter
3544.4.1</a>),
[5]355i.e. it contains section data of the w-velocity-component and of the
[62]356potential temperature for vertical grid levels with index <span style="font-family: monospace;">k = 2</span> and <span style="font-family: monospace;">k = 10</span>,
357selected by the respective parameter settings <a href="chapter_4.2.html#data_output">data_output</a> = <span style="font-style: italic;">'w_xy'</span>, <span style="font-style: italic;">'pt_xy'</span>, and <a href="chapter_4.2.html#section_xy">section_xy</a> = <span style="font-style: italic;">2</span>, <span style="font-style: italic;">10</span>. Output has been
358created after every 900 s (<a href="chapter_4.2.html#dt_data_output">dt_data_output</a>
359= <span style="font-style: italic;">900.0</span>).
360Because of <a href="chapter_4.2.html#end_time">end_time</a>
361= <span style="font-style: italic;">3600.0</span>,
362the file contains data of 4 time levels (t = 900, 1800, 2700, 3600 s).<br>Supposed
363that the name of the NetCDF dataset is <span style="font-family: monospace;">example_xy.nc</span>,
364an analysis of the file contents using the command<br><br><span style="font-family: monospace;">&nbsp; &nbsp;ncdump
365-c example_xy.nc</span><br><br>will create the
366following output. The original ncdump output is displayed using <span style="font-family: monospace;">fixed spacing</span>,
367additional explanations are given in <span style="font-style: italic; font-family: monospace;">italian</span>.<br><br><div style="margin-left: 40px;"><span style="font-family: monospace;">netcdf&nbsp;example_xy {
368&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
369&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-style: italic;">! filename</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">dimensions: &nbsp;
370&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
371&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
372&nbsp; &nbsp; &nbsp;<span style="font-style: italic;">!
37341 gridpoints along x and y, 4 timelevels</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
374time = UNLIMITED ; // (4 currently) &nbsp; &nbsp;<span style="font-style: italic;">! unlimited means
375that&nbsp;additional time levels can be added (e.g. by</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;
376&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
377&nbsp; &nbsp; &nbsp; &nbsp;
378&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
379&nbsp; &nbsp; &nbsp; &nbsp;
380&nbsp;<span style="font-style: italic;">! restart jobs)</span><br>&nbsp;&nbsp;&nbsp;
381zu_xy = 2 ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
382&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
383&nbsp; &nbsp; &nbsp;<span style="font-style: italic;">!
384vertical dimension (2, because two cross sections are selected);</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
385zw_xy = 2 ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
386&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
387&nbsp; &nbsp; &nbsp;<span style="font-style: italic;">!
388there are two different vertical dimensions zu and zw because due</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
389zu1_xy = 1 ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
390&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
391&nbsp; &nbsp; <span style="font-style: italic;">!
392to the staggered grid the z-levels of variables are those of the</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
393x = 41 ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
394&nbsp; &nbsp; &nbsp; &nbsp;
395&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-style: italic;">! u- or the w-component of the
396velocity</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
397y = 41 ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">variables: &nbsp;
398&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
399&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
400&nbsp; &nbsp; &nbsp; <span style="font-style: italic;">!
401precision, dimensions, and units of the variables</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
402double time(time) ; &nbsp; &nbsp; &nbsp; &nbsp;
403&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-style: italic;">! the variables containing the
404time levels and grid point coordinates</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
405&nbsp;&nbsp;&nbsp; time:units = "seconds" ; &nbsp;
406&nbsp; &nbsp; &nbsp; &nbsp; <span style="font-style: italic;">! have the same names as the
407respective dimensions</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
408double zu_xy(zu_xy) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
409&nbsp;&nbsp;&nbsp; zu_xy:units = "meters" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
410double zw_xy(zw_xy) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
411&nbsp;&nbsp;&nbsp; zw_xy:units = "meters" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
412double zu1_xy(zu1_xy) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
413&nbsp;&nbsp;&nbsp; zu1_xy:units = "meters" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
414double ind_z_xy(zu_xy) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
415&nbsp;&nbsp;&nbsp; ind_z_xy:units = "gridpoints" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
416double x(x) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
417&nbsp;&nbsp;&nbsp; x:units = "meters" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
418double y(y) ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
419&nbsp;&nbsp;&nbsp; y:units = "meters" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
420float w_xy(time, zw_xy, y, x) ; &nbsp; &nbsp; &nbsp;
421&nbsp;<span style="font-style: italic;">! array of the
422vertical velocity; it has 4 dimensions: x and y,</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
423&nbsp;&nbsp;&nbsp; w_xy:long_name = "w_xy" ; &nbsp;
424&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-style: italic;">! because it is a horizontal
425cross section, zw_xy, which defines</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
426&nbsp;&nbsp;&nbsp; w_xy:units = "m/s" ; &nbsp;
427&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-style: italic;">! the vertical levels of the
428sections, and time, for the time levels</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
429float pt_xy(time, zu_xy, y, x) ; &nbsp; &nbsp; &nbsp; <span style="font-style: italic;">! array of the potential
430temperature, which is defined on the u-grid</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
431&nbsp;&nbsp;&nbsp; pt_xy:long_name = "pt_xy" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
432&nbsp;&nbsp;&nbsp; pt_xy:units = "K" ;</span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">// global attributes:</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
433&nbsp;&nbsp;&nbsp; :Conventions = "COARDS" ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
434&nbsp;&nbsp;&nbsp; :title = "PALM&nbsp;&nbsp;
4353.0&nbsp; run:
436example.00&nbsp; host: ibmh&nbsp; 13-04-06 15:12:43" ;
437&nbsp;<span style="font-style: italic;">! PALM
438run-identifier</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
439&nbsp;&nbsp;&nbsp; :VAR_LIST = ";w_xy;pt_xy;" ; &nbsp;
440&nbsp; &nbsp; <span style="font-style: italic;">!
441the list of output quantities contained in this dataset;</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;
442&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
443&nbsp; &nbsp; &nbsp; &nbsp;
444&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
445&nbsp; &nbsp; &nbsp; &nbsp;
446&nbsp;<span style="font-style: italic;">! this global
447attribute can be used by FORTRAN programs to identify</span><br>&nbsp;
448&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
449&nbsp; &nbsp; &nbsp; &nbsp;
450&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
451&nbsp; &nbsp; &nbsp; &nbsp;
452&nbsp;<span style="font-style: italic;">! and read the
453quantities contained in the file</span><br>data:</span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;time = 905.3,
4541808.98, 2711.98, 3603.59 ; <span style="font-style: italic;">!
455values of the four time levels</span></span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;zu_xy = 75, 475 ;
456&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
457&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-style: italic;">! heights of the two selected
458cross sections (u-grid)</span></span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;zw_xy = 100, 500 ;</span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;zu1_xy = 25 ;</span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;x = 0, 50, 100,
459150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, &nbsp; <span style="font-style: italic;">! x-coordinates of the gridpoints</span></span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
460750, 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300,
4611350, </span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
4621400, 1450, 1500, 1550, 1600, 1650, 1700, 1750, 1800, 1850, 1900, 1950,
463</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
4642000 ;</span><br style="font-family: monospace;"><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;y = 0, 50, 100,
465150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, </span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
466750, 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300,
4671350, </span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
4681400, 1450, 1500, 1550, 1600, 1650, 1700, 1750, 1800, 1850, 1900, 1950,
469</span><br style="font-family: monospace;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;
4702000 ;</span><br style="font-family: monospace;"><span style="font-family: monospace;">}</span><br></div><br>If
471the option <span style="font-family: monospace;">-c</span>
472is omitted in the <span style="font-family: monospace;">ncdump</span>
473call, then also the complete grid point data of all quantities are
474output to the terminal.<br><br>The &nbsp;<a href="http://www.muk.uni-hannover.de/%7Eraasch/PALM_group/INSTALL/read_palm_netcdf_data.f90"><font color="#000080">example program</font></a><span style="font-weight: bold;"></span> shows how to read
475this 2d
[5]476horizontal cross section dataset from a FORTRAN program (<a href="#netcdf_example_program">see above</a>).<br><hr>
[62]477<p style="line-height: 100%;"><br><font color="#000080"><font color="#000080"><a href="chapter_4.5.html"><font color="#000080"><img name="Grafik1" src="left.gif" align="bottom" border="2" height="32" width="32"></font></a><a href="index.html"><font color="#000080"><img name="Grafik2" src="up.gif" align="bottom" border="2" height="32" width="32"></font></a><a href="chapter_4.5.2.html"><font color="#000080"><img style="border: 2px solid ; width: 32px; height: 32px;" alt="" name="Grafik3" src="right.gif"></font></a></font></font></p><p style="line-height: 100%;"><span style="font-style: italic;">Last
478change:</span> $Id: chapter_4.5.1.html 493 2010-03-01 08:30:24Z heinze $&nbsp;</p>
[5]479</body></html>
Note: See TracBrowser for help on using the repository browser.