Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / io_phdf5 / INSTALL.htm
blobc2679d0676f56762ec2e1b4820a0231a2947633e
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
2 <meta http-equiv="Content-Language" content="en-us">
3 <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
4 <meta name="ProgId" content="FrontPage.Editor.Document">
5 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>To integrate HDF5</title></head><body><big><big><b>Build and Install the HDF5-WRF IO Module</b></big></big><br>
6 <br>
7 There are two HDF5 WRF IO modules, <i>sequential</i> and <i>parallel.</i>  The either or both modules can be configured as optional IO modules for WRF.<br>
8 <br>
9 The sequential HDF module (<i>io_hdf5</i>) uses the serial HDF5 library.  The parallel
10 HDF module (<i>io_phdf5</i>) uses parallel HDF5 (which requires MPI-IO).<br>
11 <br>
12 The installation for the two modules is similar.<br>
13 <br>
14 <big><b>Prerequisites</b></big><br>
15 <br>
16 <b>WRF 1.3</b><br>
17 <br>
18 The HDF5 WRF IO modules require Version 1.3 of WRF.  Information and downloads are available at:<br>
20 <blockquote><a href="http://www.mmm.ucar.edu/wrf/users/user_main.html">http://www.mmm.ucar.edu/wrf/users/user_main.html</a><br>
21 </blockquote>
22 <br>
23 <b>HDF5-1.6 .2 or later</b><br>
24 <br>
25 The HDF5 WRF IO modules require HDF5-1.6.2 or more recent. The parallel HDF5
26 WRF module requires parallel HDF5 (which requires MPI IO). <br>
27 <br>
28 Installing HDF5<br>
29 <blockquote>
30 </blockquote>
31 <ol>
32 <li>To obtain
33 HDF5, download from to <a href="http://hdf.ncsa.uiuc.edu/HDF5/release/obtain5.html">
34 http://hdf.ncsa.uiuc.edu/HDF5/release/obtain5.html</a>. Install HDF5 according to the instructions. The HDF5 library must have he Fortran 90 interface installed. <br><br>
35 For the sequential WRF module,  SZIP compression can be enabled.  </li>
36 <li>
37 For the parallel WRF module, parallel HDF5 must be installed (this requires MPI-IO). <br>
38 Set the environment variable PHDF5 = &lt;&lt;path where phdf5 is installed&gt;&gt;.
40  </li>
42 <li>For the sequential HDF WRF IO module, either serial or parallel HDF must be installed.<br>
43 The HDF library may be installed with the optional SZIP compression enabled. <br>
44 Set the environment variable HDF5 = &lt;&lt;path where hdf5 is installed&gt;&gt;.
46 <br>
47 </li>
48 </ol>
49 <br>
50 <big><b>Platforms</b></big><br>
51 <p><small><small><font size="5"><small><small>This prototype has been tested
52 on a few platforms. The HDF WRF IO modules should work on any platform that
53 WRF3.1 and HDF5 support, although the details of the configuration may need
54 to be worked out.<br>
55 </small></small></font></small></small></p>
56 <table cellpadding="2" cellspacing="2" border="1" width="100%">
57 <tbody>
58 <tr>
59 <td valign="top"><b>Module<br>
60 </b></td>
61 <td valign="top"><b>Platforms<br>
62 </b></td>
63 <td valign="top"><b>Notes<br>
64 </b></td>
65 </tr>
66 <tr>
67 <td valign="top">Sequential <br>
68 </td>
69 <td valign="top"><small><small><font size="5"><small><small>
70 NCSA IBM P690</small></small></font></small></small>.<br>
71 <small><small><font size="5"><small><small> NCAR IBM SP3 </small></small></font></small></small><br>
72 <small><small><font size="5"><small><small>PC Linux </small></small></font></small></small>with PGI Fortran 90 Compiler, Vers. 4<br>
73 <small><small><font size="5"><small><small>SGI IRIX6.5-64 bi</small></small></font></small></small>t<br>
74 </td>
75 <td valign="top">To date, WRF3.1 does not work on Linux with PGF, version 5.<br>
76 </td>
77 </tr>
78 <tr>
79 <td valign="top">Parallel<br>
80 </td>
81 <td valign="top"><small><small><font size="5"><small><small>
82 NCSA IBM P690</small></small></font></small></small>.<br>
84 <small><small><font size="5"><small><small> NCAR IBM SP3 </small></small></font></small></small><br>
85 </td>
86 <td valign="top"><br>
87 </td>
88 </tr>
89 </tbody>
90 </table>
91 <br>
92 <br>
93 <big><b>Installation of the HDF5 WRF IO Modules</b></big><br>
94 <br>
95 The HDF5 WRF IO modules are used by adding it to a standard WRF configuration.  This process has four main steps<br>
96 <ol>
97 <li>Downoad the HDF WRF IO module(s)</li><li>Add the HDF5 WRF IO module(s) as an "extern" module</li>
99 <li>Modifying relevant files in the WRF distribution</li>
100 <li>Compile WRF following the usual procedures<br>
101 </li>
103 </ol>
104 The parallel, sequential, or both may be configured.<br>
105 <br>
106 <b>1. Download the WRD-HDF5 IO modules</b><br>
107 <br>
108 The HDF WRF IO modules are available from:<br>
109 <ul>
110 <li>sequential: <a href="ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules/io_hdf5.tar">
111 ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules/io_hdf5.tar</a></li>
112 <li>parallel: 
113 <a href="ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules/io_phdf5.tar">
114 ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules/io_phdf5.tar</a><br>
115 </li>
116 </ul>
117 <blockquote><p></p>
118 </blockquote>
119 <p><b><small>
120 <font size="4"><small>2. Add WRF-HDF5 IO module(s) to the WRF source</small></font></small></b></p>
124 The HDF5 WRF IO modules are added as sub-directories in the 'external' directory of the WRF source.<br>
125 </p>
126 <blockquote><blockquote>
129 <p> cd external;<br>
130 tar xvf io_hdf5.tar<br>
131 tar xvf io_phdf5.tar<br>
132 </p>
133 </blockquote></blockquote>
136 </p>
138 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
141 <tbody>
142 <tr>
143 <td valign="top">contents of the sequential HDF WRF IO module:<br>
144 <br>
145   ./io_hdf5<br>  ./io_hdf5/wrf-hdf5.F90<br>  ./io_hdf5/wrf_status_codes.h<br>  ./io_hdf5/Makefile<br>  ./io_hdf5/wrf-hdf5attr.F90<br>  ./io_hdf5/wrf-hdf5support.F90<br>  ./io_hdf5/wrf_io_flags.h<br>
146 </td>
147 </tr>
148 </tbody>
150 </table>
153 <br>
155 <br>
159 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
162 <tbody>
163 <tr>
164 <td valign="top">contents of the sequential HDF WRF IO module:<br>
165 <br>
166   ./io_phdf5/<br>  ./io_phdf5/Makefile<br>  ./io_phdf5/wrf_status_codes.h<br>  ./io_phdf5/wrf-phdf5attr.F90<br>  ./io_phdf5/wrf-phdf5support.F90<br>  ./io_phdf5/wrf_io_flags.h<br>  ./io_phdf5/wrf-phdf5.F90<br>
167 </td>
168 </tr>
169 </tbody>
171 </table>
174 <br>
177 <p><b><small><small><font size="5"><small><small>Design note:</small></small></font></small></small></b></p>
179 <p><small><small><font size="5"><small><small>In the sequential HDF5 WRF
180 IO modules, arrays larger thatn 8096 bytes are compressed by default. In
181 this case, the HDF5 dataset is configured to use the shuffle filter plus deflate
182 (GZIP) compression, with compression level 6.  <br>
183 </small></small></font></small></small></p>
186 <p><small><small><font size="5"><small><small>In the current prototype, there is no option in the namelist for
187 users to change this default. To modify this behavior, it is necessary to modify the source code.</small></small></font><br>
188 <font size="5"><small><small><br>
189 <i>To disable compression:</i></small></small></font></small></small></p>
193 <blockquote>
194 <p><small><font size="5"><small><small>Edit</small></small></font><font size="4"><small> the file '</small></font></small><small><font size="4"><small>wrf/external/io_hdf5/</small></font></small><small><font size="4"><small>wrf-hdf5.F90</small></font></small><small><font size="4"><small>'<br>
195 </small></font></small></p>
196 <p><small><font size="4"><small>Comment out the lines: </small></font></small></p>
197 <p><small><font face="Arial" size="4"><small>           
198 call h5pset_shuffle_f(crp_list,hdf5err) </small></font></small></p>
199 <p><small><font size="4"><small>               
200 and </small></font></small></p>
201 <p><small><font size="4" face="Arial"><small>           
202 call h5pset_deflate_f(crp_list,6,hdf5err) </small></font></small></p>
203 </blockquote>
213 <p><i><small><small><font size="5"><small><small>To use  SZIP compression instead:</small></small></font></small></small></i></p>
216 <blockquote>
217 <p><small><font size="4"><small>For SZIP information and downloads, see the szip at 
218 <a href="http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/">
219 http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/</a>.<br>
220 </small></font></small></p>
221 <p><small><font size="4"><small>Edit the file 'wrf/external/io_hdf5/</small></font></small><small><font size="4"><small>wrf-hdf5.F90'.</small></font></small></p>
222 <p><small><font size="4"><small>Comment out the lines: </small></font></small></p>
223 <p><small><font face="Arial" size="4"><small>           
224 call h5pset_shuffle_f(crp_list,hdf5err) </small></font></small></p>
225 <p><small><font size="4"><small>               
226 and </small></font></small></p>
227 <p><small><font size="4" face="Arial"><small>           
228 call h5pset_deflate_f(crp_list,6,hdf5err) </small></font></small></p>
229 <p><small><font size="4"><small>Uncomment the line:
230 </small></font></small></p>
231 <p><small><font size="4"><small>             
232 <font face="Arial">call
233 h5pset_szip_f(crp_list,H5_SZIP_AK13_OM_F+H5_SZIP_NN_OM_F,8,hdf5err)</font><br>
234 </small></font></small></p>
235 <p><small><font size="4"><small>Change the value
236 of the parameters in the function <i>h5pset_szip_f</i> if necessary.</small></font></small>  See the SZIP documentation for more information about the parameters.<br>
237 </p>
238 </blockquote>
256 <p><br>
257 </p>
258 <p><font size="4"><b><small>3. Modifications to WRF files</small></b><br>
259 </font></p>
261 <p><font size="4"><small>In order to add a new IO module to WRF,  several
262 files in the WRF source code must be changed. The following files need to be
263 modified:<br>
264 </small></font></p>
265 <table cellpadding="2" cellspacing="2" border="1" width="50%" align="center">
266 <tbody>
267 <tr>
268 <td valign="top">WRFV1/configure<br>
269 WRFV1/Registry/Registry<br>
270 WRFV1/arch/Config.pl<br>
271 WRFV1/arch/configure.defaults<br>
272 WRFV1/frame/md_calls.m4<br>
273 WRFV1/frame/module_io.F<br>
274 WRFV1/share/module_io_wrf.F<br>
275 WRFV1/external/Makefile<br>
276 </td>
277 </tr>
278 </tbody>
279 </table>
280 <br>
281 The exact changes depend on how WRF has been configured on the sytsem.  <br>
282 <p>Examples of the changes to the files of the WRF1.3 distribution are available at:<br>
283 </p>
284 <p> 
286 <a href="ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules">
287 ftp://ftp.ncsa.uiuc.edu/HDF/pub/outgoing/wrf-hdf5-modules</a><br>
288 </p>
290 <blockquote>
291 </blockquote>
292 <p><i><b>WRF configuration files<br>
293 </b></i>
294 </p>
295 <p>The 'configure' file must be updated to add the HDF5 and PHDF5 variables.<br>
296 </p>
297 <table cellpadding="2" cellspacing="2" border="1" align="center" width="90%">
298 <tbody>
299 <tr>
300 <td valign="top">*** ../WRFV1/configure Thu Feb 6 13:10:56 2003<br>
301 --- ./WRFV1-with-hdf/configure Thu May 13 12:18:40 2004<br>
302 ***************<br>
303 *** 206,211 ****<br>
304 --- 206,223 ----<br>
305 echo "Will configure for use without NetCDF"<br>
306 fi<br>
307 <br>
308 + if [ -n "$HDF5" ] ; then<br>
309 + echo "Will use HDF5 in dir: $HDF5"<br>
310 + else<br>
311 + echo "Will configure for use without HDF5"<br>
312 + fi<br>
313 + <br>
314 + if [ -n "$PHDF5" ] ; then<br>
315 + echo "Will use PHDF5 in dir: $PHDF5"<br>
316 + else<br>
317 + echo "Will configure for use without PHDF5"<br>
318 + fi<br>
319 + <br>
320 # if the uname command exists, give it a shot and see if<br>
321 # we can narrow the choices; otherwise, spam 'em<br>
322 os="ARCH"<br>
323 ***************<br>
324 *** 227,232 ****<br>
325 <br>
326 # Found perl, so proceed with configuration<br>
327 if test -n "$PERL" ; then<br>
328 ! $PERL arch/Config.pl -perl=$PERL -netcdf=$NETCDF -os=$os -mach=$mach<br>
329 fi<br>
330 <br>
331 --- 239,244 ----<br>
332 <br>
333 # Found perl, so proceed with configuration<br>
334 if test -n "$PERL" ; then<br>
335 ! $PERL arch/Config.pl -perl=$PERL -netcdf=$NETCDF -hdf5=$HDF5 -phdf5=$PHDF5 -os=$os -mach=$mach<br>
336 fi<br>
337 <br>
338 </td>
339 </tr>
340 </tbody>
341 </table>
342 <p>The file 'Registry/Registry' must be updated to add the HDF IO modules (<i>io_hdf5</i> and <i>io_phdf5</i>).<br>
343 </p>
344 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
345 <tbody>
346 <tr>
347 <td valign="top">*** ../WRFV1/Registry/Registry Wed Feb 12 09:28:28 2003<br>
348 --- ./WRFV1-with-hdf/Registry/Registry Thu May 13 12:18:39 2004<br>
349 ***************<br>
350 *** 738,745 ****<br>
351 # Four placeholders for additional packages (we can go beyond zzz <br>
352 # but that will entail modifying frame/module_io.F and frame/md_calls.m4)<br>
353 # Please note these are placeholders; HDF has not been implemented yet.<br>
354 ! package io_hdf io_form_restart==3 - -<br>
355 ! package io_xxx io_form_restart==4 - -<br>
356 package io_yyy io_form_restart==5 - -<br>
357 package io_zzz io_form_restart==6 - -<br>
358 <br>
359 --- 738,745 ----<br>
360 # Four placeholders for additional packages (we can go beyond zzz <br>
361 # but that will entail modifying frame/module_io.F and frame/md_calls.m4)<br>
362 # Please note these are placeholders; HDF has not been implemented yet.<br>
363 ! package io_hdf5 io_form_restart==3 - -<br>
364 ! package io_phdf5 io_form_restart==4 - -<br>
365 package io_yyy io_form_restart==5 - -<br>
366 package io_zzz io_form_restart==6 - -<br>
367 <br>
368 </td>
369 </tr>
370 </tbody>
371 </table>
372 <p>The file 'arch/Config.pl' needs to be changed to add the code to use the HDF5 and PHDF5 variables.<br>
373 </p>
374 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
375 <tbody>
376 <tr>
377 <td valign="top">*** ../WRFV1/arch/Config.pl Fri Mar 16 12:06:46 2001<br>
378 --- ./WRFV1-with-hdf/arch/Config.pl Thu May 13 12:18:37 2004<br>
379 ***************<br>
380 *** 7,12 ****<br>
381 --- 7,14 ----<br>
382 <br>
383 $sw_perl_path = perl ;<br>
384 $sw_netcdf_path = "" ;<br>
385 + $sw_hdf5_path ="";<br>
386 + $sw_phdf5_path=""; <br>
387 $sw_os = "ARCH" ; # ARCH will match any<br>
388 $sw_mach = "ARCH" ; # ARCH will match any<br>
389 <br>
390 ***************<br>
391 *** 20,25 ****<br>
392 --- 22,35 ----<br>
393 {<br>
394 $sw_netcdf_path = substr( $ARGV[0], 8 ) ;<br>
395 }<br>
396 + if ( substr( $ARGV[0], 1, 5 ) eq "hdf5=" )<br>
397 + {<br>
398 + $sw_hdf5_path = substr( $ARGV[0], 6 ) ;<br>
399 + }<br>
400 + if ( substr( $ARGV[0], 1, 6 ) eq "phdf5=" )<br>
401 + {<br>
402 + $sw_phdf5_path = substr( $ARGV[0], 7 ) ;<br>
403 + }<br>
404 if ( substr( $ARGV[0], 1, 3 ) eq "os=" )<br>
405 {<br>
406 $sw_os = substr( $ARGV[0], 4 ) ;<br>
407 ***************<br>
408 *** 89,94 ****<br>
409 --- 99,106 ----<br>
410 {<br>
411 $_ =~ s/CONFIGURE_PERL_PATH/$sw_perl_path/g ;<br>
412 $_ =~ s/CONFIGURE_NETCDF_PATH/$sw_netcdf_path/g ;<br>
413 + $_ =~ s/CONFIGURE_HDF5_PATH/$sw_hdf5_path/g ;<br>
414 + $_ =~ s/CONFIGURE_PHDF5_PATH/$sw_phdf5_path/g ;<br>
415 if ( $sw_netcdf_path ) <br>
416 { $_ =~ s/CONFIGURE_WRFIO_NF/wrfio_nf/g ;<br>
417 $_ =~ s:CONFIGURE_NETCDF_FLAG:-DNETCDF: ;<br>
418 ***************<br>
419 *** 99,104 ****<br>
420 --- 111,140 ----<br>
421 $_ =~ s:CONFIGURE_NETCDF_FLAG::g ;<br>
422 $_ =~ s:CONFIGURE_NETCDF_LIB_PATH::g ;<br>
423 }<br>
424 + <br>
425 + if ( $sw_hdf5_path ) <br>
426 + <br>
427 + { $_ =~ s/CONFIGURE_WRFIO_HDF5/wrfio_hdf5/g ;<br>
428 + $_ =~ s:CONFIGURE_HDF5_FLAG:-DHDF5: ;<br>
429 + $_ =~ s:CONFIGURE_HDF5_LIB_PATH:-L../external/io_hdf5 -lwrfio_hdf5 -L$sw_hdf5_path/lib
430 -lhdf5_fortran -lhdf5 -lm -lz -L$sw_hdf5_path/lib -lsz: ;<br>
431 + }<br>
432 + else <br>
433 + { $_ =~ s/CONFIGURE_WRFIO_HDF5//g ;<br>
434 + $_ =~ s:CONFIGURE_HDF5_FLAG::g ;<br>
435 + $_ =~ s:CONFIGURE_HDF5_LIB_PATH::g ;<br>
436 + }<br>
437 + <br>
438 + if ( $sw_phdf5_path ) <br>
439 + <br>
440 + { $_ =~ s/CONFIGURE_WRFIO_PHDF5/wrfio_phdf5/g ;<br>
441 + $_ =~ s:CONFIGURE_PHDF5_FLAG:-DPHDF5: ;<br>
442 + $_ =~ s:CONFIGURE_PHDF5_LIB_PATH:-L../external/io_phdf5 -lwrfio_phdf5 -L$sw_phdf5_path/lib -lhdf5_fortran -lhdf5 -lm -lz: ;<br>
443 + }<br>
444 + else <br>
445 + { $_ =~ s/CONFIGURE_WRFIO_PHDF5//g ;<br>
446 + $_ =~ s:CONFIGURE_PHDF5_FLAG::g ;<br>
447 + $_ =~ s:CONFIGURE_PHDF5_LIB_PATH::g ;<br>
448 + }<br>
449 @machopts = ( @machopts, $_ ) ;<br>
450 }<br>
451 if ( substr( $_, 0, 5 ) eq "#ARCH" &amp;&amp; $latchon == 0 )<br>
452 <br>
453 </td>
454 </tr>
455 </tbody>
456 </table>
457 <p>The file 'arch/configure.defauts' must be edited to reflect the configuration of the current system.<br>
458 </p>
459 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
460 <tbody>
461 <tr>
462 <td valign="top">*** ../WRFV1/arch/configure.defaults Fri Mar 28 14:08:48 2003<br>
463 --- ./WRFV1-with-hdf/arch/configure.defaults Thu May 13 12:18:40 2004<br>
464 ***************<br>
465 *** 732,758 ****<br>
466 <br>
467 <br>
468 ###########################################################<br>
469 ! #ARCH AIX DM (RSL-IO, IBM-MPI)<br>
470 #<br>
471 DMPARALLEL = 1<br>
472 ! SFC = xlf90_r<br>
473 SCC = xlc_r<br>
474 ! FC = mpxlf90_r<br>
475 CC = mpcc_r<br>
476 CFLAGS = -DNOUNDERSCORE -DWRF_RSL_IO -I../external/RSL/RSL -DDM_PARALLEL \<br>
477 -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC)<br>
478 ! FCOPTIM = -O2 -qarch=auto -qmaxmem=32676<br>
479 FCDEBUG = # -g -qfullpath<br>
480 FCBASEOPTS = -qspill=20000 $(FCDEBUG)<br>
481 FCFLAGS = $(FCOPTIM) $(FCBASEOPTS)<br>
482 ! INCLUDE_MODULES = -I../external/io_netcdf -I../external/io_int \<br>
483 -I../frame -I../share -I../phys -I../inc<br>
484 EXTRAMODULES = <br>
485 ARCHFLAGS = -DWRF_RSL_IO -DRSL -DDM_PARALLEL -DIWORDSIZE=4 -DRWORDSIZE=4 \<br>
486 ! -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG -DTRIEDNTRUE -DONLY_WRFMODEL_IO -DINTIO<br>
487 PERL = perl<br>
488 REGISTRY = Registry<br>
489 ! LIB = CONFIGURE_NETCDF_LIB_PATH -L../external/RSL/RSL -lrsl -lmass \<br>
490 -L../external/io_int -lwrfio_int \<br>
491 ../frame/internal_header_util.o ../frame/pack_utils.o<br>
492 LDFLAGS = -bmaxstack:256000000<br>
493 --- 732,823 ----<br>
494 <br>
495 <br>
496 ###########################################################<br>
497 ! #ARCH AIX DM (RSL-IO, IBM-MPI)(PARALLEL HDF5)<br>
498 #<br>
499 DMPARALLEL = 1<br>
500 ! SFC = xlf90_r <br>
501 SCC = xlc_r<br>
502 ! FC = mpxlf90_r <br>
503 CC = mpcc_r<br>
504 CFLAGS = -DNOUNDERSCORE -DWRF_RSL_IO -I../external/RSL/RSL -DDM_PARALLEL \<br>
505 -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC)<br>
506 ! FCOPTIM = -O1 -qarch=auto -qmaxmem=-1<br>
507 ! #FCOPTIM = -O2 <br>
508 ! FCDEBUG = -g -qfullpath<br>
509 ! FCBASEOPTS = -qspill=20000 $(FCDEBUG)<br>
510 ! FCFLAGS = $(FCOPTIM) $(FCBASEOPTS)<br>
511 ! INCLUDE_MODULES = -I../external/io_netcdf -I../external/io_phdf5 -I../external/io_int \<br>
512 ! -I../frame -I../share -I../phys -I../inc<br>
513 ! EXTRAMODULES = <br>
514 ! ARCHFLAGS = -DWRF_RSL_IO -DRSL -DDM_PARALLEL -DIWORDSIZE=4 -DRWORDSIZE=4 \<br>
515 ! -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG CONFIGURE_PHDF5_FLAG -DTRIEDNTRUE -DONLY_WRFMODEL_IO -DINTIO<br>
516 ! PERL = perl<br>
517 ! REGISTRY = Registry<br>
518 ! LIB = CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PHDF5_LIB_PATH -L../external/RSL/RSL -lrsl -lmass \<br>
519 ! -L../external/io_int -lwrfio_int \<br>
520 ! ../frame/internal_header_util.o ../frame/pack_utils.o<br>
521 ! LDFLAGS = -bmaxstack:256000000 -bmaxdata:0x80000000<br>
522 ! CPP = /lib/cpp<br>
523 ! CPPFLAGS = -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I../external/RSL/RSL `cat ../inc/dm_comm_cpp_flags`<br>
524 ! MAX_DOMAINS = 4<br>
525 ! MAX_PROC = 1024<br>
526 ! AR = ar ru<br>
527 ! M4 = m4 -B 8000<br>
528 ! RANLIB = ranlib<br>
529 ! <br>
530 ! externals : CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_PHDF5 ../external/RSL/RSL/librsl.a wrfio_int<br>
531 ! ( /bin/cp ../tools/gen_comms_warning ../tools/gen_comms.c ; cat ../external/RSL/gen_comms.c
532 &gt;&gt; ../tools/gen_comms.c ; \<br>
533 ! /bin/cp module_dm_warning module_dm.F ; cat ../external/RSL/module_dm.F &gt;&gt; module_dm.F )<br>
534 ! <br>
535 ! wrfio_nf : <br>
536 ! ( cd ../external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(SFC)
537 $(FCDEBUG) -qarch=auto -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h
538 ../../inc )<br>
539 ! <br>
540 ! wrfio_phdf5 : <br>
541 ! ( cd ../external/io_phdf5 ; make PHDF5PATH=CONFIGURE_PHDF5_PATH FC="$(FC)
542 $(FCDEBUG) -qarch=auto -qfree=F90 -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h
543 ../../inc )<br>
544 ! <br>
545 ! wrfio_int : <br>
546 ! ( cd ../external/io_int ; \<br>
547 ! make CC=$(CC) FC="$(SFC) $(FCDEBUG) -qarch=auto -qzerosize" all diffwrf )<br>
548 ! <br>
549 ! ../external/RSL/RSL/librsl.a :<br>
550 ! ( cd ../external/RSL/RSL ; make MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST sp2 )<br>
551 ! <br>
552 ! # compile these without high optimization to speed compile<br>
553 ! mediation_force_domain.o : mediation_force_domain.F<br>
554 ! mediation_interp_domain.o : mediation_interp_domain.F<br>
555 ! <br>
556 ! mediation_force_domain.o \<br>
557 ! mediation_interp_domain.o :<br>
558 ! $(RM) $@<br>
559 ! sed /\!.\*\'/s/\'//g $*.F &gt; $*.b<br>
560 ! $(CPP) -I../inc $(CPPFLAGS) $*.b &gt; $*.f<br>
561 ! $(RM) $*.b<br>
562 ! $(FC) -c $(FCBASEOPTS) $(MODULE_DIRS) $*.f<br>
563 ! <br>
564 ! ###########################################################<br>
565 ! #ARCH AIX DM (RSL-IO, IBM-MPI)(SERIAL HDF5)<br>
566 ! #<br>
567 ! DMPARALLEL = 1<br>
568 ! SFC = xlf90_r <br>
569 ! SCC = xlc_r<br>
570 ! FC = mpxlf90_r <br>
571 ! CC = mpcc_r<br>
572 ! CFLAGS = -DNOUNDERSCORE -DWRF_RSL_IO -I../external/RSL/RSL -DDM_PARALLEL \<br>
573 ! -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC)<br>
574 ! FCOPTIM = -O1 -qarch=auto -qmaxmem=32676<br>
575 ! #FCOPTIM = -O2 <br>
576 FCDEBUG = # -g -qfullpath<br>
577 FCBASEOPTS = -qspill=20000 $(FCDEBUG)<br>
578 FCFLAGS = $(FCOPTIM) $(FCBASEOPTS)<br>
579 ! INCLUDE_MODULES = -I../external/io_netcdf -I../external/io_hdf5 -I../external/io_int \<br>
580 -I../frame -I../share -I../phys -I../inc<br>
581 EXTRAMODULES = <br>
582 ARCHFLAGS = -DWRF_RSL_IO -DRSL -DDM_PARALLEL -DIWORDSIZE=4 -DRWORDSIZE=4 \<br>
583 ! -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG CONFIGURE_HDF5_FLAG -DTRIEDNTRUE -DONLY_WRFMODEL_IO -DINTIO<br>
584 PERL = perl<br>
585 REGISTRY = Registry<br>
586 ! LIB = CONFIGURE_NETCDF_LIB_PATH CONFIGURE_HDF5_LIB_PATH \<br>
587 ! -L../external/RSL/RSL -lrsl -lmass \<br>
588 -L../external/io_int -lwrfio_int \<br>
589 ../frame/internal_header_util.o ../frame/pack_utils.o<br>
590 LDFLAGS = -bmaxstack:256000000<br>
591 ***************<br>
592 *** 764,776 ****<br>
593 M4 = m4 -B 8000<br>
594 RANLIB = ranlib<br>
595 <br>
596 ! externals : CONFIGURE_WRFIO_NF ../external/RSL/RSL/librsl.a wrfio_int<br>
597 ( /bin/cp ../tools/gen_comms_warning ../tools/gen_comms.c ; cat ../external/RSL/gen_comms.c
598 &gt;&gt; ../tools/gen_comms.c ; \<br>
599 /bin/cp module_dm_warning module_dm.F ; cat ../external/RSL/module_dm.F &gt;&gt; module_dm.F )<br>
600 <br>
601 wrfio_nf : <br>
602 ( cd ../external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(SFC)
603 $(FCDEBUG) -qarch=auto -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h
604 ../../inc )<br>
605 <br>
606 wrfio_int : <br>
607 ( cd ../external/io_int ; \<br>
608 make CC=$(CC) FC="$(SFC) $(FCDEBUG) -qarch=auto -qzerosize" all diffwrf )<br>
609 --- 829,844 ----<br>
610 M4 = m4 -B 8000<br>
611 RANLIB = ranlib<br>
612 <br>
613 ! externals : CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_HDF5 ../external/RSL/RSL/librsl.a wrfio_int<br>
614 ( /bin/cp ../tools/gen_comms_warning ../tools/gen_comms.c ; cat ../external/RSL/gen_comms.c
615 &gt;&gt; ../tools/gen_comms.c ; \<br>
616 /bin/cp module_dm_warning module_dm.F ; cat ../external/RSL/module_dm.F &gt;&gt; module_dm.F )<br>
617 <br>
618 wrfio_nf : <br>
619 ( cd ../external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(SFC)
620 $(FCDEBUG) -qarch=auto -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h
621 ../../inc )<br>
622 <br>
623 + wrfio_hdf5 : <br>
624 + ( cd ../external/io_hdf5 ; make HDF5PATH=CONFIGURE_HDF5_PATH FC="$(SFC)
625 $(FCDEBUG) -qarch=auto -qfree=F90 -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h
626 ../../inc )<br>
627 + <br>
628 wrfio_int : <br>
629 ( cd ../external/io_int ; \<br>
630 make CC=$(CC) FC="$(SFC) $(FCDEBUG) -qarch=auto -qzerosize" all diffwrf )<br>
631 ***************<br>
632 *** 1650,1663 ****<br>
633 FCBASEOPTS = -byteswapio -Ktrap=fp -Mfree -tp p6 $(FCDEBUG)<br>
634 FCFLAGS = $(FCOPTIM) $(FCBASEOPTS)<br>
635 ARCHFLAGS = -DDEREF_KLUDGE -DIO_DEREF_KLUDGE -DIWORDSIZE=4 -DRWORDSIZE=4 -DLWORDSIZE=4 \<br>
636 ! CONFIGURE_NETCDF_FLAG \<br>
637 -DTRIEDNTRUE -DONLY_WRFMODEL_IO<br>
638 ! INCLUDE_MODULES = -module ../main -I../external/io_netcdf -I../external/io_int \<br>
639 -I../frame -I../share -I../phys -I../inc<br>
640 EXTRAMODULES = <br>
641 PERL = perl<br>
642 REGISTRY = Registry<br>
643 ! LIB = CONFIGURE_NETCDF_LIB_PATH \<br>
644 ../frame/internal_header_util.o ../frame/pack_utils.o<br>
645 LDFLAGS =<br>
646 CPP = /lib/cpp<br>
647 --- 1718,1731 ----<br>
648 FCBASEOPTS = -byteswapio -Ktrap=fp -Mfree -tp p6 $(FCDEBUG)<br>
649 FCFLAGS = $(FCOPTIM) $(FCBASEOPTS)<br>
650 ARCHFLAGS = -DDEREF_KLUDGE -DIO_DEREF_KLUDGE -DIWORDSIZE=4 -DRWORDSIZE=4 -DLWORDSIZE=4 \<br>
651 ! CONFIGURE_NETCDF_FLAG CONFIGURE_HDF5_FLAG\<br>
652 -DTRIEDNTRUE -DONLY_WRFMODEL_IO<br>
653 ! INCLUDE_MODULES = -module ../main -I../external/io_netcdf -I../external/io_hdf5 -I../external/io_int \<br>
654 -I../frame -I../share -I../phys -I../inc<br>
655 EXTRAMODULES = <br>
656 PERL = perl<br>
657 REGISTRY = Registry<br>
658 ! LIB = CONFIGURE_NETCDF_LIB_PATH CONFIGURE_HDF5_LIB_PATH \<br>
659 ../frame/internal_header_util.o ../frame/pack_utils.o<br>
660 LDFLAGS =<br>
661 CPP = /lib/cpp<br>
662 ***************<br>
663 *** 1666,1672 ****<br>
664 M4 = m4<br>
665 RANLIB = ranlib<br>
666 <br>
667 ! externals : CONFIGURE_WRFIO_NF wrfio_int<br>
668 ( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F &gt;&gt; module_dm.F )<br>
669 <br>
670 wrfio_nf : <br>
671 --- 1734,1740 ----<br>
672 M4 = m4<br>
673 RANLIB = ranlib<br>
674 <br>
675 ! externals : CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_HDF5 wrfio_int<br>
676 ( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F &gt;&gt; module_dm.F )<br>
677 <br>
678 wrfio_nf : <br>
679 ***************<br>
680 *** 1675,1680 ****<br>
681 --- 1743,1754 ----<br>
682 FFLAGS='$(FCFLAGS) -ICONFIGURE_NETCDF_PATH/include' ; \<br>
683 /bin/cp wrf_io_flags.h wrf_status_codes.h ../../inc )<br>
684 <br>
685 + wrfio_hdf5 : <br>
686 + ( cd ../external/io_hdf5 ; \<br>
687 + make HDF5PATH=CONFIGURE_HDF5_PATH FC=$(FC) TRADFLAG="-traditional" \<br>
688 + FFLAGS='$(FCFLAGS) -ICONFIGURE_HDF5_PATH/lib' ; \<br>
689 + /bin/cp wrf_io_flags.h wrf_status_codes.h ../../inc )<br>
690 + <br>
691 wrfio_int : <br>
692 ( cd ../external/io_int ; \<br>
693 make CC=$(CC) FC="$(SFC) $(FCDEBUG) $(FCBASEOPTS)" \<br>
694 </td>
695 </tr>
696 </tbody>
697 </table>
698 <p><br>
700 </p>
701 <blockquote>
702 <ul>
703 </ul><p></p>
704 </blockquote>
705 <p><i>Modifications of source code inside WRF</i><b><br>
706 </b></p>
707 <p>The<i> io_hdf5</i> and/or<i> io_phdf5</i> modules must be added to the WRF source. In addition, the WRF source must be modified in a few places.<br>
708 </p>
709 <p>The 'frame/md_calls.m4' must be modified to recognize the HDF modules.<br>
710 </p>
711 <blockquote>
712 </blockquote>
713 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
714 <tbody>
715 <tr>
716 <td valign="top">*** ../WRFV1/frame/md_calls.m4 Mon Dec 10 18:10:43 2001<br>
717 --- ./WRFV1-with-hdf/frame/md_calls.m4 Thu May 13 12:18:44 2004<br>
718 ***************<br>
719 *** 70,78 ****<br>
720 CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
721 ENDIF<br>
722 #endif<br>
723 ! #ifdef HDF<br>
724 ! CASE ( IO_HDF )<br>
725 ! CALL ext_hdf_$1_$2_$6_$3$4 ( Hndl, Element, ifelse($6,td,`DateStr,') ifelse($2,var,`Varname,') Data, &amp;<br>
726 ifelse($4,char,,`locCount, ifelse($1,get,`Outcount,')') Status )<br>
727 #endif<br>
728 #ifdef XXX<br>
729 --- 70,99 ----<br>
730 CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
731 ENDIF<br>
732 #endif<br>
733 ! #ifdef HDF5<br>
734 ! CASE ( IO_HDF5 )<br>
735 ! IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) THEN<br>
736 ! CALL ext_hdf5_$1_$2_$6_$3$4 ( Hndl, Element, ifelse($6,td,`DateStr,') ifelse($2,var,`Varname,') Data, &amp;<br>
737 ! ifelse($4,char,,`locCount, ifelse($1,get,`Outcount,')') Status )<br>
738 ! ENDIF <br>
739 ! IF ( .NOT. multi_files(io_form) ) THEN<br>
740 ! ifelse($1,get,ifelse($3,integer,`CALL wrf_dm_bcast_bytes( locCount, IWORDSIZE )'))<br>
741 ! ifelse($1,get,ifelse($3,integer,`CALL wrf_dm_bcast_bytes( Data, IWORDSIZE*locCount )'))<br>
742 ! ifelse($1,get,ifelse($3,real, `CALL wrf_dm_bcast_bytes( locCount, IWORDSIZE )'))<br>
743 ! ifelse($1,get,ifelse($3,real, `CALL wrf_dm_bcast_bytes( Data, RWORDSIZE*locCount )'))<br>
744 ! ifelse($1,get,ifelse($3,logical,`CALL wrf_dm_bcast_bytes( locCount, IWORDSIZE )'))<br>
745 ! ifelse($1,get,ifelse($3,logical,`CALL wrf_dm_bcast_bytes( Data, LWORDSIZE*locCount )'))<br>
746 ! ifelse($1,get,ifelse($4,char, `len_of_str = LEN(Data)'))<br>
747 ! ifelse($1,get,ifelse($4,char, `CALL wrf_dm_bcast_bytes( len_of_str, IWORDSIZE )'))<br>
748 ! ifelse($1,get,ifelse($4,char, `CALL wrf_dm_bcast_string( Data, len_of_str )'))<br>
749 ! CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
750 ! ENDIF<br>
751 ! <br>
752 ! <br>
753 ! #endif<br>
754 ! #ifdef PHDF5<br>
755 ! CASE ( IO_PHDF5 )<br>
756 ! CALL ext_phdf5_$1_$2_$6_$3$4 ( Hndl, Element, ifelse($6,td,`DateStr,') ifelse($2,var,`Varname,') Data, &amp;<br>
757 ifelse($4,char,,`locCount, ifelse($1,get,`Outcount,')') Status )<br>
758 #endif<br>
759 #ifdef XXX<br>
760 <br>
761 </td>
762 </tr>
763 </tbody>
764 </table>
765 <p><br>
766 The 'frame/module_io.F' file must be modified to add code to call the HDF5 modules if selected.<br>
767 </p>
768 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
769 <tbody>
770 <tr>
771 <td valign="top">*** ../WRFV1/frame/module_io.F Tue Dec 3 14:10:48 2002<br>
772 --- ./WRFV1-with-hdf/frame/module_io.F Thu May 13 12:18:45 2004<br>
773 ***************<br>
774 *** 34,39 ****<br>
775 --- 34,48 ----<br>
776 #ifdef NETCDF<br>
777 CALL ext_ncd_ioinit( SysDepInfo, Status )<br>
778 #endif<br>
779 + <br>
780 + #ifdef HDF5<br>
781 + CALL ext_hdf5_ioinit(SysDepInfo, Status)<br>
782 + #endif<br>
783 + <br>
784 + #ifdef PHDF5<br>
785 + CALL ext_phdf5_ioinit(SysDepInfo, Status)<br>
786 + #endif<br>
787 + <br>
788 END SUBROUTINE wrf_ioinit<br>
789 <br>
790 !--- ioexit<br>
791 ***************<br>
792 *** 47,52 ****<br>
793 --- 56,70 ----<br>
794 #ifdef NETCDF<br>
795 CALL ext_ncd_ioexit( Status )<br>
796 #endif<br>
797 + <br>
798 + #ifdef HDF5<br>
799 + CALL ext_hdf5_ioexit(Status)<br>
800 + #endif<br>
801 + <br>
802 + #ifdef PHDF5<br>
803 + CALL ext_phdf5_ioexit(Status)<br>
804 + #endif<br>
805 + <br>
806 IF ( use_output_servers() ) CALL ext_quilt_ioexit( Status )<br>
807 END SUBROUTINE<br>
808 <br>
809 ***************<br>
810 *** 134,139 ****<br>
811 --- 152,179 ----<br>
812 CALL ext_hdf_open_for_write_begin ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
813 Hndl , Status )<br>
814 #endif<br>
815 + #ifdef HDF5<br>
816 + CASE ( IO_HDF5 )<br>
817 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) THEN<br>
818 + IF ( multi_files(io_form) ) THEN<br>
819 + CALL wrf_get_myproc ( myproc )<br>
820 + CALL append_to_filename ( LocFilename , FileName , myproc, 4 )<br>
821 + ELSE<br>
822 + LocFilename = FileName<br>
823 + ENDIF<br>
824 + CALL ext_hdf5_open_for_write_begin ( LocFileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
825 + Hndl , Status )<br>
826 + ENDIF<br>
827 + IF ( .NOT. multi_files(io_form) ) THEN<br>
828 + CALL wrf_dm_bcast_bytes( Hndl, IWORDSIZE )<br>
829 + CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
830 + ENDIF<br>
831 + #endif<br>
832 + #ifdef PHDF5<br>
833 + CASE ( IO_PHDF5 )<br>
834 + CALL ext_phdf5_open_for_write_begin ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
835 + Hndl , Status )<br>
836 + #endif<br>
837 #ifdef XXX<br>
838 CASE ( IO_XXX )<br>
839 CALL ext_xxx_open_for_write_begin ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
840 ***************<br>
841 *** 214,219 ****<br>
842 --- 254,270 ----<br>
843 CASE ( IO_HDF )<br>
844 CALL ext_hdf_open_for_write_commit ( Hndl , Status )<br>
845 #endif<br>
846 + #ifdef HDF5<br>
847 + CASE ( IO_HDF5 )<br>
848 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) THEN<br>
849 + CALL ext_hdf5_open_for_write_commit ( Hndl , Status )<br>
850 + ENDIF<br>
851 + IF ( .NOT. multi_files(io_form) ) CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
852 + #endif<br>
853 + #ifdef PHDF5<br>
854 + CASE ( IO_PHDF5 )<br>
855 + CALL ext_phdf5_open_for_write_commit ( Hndl , Status )<br>
856 + #endif<br>
857 #ifdef XXX<br>
858 CASE ( IO_XXX )<br>
859 CALL ext_xxx_open_for_write_commit ( Hndl , Status )<br>
860 ***************<br>
861 *** 316,321 ****<br>
862 --- 367,388 ----<br>
863 CALL ext_hdf_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
864 Hndl , Status )<br>
865 #endif<br>
866 + #ifdef HDF5<br>
867 + CASE ( IO_HDF5 )<br>
868 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) THEN<br>
869 + CALL ext_hdf5_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
870 + Hndl , Status )<br>
871 + ENDIF<br>
872 + IF ( .NOT. multi_files(io_form) ) THEN<br>
873 + CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
874 + CALL wrf_dm_bcast_bytes( Hndl, IWORDSIZE )<br>
875 + ENDIF<br>
876 + #endif<br>
877 + #ifdef PHDF5<br>
878 + CASE ( IO_PHDF5 )<br>
879 + CALL ext_phdf5_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
880 + Hndl , Status )<br>
881 + #endif<br>
882 #ifdef XXX<br>
883 CASE ( IO_XXX )<br>
884 CALL ext_xxx_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &amp;<br>
885 ***************<br>
886 *** 420,425 ****<br>
887 --- 487,502 ----<br>
888 CASE ( IO_HDF )<br>
889 CALL ext_hdf_inquire_opened ( Hndl, FileName , FileStatus, Status )<br>
890 #endif<br>
891 + #ifdef HDF5<br>
892 + CASE ( IO_HDF5 )<br>
893 + IF (wrf_dm_on_monitor()) CALL ext_hdf5_inquire_opened ( Hndl, FileName , FileStatus, Status )<br>
894 + CALL wrf_dm_bcast_bytes( FileStatus, IWORDSIZE )<br>
895 + CALL wrf_dm_bcast_bytes( Status , IWORDSIZE )<br>
896 + #endif<br>
897 + #ifdef PHDF5<br>
898 + CASE ( IO_PHDF5 )<br>
899 + CALL ext_phdf5_inquire_opened ( Hndl, FileName , FileStatus, Status )<br>
900 + #endif<br>
901 #ifdef XXX<br>
902 CASE ( IO_XXX )<br>
903 CALL ext_xxx_inquire_opened ( Hndl, FileName , FileStatus, Status )<br>
904 ***************<br>
905 *** 486,491 ****<br>
906 --- 563,578 ----<br>
907 CASE ( IO_HDF )<br>
908 CALL ext_hdf_inquire_filename ( Hndl, FileName , FileStatus, Status )<br>
909 #endif<br>
910 + #ifdef HDF5<br>
911 + CASE ( IO_HDF5 )<br>
912 + IF (wrf_dm_on_monitor()) CALL ext_hdf5_inquire_filename ( Hndl, FileName , FileStatus, Status )<br>
913 + CALL wrf_dm_bcast_bytes( FileStatus, IWORDSIZE )<br>
914 + CALL wrf_dm_bcast_bytes( Status , IWORDSIZE )<br>
915 + #endif<br>
916 + #ifdef PHDF5<br>
917 + CASE ( IO_PHDF5 )<br>
918 + CALL ext_phdf5_inquire_filename ( Hndl, FileName , FileStatus, Status )<br>
919 + #endif<br>
920 #ifdef XXX<br>
921 CASE ( IO_XXX )<br>
922 CALL ext_xxx_inquire_filename ( Hndl, FileName , FileStatus, Status )<br>
923 ***************<br>
924 *** 607,612 ****<br>
925 --- 694,708 ----<br>
926 CASE ( IO_HDF )<br>
927 CALL ext_ncd_ioclose( Hndl, Status )<br>
928 #endif<br>
929 + #ifdef HDF5<br>
930 + CASE ( IO_HDF5 )<br>
931 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) CALL ext_hdf5_ioclose( Hndl, Status )<br>
932 + CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
933 + #endif<br>
934 + #ifdef PHDF5<br>
935 + CASE ( IO_PHDF5 )<br>
936 + CALL ext_phdf5_ioclose( Hndl, Status )<br>
937 + #endif<br>
938 #ifdef XXX<br>
939 CASE ( IO_XXX )<br>
940 CALL ext_xxx_ioclose( Hndl, Status )<br>
941 ***************<br>
942 *** 675,680 ****<br>
943 --- 771,790 ----<br>
944 CASE ( IO_HDF )<br>
945 CALL ext_hdf_get_next_time( Hndl, DateStr, Status )<br>
946 #endif<br>
947 + #ifdef HDF5<br>
948 + CASE ( IO_HDF5 )<br>
949 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) CALL ext_hdf5_get_next_time( Hndl, DateStr, Status )<br>
950 + IF ( .NOT. multi_files(io_form) ) THEN<br>
951 + CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
952 + len_of_str = LEN(DateStr)<br>
953 + CALL wrf_dm_bcast_bytes( len_of_str, IWORDSIZE )<br>
954 + CALL wrf_dm_bcast_string ( DateStr , len_of_str )<br>
955 + ENDIF<br>
956 + #endif<br>
957 + #ifdef PHDF5<br>
958 + CASE ( IO_PHDF5 )<br>
959 + CALL ext_phdf5_get_next_time( Hndl, DateStr, Status )<br>
960 + #endif<br>
961 #ifdef XXX<br>
962 CASE ( IO_XXX )<br>
963 CALL ext_xxx_get_next_time( Hndl, DateStr, Status )<br>
964 ***************<br>
965 *** 742,747 ****<br>
966 --- 852,866 ----<br>
967 CASE ( IO_HDF )<br>
968 CALL ext_hdf_set_time( Hndl, DateStr, Status )<br>
969 #endif<br>
970 + #ifdef HDF5<br>
971 + CASE ( IO_HDF5 )<br>
972 + IF ( multi_files(io_form) .OR. wrf_dm_on_monitor() ) CALL ext_hdf5_set_time( Hndl, DateStr, Status )<br>
973 + CALL wrf_dm_bcast_bytes( Status, IWORDSIZE )<br>
974 + #endif<br>
975 + #ifdef PHDF5<br>
976 + CASE ( IO_PHDF5 )<br>
977 + CALL ext_phdf5_set_time( Hndl, DateStr, Status )<br>
978 + #endif<br>
979 #ifdef XXX<br>
980 CASE ( IO_XXX )<br>
981 CALL ext_xxx_set_time( Hndl, DateStr, Status )<br>
982 ***************<br>
983 *** 875,880 ****<br>
984 --- 994,1002 ----<br>
985 #ifdef HDF<br>
986 EXTERNAL ext_hdf_read_field<br>
987 #endif<br>
988 + #ifdef HDF5<br>
989 + EXTERNAL ext_hdf5_read_field<br>
990 + #endif<br>
991 #ifdef XXX<br>
992 EXTERNAL ext_xxx_read_field<br>
993 #endif<br>
994 ***************<br>
995 *** 911,916 ****<br>
996 --- 1033,1058 ----<br>
997 PatchStart , PatchEnd , &amp;<br>
998 Status )<br>
999 #endif<br>
1000 + #ifdef HDF5<br>
1001 + CASE ( IO_HDF5 )<br>
1002 + CALL call_pkg_and_dist ( ext_hdf5_read_field, multi_files(io_form), &amp;<br>
1003 + Hndl , DateStr , VarName , Field , FieldType , Comm , IOComm , &amp;<br>
1004 + DomainDesc , bdy_mask, MemoryOrder , Stagger , DimNames , &amp;<br>
1005 + DomainStart , DomainEnd , &amp;<br>
1006 + MemoryStart , MemoryEnd , &amp;<br>
1007 + PatchStart , PatchEnd , &amp;<br>
1008 + Status )<br>
1009 + #endif<br>
1010 + #ifdef PHDF5 <br>
1011 + CASE (IO_PHDF5)<br>
1012 + CALL ext_phdf5_read_field ( &amp;<br>
1013 + Hndl , DateStr , VarName , Field , FieldType , Comm , IOComm , &amp;<br>
1014 + DomainDesc , MemoryOrder , Stagger , DimNames , &amp;<br>
1015 + DomainStart , DomainEnd , &amp;<br>
1016 + MemoryStart , MemoryEnd , &amp;<br>
1017 + PatchStart , PatchEnd , &amp;<br>
1018 + Status )<br>
1019 + #endif<br>
1020 #ifdef XXX<br>
1021 CASE ( IO_XXX )<br>
1022 CALL call_pkg_and_dist ( ext_xxx_read_field, multi_files(io_form), &amp;<br>
1023 ***************<br>
1024 *** 994,999 ****<br>
1025 --- 1136,1144 ----<br>
1026 #ifdef HDF<br>
1027 EXTERNAL ext_hdf_write_field<br>
1028 #endif<br>
1029 + #ifdef HDF5<br>
1030 + EXTERNAL ext_hdf5_write_field<br>
1031 + #endif<br>
1032 #ifdef XXX<br>
1033 EXTERNAL ext_xxx_write_field<br>
1034 #endif<br>
1035 ***************<br>
1036 *** 1028,1033 ****<br>
1037 --- 1173,1198 ----<br>
1038 PatchStart , PatchEnd , &amp;<br>
1039 Status )<br>
1040 #endif<br>
1041 + #ifdef HDF5<br>
1042 + CASE ( IO_HDF5 )<br>
1043 + CALL collect_fld_and_call_pkg ( ext_hdf5_write_field, multi_files(io_form), &amp;<br>
1044 + Hndl , DateStr , VarName , Field , FieldType , Comm , IOComm , &amp;<br>
1045 + DomainDesc , bdy_mask, MemoryOrder , Stagger , DimNames , &amp;<br>
1046 + DomainStart , DomainEnd , &amp;<br>
1047 + MemoryStart , MemoryEnd , &amp;<br>
1048 + PatchStart , PatchEnd , &amp;<br>
1049 + Status )<br>
1050 + #endif<br>
1051 + #ifdef PHDF5<br>
1052 + CASE ( IO_PHDF5 )<br>
1053 + CALL ext_phdf5_write_field ( &amp;<br>
1054 + Hndl , DateStr , VarName , Field , FieldType , Comm , IOComm , &amp;<br>
1055 + DomainDesc , MemoryOrder , Stagger , DimNames , &amp;<br>
1056 + DomainStart , DomainEnd , &amp;<br>
1057 + MemoryStart , MemoryEnd , &amp;<br>
1058 + PatchStart , PatchEnd , &amp;<br>
1059 + Status )<br>
1060 + #endif<br>
1061 #ifdef XXX<br>
1062 CASE ( IO_XXX )<br>
1063 CALL collect_fld_and_call_pkg ( ext_xxx_write_field, multi_files(io_form), &amp;<br>
1064 ***************<br>
1065 *** 1115,1120 ****<br>
1066 --- 1280,1293 ----<br>
1067 DomainStart , DomainEnd , &amp;<br>
1068 Status )<br>
1069 #endif<br>
1070 + #ifdef HDF5<br>
1071 + CASE ( IO_HDF5 )<br>
1072 + write(*,*) "NOT IMPLEMENT at HDF5" <br>
1073 + ! CALL ext_hdf5_get_var_info ( Hndl , VarName , NDim , &amp;<br>
1074 + ! MemoryOrder , Stagger , &amp;<br>
1075 + ! DomainStart , DomainEnd , &amp;<br>
1076 + ! Status )<br>
1077 + #endif<br>
1078 #ifdef XXX<br>
1079 CASE ( IO_XXX )<br>
1080 CALL ext_xxx_get_var_info ( Hndl , VarName , NDim , &amp;<br>
1081 <br>
1082 </td>
1083 </tr>
1084 </tbody>
1085 </table>
1086 <p><br>
1087 The 'share/module_io.F' file must be modified to recognize the HDF5 options for IO.<br>
1088 </p>
1089 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
1090 <tbody>
1091 <tr>
1092 <td valign="top">*** ../WRFV1/share/module_io_wrf.F Tue Feb 18 14:26:22 2003<br>
1093 --- ./WRFV1-with-hdf/share/module_io_wrf.F Thu May 13 12:18:46 2004<br>
1094 ***************<br>
1095 *** 1032,1037 ****<br>
1096 --- 1032,1079 ----<br>
1097 ,Status )<br>
1098 ENDIF<br>
1099 <br>
1100 + IF (io_form .EQ. IO_HDF5) THEN<br>
1101 + CALL wrf_put_var_ti_char( &amp;<br>
1102 + DataHandle &amp; ! DataHandle<br>
1103 + ,"description" &amp; ! Element<br>
1104 + ,Var &amp; ! Data Name<br>
1105 + ,Desc &amp; ! Data<br>
1106 + ,Status )<br>
1107 + CALL wrf_put_var_ti_char( &amp;<br>
1108 + DataHandle &amp; ! DataHandle<br>
1109 + ,"units" &amp; ! Element<br>
1110 + ,Var &amp; ! Data Name<br>
1111 + ,Units &amp; ! Data<br>
1112 + ,Status )<br>
1113 + CALL wrf_put_var_ti_char( &amp;<br>
1114 + DataHandle &amp; ! DataHandle<br>
1115 + ,"stagger" &amp; ! Element<br>
1116 + ,Var &amp; ! Data Name<br>
1117 + ,Stagger &amp; ! Data<br>
1118 4/ Build WRF<br>
1119 <br>
1120 + ,Status )<br>
1121 + ENDIF<br>
1122 + <br>
1123 + IF (io_form .EQ. IO_PHDF5) THEN<br>
1124 + CALL wrf_put_var_ti_char( &amp;<br>
1125 + DataHandle &amp; ! DataHandle<br>
1126 + ,"description" &amp; ! Element<br>
1127 + ,Var &amp; ! Data Name<br>
1128 + ,Desc &amp; ! Data<br>
1129 + ,Status )<br>
1130 + CALL wrf_put_var_ti_char( &amp;<br>
1131 + DataHandle &amp; ! DataHandle<br>
1132 + ,"units" &amp; ! Element<br>
1133 + ,Var &amp; ! Data Name<br>
1134 + ,Units &amp; ! Data<br>
1135 + ,Status )<br>
1136 + CALL wrf_put_var_ti_char( &amp;<br>
1137 + DataHandle &amp; ! DataHandle<br>
1138 + ,"stagger" &amp; ! Element<br>
1139 + ,Var &amp; ! Data Name<br>
1140 + ,Stagger &amp; ! Data<br>
1141 + ,Status )<br>
1142 + ENDIF<br>
1143 + <br>
1144 IF ( wrf_at_debug_level(300) ) THEN<br>
1145 WRITE(wrf_err_message,*) debug_message,' Status = ',Status<br>
1146 CALL wrf_message ( TRIM(wrf_err_message) )<br>
1147 <br>
1148 </td>
1149 </tr>
1150 </tbody>
1151 </table>
1152 <p>The 'Makefile' for the 'external' directory must be updated to build the new IO modules.<br>
1153 </p>
1154 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
1155 <tbody>
1156 <tr>
1157 <td valign="top">*** ../WRFV1/external/Makefile Mon Dec 10 18:07:21 2001<br>
1158 --- ./WRFV1-with-hdf/external/Makefile Thu May 13 12:18:38 2004<br>
1159 ***************<br>
1160 *** 3,12 ****<br>
1161 ( cd RSL/RSL ; make clean )<br>
1162 ( cd io_netcdf ; make clean )<br>
1163 ( cd io_int ; make clean )<br>
1164 <br>
1165 superclean : clean<br>
1166 /bin/rm -f RSL/RSL/librsl.a RSL/RSL/rsl.inc<br>
1167 /bin/rm -f io_netcdf/libwrfio_nf.a io_netcdf/diffwrf io_netcdf/*.o io_netcdf/*.f \<br>
1168 io_int/libwrfio_int.a io_int/diffwrf */*.mod<br>
1169 ! <br>
1170 ! <br>
1171 --- 3,14 ----<br>
1172 ( cd RSL/RSL ; make clean )<br>
1173 ( cd io_netcdf ; make clean )<br>
1174 ( cd io_int ; make clean )<br>
1175 + (cd io_hdf5; make clean)<br>
1176 + (cd io_phdf5; make clean)<br>
1177 <br>
1178 superclean : clean<br>
1179 /bin/rm -f RSL/RSL/librsl.a RSL/RSL/rsl.inc<br>
1180 /bin/rm -f io_netcdf/libwrfio_nf.a io_netcdf/diffwrf io_netcdf/*.o io_netcdf/*.f \<br>
1181 io_int/libwrfio_int.a io_int/diffwrf */*.mod<br>
1182 ! /bin/rm -f io_phdf5/*.a io_phdf5/*.o *.f *.mod<br>
1183 ! /bin/rm -f io_hdf5/*.a io_hdf5/*.o *.f *.mod<br>
1184 <br>
1185 <br>
1186 </td>
1187 </tr>
1188 </tbody>
1189 </table>
1192 <p><b><small>
1193 <font size="4"><small></small></font></small></b><br>
1194 </p>
1195 <p><i>Last Modified: 17 May 2004 </i></p>
1196 <blockquote>
1197 <blockquote>
1199 <p> </p>
1200 </blockquote>
1202 </blockquote>
1205 <br>
1206 <br>
1207 </body></html>