Compare commits

...

2 Commits

Author SHA1 Message Date
Kurt Stockinger 8a553aee0c Corrected version number 2007-08-29 02:31:57 +00:00
Kurt Stockinger 34ff957938 New tag with updates on H5Block. 2007-08-29 01:35:49 +00:00
115 changed files with 54741 additions and 1 deletions
+113
View File
@@ -59,6 +59,119 @@ tools/README -text
tools/h5pAttrib.cc -text
tools/h5pToGNUplot.cc -text
tools/homdynToH5p.cc -text
trunk/AUTHORS -text
trunk/COPYRIGHT -text
trunk/ChangeLog -text
trunk/GNUmakefile.orig -text
trunk/Makefile.am -text
trunk/Makefile.orig -text
trunk/NEWS -text
trunk/README -text
trunk/autogen.sh -text
trunk/config.guess -text
trunk/config.h.in -text
trunk/config.sub -text
trunk/configure.ac -text
trunk/depcomp -text
trunk/doc/Doxyfile -text
trunk/doc/H5X_File_Format.txt -text
trunk/doc/Makefile.am -text
trunk/doc/doxyfooter -text
trunk/install-sh -text
trunk/license.txt -text
trunk/missing -text
trunk/rules.make -text
trunk/src/H5Block.c -text
trunk/src/H5Block.h -text
trunk/src/H5BlockErrors.h -text
trunk/src/H5BlockF.c -text
trunk/src/H5BlockF90.inc -text
trunk/src/H5BlockPrivate.h -text
trunk/src/H5BlockTypes.h -text
trunk/src/H5Part.c -text
trunk/src/H5Part.h -text
trunk/src/H5PartErrors.h -text
trunk/src/H5PartF.c -text
trunk/src/H5PartF90.inc -text
trunk/src/H5PartPrivate.h -text
trunk/src/H5PartTypes.h -text
trunk/src/Makefile.am -text
trunk/src/TestUnderscore.f -text
trunk/src/TestUnderscoreC.c -text
trunk/test/Bench.c -text
trunk/test/BlockTestSpecs.txt -text
trunk/test/H5BlockDissolveGhosts.c -text
trunk/test/H5BlockParTestScalarField.c -text
trunk/test/H5BlockParTestScalarField.pbs -text
trunk/test/H5BlockParTestScalarFieldF.f90 -text
trunk/test/H5BlockTestAttributes.c -text
trunk/test/H5BlockTestAttributesF.f90 -text
trunk/test/H5ParallelTest.cc -text
trunk/test/H5PartAndreasTest.cc -text
trunk/test/H5PartTest.cc -text
trunk/test/H5PartTestParallel.cc -text
trunk/test/H5test.cc -text
trunk/test/H5testF.f -text
trunk/test/H5testFpar.f90 -text
trunk/test/Makefile.am -text
trunk/tools/Makefile.am -text
trunk/tools/README -text
trunk/tools/h5pAttrib.cc -text
trunk/tools/h5pToGNUplot.cc -text
trunk/tools/homdynToH5p.cc -text
trunk/visit_plugins/databases/H5Part/.depend -text
trunk/visit_plugins/databases/H5Part/Makefile -text
trunk/visit_plugins/databases/H5Part/README.txt -text
trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C -text
trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h -text
trunk/visit_plugins/databases/H5Part/h5part.xml -text
trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C -text
trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C -text
trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C -text
trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C -text
trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h -text
trunk/visit_plugins/operators/BinnerFilter/.depend -text
trunk/visit_plugins/operators/BinnerFilter/Binner.xml -text
trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h -text
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java -text
trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile -text
trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h -text
trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C -text
trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt -text
trunk/visit_plugins/operators/BinnerFilter/Makefile -text
trunk/visit_plugins/operators/BinnerFilter/PyBinner.C -text
trunk/visit_plugins/operators/BinnerFilter/PyBinner.h -text
trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C -text
trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h -text
trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C -text
trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h -text
trunk/visit_plugins/operators/BinnerFilter/icon.xpm -text
trunk/visit_plugins/operators/RandomSample/.depend -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C -text
trunk/visit_plugins/operators/RandomSample/Makefile -text
trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C -text
trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h -text
trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C -text
trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h -text
trunk/visit_plugins/operators/RandomSample/RandomSample.xml -text
trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C -text
trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h -text
trunk/visit_plugins/operators/RandomSample/icon.xpm -text
visit_plugins/databases/H5Part/.depend -text
visit_plugins/databases/H5Part/Makefile -text
visit_plugins/databases/H5Part/README.txt -text
+1 -1
View File
@@ -1,6 +1,6 @@
# Every configure script must call AC_INIT before doing anything else.
# AC_INIT (package, version, [bug-report], [tarname])
AC_INIT([H5Part], [1.3.3], [h5part@lists.psi.ch], H5Part)
AC_INIT([H5Part], [1.4.0], [h5part@lists.psi.ch], H5Part)
# Ensure that a recent enough version of Autoconf is being used.
+10
View File
@@ -0,0 +1,10 @@
Andreas Adelmann (PSI)
Achim Gsell (PSI)
Benedikt Oswald (PSI)
Wes Bethel (NERSC/LBNL)
John Shalf (NERSC/LBNL)
Cristina Siegerist (NERSC/LBNL)
Please use h5part@lists.psi.ch for communicaion.
+7
View File
@@ -0,0 +1,7 @@
*** Copyright Notice ***
H5Part Copyright (c) 2006, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy) and the Paul Scherrer Institut (Switzerland). All rights reserved.
If you have questions about your rights to use or distribute this software, please contact Berkeley Lab's Technology Transfer Department at TTD@lbl.gov referring to "H5Part (LBNL Ref CR-2255)"
NOTICE. This software was developed under partial funding from the U.S. Department of Energy. As such, the U.S. Government has been granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, and perform publicly and display publicly. Beginning five (5) years after the date permission to assert copyright is obtained from the U.S. Department of Energy, and subject to any subsequent five (5) year renewals, the U.S. Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so.
View File
+133
View File
@@ -0,0 +1,133 @@
UNAME := $(shell uname | perl -pe 's/(sn\d\d\d\d|jsimpson)/UNICOS\/mk/')
# for host specific options
HOST := $(shell hostname)
# for processor-specific options
ifeq ($(UNAME), Linux)
PROC := $(shell uname -p)
endif
CXX = c++
CC = cc
H5HOME = /usr/local/hdf5
CFLAGS = -g -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
# MacOS-X Serial
ifeq ($(UNAME), Darwin)
ifeq ($(PARALLEL), yes)
CXX = g++
CC = mpicc
H5HOME = /usr/local
CFLAGS = -O -g -I$(H5HOME)/include -DPARALLEL_IO
LDFLAGS = -L$(H5HOME)/lib -lmpich -lpmpich -lhdf5 -lz -lm
else
CXX = c++
CC = cc
F90 = xlf
H5HOME = /usr/local
CFLAGS = -O -g -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
endif
endif
# SGI MIPS/Irix
ifeq ($(UNAME), IRIX64)
CXX = CC
CC = cc
F90 = f90
ifeq ($(PARALLEL), yes)
H5HOME = $(HDF5_DIR)
CFLAGS = -64 -O3 -I$(H5HOME)/include -DPARALLEL_IO
LDFLAGS = -64 -O3 -L$(H5HOME)/lib -lhdf5 -lz -lmpi -lm
else
H5HOME = /usr/local
CFLAGS = -O3 -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
endif
endif
# AIX/SP-2 Parallel/serial : Seaborg
ifeq ($(UNAME), AIX)
ifeq ($(PARALLEL), yes) # parallel
CXX = mpCC_r
CC = mpxlc_r
# H5HOME = /usr/common/usg/hdf5_64/1.4.5-post2/parallel
H5HOME = /usr/common/usg/hdf5_64/1.6.1/parallel
# /usr/common/usg/hdf5/1.4.4/parallel
H4HOME = /usr/common/usg/hdf/default
OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot
CFLAGS = -q64 -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lsz -lm
else # serial
CXX = xlC
CC = xlc
H5HOME = /usr/common/usg/hdf5/1.4.4/serial
H4HOME = /usr/common/usg/hdf/default
OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot
CFLAGS = -g -bmaxdata:800000000 -bmaxstack:256000000 -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lm
endif
endif
# Linux
ifeq ($(UNAME), Linux)
# if this machine is NERSC/Davinci Altix system
ifeq ($(PROC), ia64)
CC = icc
CXX = icc
ifeq ($(PARALLEL), yes)
# IA64 Linux Parallel
ifeq ($(HOST), davinci)
H5HOME = $(HDF5_PAR)
MPILIB = -lmpi
else
H5HOME = /usr/local
HDF5_PAR_LIB = -L$(H5HOME)/lib -lhdf5 -lz -lm
HDF5_PAR_INCLUDE = -I$(H5HOME)/include
MPIHOME = /usr/local
MPILIB = -lmpich
endif # HOST
CFLAGS = -O3 -DPARALLEL_IO -DH5_HAVE_PARALLEL $(HDF5_PAR_INCLUDE)
LDFLAGS = $(HDF5_PAR_LIB) $(MPILIB)
else # IA64 Linux Serial
CFLAGS = -O3 $(HDF5_INCLUDE)
LDFLAGS = $(HDF5_LIB) -lm
endif # PARALLEL
# else this is standard IA32 linux
else
ifeq ($(PARALLEL), yes)
# Linux Parallel
CC = gcc
CXX = g++
H5HOME = /usr/local
MPIHOME = /usr/local
CFLAGS = -O -g -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lmpich -lrt -lz -lm
else # Linux Serial
CXX = g++
CC = gcc
CFLAGS = -O -g -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
endif # !PARALLEL
endif # PROC!ia64
endif # !Linux
ifeq ($(PARALLEL), yes) #parallel
ifdef F90
all: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest H5PartF.o
else
all: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest
endif
else
ifdef F90
all: H5PartTest H5PartTest.o H5Part.o H5PartF.o
else
all: H5PartTest H5PartTest.o H5Part.o
endif
endif
include rules.make
+15
View File
@@ -0,0 +1,15 @@
# Trial by Antino Kim
# Top level Makefile.am
SUBDIRS = \
doc \
src \
test \
tools
MAINTAINERCLEANFILES = \
config.h \
config.log \
config.status \
stamp-h.in \
stamp-h1
+59
View File
@@ -0,0 +1,59 @@
# This is a very rudimentary multiarchitecture makefile
# You need to uncomment the default block of make variables you need
# Some key things to watch for are the following defines
# -DREGRESSIONTEST : enables a main(){} inside of
# the H5Part.cc file that does simple regression testing.
# -DPARALLEL_IO : If you want to use parallel HDF5, you have to
# enable this. Otherwise, you get only the serial
# implementation of the library.
# MacOS-X Serial
#CXX = c++
#CC = cc
#F90 = xlf
#H5HOME = /usr/local
#CFLAGS = -O -g -I$(H5HOME)/include
#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
# AIX/SP-2 Parallel : Seaborg
#CXX = mpCC_r
#CC = mpcc_r
#F90 = mpxlf
#H5HOME = /usr/common/usg/hdf5/1.4.4/parallel
#H4HOME = /usr/common/usg/hdf/default
#OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot
#CFLAGS = -g -bmaxdata:800000000 -bmaxstack:256000000 -I$(H5HOME)/include
#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lm
# Linux Serial
#CXX = g++
#CC = gcc
#F90 = g77 # or could be pgif90
#CFLAGS = -O -g -I$(H5HOME)/include
#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
# Linux Jacquard
CC = mpicc
CXX = mpicxx
F90 = mpif90
H5HOME = /usr/common/usg/hdf5/1.6.3/parallel
CFLAGS = -O2 -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include
LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm
# Linux Parallel
#CC = gcc
#CXX = g++
#F90 = g77
#H5HOME = /usr/local
# /usr/common/usg/hdf5/1.6.3/parallel
#MPIHOME = /usr/local
#CFLAGS = -O -g -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include
#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lmpich -lrt -lz -lm
all: H5PartTest H5PartTest.o H5Part.o
parallel: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest # parallel regression tests
fortran: H5PartF.o # fortran bindings
include rules.make
+147
View File
@@ -0,0 +1,147 @@
Error Handling
--------------
Now all functions, in which an error could occure, are returning a
value. This value is either a 64bit integer or a pointer.
A negative 64bit integer as result indicates an error. Values >= 0
indicates successfull execution. This is similiar to the convention
used in UNIX system calls, but we do not return -1 but the error
number (which is always negative).
For functions returning a pointer the NULL-pointer is used to indicate
an error. You can call the function H5PartGetErrno() to get the error
number. For the time being there is no strerror(3) or perror(3)
equivalent.
API Changes
-----------
There are several changes in the API of H5Part. The biggest change is
a side-effect of the implementation of strict error handling. The
impact to the existing C/C++ code is very small. But now you *can*
and *should* implement some kind of error handling. The simplest
error handling is to set an error handler which aborts the program as
soon as an error occured.
The next "biggest" change is the use of H5Part types instead of "long
long" and "double". The replacement of "long long" is "h5part_int64_t"
and for "double" "h5part_float64_t". This change has now effect in
Fortran.
In some functions the argument type changed from "int" to
"h5part_int64_t". Since on most systems "int" is a 32bit integer,
calls to these functions must be adapted to the new API. In C/C++ the
compiler will complain about it. But in Fortran you will *not* get an
error message.So, you must check your Fortran code carefully.
Changes in detail (not listed are functions where only the return
type changed from any to "h5part_int64_t"):
New API Changes to old API
h5part_int64_t void
H5PartSetNumParticles (
H5PartFile *f,
h5part_int64_t nparticles long long
);
h5part_int64_t int
H5PartWriteDataFloat64 (
H5PartFile *f,
char *name,
h5part_float64_t *dta double
);
h5part_int64_t int
H5PartWriteDataInt64 (
H5PartFile *f,
char *name,
h5part_int64_t *dta long long
);
h5part_int64_t void
H5PartSetStep (
H5PartFile *f,
h5part_int64_t step int
);
h5part_int64_t void
H5PartSetView (
H5PartFile *f,
h5part_int64_t start, long long
h5part_int64_t end long long
);
h5part_int64_t int
H5PartGetView (
H5PartFile *f,
h5part_int64_t *start, long long
h5part_int64_t *end long long
);
h5part_int64_t int
H5PartReadDataFloat64 (
H5PartFile *f,
char *name,
h5part_float64_t *dta double
);
h5part_int64_t int
H5PartReadDataInt64 (
H5PartFile *f,
char *name,
h5part_int64_t *dta long long
);
h5part_int64_t void
H5PartReadParticleStep (
H5PartFile *f,
h5part_int64_t step, int
h5part_float64_t *x, double
h5part_float64_t *y, double
h5part_float64_t *z, double
h5part_float64_t *px, double
h5part_float64_t *py, double
h5part_float64_t *pz, double
h5part_int64_t *id long long
);
New functions:
h5part_int64_t
H5PartSetVerbosityLevel (
unsigned int
);
h5part_int64_t
H5PartSetErrorHandler (
h5part_error_handler handler
);
h5part_int64_t
H5PartGetErrno (
void
);
h5part_int64_t
H5PartDefaultErrorHandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
);
h5part_int64_t
H5PartAbortErrorHandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
);
Removed functions:
int
H5PartFileIsValid (
H5PartFile *f
);
+418
View File
@@ -0,0 +1,418 @@
==============================================================================
README file for H5Part configure
==============================================================================
+ 0. HDF5 library
-----------------
Make sure you have a working version of the HDF5 library in your computer. If you plan
to use parallel I/O you need to use a parallel HDF5 version. If you don't have the
library download the sources from http://hdf.ncsa.uiuc.edu/HDF5/
+ 1. Quick start (If you feel lucky...)
----------------------------------------
For many platforms, where compilers are installed in the "default" location
and all the environment variables are set correctly, it should be sufficient
to type:
./configure [OPTIONS] && make [install]
to have the libraries and test program compiled.
==============================================================================
+ 2. configure line options
----------------------------
(1) Enable options
--enable-fortran
--enable-parallel
--enable-tools
--enable-python
--enable-64 (only for AIX and Irix)
(2) Setting compilers related variables manually
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Compiler environment variables:
CC C compiler command
CXX C++ compiler command
FC Fortran compiler command
(3) Setting prefix for installation manually
--prefix=PREFIX install files in PREFIX
For more information, type:
./configure --help
==============================================================================
+ 3. Platform specific settings for compiling libraries & test programs
------------------------------------------------------------------------
Building
make : builds the libraries and test programs
make install: builds and installs
make clean : removes extraneous object files
make distclean : returns configuration to unconfigured state
As tested on hosts:
(1) Davinci <davinci.nersc.gov> (Linux"SUSE"-ia64)
---------------------------------------------------
FIRST THING FIRST!! Type:
module load intel
to have the proper compilers set up for use.
module load hdf5_par
[NOTE: module load hdf5 does not work at this moment.
Possible installation error of HDF5 on Davinci.]
Brief profile:
CC = icc
CXX = icc
FC = ifort
MPICC = icc
MPICXX = icc
MPIFC = ifort
If default doesn't work, try:
For C shell:
env CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure && make install
For Korn or Bourne shell:
CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure && make install
And, of course, you should add configure options, such as --enable-fortran --enable-parallel.
On this host, executing:
For C shell:
env CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure --enable-fortran --enable-parallel && make install
For Korn or Bourne shell:
CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure --enable-fortran --enable-parallel && make install
has functioned correctly.
To run test program, go to test directory:
(i) Serial test
run:
./H5testF
./H5PartTest
(ii) Parallel test
run:
mpirun 2 H5testFpar
mpirun 2 H5PartTestP
NOTE: Number 2 above is a arbitrary number that indicates the number of processes.
(2) Jacquard <jacquard.nersc.gov> (Linux"SUSE"-x86_64)
-------------------------------------------------------
Brief profile:
CC = pathcc
CXX = pathCC
FC = pathf90
MPICC = mpicc
MPICXX = mpicxx
MPIFC = mpif90
If default doesn't work, try:
For C shell:
env CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure && make install
For Korn or Bourne shell:
CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure && make install
And, of course, you should add configure options, such as --enable-fortran --enable-parallel.
On this host, executing:
For C shell:
env CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure --enable-fortran --enable-parallel && make install
For Korn or Bourne shell:
CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure --enable-fortran --enable-parallel && make install
has functioned correctly.
To run test program, go to test directory:
(i) Serial test
run:
./H5testF
./H5PartTest
(ii) Parallel test
In Jacquard, we need a script to run parallel programs, since Jacquard does not support interactive parallel processing. Instead, we need to submit the task to a queue. A sample script (run_H5testFpar.scr) may look like below:
+++++++++++++++++++++++++++++++++++++++
#!/bin/csh
#PBS -l nodes=1:ppn=2,walltime=00:05:00
#PBS -N H5testFpar
#PBS -o H5testFpar.out
#PBS -e H5testFpar.err
#PBS -q debug
#PBS -A mpccc
#PBS -V
setenv PBS_OWORKDIR /home/H5Part/test
cd $PBS_O_WORKDIR
mpirun -np 2 ./H5testFpar
+++++++++++++++++++++++++++++++++++++++
Then, we need to submit the task to a queue by running:
qsub run_H5testFpar.scr
After processed, the result will appear in H5testFpar.out, and error messages will appear in H5testFpar.err.
(3) Bassi <bassi.nersc.ogv> (AIX5.3.0.0-Power 3)
-------------------------------------------------
FIRST THING FIRST!! Type:
module load gcc
to have the proper compilers set up for use.
Brief profile:
CC = cc_r
CXX = cc_r
FC = xlf_r
MPICC = mpcc_r
MPICXX = mpcc_r
MPIFC = mpxlf_r
If default doesn't work, try:
For C shell:
env CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure && make install
For Korn or Bourne shell:
CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure && make install
And, of course, you should add configure options, such as --enable-fortran --enable-parallel.
On this host, executing:
For C shell:
env CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure --enable-fortran --enable-parallel && make install
For Korn or Bourne shell:
CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure --enable-fortran --enable-parallel && make install
has functioned correctly.
To run test program, go to test directory:
(i) Serial test
run:
./H5testF
./H5PartTest
(ii) Parallel test
run:
unsetenv MP_SINGLE_THREAD
poe ./H5PartTestP -procs 2 -nodes 1
poe ./H5testFpar -procs 2 -nodes 1
For more details on how to run parallel programs on Bassi, go to:
http://www.nersc.gov/nusers/resources/bassi/running_jobs/
(4) Starsky <starsky.lbl.gov> (Darwin8.5.0-PowerPC)
----------------------------------------------------
FIRST THING FIRST!! Set environment variables: (in tcsh)
setenv LD_LIBRARY_PATH /usr/local/g95/lib/gcc-lib/powerpc-apple-darwin8.5.0/4.0.3/
setenv PATH ${PATH}:/usr/local/g95/bin
NOTE: This environment variable setting is specifit to Starsky. It is to make configure find the fortran compiler.
Brief profile:
CC = gcc
CXX = g++
FC = g95
If default doesn't work, try:
For C shell:
env CC=gcc CXX=g++ FC=g95 ./configure && make install
For Korn or Bourne shell:
CC=gcc CXX=g++ FC=g95 ./configure && make install
And, of course, you should add configure options, such as --enable-fortran --enable-parallel.
On this host, executing:
For C shell:
env CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install
For Korn or Bourne shell:
CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install
has functioned correctly.
To run test program, go to test directory:
(i) Serial test
run:
./H5testF
./H5PartTest
(5) Linux AMD64 Visualization group workstations (Linux"SUSE"-x86_64)
---------------------------------------------------------
Brief profile:
CC = gcc
CXX = g++
FC = g95
If default doesn't work, try:
For C shell:
env CC=gcc CXX=g++ FC=g95 ./configure && make install
For Korn or Bourne shell:
CC=gcc CXX=g++ FC=g95 ./configure && make install
And, of course, you should add configure options, such as --enable-fortran --enable-parallel.
On this host, executing:
For C shell:
env CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install
For Korn or Bourne shell:
CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install
has functioned correctly.
To run test program, go to test directory:
(i) Serial test
run:
./H5testF
./H5PartTest
(6) Cray XT3 @ CSCS gele
1) modules/3.1.6 9) PrgEnv-pgi/1.4.26 17) xt-lustre-ss/1.4.26
2) MySQL/4.0.26 10) xt-pbs/5.3.4 18) Base-opts/1.4.26
3) acml/3.0 11) xt-service/1.4.26 19) subversion/1.3.2
4) pgi/6.1.4 12) xt-libc/1.4.26 20) zlib/1.2.3
5) totalview/7.2.0 13) xt-os/1.4.26 21) szip/2.0
6) xt-libsci/1.4.26 14) xt-catamount/1.4.26 22) hdf5/1.6.5
7) xt-mpt/1.4.26 15) xt-boot/1.4.26
8) xt-pe/1.4.26 16) xt-crms/1.4.26
CFLAGS="-I$H5HOME/include -DF77_SINGLE_UNDERSCORE" LDFLAGS="-L$H5HOME/lib -L$ZHOME/lib" ./configure --enable-parallel --enable-fortran
(7) merlin00 / merlin3
Currently Loaded Modulefiles:
1) hdf5/hdf5-1.6.5 2) root/root-5.10.00 3) mpi/mpich2-1.0.3-pgi-6.1 4) pgi/pgi_64-6.1
FC=mpif90 ./configure --enable-parallel --enable-fortran
==============================================================================
+ 4. Trouble shooting (Things to check for...)
--------------------------------------------
(0) Have you set the LD_LIBRARY_PATH?
---Some systems require the user to manually set the environment variable, LD_LIBRARY_PATH. To do so:
set the environment variable HDF5ROOT or PHDF5ROOT to point to your installation of HDF5 (serial and/or parallel respectively).
For Korn or Bourne shell:
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HDF5ROOT}/lib;export LD_LIBRARY_PATH
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:{PHDF5ROOT}/lib;export LD_LIBRARY_PATH
For C shell:
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HDF5ROOT}/lib
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${PHDF5ROOT}/lib
Note that the values of HDF5ROOT & PHDF5ROOT will be in the "summary" section when you run configure.
Not properly set LD_LIBRARY_PATH value may result in a runtime error:
./H5PartTest: error while loading shared libraries: libhdf5.so.0: cannot open shared object file: No such file or directory
(1) Are the compilers set correctly?
---Check with: which COMPILER
(2) Have you installed HDF5?
---You can get it at: http://vis.lbl.gov/Research/AcceleratorSAPP/index.html
(3) Have you loaded the proper modules?
---It is necessary in Davinci & Bassi, and configure && make install may not work without it.
+46
View File
@@ -0,0 +1,46 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
echo "+ making misc files ..."
touch NEWS README AUTHORS ChangeLog
echo
echo
echo
echo "+ running aclocal ..."
aclocal $ACLOCAL_FLAGS || {
echo
echo "aclocal failed - check that all needed development files are present on system"
exit 1
}
echo
echo
echo
echo
echo "+ running autoheader ... "
autoheader || {
echo
echo "autoheader failed"
exit 1
}
echo
echo
echo
echo "+ running autoconf ... "
autoconf || {
echo
echo "autoconf failed"
exit 1
}
echo
echo
echo
echo "+ running automake ... "
automake -a -c --foreign || {
echo
echo "automake failed"
exit 1
}
echo
echo
echo
Vendored Executable
+1469
View File
File diff suppressed because it is too large Load Diff
+44
View File
@@ -0,0 +1,44 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* "" */
#undef MY_BUILD_CPU
/* "" */
#undef MY_BUILD_OS
/* "" */
#undef MY_BUILD_VENDOR
/* "" */
#undef MY_GNUNAME
/* "" */
#undef MY_UNAME
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Version number of package */
#undef VERSION
/* Define to 1 if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
Vendored Executable
+1563
View File
File diff suppressed because it is too large Load Diff
+607
View File
@@ -0,0 +1,607 @@
# Every configure script must call AC_INIT before doing anything else.
# AC_INIT (package, version, [bug-report], [tarname])
AC_INIT([H5Part], [1.3.3], [h5part@lists.psi.ch], H5Part)
# Ensure that a recent enough version of Autoconf is being used.
# If the version of Autoconf being used to create configure is earlier than version,
# print an error message to the standard error output and do not create configure.
#AC_PREREQ(2.59)
# should be called right after AC_INIT.
# configure scripts can create a C header file containing `#define' directives.
# The AC_CONFIG_HEADERS macro selects this kind of output.
AC_CONFIG_HEADER(config.h)
###############################################################################
################# --enable-xxx and --with-xxx Argument ########################
###############################################################################
AC_ARG_ENABLE(
[64],
[AC_HELP_STRING([--enable-64],
[Compile using 64-bit flags [default=no]])],
[USE_64=$enableval])
AC_ARG_ENABLE(
[fortran],
[AC_HELP_STRING([--enable-fortran],
[Compile the Fortran interface [default=no]])],
[USE_FORTRAN=$enableval])
AC_ARG_ENABLE(
[parallel],
[AC_HELP_STRING([--enable-parallel],
[Compile the MPI/IO interface [default=no]])],
[USE_PARALLEL=$enableval])
AC_ARG_ENABLE(
[tools],
[AC_HELP_STRING([--enable-tools],
[Compile h5part tools [default=no]])],
[USE_TOOLS=$enableval])
AC_ARG_WITH(
[mpipath],
[AC_HELP_STRING([--with-mpipath],
[path to MPI installation [default=""]])],
[MPIPATH=$withval], [MPIPATH=""])
AC_ARG_WITH(
[hdf5path],
[AC_HELP_STRING([--with-hdf5path],
[path to HDF5 installation [default=""]])],
[HDF5PATH=$withval], [HDF5PATH=""])
###############################################################################
################# A SIMPLE WORK AROUND TO USE ENV. VARS #######################
###############################################################################
SAVE_CC=$CC
SAVE_CXX=$CXX
SAVE_FC=$FC
SAVE_MPICC=$MPICC
SAVE_MPICXX=$MPICXX
SAVE_MPIFC=$MPIFC
SAVE_MPILIB=$MPILIB
SAVE_MPIINC=$MPIINC
SAVE_CFLAGS=$CFLAGS
CFLAGS=''
SAVE_FFLAGS=$FFLAGS
SAVE_MPIROOT=$MPIROOT
SAVE_HDF5ROOT=$HDF5ROOT
SAVE_LDFLAGS=$LDFLAGS
###############################################################################
############### PATH SERACH FUNCTION - to be used later... ####################
###############################################################################
# /*@@
# @routine CCTK_Search
# @date Wed Jul 21 11:16:35 1999
# @author Tom Goodale
# @desc
# Used to search for something in various directories
# @enddesc
#@@*/
PATH_Search()
{
eval $1=""
if test $# -lt 4 ; then
h5part_basedir=""
else
h5part_basedir="$4/"
fi
for h5part_place in $2
do
echo -n "looking in $h5part_place ... $ac_c" #1>&6
if test -r "$h5part_basedir$h5part_place/$3" ; then
echo "$ac_t"" found" #1>&6
eval $1="$h5part_place"
break
fi
if test -d "$h5part_basedir$h5part_place/$3" ; then
echo "$ac_t"" found" #1>&6
eval $1="$h5part_place"
break
fi
echo "$ac_t"" no" #1>&6
done
return
}
###############################################################################
############# MISC SETTINGS INCLUDING C & C++ COMPILER SETTING ################
###############################################################################
# Compute the canonical host-system type variable, host, and its three
# individual parts host_cpu, host_vendor, and host_os.
AC_CANONICAL_HOST
uname=`uname -s`
if test $uname = "AIX"; then
AC_MSG_CHECKING([if system is AIX])
AC_MSG_RESULT([OK])
# If on AIX, define _ALL_SOURCE. Allows the use of some BSD functions.
# Should be called before any macros that run the C compiler.
AC_AIX
fi
# DAVINCI SPECIFIC!!!
if test `uname -n` = "davinci"; then
echo "DAVINCI SPECIFIC TESTING FOR STDC++ LIBRARY!"
PATH_Search STDCXX_CHECK '/usr/lib64 /usr/lib' libstdc++.a
# if STDCXX_CHECK is set...
if test "$STDCXX_CHECK" = "/usr/lib64"; then
echo "STDCXX setting ..."
echo "STDCXX_CHECK = $STDCXX_CHECK ..."
STDCXX="-L/usr/lib64 -lstdc++"
echo "STDCXX = $STDCXX ..."
elif test "$STDCXX_CHECK" = "/usr/lib"; then
echo "STDCXX setting ..."
echo "STDCXX_CHECK = $STDCXX_CHECK ..."
STDCXX="-L/usr/lib -lstdc++"
echo "STDCXX = $STDCXX ..."
fi
fi
# Determine a C compiler to use.
# If CC is not already set in the environment, check for gcc and cc, then
# for other C compilers.
# Set output variable CC to the name of the compiler found.
AC_PROG_CC(pathcc icc cc_r gcc cc)
# AC_PROG_CC doesn't pick up cc_r in Bassi. The following AC_PATH_PROGS
# is the fix.
AC_PATH_PROGS([BAS_CC], [cc_r], [], [$PATH])
# if BAS_CC not empty
if test -n "$BAS_CC"; then
echo "CC setting for Bassi ..."
CC=$BAS_CC
echo "CC = $CC ..."
fi
# Determine a C++ compiler to use.
# Check if the environment variable CXX or CCC (in that order) is set;
# if so, then set output variable CXX to its value.
# Otherwise, if the macro is invoked without an argument,
# then search for a C++ compiler under the likely names (first g++ and c++
# then other names).
# If none of those checks succeed, then as a last resort set CXX to g++.
AC_PROG_CXX(pathCC icc cc_r g++ gcc cc)
# Set output variable INSTALL to the path of a BSD-compatible install program,
# if one is found in the current PATH.
# Otherwise, set INSTALL to `dir/install-sh -c`
AC_PROG_INSTALL
# AM_INIT_AUTOMAKE is required to use autoconf with automake
AM_INIT_AUTOMAKE()
AC_PROG_RANLIB
# Default prefix for bindir, etc... (eg >> ./build/bin)
AC_PREFIX_DEFAULT(`pwd`/build)
# AC_DEFINE_UNQUOTED (variable, value, [description])
# Define the C preprocessor variable variable to value
# Use this macro instead of AC_DEFINE when variable or value is a shell variable.
AC_DEFINE_UNQUOTED(MY_BUILD_VENDOR, "$host_vendor", "")
AC_DEFINE_UNQUOTED(MY_BUILD_CPU, "$host_cpu", "")
AC_DEFINE_UNQUOTED(MY_BUILD_OS, "$host_os", "")
AC_DEFINE_UNQUOTED(MY_GNUNAME, "${host_cpu}-${host_vendor}-${host_os}", "")
AC_DEFINE_UNQUOTED(MY_UNAME, "$uname", "")
###############################################################################
######################## CONFIGURE LINE OPTIONS ###############################
###############################################################################
###################### 64-bit compilation enabled #############################
AC_MSG_CHECKING([if 64-bit compilation is enabled])
# If --enable-64 is set in the configure line
if test "X$USE_64" = "Xyes"; then
AC_MSG_RESULT([yes])
if test $uname = "AIX"; then
CFLAGS="$CFLAGS -q64"
FFLAGS="$FFLAGS -q64"
fi
if test $uname = "IRIX64"; then
CFLAGS="$CFLAGS -64"
FFLAGS="$FFLAGS -64 -fPIC -fno-second-underscore"
fi
else
AC_MSG_RESULT([no])
fi
############################ fortran enabled ##################################
AC_MSG_CHECKING([if fortran interface enabled])
if test "X$USE_FORTRAN" = "Xyes"; then
AC_MSG_RESULT([yes])
AC_PROG_FC(ifort xlf_r pathf90 g95 g90 ftn gfortran)
if test -z "$FC" ; then
AC_MSG_ERROR([Cannot find a fortran compiler!!!])
exit 1
fi
if test ! $uname = "AIX"; then
FFLAGS="${FFLAGS} -fPIC -fno-second-underscore"
fi
AC_MSG_CHECKING([symbol convention in object files])
`cd src && rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore`
`cd src && ${FC} ${FFLAGS} -c TestUnderscore.f`
`cd src && ${CC} ${CFLAGS} -c TestUnderscoreC.c`
`cd src && ${FC} ${FFLAGS} -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lc`
if test -f src/TestUnderscore ; then
UNDERSCORE_H=Underscore.h
`cd src && ./TestUnderscore > Underscore.h`
AC_MSG_RESULT([ok])
else
AC_MSG_RESULT([nok])
AC_MSG_ERROR([Cannot build fortran executables!!!])
exit 1
fi
else
AC_MSG_RESULT([no])
fi
######################## parallel interface enabled ###########################
AC_MSG_CHECKING([if parallel interface enabled])
if test "X$USE_PARALLEL" = "Xyes"; then
AC_MSG_RESULT([yes])
CFLAGS="${CFLAGS} -DPARALLEL_IO -DH5_HAVE_PARALLEL -DMPICH_IGNORE_CXX_SEEK"
AC_MSG_CHECKING([if we can compile MPI code without setting flags])
AC_TRY_LINK([#include "mpi.h"], [
MPI_Comm comm;
int n;
MPI_Comm_size( comm, &n ); ],
[echo 'yes'; r='yes'], [echo "no"; r='no'] )
if test "X$r" = "Xno"; then
AC_PATH_PROGS([MPICC], [mpicc mpcc_r], [], [$PATH])
AC_PATH_PROGS([MPICXX], [mpicxx mpcc_r], [], [$PATH])
if test -z "$MPICC" -o -z "$MPICXX"; then
AC_MSG_CHECKING([for MPI root ])
AC_MSG_RESULT([])
if test -n "$MPIROOT"; then
P=${MPIROOT}
elif test -n "$MPIHOME"; then
P=${MPIHOME}
elif test -n "$MPIPATH"; then
P=${MPIPATH}
else
P=''
P="$P /usr"
P="$P /usr/local"
P="$P /usr/local/mpi"
P="$P /usr/local/packages/mpi"
P="$P /usr/local/mpich2"
P="$P /usr/local/mpich"
P="$P /opt/xt-mpt/default/mpich2-64/P2"
fi
PATH_Search MPIROOT "$P" include/mpi.h
if test ! -n "$MPIROOT"; then
AC_MSG_ERROR([Cannot determine MPI root!!!])
exit 1
fi
if test -e "${MPIROOT}/bin/mpicc"; then
MPICC=${MPIROOT}/bin/mpicc
fi
if test -e "${MPIROOT}/bin/mpicxx"; then
MPICXX=${MPIROOT}/bin/mpicxx
fi
fi
if test -z "$MPICC" -o -z "$MPICXX"; then
MPIINC="${MPIINC} -I${MPIROOT}/include"
FFLAGS="${FFLAGS} -I${MPIROOT}/include"
AC_MSG_CHECKING([for name of MPI lib ])
if test -e ${MPIROOT}/lib/libmpi.a; then
MPILIB="-L${MPIROOT}/lib -lmpi"
elif test -e ${MPIROOT}/lib/libmpi.so; then
MPILIB="-L${MPIROOT}/lib -lmpi"
elif test -e ${MPIROOT}/lib/libmpich.a; then
MPILIB="-L${MPIROOT}/lib -lmpich"
elif test -e ${MPIROOT}/lib/libmpich.so; then
MPILIB="-L${MPIROOT}/lib -lmpich"
else
AC_MSG_RESULT([not found])
exit 1
fi
AC_MSG_RESULT([${MPILIB}])
fi
if test -n "$MPICC"; then
CC=${MPICC}
fi
if test -n "$MPICXX"; then
CXX=${MPICXX}
fi
fi
MTARGET="libpH5Part.a"
TTARGET="H5PartTestP H5PartAndreasTest Bench"
TTARGET="${TTARGET} H5BlockTestAttributes"
TTARGET="${TTARGET} H5BlockParTestScalarField"
# parallel + fortran
if test "X$USE_FORTRAN" = "Xyes"; then
AC_PATH_PROGS([MPIFC], [mpxlf_r mpif90], [], [$PATH])
if test -z "${MPIFC}" ; then
if test -e "${MPIROOT}/bin/mpif90"; then
MPIFC=${MPIROOT}/bin/mpif90
fi
fi
# if MPIFC empty
if test ! -n "$MPIFC"; then
AC_MSG_CHECKING([ No MPIFC detected. Setting MPIFC to FC.])
MPIFC=$FC
echo "MPIFC = $MPIFC ..."
fi
if test -n "$MPIFC"; then
FC=${MPIFC}
fi
MTARGET="${MTARGET} libpH5PartF.a"
TTARGET="${TTARGET} H5testFpar"
TTARGET="${TTARGET} H5BlockParTestScalarFieldF"
fi
else # --enable-parallel=no
AC_MSG_RESULT([no])
MTARGET="libH5Part.a"
TTARGET="H5PartTest H5test"
TTARGET="${TTARGET} H5BlockTestAttributes"
if test "X$USE_FORTRAN" = "Xyes"; then
MTARGET="${MTARGET} libH5PartF.a"
TTARGET="${TTARGET} H5testF"
TTARGET="${TTARGET} H5BlockTestAttributesF"
fi
fi
AC_MSG_CHECKING([wheter tools are enabled])
if test "X$USE_TOOLS" = "Xyes"; then
AC_MSG_RESULT([yes])
BUILD_TOOLS="h5pAttrib h5pToGNUplot # homdynToH5p"
else
AC_MSG_RESULT([no])
fi
###############################################################################
######################### PATH CHECKING & SETTING #############################
###############################################################################
AC_MSG_CHECKING([for HDF5 root ])
AC_MSG_RESULT([])
if test -n "${HDF5ROOT}"; then
P=${HDF5ROOT}
elif test -n "${HDF5HOME}" ; then
P=${HDF5HOME}
elif test -n "${HDF5PATH}" ; then
P=${HDF5PATH}
else
P=''
P="$P /usr"
P="$P /usr/local"
P="$P /usr/local/hdf5"
P="$P /usr/local/packages/hdf5"
P="$P /apps/hdf5"
if test "X$USE_PARALLEL" = "Xyes"; then
P="$P /usr/local/phdf5"
P="$P /usr/local/hdf5/hdf5_par"
if test "X$USE_64" = "Xyes"; then
P="$P /usr/common/usg/hdf5/64/default/parallel"
else
P="$P /usr/common/usg/hdf5/32/default/parallel"
fi
else
P="$P /usr/local/hdf5/hdf5_serial"
if test "X$USE_64" = "Xyes"; then
P="$P /usr/common/usg/hdf5/64/default/serial"
else
P="$P /usr/common/usg/hdf5/32/default/serial"
fi
fi
fi
PATH_Search HDF5ROOT "$P" include/hdf5.h
if test -z "$HDF5ROOT"; then
AC_MSG_ERROR([Cannot determine HDF5 root!!!])
exit 1
fi
AC_MSG_CHECKING([if we need to link to libsz ])
if test -n "$HDF5ROOT"; then
if test -f $HDF5ROOT/lib/libsz.a; then
AC_MSG_RESULT([yes])
SZLIB="-L$HDF5ROOT/lib/ -lsz"
else
AC_MSG_RESULT([no])
SZLIB=""
fi
fi
AC_MSG_CHECKING([for static zlib root ])
echo
PATH_Search ZLIBROOT '/apps/zlib' lib/libz.a
if test -n "$ZLIBROOT"; then
LDFLAGS="$LDFLAGS -L$ZLIBROOT/lib"
fi
###############################################################################
#################### MISC SETTINGS - path, flags, etc #########################
###############################################################################
H5P_LIB_LOC=`pwd`/src
###############################################################################
################# A SIMPLE WORK AROUND TO USE ENV. VARS #######################
###############################################################################
#if there was an external input for the variable...
if test -n "$SAVE_CC"; then
CC=$SAVE_CC
fi
if test -n "$SAVE_CXX"; then
CXX=$SAVE_CXX
fi
if test -n "$SAVE_FC"; then
FC=$SAVE_FC
fi
if test -n "$SAVE_MPICC"; then
MPICC=$SAVE_MPICC
fi
if test -n "$SAVE_MPICXX"; then
MPICXX=$SAVE_MPICXX
fi
if test -n "$SAVE_MPIFC"; then
MPIFC=$SAVE_MPIFC
fi
if test -n "$SAVE_MPILIB"; then
MPILIB=$SAVE_MPILIB
fi
if test -n "$SAVE_MPIINC"; then
MPIINC=$SAVE_MPIINC
fi
if test -n "$SAVE_CFLAGS"; then
CFLAGS="$SAVE_CFLAGS ${CFLAGS}"
fi
if test -n "$SAVE_FFLAGS"; then
FFLAGS=$SAVE_FFLAGS
fi
if test -n "$SAVE_MPIROOT"; then
MPIROOT=$SAVE_MPIROOT
fi
if test -n "$SAVE_HDF5ROOT"; then
HDF5ROOT=$SAVE_HDF5ROOT
fi
if test -n "$SAVE_LDFLAGS"; then
LDFLAGS=$SAVE_LDFLAGS
fi
if test -n "$MPICXX"; then
TOOLS_CXX=$MPICXX
TOOLS_H5PART_LIB="-lpH5Part"
TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5"
else
TOOLS_CXX=$CXX
TOOLS_H5PART_LIB="-lH5Part"
TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5"
fi
###############################################################################
############## EXPORTING VARIABLES & CREATING OUTPUT FILES ####################
###############################################################################
# AC_SUBST (variable, [value])
# Create an output variable from a shell variable.
# Make AC_OUTPUT substitute the variable variable into output files (typically one or more `Makefile's).
# This means that AC_OUTPUT will replace instances of `@variable@' in input files with the value that
# the shell variable variable has when AC_OUTPUT is called.
# This value of variable should not contain literal newlines.
# If value is given, in addition assign it to variable.
AC_SUBST(MPIROOT)
AC_SUBST(HDF5ROOT)
AC_SUBST(MPIINC)
AC_SUBST(MPILIB)
AC_SUBST(MPICC)
AC_SUBST(MPICXX)
AC_SUBST(MPIFC)
AC_SUBST(MTARGET)
AC_SUBST(TTARGET)
AC_SUBST(SZLIB)
AC_SUBST(CFLAGS)
AC_SUBST(FFLAGS)
AC_SUBST(STDCXX)
AC_SUBST(H5P_LIB_LOC)
AC_SUBST(UNDERSCORE_H)
AC_SUBST(BUILD_TOOLS)
AC_SUBST(LDFLAGS)
AC_SUBST(TOOLS_CXX)
AC_SUBST(TOOLS_H5PART_LIB)
AC_SUBST(TOOLS_HDFLIB)
# Make AC_OUTPUT create each `file' by copying an input file (by default `file.in'),
# substituting the output variable values.
AC_CONFIG_FILES([
Makefile
doc/Makefile
src/Makefile
test/Makefile
tools/Makefile
])
AC_OUTPUT
###############################################################################
########################## PRINTING SUMMARY ###################################
###############################################################################
echo
echo
echo "Summary for `(hostname || uname -n) 2>/dev/null | sed 1q`:"
echo
echo "Host OS: $host_os"
echo "Host CPU: $host_cpu"
echo "Host vendor: $host_vendor"
echo "Build libraries: $MTARGET"
echo "Build test programs: $TTARGET"
echo "Build tools: $BUILD_TOOLS"
echo "CC = $CC"
echo "CXX = $CXX"
echo "FC = $FC"
echo "MPICC = $MPICC"
echo "MPICXX = $MPICXX"
echo "MPIFC = $MPIFC"
echo "CFLAGS = $CFLAGS"
echo "FFLAGS = $FFLAGS"
echo "MPILIB = $MPILIB"
echo "MPIINC = $MPIINC"
echo "MPIROOT = $MPIROOT"
echo "HDF5ROOT = $HDF5ROOT"
echo "LDFLAGS = $LDFLAGS"
echo
Executable
+529
View File
@@ -0,0 +1,529 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2005-02-09.22
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mecanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
+234
View File
@@ -0,0 +1,234 @@
# Doxyfile 1.4.5
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = H5Part
PROJECT_NUMBER = 1.3.3
OUTPUT_DIRECTORY = ./ReferencePages
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = ../src
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = NO
SHOW_DIRECTORIES = YES
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT += ../src/H5Part.c
INPUT += ../src/H5Block.c
FILE_PATTERNS =
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
USE_HTAGS = NO
VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = .
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER = doxyfooter
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = no
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES = YES
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = NO
INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH = /Applications/Graphviz.app/Contents/MacOS
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO
+170
View File
@@ -0,0 +1,170 @@
Proposal for a more general file format used by H5Part/H5Block
Authors: Achim Gsell
Status: Draft
1. Introduction
H5X is the file format used by H5Part and H5Block. H5X is designed on
top of HDF5: A H5X file is a very special HDF5 file.
+--------------------+
| Application |
+--------------------+
| H5Part/H5Block API |
+--------------------+
| H5X API |
+--------------------+
| HDF5 API |
+--------------------+
| Filesystem of OS |
+--------------------+
2. H5X file format specification
2.1 The root group
2.1.1 File attributes
Attributes of the HDF5 root group are called "file attributes". There
are no restrictions on file attribute names. Names with "__" as prefix and
postfix are intended for internal use. Supported values for file attributes
are scalars and arrays of 64bit integer and 64bit floating point number as
well as string values. Arrays of strings are not supported.
2.1.1.1 Predefined file attributes
__stepname__ (optional)
See below.
__stepnumwidth__ (optional)
See below.
2.1.2 Members of the root group
Members of the root group are special formated HDF5 groups called
"step groups". The name of a step group is "<name>#<number>".
Whereby <name> is either defined by the optional file attribute
__stepname__ or set to "Step" by default. <number> is an
unsigned integer less than 2^63.
/
+- Step#0
+- Step#1
...
+- Step#n
+- StepProperties [NEW]
+- Mesh [NEW]
The optional file attribute __stepnumwidth__ defines the minimum width
of <number> in the name of the step group. The number is padded with
'0'. The minimum width defaults to zero, so that no paddings occurs.
Example: With __stepnumwidth__ := 5 the name of the step group with
number 42 is "Step#00042", with __stepnumwidth__ := 0 the name is
"Step#42".
Step groups may be unsorted in the HDF5 file und needn't be number
consecutively.
2.1.3 Other members of the root group
Other sub-groups of the root group are allowed, but the group names are restricted
to names not matching "Step#.*".
2.2 Format of a step group
2.2.1 Step attributes
Step attributes are HDF5 attributes asigned to a step group. There
are no restrictions on step attribute names. As with file attributes names
enclosed in "__" are intended for internal use. Supported values are the same
as for file attributes:
* 64bit integer value
* arrays of 64bit integer values
* 64bit floating point number
* array of 64bit floating point number
* strings
Note that array of strings are not supported!
2.2.2 Predefined step attributes
No predefined step attributes exists.
2.2.3 Members of a step group
Members of a step group are HDF5 datasets and optional one HDF5 group
with the name "Block". HDF5 datasets in a step group are called "step
datasets". The optional block group is called "block data".
Mesh?!
2.2.4 Step datasets
Step datasets are arrays of rank 1. The dataset size must be the same
for all datasets inside a step. The size of the dataset may vary
from step to step. Array values are 64bit integer or 64bit floating
point numbers. No limitations (other than given by HDF5) are given on
step dataset names.
2.2.5 Block Data
The block data group is a container for an arbitrary number of field
data. A field is a data structure to store arrays of rank m with
n-dimensional vector values. Fields are represented within HDF5
groups. The HDF5 group name is the unique identifier for a field in
the current step.
2.2.5.1 m-rank fields with n-dimensional-vector values
Values are stored per dimension in separate datasets. Thus we have n
datasets for a field with n-dimensional vector values. Each dataset
corresponse to one dimension. The datasets are numbered from '0' to
'n-1'. Arrays are stored in column major order (Fortran indexing
scheme).
/ # HDF5 root group
...
+- Step#<i> # HDF5 group
|
+- Block # HDF5 group
|
+- <field name> # HDF5 group
|
+- 0 # HDF5 dataset, first dim of vector
+- 1 # HDF5 dataset, second dim of vector
...
+- n-1 # HDF5 dataset, last dim of vector
...
2.2.5.2 m-rank fields with scalar values
Fields with scalar values are stored as special case of fields with
n-dimensional vector values with n := 1.
/ # HDF5 root group
...
+- Step#<i> # HDF5 group
|
+- Block # HDF5 group
|
+- <field name> # HDF5 group
|
+- 0 # HDF5 dataset, scalar value
...
2.3 Step properties [NEW]
Why? Much faster than step attributes if you need to access consecutive values
Group of root group with name "StepProperties"
Members are datasets
Supported values are the same as for step attributes
Mapping of value to step via object index of step group
+2
View File
@@ -0,0 +1,2 @@
EXTRA_DIST = \
Doxyfile doxyfooter
+2
View File
@@ -0,0 +1,2 @@
</BODY>
</HTML>
+323
View File
@@ -0,0 +1,323 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2005-02-02.21
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
chmodcmd="$chmodprog 0755"
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
-c (ignored)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-c) shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit $?;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t) dstarg=$2
shift
shift
continue;;
-T) no_target_directory=true
shift
continue;;
--version) echo "$0 $scriptversion"; exit $?;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
src=
if test -d "$dst"; then
mkdircmd=:
chmodcmd=
else
mkdircmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dst=$dst/`basename "$src"`
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
shift
IFS=$oIFS
pathcomp=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp"
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test -d "$pathcomp" || exit
fi
pathcomp=$pathcomp/
done
fi
if test -n "$dir_arg"; then
$doit $mkdircmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else
dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name.
$doit $cpprog "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|| {
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit 1
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
}
}
fi || { (exit 1); exit 1; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit 0
}
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
+17
View File
@@ -0,0 +1,17 @@
*** License agreement ***
H5Part Copyright (c) 2006, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy) and the Paul Scherrer Institut (Switzerland). All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
(1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
(2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
(3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, U.S. Dept. of Energy, Paul Scherrer Institut (Switzerland) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to Lawrence Berkeley National Laboratory, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such enhancements or derivative works thereof, in binary and source code form.
*****
Executable
+357
View File
@@ -0,0 +1,357 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
scriptversion=2005-02-08.22
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
fi
run=:
# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
configure_ac=configure.ac
else
configure_ac=configure.in
fi
msg="missing on your system"
case "$1" in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
# Exit code 63 means version mismatch. This often happens
# when the user try to use an ancient version of a tool on
# a file that requires a minimum version. In this case we
# we should proceed has if the program had been absent, or
# if --run hadn't been passed.
if test $? = 63; then
run=:
msg="probably too old"
fi
;;
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
--run try to run the given command, and emulate it if it fails
Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
help2man touch the output file
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
tar try tar, gnutar, gtar, then tar without non-portable flags
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to <bug-automake@gnu.org>."
exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit $?
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
esac
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
lex|yacc)
# Not GNU programs, they don't have --version.
;;
tar)
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
exit 1
fi
;;
*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
# Could not run --version or --help. This is probably someone
# running `$TOOL --version' or `$TOOL --help' to check whether
# $TOOL exists and not knowing $TOOL uses missing.
exit 1
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
aclocal*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`${configure_ac}'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acconfig.h' or \`${configure_ac}'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case "$f" in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
esac
done
touch $touch_files
;;
automake*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
while read f; do touch "$f"; done
;;
autom4te)
echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
You might have modified some files without having the
proper tools for further handling them.
You can get \`$1' as part of \`Autoconf' from any GNU
archive site."
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
echo "#! /bin/sh"
echo "# Created by GNU Automake missing as a replacement of"
echo "# $ $@"
echo "exit 0"
chmod +x $file
exit 1
fi
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' $msg. You should only need it if
you modified a \`.y' file. You may need the \`Bison' package
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex|flex)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.l' file. You may need the \`Flex' package
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
\`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
fi
if [ -f "$file" ]; then
touch $file
else
test -z "$file" || exec >$file
echo ".ab help2man is required to generate this page"
exit 1
fi
;;
makeinfo)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
# The file to touch is that specified with -o ...
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
# ... or it is the one specified with @setfilename ...
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
# ... or it is derived from the source name (dir/f.texi becomes f.info)
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
fi
touch $file
;;
tar)
shift
# We have already tried tar in the generic part.
# Look for gnutar/gtar before invocation to avoid ugly error
# messages.
if (gnutar --version > /dev/null 2>&1); then
gnutar "$@" && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar "$@" && exit 0
fi
firstarg="$1"
if shift; then
case "$firstarg" in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0
;;
esac
case "$firstarg" in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0
;;
esac
fi
echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
You may want to install GNU tar or Free paxutils, or check the
command line arguments."
exit 1
;;
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
You might have modified some files without having the
proper tools for further handling them. Check the \`README' file,
it often tells you about the needed prerequisites for installing
this package. You may also peek at any GNU archive site, in case
some other package would contain this missing \`$1' program."
exit 1
;;
esac
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
+52
View File
@@ -0,0 +1,52 @@
# Makefile Rules (used by both GNUMakefile and Makefile)
# now "all" rule is defined in the main makefile
# all: H5PartTest H5PartTest.o H5Part.o
vtkhdf.o: vtkhdf.cc
$(CXX) $(CFLAGS) -c vtkhdf.cc
H5PartTest: H5PartTest.o H5Part.o
$(CXX) -o H5PartTest H5Part.o H5PartTest.o $(LDFLAGS)
Bench: Bench.c H5Part.o
$(CC) $(CFLAGS) -o Bench Bench.c H5Part.o $(LDFLAGS)
H5PartTest.o: H5PartTest.cc H5Part.hh
$(CXX) $(CFLAGS) -DREGRESSIONTEST -c H5PartTest.cc
H5PartTestParallel.o: H5PartTestParallel.cc H5Part.hh
$(CXX) $(CFLAGS) -c H5PartTestParallel.cc
H5PartTestParallel: H5PartTestParallel.o H5Part.o
$(CXX) -o H5PartTestParallel H5Part.o H5PartTestParallel.o $(LDFLAGS)
H5PartAndreasTest.o: H5PartAndreasTest.cc H5Part.hh
$(CXX) $(CFLAGS) -c H5PartAndreasTest.cc
H5PartAndreasTest: H5PartAndreasTest.o H5Part.o
$(CXX) -o H5PartAndreasTest H5Part.o H5PartAndreasTest.o $(LDFLAGS)
H5Part.o: H5Part.c H5Part.h
$(CC) $(CFLAGS) -c H5Part.c
H5PartF.o: H5PartF.c Underscore.h H5Part.h
$(CC) $(CFLAGS) -w -c H5PartF.c
H5testF.o: H5testF.f H5Part.inc
$(F90) $(CFLAGS) -c H5testF.f
H5testF: H5testF.o H5Part.o H5PartF.o
$(F90) $(CFLAGS) -o H5testF H5testF.o H5PartF.o H5Part.o $(LDFLAGS) -lC
vtkxml.o: vtkxml.cc
$(CXX) $(CFLAGS) -c vtkxml.cc
Underscore.h: TestUnderscore.f TestUnderscoreC.c
rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore
$(CC) -c TestUnderscoreC.c
$(F90) -c TestUnderscore.f
$(F90) -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lC
./TestUnderscore >& Underscore.h
clean:
rm -rf *~ *.o H5PartTest
+1981
View File
File diff suppressed because it is too large Load Diff
+204
View File
@@ -0,0 +1,204 @@
#ifndef __H5BLOCK_H
#define __H5BLOCK_H
#ifdef __cplusplus
extern "C" {
#endif
/*!
Interface for block structured field data
*/
h5part_int64_t
H5BlockDefine3DFieldLayout (
H5PartFile *f,
const h5part_int64_t i_start,
const h5part_int64_t i_end,
const h5part_int64_t j_start,
const h5part_int64_t j_end,
const h5part_int64_t k_start,
const h5part_int64_t k_end
);
h5part_int64_t
H5Block3dGetPartitionOfProc (
H5PartFile *f,
const h5part_int64_t proc,
h5part_int64_t *i_start,
h5part_int64_t *i_end,
h5part_int64_t *j_start,
h5part_int64_t *j_end,
h5part_int64_t *k_start,
h5part_int64_t *k_end
);
h5part_int64_t
H5Block3dGetReducedPartitionOfProc (
H5PartFile *f,
h5part_int64_t proc,
h5part_int64_t *i_start,
h5part_int64_t *i_end,
h5part_int64_t *j_start,
h5part_int64_t *j_end,
h5part_int64_t *k_start,
h5part_int64_t *k_end
);
h5part_int64_t
H5Block3dGetProcOf (
H5PartFile *f,
h5part_int64_t i,
h5part_int64_t j,
h5part_int64_t k
);
h5part_int64_t
H5Block3dWriteScalarField (
H5PartFile *f,
const char *name,
const h5part_float64_t *data
);
h5part_int64_t
H5Block3dReadScalarField (
H5PartFile *f,
const char *name,
h5part_float64_t *data
);
h5part_int64_t
H5BlockGetNumFields (
H5PartFile *f
);
h5part_int64_t
H5BlockGetFieldInfo (
H5PartFile *f,
const h5part_int64_t idx,
char *name,
const h5part_int64_t len_name,
h5part_int64_t *grid_rank,
h5part_int64_t *grid_dims,
h5part_int64_t *field_dims
);
h5part_int64_t
H5BlockGetFieldInfoByName (
H5PartFile *f,
const char *field_name,
h5part_int64_t *grid_rank,
h5part_int64_t *grid_dims,
h5part_int64_t *field_dims
);
h5part_int64_t
H5Block3dGetFieldOrigin (
H5PartFile *f,
const char *field_name,
h5part_float64_t *x_origin,
h5part_float64_t *y_origin,
h5part_float64_t *z_origin
);
h5part_int64_t
H5Block3dSetFieldOrigin (
H5PartFile *f,
const char *field_name,
const h5part_float64_t x_origin,
const h5part_float64_t y_origin,
const h5part_float64_t z_origin
);
h5part_int64_t
H5Block3dGetFieldSpacing (
H5PartFile *f,
const char *field_name,
h5part_float64_t *x_spacing,
h5part_float64_t *y_spacing,
h5part_float64_t *z_spacing
);
h5part_int64_t
H5Block3dSetFieldSpacing (
H5PartFile *f,
const char *field_name,
const h5part_float64_t x_spacing,
const h5part_float64_t y_spacing,
const h5part_float64_t z_spacing
);
h5part_int64_t
H5Block3dWrite3dVectorField (
H5PartFile *f,
const char *name,
const h5part_float64_t *xval,
const h5part_float64_t *yval,
const h5part_float64_t *zval
);
h5part_int64_t
H5Block3dRead3dVectorField (
H5PartFile *f,
const char *name,
h5part_float64_t *xval,
h5part_float64_t *yval,
h5part_float64_t *zval
);
h5part_int64_t
H5BlockWriteFieldAttrib (
H5PartFile *f,
const char *field_name,
const char *attrib_name,
const h5part_int64_t attrib_type,
const void *attrib_value,
const h5part_int64_t attrib_nelem
);
h5part_int64_t
H5BlockWriteFieldAttribString (
H5PartFile *f,
const char *field_name,
const char *attrib_name,
const char *attrib_value
);
h5part_int64_t
H5BlockGetNumFieldAttribs (
H5PartFile *f,
const char *field_name
);
h5part_int64_t
H5BlockGetFieldAttribInfo (
H5PartFile *f,
const char *field_name,
const h5part_int64_t attrib_idx,
char *attrib_name,
const h5part_int64_t len_of_attrib_name,
h5part_int64_t *attrib_type,
h5part_int64_t *attrib_nelem
);
h5part_int64_t
H5BlockReadFieldAttrib (
H5PartFile *f,
const char *field_name,
const char *attrib_name,
void *attrib_value
);
h5part_int64_t
H5BlockHasFieldData (
H5PartFile *f
);
#ifdef __cplusplus
}
#endif
#endif
+51
View File
@@ -0,0 +1,51 @@
#ifndef __H5BLOCKERRORS_H
#define __H5BLOCKERRORS_H
#define _err_handler H5PartGetErrorHandler()
#define CHECK_LAYOUT( f ) \
if ( ! f->block->have_layout ) \
return (*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_LAYOUT, \
"No layout defined." )
#define HANDLE_H5PART_LAYOUT_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_LAYOUT, \
"Bad layout." );
#define HANDLE_H5PART_NOENT_ERR( name ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_NOENT, \
"Object \"%s\" doesn't exists.", name );
#define HANDLE_H5PART_DATASET_RANK_ERR( m, n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Wrong rank of dataset: Is %d, but should be %d", \
m, n );
#define HANDLE_H5PART_GROUP_EXISTS_ERR( name ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Group \"%s\" already exists", name )
#define HANDLE_H5S_CREATE_SIMPLE_3D_ERR( dims ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create 3d dataspace with dimension sizes " \
"\"(%lld,%lld,%lld)\".", \
(long long)dims[0], (long long)dims[1], (long long)dims[2] );
#define HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get dimension sizes of dataset" );
#endif
+581
View File
@@ -0,0 +1,581 @@
#include "H5Part.h"
#include "H5PartPrivate.h"
#include "H5Block.h"
#include "Underscore.h"
#if defined(F77_SINGLE_UNDERSCORE)
#define F77NAME(a,b) a
#elif defined(F77_CRAY_UNDERSCORE)
#define F77NAME(a,b) b
#elif defined(F77_NO_UNDERSCORE)
#else
#error Error, no way to determine how to construct fortran bindings
#endif
#if ! defined(F77_NO_UNDERSCORE)
#define h5bl_define3dlayout F77NAME ( \
h5bl_define3dlayout_, \
H5BL_DEFINE3DLAYOUT )
#define h5bl_get_partition_of_proc F77NAME ( \
h5bl_get_partition_of_proc_, \
H5BL_GET_PARTITION_OF_PROC )
#define h5bl_get_reduced_partition_of_proc F77NAME ( \
h5bl_get_reduced_partition_of_proc_,\
H5BL_GET_REDUCED_PARTITION_OF_PROC )
#define h5bl_get_proc_of F77NAME ( \
h5bl_get_proc_of_, \
H5BL_GET_PROC_OF )
#define h5bl_3d_read_scalar_field F77NAME ( \
h5bl_3d_read_scalar_field_, \
H5BL_3D_READ_SCALAR_FIELD )
#define h5bl_3d_write_scalar_field F77NAME ( \
h5bl_3d_write_scalar_field_, \
H5BL_3D_WRITE_SCALAR_FIELD )
#define h5bl_3d_read_3dvector_field F77NAME ( \
h5bl_3d_read_3dvector_field_, \
H5BL_3D_READ_3DVECTOR_FIELD )
#define h5bl_3d_write_3dvector_field F77NAME ( \
h5bl_3d_write_3dvector_field_, \
H5BL_3D_WRITE_3DVECTOR_FIELD )
#define h5bl_getnumfields F77NAME ( \
h5bl_getnumfields_, \
H5BL_GETNUMFIELDS )
#define h5bl_getfieldinfo F77NAME ( \
h5bl_getfieldinfo_, \
H5BL_GETFIELDINFO )
#define h5bl_writefieldattrib_r8 F77NAME ( \
h5bl_writefieldattrib_r8_, \
H5BL_WRITEFIELDATTRIB_R8 )
#define h5bl_writefieldattrib_i8 F77NAME ( \
h5bl_writefieldattrib_i8_, \
H5BL_WRITEFIELDATTRIB_I8 )
#define h5bl_writefieldattrib_string F77NAME ( \
h5bl_writefieldattrib_string_, \
H5BL_WRITEFIELDATTRIB_STRING )
#define h5bl_getnfieldattribs F77NAME ( \
h5bl_getnfieldattribs_, \
H5BL_GETNFIELDATTRIBS )
#define h5bl_getfieldattribinfo F77NAME ( \
h5bl_getfieldattribinfo_, \
h5bl_getfieldattribinfo )
#define h5bl_readfieldattrib_i8 F77NAME ( \
h5bl_readfieldattrib_i8_, \
H5BL_READFIELDATTRIB_I8 )
#define h5bl_readfieldattrib_r8 F77NAME ( \
h5bl_readfieldattrib_r8_, \
H5BL_READFIELDATTRIB_R8 )
#define h5bl_readfieldattrib_string F77NAME ( \
h5bl_readfieldattrib_string_, \
H5BL_READFIELDATTRIB_STRING )
#define h5bl_has_fielddata F77NAME ( \
h5bl_has_fielddata_, \
H5BL_HAS_FIELDDATA )
#define h5bl_3d_set_field_spacing F77NAME ( \
h5bl_3d_set_field_spacing_, \
H5BL_3D_SET_FIELD_SPACING )
#define h5bl_3d_get_field_spacing F77NAME ( \
h5bl_3d_get_field_spacing_, \
H5BL_3D_GET_FIELD_SPACING )
#define h5bl_3d_set_field_origin F77NAME ( \
h5bl_3d_set_field_origin_, \
H5BL_3D_SET_FIELD_ORIGIN )
#define h5bl_3d_get_field_origin F77NAME ( \
h5bl_3d_get_field_origin_, \
H5BL_3D_GET_FIELD_origin )
#endif
h5part_int64_t
h5bl_define3dlayout (
h5part_int64_t *f,
const h5part_int64_t *i_start, /*!< start index of i */
const h5part_int64_t *i_end, /*!< end index of i */
const h5part_int64_t *j_start, /*!< start index of j */
const h5part_int64_t *j_end, /*!< end index of j */
const h5part_int64_t *k_start, /*!< start index of k */
const h5part_int64_t *k_end /*!< end index of k */
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5BlockDefine3DFieldLayout (
filehandle,
*i_start-1, *i_end-1,
*j_start-1, *j_end-1,
*k_start-1, *k_end-1 );
}
h5part_int64_t
h5bl_get_partition_of_proc (
h5part_int64_t *f, /*!< file handle */
const h5part_int64_t *proc,
h5part_int64_t *i_start, /*!< start index of i */
h5part_int64_t *i_end, /*!< end index of i */
h5part_int64_t *j_start, /*!< start index of j */
h5part_int64_t *j_end, /*!< end index of j */
h5part_int64_t *k_start, /*!< start index of k */
h5part_int64_t *k_end /*!< end index of k */
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t herr = H5Block3dGetPartitionOfProc (
filehandle,
*proc,
i_start, i_end, j_start, j_end, k_start, k_end );
if ( herr < 0 ) return herr;
(*i_start)++;
(*i_end)++;
(*j_start)++;
(*j_end)++;
(*k_start)++;
(*k_end)++;
return H5PART_SUCCESS;
}
h5part_int64_t
h5bl_get_reduced_partition_of_proc (
h5part_int64_t *f,
const h5part_int64_t *proc,
h5part_int64_t *i_start,
h5part_int64_t *i_end,
h5part_int64_t *j_start,
h5part_int64_t *j_end,
h5part_int64_t *k_start,
h5part_int64_t *k_end
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t herr = H5Block3dGetReducedPartitionOfProc (
filehandle,
*proc,
i_start, i_end, j_start, j_end, k_start, k_end );
if ( herr < 0 ) return herr;
(*i_start)++;
(*i_end)++;
(*j_start)++;
(*j_end)++;
(*k_start)++;
(*k_end)++;
return H5PART_SUCCESS;
}
h5part_int64_t
h5bl_get_proc_of (
h5part_int64_t *f,
const h5part_int64_t *i,
const h5part_int64_t *j,
const h5part_int64_t *k
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5Block3dGetProcOf ( filehandle, (*i)-1, (*j)-1, (*k)-1 );
}
h5part_int64_t
h5bl_3d_read_scalar_field (
h5part_int64_t *f,
const char *field_name,
h5part_float64_t *data,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dReadScalarField (
filehandle, field_name2, data );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_3d_write_scalar_field (
h5part_int64_t *f,
const char *field_name,
const h5part_float64_t *data,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dWriteScalarField (
filehandle, field_name2, data );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_3d_read_3dvector_field (
h5part_int64_t *f, /*!< file handle */
const char *field_name, /*!< name of the data set */
h5part_float64_t *xval, /*!< array of x component data */
h5part_float64_t *yval, /*!< array of y component data */
h5part_float64_t *zval, /*!< array of z component data */
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dRead3dVectorField (
filehandle, field_name2, xval, yval, zval );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_3d_write_3dvector_field (
h5part_int64_t *f, /*!< file handle */
const char *field_name, /*!< name of the data set */
const h5part_float64_t *xval, /*!< array of x component data */
const h5part_float64_t *yval, /*!< array of y component data */
const h5part_float64_t *zval, /*!< array of z component data */
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dWrite3dVectorField (
filehandle, field_name2, xval, yval, zval );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_getnumfields (
h5part_int64_t *f /*!< file handle */
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5BlockGetNumFields ( filehandle );
}
h5part_int64_t
h5bl_getfieldinfo (
h5part_int64_t *f,
const h5part_int64_t *idx,
char *field_name,
h5part_int64_t *grid_rank,
h5part_int64_t *grid_dims,
h5part_int64_t *field_dims,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t herr = H5BlockGetFieldInfo (
filehandle, *idx, field_name, l_field_name,
grid_rank, grid_dims, field_dims );
_H5Part_strc2for ( field_name, l_field_name );
return herr;
}
h5part_int64_t
h5bl_writefieldattrib_r8 (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
const h5part_float64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_field_name,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5BlockWriteFieldAttrib (
filehandle, field_name2, attrib_name2, H5PART_FLOAT64,
attrib_value, *attrib_nelem );
free ( field_name2 );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5bl_writefieldattrib_i8 (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
const h5part_int64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_field_name,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5BlockWriteFieldAttrib (
filehandle, field_name2, attrib_name2, H5PART_INT64,
attrib_value, *attrib_nelem );
free ( field_name2 );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5bl_writefieldattrib_string (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
const char *attrib_value,
const int l_field_name,
const int l_attrib_name,
const int l_attrib_value
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
char *attrib_value2=_H5Part_strdupfor2c( attrib_value,l_attrib_value );
h5part_int64_t herr = H5BlockWriteFieldAttribString (
filehandle, field_name2, attrib_name2, attrib_value2 );
free ( field_name2 );
free ( attrib_name2 );
free ( attrib_value2 );
return herr;
}
h5part_int64_t
h5bl_getnfieldattribs (
h5part_int64_t *f,
const char *field_name,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5BlockGetNumFieldAttribs (
filehandle, field_name2 );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_getfieldattribinfo (
h5part_int64_t *f,
const char *field_name,
const h5part_int64_t *attrib_idx,
char *attrib_name,
h5part_int64_t *attrib_nelem,
const int l_field_name,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t attrib_type;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5BlockGetFieldAttribInfo (
filehandle, field_name2, *attrib_idx,
attrib_name, l_attrib_name,
&attrib_type,
attrib_nelem );
_H5Part_strc2for ( attrib_name, l_attrib_name );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5bl_readfieldattrib_i8 (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
h5part_int64_t *attrib_value,
const int l_field_name,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5BlockReadFieldAttrib (
filehandle, field_name2, attrib_name2, attrib_value );
free ( field_name2 );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5bl_readfieldattrib_r8 (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
h5part_float64_t *attrib_value,
const int l_field_name,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5BlockReadFieldAttrib (
filehandle, field_name2, attrib_name2, attrib_value );
free ( field_name2 );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5bl_readfieldattrib_string (
h5part_int64_t *f,
const char *field_name,
const char *attrib_name,
char *attrib_value,
const int l_field_name,
const int l_attrib_name,
const int l_attrib_value
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5BlockReadFieldAttrib (
filehandle, field_name2, attrib_name2, attrib_value );
_H5Part_strc2for ( attrib_value, l_attrib_value );
free ( field_name2 );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5bl_has_fielddata (
h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5BlockHasFieldData ( filehandle );
}
h5part_int64_t
h5b_3d_get_field_spacing (
h5part_int64_t *f,
const char *field_name,
h5part_float64_t *x,
h5part_float64_t *y,
h5part_float64_t *z,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dGetFieldSpacing (
filehandle, field_name2, x, y, z );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5b_3d_set_field_spacing (
h5part_int64_t *f,
const char *field_name,
const h5part_float64_t *x,
const h5part_float64_t *y,
const h5part_float64_t *z,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dSetFieldSpacing (
filehandle, field_name2, *x, *y, *z );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5b_3d_get_field_origin (
h5part_int64_t *f,
const char *field_name,
h5part_float64_t *x,
h5part_float64_t *y,
h5part_float64_t *z,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dGetFieldOrigin (
filehandle, field_name2, x, y, z );
free ( field_name2 );
return herr;
}
h5part_int64_t
h5b_3d_set_field_origin (
h5part_int64_t *f,
const char *field_name,
const h5part_float64_t *x,
const h5part_float64_t *y,
const h5part_float64_t *z,
const int l_field_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
h5part_int64_t herr = H5Block3dSetFieldOrigin (
filehandle, field_name2, *x, *y, *z );
free ( field_name2 );
return herr;
}
+176
View File
@@ -0,0 +1,176 @@
INTERFACE
INTEGER*8 FUNCTION h5bl_define3dlayout ( filehandle, i_start, i_end, j_start, j_end, k_start, k_end )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: i_start
INTEGER*8, INTENT(IN) :: i_end
INTEGER*8, INTENT(IN) :: j_start
INTEGER*8, INTENT(IN) :: j_end
INTEGER*8, INTENT(IN) :: k_start
INTEGER*8, INTENT(IN) :: k_end
END FUNCTION
INTEGER*8 FUNCTION h5bl_get_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(OUT) :: proc
INTEGER*8, INTENT(OUT) :: i_start
INTEGER*8, INTENT(OUT) :: i_end
INTEGER*8, INTENT(OUT) :: j_start
INTEGER*8, INTENT(OUT) :: j_end
INTEGER*8, INTENT(OUT) :: k_start
INTEGER*8, INTENT(OUT) :: k_end
END FUNCTION
INTEGER*8 FUNCTION h5bl_get_reduced_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(OUT) :: proc
INTEGER*8, INTENT(OUT) :: i_start
INTEGER*8, INTENT(OUT) :: i_end
INTEGER*8, INTENT(OUT) :: j_start
INTEGER*8, INTENT(OUT) :: j_end
INTEGER*8, INTENT(OUT) :: k_start
INTEGER*8, INTENT(OUT) :: k_end
END FUNCTION
INTEGER*8 FUNCTION h5bl_get_proc_of ( filehandle, i, j, k )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: i
INTEGER*8, INTENT(IN) :: j
INTEGER*8, INTENT(IN) :: k
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_read_scalar_field ( filehandle, name, data )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(OUT) :: data(*)
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_write_scalar_field ( filehandle, name, data )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(IN) :: data(*)
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_read_3dvector_field ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(OUT) :: x(*)
REAL*8, INTENT(OUT) :: y(*)
REAL*8, INTENT(OUT) :: z(*)
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_write_3dvector_field ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(IN) :: x(*)
REAL*8, INTENT(IN) :: y(*)
REAL*8, INTENT(IN) :: z(*)
END FUNCTION
INTEGER*8 FUNCTION h5bl_getnumfields ( filehandle )
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5bl_getfieldinfo ( filehandle, idx, field_name, grid_rank, grid_dims, field_dims )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: idx
CHARACTER(LEN=*), INTENT(OUT) :: field_name
INTEGER*8, INTENT(OUT) :: grid_rank
INTEGER*8, INTENT(OUT) :: grid_dims(*)
INTEGER*8, INTENT(OUT) :: field_dims
END FUNCTION
INTEGER*8 FUNCTION h5bl_writefieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value, attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5bl_writefieldattrib_i8 (filehandle, field_name, attrib_name,attrib_value,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5bl_writefieldattrib_string ( filehandle, field_name, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
END FUNCTION
INTEGER*8 FUNCTION h5bl_getnfieldattribs ( filehandle, field_name )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
END FUNCTION
INTEGER*8 FUNCTION h5bl_getfieldattribinfo ( filehandle, field_name, idx, attrib_name, attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried
CHARACTER(LEN=*), INTENT(OUT):: attrib_name ! The name of the attribute
INTEGER*8, INTENT(OUT):: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5bl_readfieldattrib_i8 ( filehandle, field_name, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
INTEGER*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5bl_readfieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
REAL*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5bl_readfieldattrib_string ( filehandle, field_name, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
END FUNCTION
INTEGER*8 FUNCTION h5bl_has_fielddata ( filehandle )
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_get_field_spacing ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(OUT) :: x
REAL*8, INTENT(OUT) :: y
REAL*8, INTENT(OUT) :: z
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_set_field_spacing ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(IN) :: x
REAL*8, INTENT(IN) :: y
REAL*8, INTENT(IN) :: z
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_get_field_origin ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(OUT) :: x
REAL*8, INTENT(OUT) :: y
REAL*8, INTENT(OUT) :: z
END FUNCTION
INTEGER*8 FUNCTION h5bl_3d_set_field_origin ( filehandle, name, x, y, z )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name
REAL*8, INTENT(IN) :: x
REAL*8, INTENT(IN) :: y
REAL*8, INTENT(IN) :: z
END FUNCTION
END INTERFACE
+6
View File
@@ -0,0 +1,6 @@
#ifndef __H5BLOCKPRIVATE_H
#define __H5BLOCKPRIVATE_H
#define H5BLOCK_GROUPNAME_BLOCK "Block"
#endif
+32
View File
@@ -0,0 +1,32 @@
#ifndef __H5BLOCKTYPES_H
#define __H5BLOCKTYPES_H
struct H5BlockPartition {
h5part_int64_t i_start;
h5part_int64_t i_end;
h5part_int64_t j_start;
h5part_int64_t j_end;
h5part_int64_t k_start;
h5part_int64_t k_end;
};
struct H5BlockStruct {
h5part_int64_t timestep;
h5part_int64_t i_max;
h5part_int64_t j_max;
h5part_int64_t k_max;
struct H5BlockPartition *user_layout;
struct H5BlockPartition *write_layout;
int have_layout;
hid_t shape;
hid_t memshape;
hid_t diskshape;
hid_t blockgroup;
hid_t field_group_id;
};
#define H5PART_ERR_LAYOUT -100
#define H5PART_ERR_NOENT -101
#endif
+2590
View File
File diff suppressed because it is too large Load Diff
+319
View File
@@ -0,0 +1,319 @@
#ifndef _H5Part_H_
#define _H5Part_H_
#include <stdlib.h>
#include <stdarg.h>
#include <hdf5.h>
#ifdef PARALLEL_IO
#include <mpi.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include "H5PartTypes.h"
#define H5PART_SUCCESS 0
#define H5PART_ERR_NOMEM -12
#define H5PART_ERR_INVAL -22
#define H5PART_ERR_BADFD -77
#define H5PART_ERR_INIT -200
#define H5PART_ERR_NOENTRY -201
#define H5PART_ERR_MPI -201
#define H5PART_ERR_HDF5 -202
#define H5PART_READ 0x01
#define H5PART_WRITE 0x02
#define H5PART_APPEND 0x03
#define H5PART_INT64 ((h5part_int64_t)H5T_NATIVE_INT64)
#define H5PART_FLOAT64 ((h5part_int64_t)H5T_NATIVE_DOUBLE)
#define H5PART_CHAR ((h5part_int64_t)H5T_NATIVE_CHAR)
/*========== File Opening/Closing ===============*/
H5PartFile*
H5PartOpenFile(
const char *filename,
const unsigned flags
);
#define H5PartOpenFileSerial(x,y) H5PartOpenFile(x,y)
#ifdef PARALLEL_IO
H5PartFile*
H5PartOpenFileParallel (
const char *filename,
const unsigned flags,
MPI_Comm communicator
);
#endif
h5part_int64_t
H5PartCloseFile (
H5PartFile *f
);
/*============== File Writing Functions ==================== */
h5part_int64_t
H5PartDefineStepName (
H5PartFile *f,
const char *name,
const h5part_int64_t width
);
h5part_int64_t
H5PartSetNumParticles (
H5PartFile *f,
const h5part_int64_t nparticles
);
h5part_int64_t
H5PartWriteDataFloat64 (
H5PartFile *f,
const char *name,
const h5part_float64_t *array
);
h5part_int64_t
H5PartWriteDataInt64 (
H5PartFile *f,
const char *name,
const h5part_int64_t *array
);
/*================== File Reading Routines =================*/
h5part_int64_t
H5PartSetStep (
H5PartFile *f,
const h5part_int64_t step
);
h5part_int64_t
H5PartHasStep (
H5PartFile *f,
const h5part_int64_t step
);
h5part_int64_t
H5PartGetNumSteps (
H5PartFile *f
);
h5part_int64_t
H5PartGetNumDatasets (
H5PartFile *f
);
h5part_int64_t
H5PartGetDatasetName (
H5PartFile *f,
const h5part_int64_t idx,
char *name,
const h5part_int64_t maxlen
);
h5part_int64_t
H5PartGetDatasetInfo (
H5PartFile *f,
const h5part_int64_t idx,
char *name,
const h5part_int64_t maxlen,
h5part_int64_t *type,
h5part_int64_t *nelem);
h5part_int64_t
H5PartGetNumParticles (
H5PartFile *f
);
h5part_int64_t
H5PartSetView (
H5PartFile *f,
const h5part_int64_t start,
const h5part_int64_t end
);
h5part_int64_t
H5PartGetView (
H5PartFile *f,
h5part_int64_t *start,
h5part_int64_t *end
);
h5part_int64_t
H5PartHasView (
H5PartFile *f
);
h5part_int64_t
H5PartResetView (
H5PartFile *f
);
h5part_int64_t
H5PartSetCanonicalView (
H5PartFile *f
);
h5part_int64_t
H5PartReadDataFloat64(
H5PartFile *f,
const char *name,
h5part_float64_t *array
);
h5part_int64_t
H5PartReadDataInt64 (
H5PartFile *f,
const char *name,
h5part_int64_t *array
);
h5part_int64_t
H5PartReadParticleStep (
H5PartFile *f,
const h5part_int64_t step,
h5part_float64_t *x, /* particle positions */
h5part_float64_t *y,
h5part_float64_t *z,
h5part_float64_t *px, /* particle momenta */
h5part_float64_t *py,
h5part_float64_t *pz,
h5part_int64_t *id /* and phase */
);
/**********==============Attributes Interface============***************/
/* currently there is file attributes: Attributes bound to the file
and step attributes which are bound to the current timestep. You
must set the timestep explicitly before writing the attributes (just
as you must do when you write a new dataset. Currently there are no
attributes that are bound to a particular data array, but this could
easily be done if required.
*/
h5part_int64_t
H5PartWriteStepAttrib (
H5PartFile *f,
const char *attrib_name,
const h5part_int64_t attrib_type,
const void *attrib_value,
const h5part_int64_t attrib_nelem
);
h5part_int64_t
H5PartWriteFileAttrib (
H5PartFile *f,
const char *attrib_name,
const h5part_int64_t attrib_type,
const void *attrib_value,
const h5part_int64_t attrib_nelem
);
h5part_int64_t
H5PartWriteFileAttribString (
H5PartFile *f,
const char *name,
const char *attrib
);
h5part_int64_t
H5PartWriteStepAttribString (
H5PartFile *f,
const char *name,
const char *attrib
);
h5part_int64_t
H5PartGetNumStepAttribs ( /* for current filestep */
H5PartFile *f
);
h5part_int64_t
H5PartGetNumFileAttribs (
H5PartFile *f
);
h5part_int64_t
H5PartGetStepAttribInfo (
H5PartFile *f,
const h5part_int64_t attrib_idx,
char *attrib_name,
const h5part_int64_t len_of_attrib_name,
h5part_int64_t *attrib_type,
h5part_int64_t *attrib_nelem
);
h5part_int64_t
H5PartGetFileAttribInfo (
H5PartFile *f,
const h5part_int64_t idx,
char *name,
const h5part_int64_t maxnamelen,
h5part_int64_t *type,
h5part_int64_t *nelem
);
h5part_int64_t
H5PartReadStepAttrib (
H5PartFile *f,
const char *name,
void *data
);
h5part_int64_t
H5PartReadFileAttrib (
H5PartFile *f,
const char *name,
void *data
);
h5part_int64_t
H5PartSetVerbosityLevel (
const h5part_int64_t level
);
h5part_int64_t
H5PartSetErrorHandler (
const h5part_error_handler handler
);
h5part_int64_t
H5PartGetErrno (
void
);
h5part_error_handler
H5PartGetErrorHandler (
void
);
h5part_int64_t
H5PartReportErrorHandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
);
h5part_int64_t
H5PartAbortErrorHandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
);
#ifdef __cplusplus
}
#endif
#endif
+326
View File
@@ -0,0 +1,326 @@
#ifndef __H5PARTERRORS_H
#define __H5PARTERRORS_H
/***************** Error Handling ***************/
#define CHECK_FILEHANDLE( f ) \
if ( _file_is_valid ( f ) != H5PART_SUCCESS ) \
return HANDLE_H5PART_BADFD_ERR;
#define CHECK_WRITABLE_MODE( f ) \
if ( f->mode==H5PART_READ ) \
return (*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Attempting to write to read-only file" );
#define CHECK_READONLY_MODE( f ) \
if ( ! f->mode==H5PART_READ ) \
return (*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Operation is not allowed on writable files." );
#define CHECK_TIMEGROUP( f ) \
if ( f->timegroup <= 0 ) \
return (*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Timegroup <= 0.");
/**************** H5Part *********************/
#define HANDLE_H5PART_BADFD_ERR \
(*_err_handler)( \
_H5Part_get_funcname(), \
H5PART_ERR_BADFD, \
"Called with bad filehandle." );
#define HANDLE_H5PART_INIT_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INIT, \
"Cannot initialize H5Part." );
#define HANDLE_H5PART_NOMEM_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_NOMEM, \
"Out of memory." );
#define HANDLE_H5PART_SETSTEP_ERR( rc, step ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
rc, \
"Cannont set time-step to %lld.", (long long)step );
#define HANDLE_H5PART_FILE_ACCESS_TYPE_ERR( flags ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Invalid file access type \"%d\".", flags);
#define HANDLE_H5PART_STEP_EXISTS_ERR( step ) \
(*_err_handler)( \
_H5Part_get_funcname(), \
H5PART_ERR_INVAL, \
"Step #%lld already exists, step cannot be set to an existing" \
" step in write and append mode", (long long)step );
#define HANDLE_H5PART_SET_VIEW_ERR( rc, start, end ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
rc, \
"Cannot set view to (%lld, %lld).", \
(long long)start, (long long)end );
#define HANDLE_H5PART_GET_NUM_PARTICLES_ERR( rc ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
rc, \
"Cannot get number of particles." );
#define HANDLE_H5PART_NOENTRY_ERR( group_name, type, idx ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_NOENTRY, \
"No entry with index %lld and type %d in group %s!", \
(long long)idx, type, group_name );
/**************** HDF5 *********************/
/* H5A: Attribute */
#define HANDLE_H5A_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot terminate access to attribute." );
#define HANDLE_H5A_CREATE_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create attribute \"%s\".", s );
#define HANDLE_H5A_GET_NAME_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get attribute name." );
#define HANDLE_H5A_GET_NUM_ATTRS_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get number of attributes." );
#define HANDLE_H5A_GET_SPACE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get a copy of dataspace for attribute." );
#define HANDLE_H5A_GET_TYPE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get attribute datatype." );
#define HANDLE_H5A_OPEN_IDX_ERR( n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot open attribute specified by index \"%lld\".", \
(long long)n );
#define HANDLE_H5A_OPEN_NAME_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot open attribute specified by name \"%s\".", s );
#define HANDLE_H5A_READ_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot read attribute" );
#define HANDLE_H5A_WRITE_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot write attribute \"%s\".", s );
/* H5D: Dataset */
#define HANDLE_H5D_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Close of dataset failed." );
#define HANDLE_H5D_CREATE_ERR( s, n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create dataset for name \"%s\", step \"%lld\".", \
s, (long long) n );
#define HANDLE_H5D_GET_SPACE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get dataspace identifier.");
#define HANDLE_H5D_GET_TYPE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot determine dataset type.");
#define HANDLE_H5D_OPEN_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot open dataset \"%s\".", s );
#define HANDLE_H5D_READ_ERR( s, n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Read from dataset \"%s\" failed, step \"%lld\".", \
s, (long long) n );
#define HANDLE_H5D_WRITE_ERR( s, n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Write to dataset \"%s\" failed, step \"%lld\".", \
s, (long long)n );
/* H5F: file */
#define HANDLE_H5F_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot terminate access to file." );
#define HANDLE_H5F_OPEN_ERR( filename, flags ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot open file \"%s\" with mode \"%d\"", filename, flags );
/* H5G: group */
#define HANDLE_H5G_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot terminate access to datagroup." );
#define HANDLE_H5G_CREATE_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create datagroup \"%s\".", s );
#define HANDLE_H5G_GET_OBJINFO_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot get information about object \"%s\".", s );
#define HANDLE_H5G_OPEN_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot open group \"%s\".", s );
/* H5P: property */
#define HANDLE_H5P_CLOSE_ERR( s ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot terminate access to property list \"%s\".", s );
#define HANDLE_H5P_CREATE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create property list." );
#define HANDLE_H5P_SET_DXPL_MPIO_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"MPI: Cannot set data transfer mode." );
#define HANDLE_H5P_SET_FAPL_MPIO_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot store IO communicator information to the " \
"file access property list.");
/* H5S: dataspace */
#define HANDLE_H5S_CREATE_SIMPLE_ERR( n ) \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot create dataspace with len \"%lld\".", (long long) n );
#define HANDLE_H5S_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot terminate access to dataspace." );
#define HANDLE_H5S_GET_SELECT_NPOINTS_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot determine the number of elements in dataspace selection." );
#define HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot determine number of elements in dataspace." );
#define HANDLE_H5S_SELECT_HYPERSLAB_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot set select hyperslap region or add the specified region" );
/* H5T: type */
#define HANDLE_H5T_CLOSE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_HDF5, \
"Cannot release datatype." );
/* MPI */
#define HANDLE_MPI_ALLGATHER_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_MPI, \
"Cannot gather data." );
#define HANDLE_MPI_COMM_SIZE_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_MPI, \
"Cannot get number of processes in my group." );
#define HANDLE_MPI_COMM_RANK_ERR \
(*_err_handler) ( \
_H5Part_get_funcname(), \
H5PART_ERR_MPI, \
"Cannot get rank of the calling process in my group." );
#endif
+825
View File
@@ -0,0 +1,825 @@
#include "H5Part.h"
#include "Underscore.h"
#include <hdf5.h>
#if defined(F77_SINGLE_UNDERSCORE)
#define F77NAME(a,b) a
#elif defined(F77_CRAY_UNDERSCORE)
#define F77NAME(a,b) b
#elif defined(F77_NO_UNDERSCORE)
#else
#error Error, no way to determine how to construct fortran bindings
#endif
#if ! defined(F77_NO_UNDERSCORE)
/* open/close interface */
#define h5pt_openr F77NAME ( \
h5pt_openr_, \
H5PT_OPENR )
#define h5pt_openw F77NAME ( \
h5pt_openw_, \
H5PT_OPENW )
#define h5pt_opena F77NAME ( \
h5pt_opena_, \
H5PT_OPENA )
#define h5pt_openr_par F77NAME ( \
h5pt_openr_par_, \
H5PT_OPENR_PAR )
#define h5pt_openw_par F77NAME ( \
h5pt_openw_par_, \
H5PT_OPENW_PAR )
#define h5pt_opena_par F77NAME ( \
h5pt_opena_par_, \
H5PT_OPENA_PAR )
#define h5pt_close F77NAME ( \
h5pt_close_, \
H5PT_CLOSE)
/* writing interface */
#define h5pt_setnpoints F77NAME ( \
h5pt_setnpoints_, \
H5PT_SETNPOINTS )
#define h5pt_setstep F77NAME ( \
h5pt_setstep_, \
H5PT_SETSTEP )
#define h5pt_writedata_r8 F77NAME ( \
h5pt_writedata_r8_, \
H5PT_WRITEDATA_R8 )
#define h5pt_writedata_i8 F77NAME ( \
h5pt_writedata_i8_, \
H5PT_WRITEDATA_I8 )
/* Reading interface (define dataset, step, particles, attributes) */
#define h5pt_getnsteps F77NAME ( \
h5pt_getnsteps_, \
H5PT_GETNSTEPS )
#define h5pt_getndatasets F77NAME ( \
h5pt_getndatasets_, \
H5PT_GETNDATASETS )
#define h5pt_getnpoints F77NAME ( \
h5pt_getnpoints_, \
H5PT_GETNPOINTS )
#define h5pt_getdatasetname F77NAME ( \
h5pt_getdatasetname_, \
H5PT_GETDATASETNAME )
#define h5pt_getnumpoints F77NAME ( \
h5pt_getnumpoints_, \
H5PT_GETNUMPOINTS )
/* Views and parallelism */
#define h5pt_setview F77NAME ( \
h5pt_setview_, \
H5PT_SETVIEW )
#define h5pt_resetview F77NAME ( \
h5pt_resetview_, \
H5PT_RESETVIEW )
#define h5pt_hasview F77NAME ( \
h5pt_hasview_, \
H5PT_HASVIEW )
#define h5pt_getview F77NAME ( \
h5pt_getview_, \
H5PT_GETVIEW )
/* Reading data */
#define h5pt_readdata_r8 F77NAME ( \
h5pt_readdata_r8_, \
H5PT_READDATA_R8 )
#define h5pt_readdata_i8 F77NAME ( \
h5pt_readdata_i8_, \
H5PT_READDATA_I8 )
#define h5pt_readdata F77NAME ( \
h5pt_readdata_, \
H5PT_READDATA )
/* Writing attributes */
#define h5pt_writefileattrib_r8 F77NAME ( \
h5pt_writefileattrib_r8_, \
H5PT_WRITEFILEATTRIB_R8 )
#define h5pt_writefileattrib_i8 F77NAME ( \
h5pt_writefileattrib_i8_, \
H5PT_WRITEFILEATTRIB_I8 )
#define h5pt_writefileattrib_string F77NAME ( \
h5pt_writefileattrib_string_, \
H5PT_writefileattrib_string )
#define h5pt_writestepattrib_r8 F77NAME ( \
h5pt_writestepattrib_r8_, \
H5PT_WRITESTEPATTRIB_R8 )
#define h5pt_writestepattrib_i8 F77NAME ( \
h5pt_writestepattrib_i8_, \
H5PT_WRITESTEPATTRIB_I8 )
#define h5pt_writestepattrib_string F77NAME ( \
h5pt_writestepattrib_string_, \
H5PT_WRITESTEPATTRIB_STRING )
/* Reading attributes */
#define h5pt_getnstepattribs F77NAME ( \
h5pt_getnstepattribs_, \
H5PT_GETNSTEPATTRIBS )
#define h5pt_getnfileattribs F77NAME ( \
h5pt_getnfileattribs_, \
H5PT_GETNFILEATTRIBS )
#define h5pt_getstepattribinfo F77NAME ( \
h5pt_getstepattribinfo_, \
H5PT_GETSTEPATTRIBINFO )
#define h5pt_getfileattribinfo F77NAME ( \
h5pt_getfileattribinfo_, \
H5PT_GETFILEATTRIBINFO )
#define h5pt_readstepattrib F77NAME ( \
h5pt_readstepattrib_, \
H5PT_READSTEPATTRIB )
#define h5pt_readstepattrib_r8 F77NAME ( \
h5pt_readstepattrib_r8_, \
H5PT_READSTEPATTRIB_R8 )
#define h5pt_readstepattrib_i8 F77NAME ( \
h5pt_readstepattrib_i8_, \
H5PT_READSTEPATTRIB_I8 )
#define h5pt_readstepattrib_string F77NAME ( \
h5pt_readstepattrib_string_, \
H5PT_READSTEPATTRIB_STRING )
#define h5pt_readfileattrib F77NAME ( \
h5pt_readfileattrib_, \
H5PT_READFILEATTRIB )
#define h5pt_readfileattrib_r8 F77NAME ( \
h5pt_readfileattrib_r8_, \
H5PT_READFILEATTRIB_R8 )
#define h5pt_readfileattrib_i8 F77NAME ( \
h5pt_readfileattrib_i8_, \
H5PT_READFILEATTRIB_I8 )
#define h5pt_readfileattrib_string F77NAME ( \
h5pt_readfileattrib_string_, \
H5PT_READFILEATTRIB_STRING )
/* error handling */
#define h5pt_set_verbosity_level F77NAME ( \
h5pt_set_verbosity_level_, \
H5PT_SET_VERBOSITY_LEVEL )
#endif
char *
_H5Part_strdupfor2c (
const char *s,
const ssize_t len
) {
char *dup = (char*)malloc ( len + 1 );
strncpy ( dup, s, len );
char *p = dup + len;
do {
*p-- = '\0';
} while ( *p == ' ' );
return dup;
}
char *
_H5Part_strc2for (
char * const str,
const ssize_t l_str
) {
size_t len = strlen ( str );
memset ( str+len, ' ', l_str-len );
return str;
}
/* open/close interface */
h5part_int64_t
h5pt_openr (
const char *file_name,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_READ );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
h5part_int64_t
h5pt_openw (
const char *file_name,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_WRITE );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
h5part_int64_t
h5pt_opena (
const char *file_name,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_APPEND );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
#ifdef PARALLEL_IO
h5part_int64_t
h5pt_openr_par (
const char *file_name,
MPI_Comm *comm,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFileParallel (
file_name2, H5PART_READ, *comm );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
h5part_int64_t
h5pt_openw_par (
const char *file_name,
MPI_Comm *comm,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFileParallel (
file_name2, H5PART_WRITE, *comm );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
h5part_int64_t
h5pt_opena_par (
const char *file_name,
MPI_Comm *comm,
const int l_file_name
) {
char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name );
H5PartFile* f = H5PartOpenFileParallel (
file_name2, H5PART_APPEND, *comm );
free ( file_name2 );
return (h5part_int64_t)(size_t)f;
}
#endif
h5part_int64_t
h5pt_close (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartCloseFile ( filehandle );
}
/*==============Writing and Setting Dataset info========*/
h5part_int64_t
h5pt_readstep (
const h5part_int64_t *f,
const h5part_int64_t *step,
h5part_float64_t *x,
h5part_float64_t *y,
h5part_float64_t *z,
h5part_float64_t *px,
h5part_float64_t *py,
h5part_float64_t *pz,
h5part_int64_t *id
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartReadParticleStep (
filehandle,(*step)-1,x,y,z,px,py,pz,id);
}
h5part_int64_t
h5pt_setnpoints (
const h5part_int64_t *f,
h5part_int64_t *np
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartSetNumParticles ( filehandle, *np );
}
h5part_int64_t
h5pt_setstep (
const h5part_int64_t *f,
h5part_int64_t *step ) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartSetStep ( filehandle, (*step)-1 );
}
h5part_int64_t
h5pt_writedata_r8 (
const h5part_int64_t *f,
const char *name,
const h5part_float64_t *data,
const int l_name ) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *name2 = _H5Part_strdupfor2c ( name, l_name );
h5part_int64_t herr = H5PartWriteDataFloat64 (
filehandle, name2, data );
free ( name2 );
return herr;
}
h5part_int64_t
h5pt_writedata_i8 (
const h5part_int64_t *f,
const char *name,
const h5part_int64_t *data,
const int l_name ) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *name2 = _H5Part_strdupfor2c ( name, l_name );
h5part_int64_t herr = H5PartWriteDataInt64 (
filehandle, name2, data );
free ( name2 );
return herr;
}
/*==============Reading Data Characteristics============*/
h5part_int64_t
h5pt_getnsteps (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumSteps ( filehandle );
}
h5part_int64_t
h5pt_getndatasets (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumDatasets ( filehandle );
}
h5part_int64_t
h5pt_getnpoints (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumParticles ( filehandle );
}
h5part_int64_t
h5pt_getdatasetname (
const h5part_int64_t *f,
const h5part_int64_t *index,
char *name,
const int l_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t herr = H5PartGetDatasetName (
filehandle, *index, name, l_name );
_H5Part_strc2for ( name, l_name );
return herr;
}
h5part_int64_t
h5pt_getnumpoints (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumParticles( filehandle );
}
/*=============Setting and getting views================*/
h5part_int64_t
h5pt_setview (
const h5part_int64_t *f,
const h5part_int64_t *start,
const h5part_int64_t *end
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartSetView ( filehandle, *start, *end );
}
h5part_int64_t
h5pt_resetview (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartResetView ( filehandle );
}
h5part_int64_t
h5pt_hasview (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartHasView ( filehandle );
}
h5part_int64_t
h5pt_getview (
const h5part_int64_t *f,
h5part_int64_t *start,
h5part_int64_t *end
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetView ( filehandle, start, end);
}
/*==================Reading data ============*/
h5part_int64_t
h5pt_readdata_r8 (
const h5part_int64_t *f,
const char *name,
h5part_float64_t *array,
const int l_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *name2 = _H5Part_strdupfor2c ( name, l_name );
h5part_int64_t herr = H5PartReadDataFloat64 (
filehandle, name2, array );
free ( name2 );
return herr;
}
h5part_int64_t
h5pt_readdata_i8 (
const h5part_int64_t *f,
const char *name,
h5part_int64_t *array,
const int l_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *name2 = _H5Part_strdupfor2c ( name, l_name );
h5part_int64_t herr = H5PartReadDataInt64 (
filehandle, name2, array );
free ( name2 );
return herr;
}
/*=================== Attributes ================*/
/* Writeing attributes */
h5part_int64_t
h5pt_writefileattrib_r8 (
const h5part_int64_t *f,
const char *attrib_name,
const h5part_float64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
h5part_int64_t herr = H5PartWriteFileAttrib (
filehandle,
attrib_name2, H5T_NATIVE_DOUBLE, attrib_value, *attrib_nelem );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_writefileattrib_i8 (
const h5part_int64_t *f,
const char *attrib_name,
const h5part_int64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
h5part_int64_t herr = H5PartWriteFileAttrib (
filehandle,
attrib_name2, H5T_NATIVE_INT64, attrib_value, *attrib_nelem );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_writefileattrib_string (
const h5part_int64_t *f,
const char *attrib_name,
const char *attrib_value,
const int l_attrib_name,
const int l_attrib_value
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
char *attrib_value2= _H5Part_strdupfor2c (attrib_value,l_attrib_value);
h5part_int64_t herr = H5PartWriteFileAttribString (
filehandle, attrib_name2, attrib_value2 );
free ( attrib_name2 );
free ( attrib_value2 );
return herr;
}
h5part_int64_t
h5pt_writestepattrib_r8 (
const h5part_int64_t *f,
const char *attrib_name,
const h5part_float64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5PartWriteStepAttrib (
filehandle,
attrib_name2, H5T_NATIVE_DOUBLE, attrib_value, *attrib_nelem );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_writestepattrib_i8 (
const h5part_int64_t *f,
const char *attrib_name,
const h5part_int64_t *attrib_value,
const h5part_int64_t *attrib_nelem,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c ( attrib_name, l_attrib_name );
h5part_int64_t herr = H5PartWriteStepAttrib (
filehandle,
attrib_name2, H5T_NATIVE_INT64, attrib_value, *attrib_nelem );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_writestepattrib_string (
const h5part_int64_t *f,
const char *attrib_name,
const char *attrib_value,
const int l_attrib_name,
const int l_attrib_value
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
char *attrib_value2= _H5Part_strdupfor2c (attrib_value,l_attrib_value);
h5part_int64_t herr = H5PartWriteStepAttribString (
filehandle, attrib_name2, attrib_value2 );
free ( attrib_name2 );
free ( attrib_value2 );
return herr;
}
/* Reading attributes ************************* */
h5part_int64_t
h5pt_getnstepattribs (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumStepAttribs ( filehandle );
}
h5part_int64_t
h5pt_getnfileattribs (
const h5part_int64_t *f
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
return H5PartGetNumFileAttribs ( filehandle );
}
h5part_int64_t
h5pt_getstepattribinfo (
const h5part_int64_t *f,
const h5part_int64_t *idx,
char *name,
h5part_int64_t *nelem,
const int l_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t type;
h5part_int64_t herr = H5PartGetStepAttribInfo (
filehandle, *idx, name, l_name, &type, nelem);
_H5Part_strc2for( name, l_name );
return herr;
}
h5part_int64_t
h5pt_getfileattribinfo (
const h5part_int64_t *f,
const h5part_int64_t *idx,
char *name,
h5part_int64_t *nelem,
const int l_name ) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
h5part_int64_t type;
h5part_int64_t herr = H5PartGetFileAttribInfo (
filehandle, *idx, name, l_name, &type, nelem);
_H5Part_strc2for( name, l_name );
return herr;
}
h5part_int64_t
h5pt_readstepattrib (
const h5part_int64_t *f,
const char *attrib_name,
void *attrib_value,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char * attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
h5part_int64_t herr = H5PartReadStepAttrib (
filehandle, attrib_name2, attrib_value );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_readstepattrib_r8 (
const h5part_int64_t *f,
const char *attrib_name,
h5part_float64_t *attrib_value,
const int l_attrib_name
) {
return h5pt_readstepattrib (
f, attrib_name, attrib_value, l_attrib_name );
}
h5part_int64_t
h5pt_readstepattrib_i8 (
const h5part_int64_t *f,
const char *attrib_name,
h5part_int64_t *attrib_value,
const int l_attrib_name
) {
return h5pt_readstepattrib (
f, attrib_name, attrib_value, l_attrib_name );
}
h5part_int64_t
h5pt_readstepattrib_string (
const h5part_int64_t *f,
const char *attrib_name,
char *attrib_value,
const int l_attrib_name,
const int l_attrib_value
) {
h5part_int64_t herr = h5pt_readstepattrib (
f, attrib_name, attrib_value, l_attrib_name );
_H5Part_strc2for ( attrib_value, l_attrib_value );
return herr;
}
h5part_int64_t
h5pt_readfileattrib (
const h5part_int64_t *f,
const char *attrib_name,
void *attrib_value,
const int l_attrib_name
) {
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
char * attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name);
h5part_int64_t herr = H5PartReadFileAttrib (
filehandle, attrib_name2, attrib_value );
free ( attrib_name2 );
return herr;
}
h5part_int64_t
h5pt_readfileattrib_r8 (
const h5part_int64_t *f,
const char *attrib_name,
h5part_float64_t *attrib_value,
const int l_attrib_name
) {
return h5pt_readfileattrib (
f, attrib_name, attrib_value, l_attrib_name );
}
h5part_int64_t
h5pt_readfileattrib_i8 (
const h5part_int64_t *f,
const char *attrib_name,
h5part_int64_t *attrib_value,
const int l_attrib_name
) {
return h5pt_readfileattrib (
f, attrib_name, attrib_value, l_attrib_name );
}
h5part_int64_t
h5pt_readfileattrib_string (
const h5part_int64_t *f,
const char *attrib_name,
char *attrib_value,
const int l_attrib_name,
const int l_attrib_value
) {
h5part_int64_t herr = h5pt_readfileattrib (
f, attrib_name, attrib_value, l_attrib_name );
_H5Part_strc2for ( attrib_value, l_attrib_value );
return herr;
}
h5part_int64_t
h5pt_set_verbosity_level (
const h5part_int64_t *level
) {
return H5PartSetVerbosityLevel ( *level );
}
+223
View File
@@ -0,0 +1,223 @@
! Declaration of subroutines for Fortran Bindings
! open/close interface
INTERFACE
INTEGER*8 FUNCTION h5pt_openr ( filename )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for reading
END FUNCTION
INTEGER*8 FUNCTION h5pt_openw ( filename )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for writing
END FUNCTION
INTEGER*8 FUNCTION h5pt_opena ( filename )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for appending
END FUNCTION
INTEGER*8 FUNCTION h5pt_openr_par ( filename, mpi_communicator )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for reading
INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program
END FUNCTION
INTEGER*8 FUNCTION h5pt_openw_par ( filename, mpi_communicator )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for writing
INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program
END FUNCTION
INTEGER*8 FUNCTION h5pt_opena_par ( filename, mpi_communicator )
CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for appending
INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program
END FUNCTION
INTEGER*8 FUNCTION h5pt_close ( filehandle )
INTEGER*8, INTENT(IN) :: filehandle ! close this open filehandle
END FUNCTION
!==============Writing and Setting Dataset info========
INTEGER*8 FUNCTION h5pt_setnpoints ( filehandle, npoints )
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: npoints ! The number of particles on *this* processor
END FUNCTION
INTEGER*8 FUNCTION h5pt_setstep (filehandle,step)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: step ! Set the current timestep in the file to this
END FUNCTION
INTEGER*8 FUNCTION h5pt_writedata_r8 ( filehandle, name, data )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing
REAL*8, INTENT(IN) :: data(*) ! The dataarray to write. The number of
! elements is presumably set earlier with
! h5pt_setnpoints(f,npoints)
END FUNCTION
INTEGER*8 FUNCTION h5pt_writedata_i8 ( filehandle, name, data )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing
INTEGER*8, INTENT(IN) :: data(*)
END FUNCTION
!==============Reading Data Characteristics============
INTEGER*8 FUNCTION h5pt_getnsteps (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5pt_getndatasets (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
! returns total number of points in this timestep
! If a "view" has been set using h5pt_setview()
! then it returns the number of points that are
! in the current view.
INTEGER*8 FUNCTION h5pt_getnpoints (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5pt_getdatasetname (filehandle,index,name)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: index ! Index for a given dataset name
CHARACTER(LEN=*), INTENT(OUT) :: name ! returns the name of the dataset at that index
END FUNCTION
!=============Setting and getting views================
INTEGER*8 FUNCTION h5pt_setview (filehandle,start,end)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: start ! offset of the first particle in the view
INTEGER*8, INTENT(IN) :: end ! offset of the first particle after the end of the view
END FUNCTION
INTEGER*8 FUNCTION h5pt_resetview (filehandle)
INTEGER*8, INTENT(IN) :: filehandle ! reset the view on this filehandle to default
END FUNCTION
INTEGER*8 FUNCTION h5pt_hasview (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5pt_getview (filehandle,start,end)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(OUT) :: start ! offset of first particle in the view
INTEGER*8, INTENT(OUT) :: end ! offset of first particle beyond the current view
END FUNCTION
!==============Reading Data=========================
INTEGER*8 FUNCTION h5pt_readdata_r8 (filehandle,name,data)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing
REAL*8, INTENT(OUT) :: data(*) ! The dataarray to read. Number of points
! read is either the number within the view set
! by h5pt_setview() or the default (the total
! number of particles in the file.
END FUNCTION
INTEGER*8 FUNCTION h5pt_readdata_i8 (filehandle,name,data)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing
INTEGER*8, INTENT(OUT) :: data(*) ! The dataarray to read. Number of points
! read is either the number within the view set
! by h5pt_setview() or the default (the total
! number of particles in the file.
END FUNCTION
!=================== Attributes ================
INTEGER*8 FUNCTION h5pt_writefileattrib_r8 (filehandle,attrib_name,attrib_value,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_writefileattrib_i8 (filehandle,attrib_name,attrib_value,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_writefileattrib_string (filehandle,attrib_name,attrib_value)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
END FUNCTION
INTEGER*8 FUNCTION h5pt_writestepattrib_r8 (filehandle,attrib_name,attrib_value,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_writestepattrib_i8 (filehandle,attrib_name,attrib_value,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_writestepattrib_string (filehandle,attrib_name,attrib_value)
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
END FUNCTION
INTEGER*8 FUNCTION h5pt_getnstepattribs (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5pt_getnfileattribs (filehandle)
INTEGER*8, INTENT(IN) :: filehandle
END FUNCTION
INTEGER*8 FUNCTION h5pt_getstepattribinfo (filehandle,idx,attrib_name,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried
CHARACTER(LEN=*), INTENT(OUT) :: attrib_name ! The name of the attribute
INTEGER*8, INTENT(OUT) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_getfileattribinfo (filehandle,idx,attrib_name,attrib_nelem)
INTEGER*8, INTENT(IN) :: filehandle
INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried
CHARACTER(LEN=*), INTENT(OUT) :: attrib_name ! The name of the attribute
INTEGER*8, INTENT(OUT) :: attrib_nelem ! Number of elements in the attrib array
END FUNCTION
INTEGER*8 FUNCTION h5pt_readstepattrib_i8 ( filehandle, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
INTEGER*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5pt_readstepattrib_r8 ( filehandle, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
REAL*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5pt_readfileattrib_i8 (filehandle, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
INTEGER*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5pt_readfileattrib_r8 (filehandle, attrib_name, attrib_value )
INTEGER*8, INTENT(IN) :: filehandle
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
REAL*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array
END FUNCTION
INTEGER*8 FUNCTION h5pt_set_verbosity_level ( level )
INTEGER*8, INTENT(IN) :: level
END FUNCTION
END INTERFACE
+186
View File
@@ -0,0 +1,186 @@
#ifndef __H5PARTPRIVATE_H
#define __H5PARTPRIVATE_H
#define H5PART_GROUPNAME_STEP "Step"
/*!
The functions declared here are not part of the API, but may be used
in extensions like H5Block. We name these functions "private".
\note
Private function may change there interface even in stable versions.
Don't use them in applications!
*/
struct _iter_op_data {
int stop_idx;
int count;
int type;
char *name;
size_t len;
char *pattern;
};
h5part_int64_t
_H5Part_set_step (
H5PartFile *f,
const h5part_int64_t step
);
h5part_int64_t
_H5Part_get_num_particles (
H5PartFile *f
);
herr_t
_H5Part_iteration_operator (
hid_t group_id,
const char *member_name,
void *operator_data
);
void
_H5Part_set_funcname (
char * const fname
);
const char *
_H5Part_get_funcname (
void
);
#define SET_FNAME( fname ) _H5Part_set_funcname( fname );
hid_t
_H5Part_normalize_h5_type (
hid_t type
);
h5part_int64_t
_H5Part_read_attrib (
hid_t id,
const char *attrib_name,
void *attrib_value
);
h5part_int64_t
_H5Part_write_attrib (
hid_t id,
const char *attrib_name,
const hid_t attrib_type,
const void *attrib_value,
const hsize_t attrib_nelem
);
h5part_int64_t
_H5Part_get_attrib_info (
hid_t id,
const h5part_int64_t attrib_idx,
char *attrib_name,
const h5part_int64_t len_attrib_name,
h5part_int64_t *attrib_type,
h5part_int64_t *attrib_nelem
);
h5part_int64_t
_H5Part_get_num_objects (
hid_t group_id,
const char *group_name,
const hid_t type
);
h5part_int64_t
_H5Part_get_num_objects_matching_pattern (
hid_t group_id,
const char *group_name,
const hid_t type,
char * const pattern
);
h5part_int64_t
_H5Part_get_object_name (
hid_t group_id,
const char *group_name,
const hid_t type,
const h5part_int64_t idx,
char *obj_name,
const h5part_int64_t len_obj_name
);
void
_H5Part_vprint_error (
const char *fmt,
va_list ap
);
void
_H5Part_print_error (
const char *fmt,
... )
#ifdef __GNUC__
__attribute__ ((format (printf, 1, 2)))
#endif
;
void
_H5Part_vprint_warn (
const char *fmt,
va_list ap
);
void
_H5Part_print_warn (
const char *fmt,
...
)
#ifdef __GNUC__
__attribute__ ((format (printf, 1, 2)))
#endif
;
void
_H5Part_vprint_info (
const char *fmt,
va_list ap
);
void
_H5Part_print_info (
const char *fmt,
...
)
#ifdef __GNUC__
__attribute__ ((format (printf, 1, 2)))
#endif
;
void
_H5Part_vprint_debug (
const char *fmt,
va_list ap
);
void
_H5Part_print_debug (
const char *fmt,
...
)
#ifdef __GNUC__
__attribute__ ((format (printf, 1, 2)))
#endif
;
char *
_H5Part_strdupfor2c (
const char *s,
const ssize_t len
);
char *
_H5Part_strc2for (
char * const str,
const ssize_t l_str
);
#endif
+92
View File
@@ -0,0 +1,92 @@
/*
System dependend definitions
*/
#ifndef _H5PARTTYPES_H_
#define _H5PARTTYPES_H_
#ifdef WIN32
typedef __int64 int64_t;
#endif /* WIN32 */
typedef int64_t h5part_int64_t;
typedef double h5part_float64_t;
typedef h5part_int64_t (*h5part_error_handler)( const char*, const h5part_int64_t, const char*,...)
#ifdef __GNUC__
__attribute__ ((format (printf, 3, 4)))
#endif
;
#ifndef PARALLEL_IO
typedef unsigned long MPI_Comm;
#endif
struct H5BlockFile;
/**
\struct H5PartFile
This is an essentially opaque datastructure that
acts as the filehandle for all practical purposes.
It is created by H5PartOpenFile<xx>() and destroyed by
H5PartCloseFile().
*/
struct H5PartFile {
hid_t file;
char *groupname_step;
int stepno_width;
int empty;
h5part_int64_t timestep;
hsize_t nparticles;
hid_t timegroup;
hid_t shape;
unsigned mode;
hid_t xfer_prop;
hid_t create_prop;
hid_t access_prop;
hid_t diskshape;
hid_t memshape; /* for parallel I/O (this is on-disk) H5S_ALL
if serial I/O */
h5part_int64_t viewstart; /* -1 if no view is available: A "view" looks */
h5part_int64_t viewend; /* at a subset of the data. */
/**
the number of particles in each processor.
With respect to the "VIEW", these numbers
can be regarded as non-overlapping subsections
of the particle array stored in the file.
So they can be used to compute the offset of
the view for each processor
*/
h5part_int64_t *pnparticles;
/**
Number of processors
*/
int nprocs;
/**
The index of the processor this process is running on.
*/
int myproc;
/**
MPI comnunicator
*/
MPI_Comm comm;
struct H5BlockStruct *block;
h5part_int64_t (*close_block)(struct H5PartFile *f);
};
typedef struct H5PartFile H5PartFile;
#ifdef IPL_XT3
# define SEEK_END 2
#endif
#endif
+93
View File
@@ -0,0 +1,93 @@
# src level Makefile.am
# PATH SETTING (IMPORTED FROM CONFIGURE)
HDF5ROOT = @HDF5ROOT@
# COMPILERS
CC = @CC@
#INCLUDES
HDFINC = -I$(HDF5ROOT)/include
MPIINC = @MPIINC@
INC = $(HDFINC) ${MPIINC}
# H5Part header file location
H5PINC = -I@prefix@/include
# COMPILER FLAGS
CFLAGS = @CFLAGS@ ${INC}
# H5Part compiled library location
H5PLIB = -L@prefix@/lib
# HDF5 LIBRARY
HDFLIB = -L$(HDF5ROOT)/lib -lhdf5 -lz $(SZLIB) @LDFLAGS@
# SZ LIBRARY
SZLIB = @SZLIB@
# Extra files that I wish to include in the dist tar ball.
EXTRA_DIST = TestUnderscoreC.c TestUnderscore.f $(EXTRA_HEADERS)
# Files that I don't want to include in the dist tar ball
nodist_include_HEADERS = @UNDERSCORE_H@
# What to build... Will be determined by configure script.
lib_LIBRARIES = @MTARGET@
# Listing of all possible targets that I may build.
EXTRA_LIBRARIES = libH5Part.a libH5PartF.a
# Header files that I wish to install in $(prefix)/include
include_HEADERS = H5Part.h H5PartTypes.h H5PartErrors.h H5Block.h H5BlockTypes.h H5BlockErrors.h H5Part.inc H5PartF90.inc H5BlockF90.inc @UNDERSCORE_H@
# Listing of all possible headers that I may include
EXTRA_HEADERS = H5PartPrivate.h H5BlockPrivate.h
# Listing of sources
libH5Part_a_SOURCES = H5Part.c H5Block.c
libH5PartF_a_SOURCES = H5PartF.c H5BlockF.c
H5Part.inc: H5PartF90.inc
grep "INTEGER.* FUNCTION" $< | while read type func name rest; do echo " $$type $$name"; done > $@
# Specific building instruction (What compilers to use...)
# ------------ Serial Lib build commands ------------
libH5Part.a: H5Part.o H5Block.o
${AR} rucs $@ $^
libH5PartF.a: H5Part.o H5PartF.o H5Block.o H5BlockF.o
${AR} rucs $@ $^
%.o : %.c
$(CC) $(CFLAGS) $(INC) -c $<
H5Part.o: H5Part.c H5Part.h H5PartPrivate.h H5PartTypes.h
H5PartF.o: H5PartF.c Underscore.h H5Part.h
H5Block.o: H5Block.c H5Part.h H5PartPrivate.h H5PartTypes.h H5Block.h H5BlockTypes.h
H5BlockF.o: H5BlockF.c Underscore.h H5Block.h
# ----------- Build Parallel H5Part Stuff ------------
libpH5Part.a: libH5Part.a
${RM} $@
ln -s $^ $@
libpH5PartF.a: libH5PartF.a
${RM} $@
ln -s $^ $@
clean:
rm -f *~ *.o *.a *.so
distclean: clean
rm -f *.a
rm -rf .deps
rm -rf .libs
rm -f Underscore.h
rm -f H5Part_py_wrap.c
rm -f H5Part.py
rm -f Makefile
+12
View File
@@ -0,0 +1,12 @@
c ==============
c
c Simple Fortran program works in conjunction with C program
c to determine how many underscores are generated
c by the fortran compiler
c
c ==============
program TestUnderscoreF
implicit none
call FindUnderscores
end
+36
View File
@@ -0,0 +1,36 @@
#include <stdio.h>
void findunderscores(void){
printf("#ifndef F77_NO_UNDERSCORE\n");
printf("#define F77_NO_UNDERSCORE\n");
printf("#endif\n");
printf("#ifndef F77_NO_CAPS\n");
printf("#define F77_NO_CAPS\n");
printf("#endif\n");
}
void FindUnderscores(void){
printf("#ifndef F77_NO_UNDERSCORE\n");
printf("#define F77_NO_UNDERSCORE\n");
printf("#endif\n");
}
void FindUnderscores_(void){
printf("#ifndef F77_SINGLE_UNDERSCORE\n");
printf("#define F77_SINGLE_UNDERSCORE\n");
printf("#endif\n");
}
void findunderscores_(void){
printf("#ifndef F77_SINGLE_UNDERSCORE\n");
printf("#define F77_SINGLE_UNDERSCORE\n");
printf("#endif\n");
printf("#ifndef F77_NO_CAPS\n");
printf("#define F77_NO_CAPS\n");
printf("#endif\n");
}
void FINDUNDERSCORES(void){
printf("#ifndef F77_CRAY_UNDERSCORE\n");
printf("#define F77_CRAY_UNDERSCORE\n");
printf("#endif\n");
}
+263
View File
@@ -0,0 +1,263 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mpi.h>
/* #include <mpio.h> */
#include <unistd.h>
#include <sys/types.h>
#ifndef PARALLEL_IO
#define PARALLEL_IO
#endif
#ifndef DISABLE_H5PART
#include "H5Part.h"
#endif
#define FILENAME "testio"
/* normally 64 steps for real benchmark */
/* #define NSTEPS 5 */
/* normally 51e6 for real benchmark */
#define NPARTICLES 51e4
#define NTRIALS 3
/*
bench <nParticles> <nSteps>
*/
int main(int argc,char *argv[]){
if (argc < 3) {
printf("Usage: bench <nParticles> <nSteps> \n");
exit(-1);
}
else {
printf("nparticles: %d, nsteps: %d \n", atoi(argv[1]), atoi(argv[2]));
}
MPI_Info info;
int nprocs,rank;
int trial;
int i,j,n; /* iteration variables */
double starttime,curtime, endtime;
int nparticles = atoi(argv[1]);
int nsteps = atoi(argv[2]);
double *x,*y,*z,*px,*py,*pz;
typedef double *ddouble;
ddouble data[6];
MPI_Datatype chunktype;
int offset;
int localnp;
char filename[128]; /*= FILENAME; */
#ifndef DISABLE_H5PART
H5PartFile *f;
#endif
char newfilename[128];
FILE *fd;
MPI_File file;
MPI_Offset foffset;
MPI_Comm dcomm = MPI_COMM_WORLD;
MPI_Init(&argc,&argv);
MPI_Comm_rank(dcomm,&rank);
MPI_Comm_size(dcomm,&nprocs);
localnp=nparticles/(int64_t)nprocs;
for(offset=0,i=0;i<rank;i++){
offset+=localnp;
}
data[0]=x=(double*)malloc(sizeof(double)*(size_t)localnp);
data[1]=y=(double*)malloc(sizeof(double)*(size_t)localnp);
data[2]=z=(double*)malloc(sizeof(double)*(size_t)localnp);
data[3]=px=(double*)malloc(sizeof(double)*(size_t)localnp);
data[4]=py=(double*)malloc(sizeof(double)*(size_t)localnp);
data[5]=pz=(double*)malloc(sizeof(double)*(size_t)localnp);
/* printf("about to call create subarray with nparticles=%u localnp=%u offset=%u\n",
nparticles,localnp,offset); */
MPI_Type_create_subarray(1, /* rank */
&nparticles, /* size of the global array */
&localnp, /* size of my local chunk */
&offset, /* offset of this chunk in global */
MPI_ORDER_FORTRAN, /* fortran storage order */
MPI_DOUBLE,
&chunktype);
MPI_Type_commit(&chunktype);
MPI_Info_create(&info);
MPI_Info_set(info, "IBM_largeblock_io", "true" );
if(rank==0) printf("Nprocs=%u Particles=%u*6attribs*sizeof(double) Particles/proc=%u Nsteps=%u Ntrials=%u\n",
nprocs,nparticles,localnp,nsteps,NTRIALS);
for(trial=0;trial<NTRIALS;trial++){
if(rank==0) printf("---------------------- Trial %u of %u ---------------------\n",trial+1,NTRIALS);
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
sprintf(filename,"%s.%u.mpio.dat",FILENAME,nprocs);
if(rank==0) unlink(filename);
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
MPI_File_open(MPI_COMM_WORLD,filename,
MPI_MODE_CREATE | MPI_MODE_RDWR,
info,&file);
MPI_File_set_view(file,0,MPI_DOUBLE,chunktype,"native",info);
/* now a barrier to get the start timers roughly synced*/
MPI_Barrier(MPI_COMM_WORLD);
curtime = starttime = MPI_Wtime();
endtime = starttime+5.0*60.0; /* end in 5 minutes */
MPI_Bcast(&endtime,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
/* must touch the entire array after each write */
/* ensures cache-invalidation */
foffset=0;
i=0;
curtime=starttime;
for(i=0;i<nsteps;i++){
int n;
MPI_Status status;
for(j=0;j<6;j++){
/* touch data */
for(n=0;n<localnp;n++)
(data[j])[n]=(double)rank;
/* write to that file */
/* MPI_File_set_view(file,foffset,MPI_DOUBLE,chunktype,"native",info);*/
#ifdef COLLECTIVE_IO
MPI_File_write_at_all(file,
foffset,
data[j],
localnp,
MPI_DOUBLE,&status);
#else
MPI_File_write_at(file,
foffset,
data[j],
localnp,
MPI_DOUBLE,&status);
#endif
foffset+=nparticles/nprocs;
}
curtime=MPI_Wtime(); /* ensure no race condition by broadcasting time */
MPI_Bcast(&curtime,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
}
MPI_File_close(&file);
MPI_Barrier(MPI_COMM_WORLD);
endtime=MPI_Wtime();
/* foffset*=nprocs; if we want total megabytes written */
if(rank==0){
puts("*");
unlink(filename);
puts("======================================================");
printf("Raw MPI-IO Total Duration %lf seconds, iterations=%u %lf Megabytes written per processor Nprocs= %u \n",
(endtime-starttime),i,((double)foffset)/(1024.0*1024.0),nprocs);
printf("Raw MPI-IO Effective Data Rate = %lf Megabytes/sec global and %lf Megabytes/sec per task Nprocs= %u \n",
(double)(nprocs*localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),
(double)(localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),nprocs);
puts("======================================================");
}
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
/* OK, now we do this using POSIX IO */
sprintf(newfilename,"testio%u.%u.dat",rank,nprocs);
unlink(newfilename);
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
fd = fopen(newfilename,"w");
/* start the timer */
starttime=endtime=MPI_Wtime();
for(i=0;i<nsteps;i++){
for(j=0;j<6;j++){
/* touch data */
for(n=0;n<localnp;n++)
(data[j])[n]=(double)rank;
fwrite(data[j],sizeof(double),localnp,fd);
}
curtime=MPI_Wtime(); /* ensure no race condition by broadcasting time */
MPI_Bcast(&curtime,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
}
fclose(fd);
MPI_Barrier(MPI_COMM_WORLD);
endtime=MPI_Wtime();
if(rank==0) puts("*");
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
unlink(newfilename);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0){
puts("======================================================");
printf("Raw 1-file-per-proc Total Duration %lf seconds, iterations=%u %lf Megabytes written Nprocs= %u \n",
(endtime-starttime),nsteps,((double)foffset)/(1024.0*1024.0),nprocs);
printf("Raw 1-file-per-proc Effective Data Rate = %lf Megabytes/sec global and %lf Megabytes/sec per task Nprocs= %u \n",
(double)(nprocs*localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),
(double)(localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),nprocs);
puts("======================================================");
}
#ifndef DISABLE_H5PART
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
/* OK, now we do this using H5Part */
sprintf(filename,"%s.%u.h5.dat",FILENAME,nprocs);
if(rank==0) unlink(filename);
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
f = H5PartOpenFileParallel(filename,H5PART_WRITE,MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD); /* to prevent unlink from interfering with file open */
/* start the timer */
starttime=endtime=MPI_Wtime();
H5PartSetNumParticles(f,localnp);
for(i=0;i<nsteps;i++){
for(j=0;j<6;j++){
/* touch data */
for(n=0;n<localnp;n++)
(data[j])[n]=(double)rank;
}
H5PartSetStep(f,i);
H5PartWriteDataFloat64(f,"x",x);
H5PartWriteDataFloat64(f,"y",y);
H5PartWriteDataFloat64(f,"z",z);
H5PartWriteDataFloat64(f,"px",px);
H5PartWriteDataFloat64(f,"py",py);
H5PartWriteDataFloat64(f,"pz",pz);
curtime=MPI_Wtime(); /* ensure no race condition by broadcasting time */
MPI_Bcast(&curtime,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
}
H5PartCloseFile(f);
MPI_Barrier(MPI_COMM_WORLD);
endtime=MPI_Wtime();
if(rank==0){
puts("*");
unlink(filename);
puts("======================================================");
printf("H5Part Total Duration %lf seconds, iterations=%u %lf Megabytes written Nprocs= %u \n",
(endtime-starttime),nsteps,((double)foffset)/(1024.0*1024.0),nprocs);
printf("H5Part Effective Data Rate = %lf Megabytes/sec global and %lf Megabytes/sec per task Nprocs= %u \n",
(double)(nprocs*localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),
(double)(localnp*sizeof(double))*((double)nsteps)*6.0/((endtime-starttime)*1024.0*1024.0),nprocs);
puts("======================================================");
}
MPI_Barrier(MPI_COMM_WORLD);
#endif
} /* trials */
MPI_Finalize();
return 0;
}
+189
View File
@@ -0,0 +1,189 @@
Since we have no different version for serial and parallel system,
all tests are compiled for "parallel" systems (which may have only
one processor).
Only one time-step!
* H5BlockWriteScalarField1Proc
- 1 processor
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i
- Set field attribute "TestString" to "42"
- Set field attribute "TestInt64" to 42
- Set field attribute "TestFloat64" to 42.0
- filename: blockfile1.h5
* H5BlockReadScalarField1Proc
- 1 processor
- read file "blockfile1.h5"
- check values of field data
- check values of attributes
* H5BlockWriteScalarField8Procs
- 8 processors
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i + 10000000*proc
- layout:
proc 0: ( 0:63, 0:63, 0: 63)
proc 1: ( 0:63, 0:63, 64:127)
proc 2: ( 0:63, 0:63, 128:191)
proc 3: ( 0:63, 0:63, 192,255)
proc 4: ( 0:63, 0:63, 256:319)
proc 5: ( 0:63, 0:63, 320:383)
proc 6: ( 0:63, 0:63, 384:447)
proc 7: ( 0:63, 0:63, 448:511)
- filename = blockfile2.h5
* H5BlockReadScalarField8Procs
- 8 processors
- read file "blockfile2.h5"
- check values of field data
- layout as above
* H5BlockWriteScalarField8ProcsWithGosts
- 8 processors
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i + 10000000*proc
- layout:
proc 0: ( 0:63, 0:63, 0: 64)
proc 1: ( 0:63, 0:63, 63:128)
proc 2: ( 0:63, 0:63, 127:192)
proc 3: ( 0:63, 0:63, 191,256)
proc 4: ( 0:63, 0:63, 255:320)
proc 5: ( 0:63, 0:63, 319:384)
proc 6: ( 0:63, 0:63, 383:448)
proc 7: ( 0:63, 0:63, 447:511)
- filename: blockfile3.h5
* H5BlockReadScalarField8ProcsWithGostZones
- 8 processors
- read file "blockfile3.h5"
- check values of field data
- layout as above
* H5BlockWriteScalarField16ProcsWithGostZones
- 16 processors
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i + 10000000*proc
- layout:
proc 0: ( 0:63, 0:32, 0: 64)
proc 1: ( 0:63, 31:63, 0: 64)
proc 2: ( 0:63, 0:32, 63:128)
proc 3: ( 0:63, 31:63, 63:128)
proc 4: ( 0:63, 0:32, 127:192)
proc 5: ( 0:63, 31:63, 127:192)
proc 6: ( 0:63, 0:32, 191,256)
proc 7: ( 0:63, 31:63, 191,256)
proc 8: ( 0:63, 0:32, 255:320)
proc 9: ( 0:63, 31:63, 255:320)
proc 10: ( 0:63, 0:32, 319:384)
proc 11: ( 0:63, 31:63, 319:384)
proc 12: ( 0:63, 0:32, 383:448)
proc 13: ( 0:63, 31:63, 383:448)
proc 14: ( 0:63, 0:32, 447:511)
proc 15: ( 0:63, 31:63, 447:511)
- filename: blockfile4.h5
* H5BlockReadScalarField16ProcsWithGosts
- 16 processors
- read file "blockfile4.h5"
- check values of field data
- layout as above
* H5BlockWriteScalarField32Procs
- 32 processors
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i + 10000000*proc
- layout:
proc 0: ( 0:31, 0:31, 0: 63)
proc 1: ( 0:31, 32:63, 0: 63)
proc 2: ( 32:63, 0:31, 0: 63)
proc 3: ( 32:63, 32:63, 0: 63)
proc 4: ( 0:31, 0:31, 64:127)
proc 5: ( 0:31, 32:63, 64:127)
proc 6: ( 32:63, 0:31, 64:127)
proc 7: ( 32:63, 32:63, 64:127)
proc 8: ( 0:31, 0:31, 128:191)
proc 9: ( 0:31, 32:63, 128:191)
proc 10: ( 32:63, 0:31, 128:191)
proc 11: ( 32:63, 32:63, 128:191)
proc 12: ( 0:31, 0:31, 192:255)
proc 13: ( 0:31, 32:63, 192:255)
proc 14: ( 32:63, 0:31, 192:255)
proc 15: ( 32:63, 32:63, 192:255)
proc 16: ( 0:31, 0:31, 256:319)
proc 17: ( 0:31, 32:63, 256:319)
proc 18: ( 32:63, 0:31, 256:319)
proc 19: ( 32:63, 32:63, 256:319)
proc 20: ( 0:31, 0:31, 320:383)
proc 21: ( 0:31, 32:63, 320:383)
proc 22: ( 32:63, 0:31, 320:383)
proc 23: ( 32:63, 32:63, 320:383)
proc 24: ( 0:31, 0:31, 384:447)
proc 25: ( 0:31, 32:63, 384:447)
proc 26: ( 32:63, 0:31, 384:447)
proc 27: ( 32:63, 32:63, 384:447)
proc 28: ( 0:31, 0:31, 448:511)
proc 29: ( 0:31, 32:63, 448:511)
proc 30: ( 32:63, 0:31, 448:511)
proc 31: ( 32:63, 32:63, 448:511)
- filename: blockfile5.h5
* H5BlockReadScalarField32Procs
- 32 processors
- read file "blockfile4.h5"
- check values of field data
- layout as above
* H5BlockWriteScalarField32ProcsWithGosts
- 32 processors
- Write field data "TestField" with dimension sizes
(64, 64, 512) and scalar values:
data[i,j,k] = k + 1000*j + 100000*i + 10000000*proc
- layout:
proc 0: ( 0:32, 0:32, 0: 64)
proc 1: ( 0:32, 31:63, 0: 64)
proc 2: ( 31:63, 0:32, 0: 64)
proc 3: ( 31:63, 31:63, 0: 64)
proc 4: ( 0:32, 0:32, 63:128)
proc 5: ( 0:32, 31:63, 63:128)
proc 6: ( 31:63, 0:32, 63:128)
proc 7: ( 31:63, 31:63, 63:128)
proc 8: ( 0:32, 0:32, 127:192)
proc 9: ( 0:32, 31:63, 127:192)
proc 10: ( 31:63, 0:32, 127:192)
proc 11: ( 31:63, 31:63, 127:192)
proc 12: ( 0:32, 0:32, 191:256)
proc 13: ( 0:32, 31:63, 191:256)
proc 14: ( 31:63, 0:32, 191:256)
proc 15: ( 31:63, 31:63, 191:256)
proc 16: ( 0:32, 0:32, 255:320)
proc 17: ( 0:32, 31:63, 255:320)
proc 18: ( 31:63, 0:32, 255:320)
proc 19: ( 31:63, 31:63, 255:320)
proc 20: ( 0:32, 0:32, 319:384)
proc 21: ( 0:32, 31:63, 319:384)
proc 22: ( 31:63, 0:32, 319:384)
proc 23: ( 31:63, 31:63, 319:384)
proc 24: ( 0:31, 0:31, 383:448)
proc 25: ( 0:31, 31:63, 383:448)
proc 26: ( 31:63, 0:31, 383:448)
proc 27: ( 31:63, 31:63, 383:448)
proc 28: ( 0:32, 0:32, 447:511)
proc 29: ( 0:32, 31:63, 447:511)
proc 30: ( 31:63, 0:32, 447:511)
proc 31: ( 31:63, 31:63, 447:511)
filename: blockfile6.h5
* H5BlockReadScalarField32ProcsWithGhosts
- 32 processors
- read file "blockfile6.h5"
- check values of field data
- layout as above
+716
View File
@@ -0,0 +1,716 @@
#include <stdio.h>
#include <stdlib.h>
#include <hdf5.h>
#include "H5Part.h"
#include "H5Block.h"
#include "H5BlockTypes.h"
static int _debug = 4;
void
_H5Part_vprint_error (
const char *fmt,
va_list ap
) {
if ( _debug < 1 ) return;
vfprintf ( stderr, fmt, ap );
fprintf ( stderr, "\n" );
}
void
_H5Part_print_error (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
_H5Part_vprint_error ( fmt, ap );
va_end ( ap );
}
void
_H5Part_vprint_warn (
const char *fmt,
va_list ap
) {
if ( _debug < 2 ) return;
vfprintf ( stderr, fmt, ap );
fprintf ( stderr, "\n" );
}
void
_H5Part_print_warn (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
_H5Part_vprint_warn ( fmt, ap );
va_end ( ap );
}
void
_H5Part_vprint_info (
const char *fmt,
va_list ap
) {
if ( _debug < 3 ) return;
vfprintf ( stdout, fmt, ap );
fprintf ( stdout, "\n" );
}
void
_H5Part_print_info (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
_H5Part_vprint_info ( fmt, ap );
va_end ( ap );
}
void
_H5Part_vprint_debug (
const char *fmt,
va_list ap
) {
if ( _debug < 4 ) return;
vfprintf ( stdout, fmt, ap );
fprintf ( stdout, "\n" );
}
void
_H5Part_print_debug (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
_H5Part_vprint_debug ( fmt, ap );
va_end ( ap );
}
struct H5BlockPartition Layout1[1] = {
{ 0, 63, 0, 63, 0, 511 }
};
struct H5BlockPartition Layout8[8] = {
{ 0,63, 0,63, 0, 63},
{ 0,63, 0,63, 64,127},
{ 0,63, 0,63, 128,191},
{ 0,63, 0,63, 192,255},
{ 0,63, 0,63, 256,319},
{ 0,63, 0,63, 320,383},
{ 0,63, 0,63, 384,447},
{ 0,63, 0,63, 448,511}
};
struct H5BlockPartition Layout8G[8] = {
{ 0,63, 0,63, 0, 64},
{ 0,63, 0,63, 63,128},
{ 0,63, 0,63, 127,192},
{ 0,63, 0,63, 191,256},
{ 0,63, 0,63, 255,320},
{ 0,63, 0,63, 319,384},
{ 0,63, 0,63, 383,448},
{ 0,63, 0,63, 447,511}
};
struct H5BlockPartition Layout16[16] = {
{ 0,63, 0,31, 0, 63},
{ 0,63, 32,63, 0, 63},
{ 0,63, 0,31, 64,127},
{ 0,63, 32,63, 64,127},
{ 0,63, 0,31, 128,191},
{ 0,63, 32,63, 128,191},
{ 0,63, 0,31, 192,255},
{ 0,63, 32,63, 192,255},
{ 0,63, 0,31, 256,319},
{ 0,63, 32,63, 256,319},
{ 0,63, 0,31, 320,383},
{ 0,63, 32,63, 320,383},
{ 0,63, 0,31, 384,447},
{ 0,63, 32,63, 384,447},
{ 0,63, 0,31, 448,511},
{ 0,63, 32,63, 448,511}
};
struct H5BlockPartition Layout16G[16] = {
{ 0,63, 0,32, 0, 64},
{ 0,63, 31,63, 0, 64},
{ 0,63, 0,32, 63,128},
{ 0,63, 31,63, 63,128},
{ 0,63, 0,32, 127,192},
{ 0,63, 31,63, 127,192},
{ 0,63, 0,32, 191,256},
{ 0,63, 31,63, 191,256},
{ 0,63, 0,32, 255,320},
{ 0,63, 31,63, 255,320},
{ 0,63, 0,32, 319,384},
{ 0,63, 31,63, 319,384},
{ 0,63, 0,32, 383,448},
{ 0,63, 31,63, 383,448},
{ 0,63, 0,32, 447,511},
{ 0,63, 31,63, 447,511}
};
struct H5BlockPartition Layout32[32] = {
{ 0,31, 0,31, 0, 63},
{ 0,31, 32,63, 0, 63},
{ 32,63, 0,31, 0, 63},
{ 32,63, 32,63, 0, 63},
{ 0,31, 0,31, 64,127},
{ 0,31, 32,63, 64,127},
{ 32,63, 0,31, 64,127},
{ 32,63, 32,63, 64,127},
{ 0,31, 0,31, 128,191},
{ 0,31, 32,63, 128,191},
{ 32,63, 0,31, 128,191},
{ 32,63, 32,63, 128,191},
{ 0,31, 0,31, 192,255},
{ 0,31, 32,63, 192,255},
{ 32,63, 0,31, 192,255},
{ 32,63, 32,63, 192,255},
{ 0,31, 0,31, 256,319},
{ 0,31, 32,63, 256,319},
{ 32,63, 0,31, 256,319},
{ 32,63, 32,63, 256,319},
{ 0,31, 0,31, 320,383},
{ 0,31, 32,63, 320,383},
{ 32,63, 0,31, 320,383},
{ 32,63, 32,63, 320,383},
{ 0,31, 0,31, 384,447},
{ 0,31, 32,63, 384,447},
{ 32,63, 0,31, 384,447},
{ 32,63, 32,63, 384,447},
{ 0,31, 0,31, 448,511},
{ 0,31, 32,63, 448,511},
{ 32,63, 0,31, 448,511},
{ 32,63, 32,63, 448,511}
};
struct H5BlockPartition Layout32G[32] = {
{ 0,32, 0,32, 0, 64},
{ 0,32, 31,63, 0, 64},
{ 31,63, 0,32, 0, 64},
{ 31,63, 31,63, 0, 64},
{ 0,32, 0,32, 63,128},
{ 0,32, 31,63, 63,128},
{ 31,63, 0,32, 63,128},
{ 31,63, 31,63, 63,128},
{ 0,32, 0,32, 127,192},
{ 0,32, 31,63, 127,192},
{ 31,63, 0,32, 127,192},
{ 31,63, 31,63, 127,192},
{ 0,32, 0,32, 191,256},
{ 0,32, 31,63, 191,256},
{ 31,63, 0,32, 191,256},
{ 31,63, 31,63, 191,256},
{ 0,32, 0,32, 255,320},
{ 0,32, 31,63, 255,320},
{ 31,63, 0,32, 255,320},
{ 31,63, 31,63, 255,320},
{ 0,32, 0,32, 319,384},
{ 0,32, 31,63, 319,384},
{ 31,63, 0,32, 319,384},
{ 31,63, 31,63, 319,384},
{ 0,31, 0,31, 383,448},
{ 0,31, 31,63, 383,448},
{ 31,63, 0,31, 383,448},
{ 31,63, 31,63, 383,448},
{ 0,32, 0,32, 447,511},
{ 0,32, 31,63, 447,511},
{ 31,63, 0,32, 447,511},
{ 31,63, 31,63, 447,511}
};
#define _NO_GHOSTZONE(p,q) ( (p->i_end < q->i_start) \
|| (p->j_end < q->j_start) \
|| (p->k_end < q->k_start) )
/*
#define _HAVE_GHOSTZONE(p,q) ( (p->i_end >= q->i_start) \
&& (p->j_end >= q->j_start) \
&& (p->k_end >= q->k_start) \
&& (q->i_end >= p->i_start) \
&& (q->j_end >= p->j_start) \
&& (q->k_end >= p->k_start) )
*/
static int
_have_ghostzone (
const struct H5BlockPartition *p,
const struct H5BlockPartition *q
) {
return ( ! ( _NO_GHOSTZONE ( p, q ) || _NO_GHOSTZONE ( q, p ) ) );
}
static h5part_int64_t
_volume_of_partition (
const struct H5BlockPartition *p
) {
return (p->i_end - p->i_start)
* (p->j_end - p->j_start)
* (p->k_end - p->k_start);
}
#define MIN( x, y ) ( (x) <= (y) ? (x) : (y) )
#define MAX( x, y ) ( (x) >= (y) ? (x) : (y) )
static h5part_int64_t
_volume_of_ghostzone (
const struct H5BlockPartition *p,
const struct H5BlockPartition *q
) {
h5part_int64_t dx = MIN ( p->i_end, q->i_end )
- MAX ( p->i_start, q->i_start ) + 1;
h5part_int64_t dy = MIN ( p->j_end, q->j_end )
- MAX ( p->j_start, q->j_start ) + 1;
h5part_int64_t dz = MIN ( p->k_end, q->k_end )
- MAX ( p->k_start, q->k_start ) + 1;
return dx * dy * dz;
}
static h5part_int64_t
_dissolve_X_ghostzone (
struct H5BlockPartition *p,
struct H5BlockPartition *q
) {
if ( p->i_start > q->i_start )
return _dissolve_X_ghostzone( q, p );
if ( q->i_end <= p->i_end ) /* no dissolving */
return -1;
p->i_end = ( p->i_end + q->i_start ) >> 1;
q->i_start = p->i_end + 1;
return 0;
}
static h5part_int64_t
_dissolve_Y_ghostzone (
struct H5BlockPartition *p,
struct H5BlockPartition *q
) {
if ( p->j_start > q->j_start )
return _dissolve_Y_ghostzone( q, p );
if ( q->j_end <= p->j_end ) /* no dissolving */
return -1;
p->j_end = ( p->j_end + q->j_start ) >> 1;
q->j_start = p->j_end + 1;
return 0;
}
static h5part_int64_t
_dissolve_Z_ghostzone (
struct H5BlockPartition *p,
struct H5BlockPartition *q
) {
if ( p->k_start > q->k_start )
return _dissolve_Z_ghostzone( q, p );
if ( q->k_end <= p->k_end ) /* no dissolving */
return -1;
p->k_end = ( p->k_end + q->k_start ) >> 1;
q->k_start = p->k_end + 1;
return 0;
}
#if 0
static h5part_int64_t
_dissolve_ghostzone_max_volume_of_dissolved_partitions (
struct H5BlockPartition *p,
struct H5BlockPartition *q
) {
struct H5BlockPartition p_;
struct H5BlockPartition q_;
struct H5BlockPartition p_best;
struct H5BlockPartition q_best;
h5part_int64_t vol;
h5part_int64_t max_vol = 0;
p_ = *p;
q_ = *q;
if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
p_ = *p;
q_ = *q;
if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
p_ = *p;
q_ = *q;
if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
if ( max_vol <= 0 ) {
return H5PART_ERR_LAYOUT;
}
*p = p_best;
*q = q_best;
return H5PART_SUCCESS;
}
static h5part_int64_t
_dissolve_ghostzones_max_volume_of_dissolved_partitions (
H5PartFile *f
) {
h5part_int64_t herr;
struct H5BlockStruct *b = f->block;
struct H5BlockPartition *part1;
struct H5BlockPartition *part2;
int proc1, proc2;
memcpy ( b->write_layout, b->user_layout,
f->nprocs * sizeof (*f->block->user_layout) );
for ( proc1 = 0, part1 = b->write_layout;
proc1 < f->nprocs-1;
proc1++, part1++ ) {
for ( proc2 = proc1+1, part2 = &b->write_layout[proc2];
proc2 < f->nprocs;
proc2++, part2++ ) {
if ( ! _have_ghostzone ( part1, part2 ) )
continue;
herr = _dissolve_ghostzone_max_volume_of_dissolved_partitions (
part1, part2 );
if ( herr < 0 ) return herr;
}
}
_H5Part_print_debug ("Layout after dissolving ghost-zones:");
for ( proc1 = 0, part1 = b->write_layout;
proc1 < f->nprocs;
proc1++, part1++ ) {
_H5Part_print_debug (
"PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ",
f->myproc, proc1,
(long long)part1->i_start,
(long long)part1->i_end,
(long long)part1->j_start,
(long long)part1->j_end,
(long long)part1->k_start,
(long long)part1->k_end );
}
return H5PART_SUCCESS;
}
#endif
static h5part_int64_t
_dissolve_ghostzone (
struct H5BlockPartition *p,
struct H5BlockPartition *q
) {
struct H5BlockPartition p_;
struct H5BlockPartition q_;
struct H5BlockPartition p_best;
struct H5BlockPartition q_best;
h5part_int64_t vol;
h5part_int64_t max_vol = 0;
p_ = *p;
q_ = *q;
if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
p_ = *p;
q_ = *q;
if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
p_ = *p;
q_ = *q;
if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
q_best = q_;
}
}
if ( max_vol <= 0 ) {
return H5PART_ERR_LAYOUT;
}
*p = p_best;
*q = q_best;
return H5PART_SUCCESS;
}
#if 0
static h5part_int64_t
_dissolve_ghostzones (
H5PartFile *f
) {
struct H5BlockStruct *b = f->block;
struct H5BlockPartition *p, *max_p;
struct H5BlockPartition *q, *max_q;
int proc_p, proc_q;
h5part_int64_t vol, max_vol;
int max_proc_p, max_proc_q;
memcpy ( b->write_layout, b->user_layout,
f->nprocs * sizeof (*f->block->user_layout) );
while ( 1 ) {
max_vol = 0;
for ( proc_p = 0, p = b->write_layout;
proc_p < f->nprocs-1;
proc_p++, p++ ) {
for ( proc_q = proc_p+1, q = &b->write_layout[proc_q];
proc_q < f->nprocs;
proc_q++, q++ ) {
if ( ! _have_ghostzone ( p, q ) )
continue;
vol = _volume_of_ghostzone ( p, q );
if ( vol > max_vol ) {
max_vol = vol;
max_proc_p = proc_p;
max_proc_q = proc_q;
max_p = p;
max_q = q;
}
}
}
if ( max_vol == 0 )
break;
_dissolve_ghostzone ( max_p, max_q );
}
_H5Part_print_debug ("Layout after dissolving ghost-zones:");
for ( proc_p = 0, p = b->write_layout;
proc_p < f->nprocs;
proc_p++, p++ ) {
_H5Part_print_debug (
"PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ",
f->myproc, proc_p,
(long long)p->i_start,
(long long)p->i_end,
(long long)p->j_start,
(long long)p->j_end,
(long long)p->k_start,
(long long)p->k_end );
}
return H5PART_SUCCESS;
}
#endif
static h5part_int64_t
_dissolve_ghostzones (
H5PartFile *f
) {
struct H5BlockStruct *b = f->block;
struct H5BlockPartition *p;
struct H5BlockPartition *q;
int proc_p, proc_q;
struct list {
struct list *prev;
struct list *next;
struct H5BlockPartition *p;
struct H5BlockPartition *q;
h5part_int64_t vol;
} *p_begin, *p_el, *p_max, *p_end, *p_save;
memcpy ( b->write_layout, b->user_layout,
f->nprocs * sizeof (*f->block->user_layout) );
/*
build a list of all ghost-zones, save procs and volume remember max volume
while list not empty
take element with max volume from list and dissolve ghost-zones for this
recalculate volumes for remaining list elements remember max volume
remove list element if volume is zero
*/
p_begin = p_max = p_end = malloc ( sizeof ( *p_begin ) );
memset ( p_begin, 0, sizeof ( *p_begin ) );
for ( proc_p = 0, p = b->write_layout;
proc_p < f->nprocs-1;
proc_p++, p++ ) {
for ( proc_q = proc_p+1, q = &b->write_layout[proc_q];
proc_q < f->nprocs;
proc_q++, q++ ) {
if ( _have_ghostzone ( p, q ) ) {
p_el = malloc ( sizeof ( *p_el ) );
p_el->p = p;
p_el->q = q;
p_el->vol = _volume_of_ghostzone ( p, q );
p_el->prev = p_end;
p_el->next = NULL;
if ( p_el->vol > p_max->vol )
p_max = p_el;
p_end->next = p_el;
p_end = p_el;
}
}
}
while ( p_begin->next ) {
if ( p_max->next ) p_max->next->prev = p_max->prev;
p_max->prev->next = p_max->next;
_dissolve_ghostzone ( p_max->p, p_max->q );
free ( p_max );
p_el = p_max = p_begin->next;
while ( p_el ) {
if ( _have_ghostzone ( p_el->p, p_el->q ) ) {
p_el->vol = _volume_of_ghostzone ( p_el->p, p_el->q );
if ( p_el->vol > p_max->vol )
p_max = p_el;
p_el = p_el->next;
} else {
if ( p_el->next )
p_el->next->prev = p_el->prev;
p_el->prev->next = p_el->next;
p_save = p_el->next;
free ( p_el );
p_el = p_save;
}
}
}
free ( p_begin );
_H5Part_print_debug ("Layout after dissolving ghost-zones:");
for ( proc_p = 0, p = b->write_layout;
proc_p < f->nprocs;
proc_p++, p++ ) {
_H5Part_print_debug (
"PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ",
f->myproc, proc_p,
(long long)p->i_start,
(long long)p->i_end,
(long long)p->j_start,
(long long)p->j_end,
(long long)p->k_start,
(long long)p->k_end );
}
return H5PART_SUCCESS;
}
static H5PartFile*
_init (
void
) {
H5PartFile *f;
struct H5BlockStruct *b;
f = (H5PartFile*) malloc( sizeof (H5PartFile) );
if( f == NULL ) {
return NULL;
}
memset (f, 0, sizeof (H5PartFile));
f->nprocs = 32;
f->block = malloc( sizeof (*f->block) );
if ( f->block == NULL ) {
return NULL;
}
b = f->block;
memset ( b, 0, sizeof (*b) );
b->user_layout = malloc ( f->nprocs * sizeof (b->user_layout[0]) );
if ( b->user_layout == NULL ) {
return NULL;
}
b->write_layout = malloc ( f->nprocs * sizeof (b->write_layout[0]) );
if ( b->write_layout == NULL ) {
return NULL;
}
b->timestep = -1;
b->blockgroup = -1;
b->shape = -1;
b->diskshape = -1;
b->memshape = -1;
b->field_group_id = -1;
return f;
}
int
main (
int argc,
char *argv[]
) {
H5PartFile *f = _init ();
memcpy ( f->block->user_layout, Layout32G,
f->nprocs * sizeof (*f->block->user_layout) );
_dissolve_ghostzones ( f );
return 0;
}
+462
View File
@@ -0,0 +1,462 @@
#include <stdio.h>
#include <stdlib.h>
#include <hdf5.h>
#include "H5Part.h"
#include "H5Block.h"
#include "H5BlockTypes.h"
#define NPROCS 8
struct H5BlockPartition Layout1[1] = {
{ 0, 63, 0, 63, 0, 511 }
};
struct H5BlockPartition Layout8[8] = {
{ 0,63, 0,63, 0, 63},
{ 0,63, 0,63, 64,127},
{ 0,63, 0,63, 128,191},
{ 0,63, 0,63, 192,255},
{ 0,63, 0,63, 256,319},
{ 0,63, 0,63, 320,383},
{ 0,63, 0,63, 384,447},
{ 0,63, 0,63, 448,511}
};
struct H5BlockPartition Layout8G[8] = {
{ 0,63, 0,63, 0, 64},
{ 0,63, 0,63, 63,128},
{ 0,63, 0,63, 127,192},
{ 0,63, 0,63, 191,256},
{ 0,63, 0,63, 255,320},
{ 0,63, 0,63, 319,384},
{ 0,63, 0,63, 383,448},
{ 0,63, 0,63, 447,511}
};
struct H5BlockPartition Layout16[16] = {
{ 0,63, 0,31, 0, 63},
{ 0,63, 32,63, 0, 63},
{ 0,63, 0,31, 64,127},
{ 0,63, 32,63, 64,127},
{ 0,63, 0,31, 128,191},
{ 0,63, 32,63, 128,191},
{ 0,63, 0,31, 192,255},
{ 0,63, 32,63, 192,255},
{ 0,63, 0,31, 256,319},
{ 0,63, 32,63, 256,319},
{ 0,63, 0,31, 320,383},
{ 0,63, 32,63, 320,383},
{ 0,63, 0,31, 384,447},
{ 0,63, 32,63, 384,447},
{ 0,63, 0,31, 448,511},
{ 0,63, 32,63, 448,511}
};
struct H5BlockPartition Layout16G[16] = {
{ 0,63, 0,32, 0, 64},
{ 0,63, 31,63, 0, 64},
{ 0,63, 0,32, 63,128},
{ 0,63, 31,63, 63,128},
{ 0,63, 0,32, 127,192},
{ 0,63, 31,63, 127,192},
{ 0,63, 0,32, 191,256},
{ 0,63, 31,63, 191,256},
{ 0,63, 0,32, 255,320},
{ 0,63, 31,63, 255,320},
{ 0,63, 0,32, 319,384},
{ 0,63, 31,63, 319,384},
{ 0,63, 0,32, 383,448},
{ 0,63, 31,63, 383,448},
{ 0,63, 0,32, 447,511},
{ 0,63, 31,63, 447,511}
};
struct H5BlockPartition Layout32[32] = {
{ 0,31, 0,31, 0, 63},
{ 0,31, 32,63, 0, 63},
{ 32,63, 0,31, 0, 63},
{ 32,63, 32,63, 0, 63},
{ 0,31, 0,31, 64,127},
{ 0,31, 32,63, 64,127},
{ 32,63, 0,31, 64,127},
{ 32,63, 32,63, 64,127},
{ 0,31, 0,31, 128,191},
{ 0,31, 32,63, 128,191},
{ 32,63, 0,31, 128,191},
{ 32,63, 32,63, 128,191},
{ 0,31, 0,31, 192,255},
{ 0,31, 32,63, 192,255},
{ 32,63, 0,31, 192,255},
{ 32,63, 32,63, 192,255},
{ 0,31, 0,31, 256,319},
{ 0,31, 32,63, 256,319},
{ 32,63, 0,31, 256,319},
{ 32,63, 32,63, 256,319},
{ 0,31, 0,31, 320,383},
{ 0,31, 32,63, 320,383},
{ 32,63, 0,31, 320,383},
{ 32,63, 32,63, 320,383},
{ 0,31, 0,31, 384,447},
{ 0,31, 32,63, 384,447},
{ 32,63, 0,31, 384,447},
{ 32,63, 32,63, 384,447},
{ 0,31, 0,31, 448,511},
{ 0,31, 32,63, 448,511},
{ 32,63, 0,31, 448,511},
{ 32,63, 32,63, 448,511}
};
struct H5BlockPartition Layout32G[32] = {
{ 0,32, 0,32, 0, 64},
{ 0,32, 31,63, 0, 64},
{ 31,63, 0,32, 0, 64},
{ 31,63, 31,63, 0, 64},
{ 0,32, 0,32, 63,128},
{ 0,32, 31,63, 63,128},
{ 31,63, 0,32, 63,128},
{ 31,63, 31,63, 63,128},
{ 0,32, 0,32, 127,192},
{ 0,32, 31,63, 127,192},
{ 31,63, 0,32, 127,192},
{ 31,63, 31,63, 127,192},
{ 0,32, 0,32, 191,256},
{ 0,32, 31,63, 191,256},
{ 31,63, 0,32, 191,256},
{ 31,63, 31,63, 191,256},
{ 0,32, 0,32, 255,320},
{ 0,32, 31,63, 255,320},
{ 31,63, 0,32, 255,320},
{ 31,63, 31,63, 255,320},
{ 0,32, 0,32, 319,384},
{ 0,32, 31,63, 319,384},
{ 31,63, 0,32, 319,384},
{ 31,63, 31,63, 319,384},
{ 0,31, 0,31, 383,448},
{ 0,31, 31,63, 383,448},
{ 31,63, 0,31, 383,448},
{ 31,63, 31,63, 383,448},
{ 0,32, 0,32, 447,511},
{ 0,32, 31,63, 447,511},
{ 31,63, 0,32, 447,511},
{ 31,63, 31,63, 447,511}
};
#if 0
static h5part_int64_t
_calc_index_KJI (
int myproc,
h5part_int64_t i,
h5part_int64_t i_dims,
h5part_int64_t j,
h5part_int64_t j_dims,
h5part_int64_t k,
h5part_int64_t k_dims
) {
return i + j*i_dims + k*i_dims*j_dims;
}
#endif
#define _calc_index( i, i_dims, j, j_dims, k, k_dims ) \
(i + j*i_dims + k*i_dims*j_dims)
static h5part_int64_t
_write_data (
H5PartFile *f,
int myproc,
struct H5BlockPartition *layout
) {
h5part_int64_t i, j, k, idx;
h5part_int64_t herr;
h5part_float64_t *data;
h5part_int64_t i_dims = layout->i_end - layout->i_start + 1;
h5part_int64_t j_dims = layout->j_end - layout->j_start + 1;
h5part_int64_t k_dims = layout->k_end - layout->k_start + 1;
printf ( "Writing Step #%lld\n", (long long)f->timestep );
data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) );
for ( i = 0; i < i_dims; i++ ) {
for ( j = 0; j < j_dims; j++ ) {
for ( k = 0; k < k_dims; k++ ) {
idx = _calc_index (
i, i_dims,
j, j_dims,
k, k_dims );
*(data + idx) = k
+ 1000*j
+ 100000*i
+ 10000000*myproc;
}
}
}
herr = H5BlockDefine3DFieldLayout (
f,
layout->i_start, layout->i_end,
layout->j_start, layout->j_end,
layout->k_start, layout->k_end );
if ( herr < 0 ) return herr;
herr = H5Block3dWriteScalarField ( f, "TestField", data );
if ( herr < 0 ) return herr;
free ( data );
return 1;
}
static h5part_int64_t
_write_file (
const char *fname,
const int myproc,
MPI_Comm comm,
struct H5BlockPartition *layout
) {
H5PartFile *f;
h5part_int64_t timestep = 0;
h5part_int64_t herr;
printf ("PROC[%d]: Open file \"%s\" for writing ...\n",
myproc, fname );
f = H5PartOpenFileParallel ( fname, H5PART_WRITE, comm );
if ( f == NULL ) return -1;
herr = H5PartSetStep ( f, timestep );
if ( herr < 0 ) return herr;
if ( _write_data ( f, myproc, layout ) < 0 ) {
printf ("Failed to write file \"%s\"\n", fname );
return 2;
}
herr = H5PartCloseFile ( f );
if ( herr < 0 ) return -1;
return 0;
}
static h5part_int64_t
_read_data (
H5PartFile *f,
int myproc,
struct H5BlockPartition *layout
) {
h5part_int64_t i, j, k, idx;
h5part_int64_t herr;
h5part_float64_t *data;
h5part_int64_t i_dims = layout->i_end - layout->i_start + 1;
h5part_int64_t j_dims = layout->j_end - layout->j_start + 1;
h5part_int64_t k_dims = layout->k_end - layout->k_start + 1;
printf ( "Reading Step #%lld\n", (long long)f->timestep );
data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) );
herr = H5BlockDefine3DFieldLayout (
f,
layout->i_start, layout->i_end,
layout->j_start, layout->j_end,
layout->k_start, layout->k_end );
if ( herr < 0 ) return herr;
herr = H5Block3dReadScalarField ( f, "TestField", data );
if ( herr < 0 ) return herr;
for ( i = 0; i < i_dims; i++ ) {
for ( j = 0; j < j_dims; j++ ) {
for ( k = 0; k < k_dims; k++ ) {
idx = _calc_index (
i, i_dims,
j, j_dims,
k, k_dims );
/*
what do I need to calculate the value?
proc which has the item written
i, j, k relative to proc
*/
h5part_int64_t ri = i + layout->i_start;
h5part_int64_t rj = j + layout->j_start;
h5part_int64_t rk = k + layout->k_start;
int proc = (int) H5Block3dGetProcOf ( f, ri, rj, rk );
h5part_int64_t i_start, i_end;
h5part_int64_t j_start, j_end;
h5part_int64_t k_start, k_end;
H5Block3dGetPartitionOfProc (
f,
proc,
&i_start, &i_end,
&j_start, &j_end,
&k_start, &k_end );
ri -= i_start;
rj -= j_start;
rk -= k_start;
h5part_float64_t value = rk
+ 1000*rj
+ 100000*ri
+ 10000000*proc;
if ( *(data + idx) != value ) {
printf (
"PROC[%d]: "
"value missmatch for (%lld,%lld,%lld); is: %f;"
" should be: %f\n",
myproc,
(long long)i, (long long)j, (long long)k,
*( data + idx ), value );
printf (
"PROC[%d]: "
"My partition is: "
"%lld:%lld, %lld:%lld, %lld:%lld\n",
myproc,
(long long)layout->i_start, (long long)layout->i_end,
(long long)layout->j_start, (long long)layout->j_end,
(long long)layout->k_start, (long long)layout->k_end );
printf (
"PROC[%d]: "
"Value has been written by proc %d\n",
myproc, proc );
printf (
"PROC[%d]: "
"The partition for this proc was: "
"%lld:%lld, %lld:%lld, %lld:%lld\n",
myproc,
(long long)i_start, (long long)i_end,
(long long)j_start, (long long)j_end,
(long long)k_start, (long long)k_end );
return -1;
}
}
}
}
free ( data );
return 0;
}
static h5part_int64_t
_read_file (
const char *fname,
const int myproc,
MPI_Comm comm,
struct H5BlockPartition *layout
) {
H5PartFile *f;
h5part_int64_t timestep = 0;
h5part_int64_t herr;
printf ("PROC[%d]: Open file \"%s\" for reading ...\n",
myproc, fname );
f = H5PartOpenFileParallel ( fname, H5PART_READ, comm );
if ( f == NULL ) return -1;
herr = H5PartSetStep ( f, timestep );
if ( herr < 0 ) return herr;
if ( _read_data ( f, myproc, layout ) < 0 ) {
printf ("Failed to read file \"%s\"\n", fname );
return 2;
}
herr = H5PartCloseFile ( f );
if ( herr < 0 ) return -1;
return 0;
}
int
main (
int argc,
char **argv
) {
char *fname;
int myproc;
int nprocs;
int opt_with_ghosts = 0;
int opt_read = 0;
int opt_write = 0;
struct H5BlockPartition *layout;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Init( &argc, &argv );
MPI_Comm_size ( comm, &nprocs );
MPI_Comm_rank( comm, &myproc );
while ( --argc ) {
if ( strcmp ( argv[argc], "-r" ) == 0 )
opt_read = 1;
else if ( strcmp ( argv[argc], "-w" ) == 0 )
opt_write = 1;
else if ( strcmp ( argv[argc], "-g" ) == 0 )
opt_with_ghosts = 1;
else {
fprintf ( stderr,
"Illegal option %s\n\n"
"Usage: %s -w -r -g\n",
argv[argc], argv[0] );
return 1;
}
}
switch ( nprocs ) {
case 1:
fname = "blockfile1.h5";
layout = &Layout1[myproc];
break;
case 8:
if ( opt_with_ghosts ) {
fname = "blockfile8G.h5";
layout = &Layout8G[myproc];
} else {
fname = "blockfile8.h5";
layout = &Layout8[myproc];
}
break;
case 16:
if ( opt_with_ghosts ) {
fname = "blockfile16G.h5";
layout = &Layout16G[myproc];
} else {
fname = "blockfile16.h5";
layout = &Layout16[myproc];
}
break;
case 32:
if ( opt_with_ghosts ) {
fname = "blockfile32G.h5";
layout = &Layout32G[myproc];
} else {
fname = "blockfile32.h5";
layout = &Layout32[myproc];
}
break;
default:
printf ( "Run this test on %d processor(s)!\n", NPROCS );
return 1;
}
H5PartSetVerbosityLevel ( 4 );
if ( opt_write ) {
if ( _write_file ( fname, myproc, comm, layout ) < 0 ) {
printf ("Failed to write file \"%s\"\n", fname );
}
} else if ( opt_read ) {
if ( _read_file ( fname, myproc, comm, layout ) < 0 ) {
printf ("Failed to read file \"%s\"\n", fname );
}
}
MPI_Finalize();
return 0;
}
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
#PBS -l size=16
#PBS -j oe
cd /scratch/agsell/H5Part/test
yod -np 16 ./H5BlockParTestScalarField -w -g
+462
View File
@@ -0,0 +1,462 @@
PROGRAM H5BlockParTestScalarFieldF
IMPLICIT NONE
INCLUDE 'mpif.h'
INCLUDE 'H5PartF90.inc'
INCLUDE 'H5BlockF90.inc'
INTERFACE
INTEGER FUNCTION IARGC ()
END FUNCTION IARGC
END INTERFACE
INTEGER :: myproc = 0
INTEGER :: nprocs = 1
INTEGER :: comm = MPI_COMM_WORLD
INTEGER :: mpi_err
INTEGER*8 :: h5pt_err
INTEGER :: i
CHARACTER(LEN=32) :: arg_str
INTEGER :: opt_read = 0
INTEGER :: opt_write = 0
INTEGER :: opt_with_ghosts = 0
CHARACTER(LEN=128) :: fname
INTEGER*8 :: layout (6)
INTEGER*8 :: layout1 (6,1)
INTEGER*8 :: layout8 (6,8)
INTEGER*8 :: layout8g (6,8)
INTEGER*8 :: layout16 (6,16)
INTEGER*8 :: layout16g(6,16)
INTEGER*8 :: layout32 (6,32)
INTEGER*8 :: layout32g(6,32)
DATA layout1 / 1,64, 1,64, 1,512 /
DATA layout8 / 1,64, 1,64, 1, 64, &
1,64, 1,64, 65,128, &
1,64, 1,64, 129,192, &
1,64, 1,64, 193,256, &
1,64, 1,64, 257,320, &
1,64, 1,64, 321,384, &
1,64, 1,64, 385,448, &
1,64, 1,64, 449,512 /
DATA layout8g / 1,64, 1,64, 1, 65, &
1,64, 1,64, 64,129, &
1,64, 1,64, 128,193, &
1,64, 1,64, 192,257, &
1,64, 1,64, 256,321, &
1,64, 1,64, 320,385, &
1,64, 1,64, 384,449, &
1,64, 1,64, 448,512 /
DATA layout16 / 1,64, 1,32, 1, 64, &
1,64, 33,64, 1, 64, &
1,64, 1,32, 65,128, &
1,64, 33,64, 65,128, &
1,64, 1,32, 129,192, &
1,64, 33,64, 129,192, &
1,64, 1,32, 193,256, &
1,64, 33,64, 193,256, &
1,64, 1,32, 257,320, &
1,64, 33,64, 257,320, &
1,64, 1,32, 321,384, &
1,64, 33,64, 321,384, &
1,64, 1,32, 385,448, &
1,64, 33,64, 385,448, &
1,64, 1,32, 449,512, &
1,64, 33,64, 449,512 /
DATA layout16g/ 1,64, 1,33, 1, 65, &
1,64, 32,64, 1, 65, &
1,64, 1,33, 64,129, &
1,64, 32,64, 64,129, &
1,64, 1,33, 128,193, &
1,64, 32,64, 128,193, &
1,64, 1,33, 192,257, &
1,64, 32,64, 192,257, &
1,64, 1,33, 256,321, &
1,64, 32,64, 256,321, &
1,64, 1,33, 320,385, &
1,64, 32,64, 320,385, &
1,64, 1,33, 384,449, &
1,64, 32,64, 384,449, &
1,64, 1,33, 448,512, &
1,64, 32,64, 448,512 /
DATA layout32 / 1,32, 1,32, 1, 64, &
1,32, 33,64, 1, 64, &
33,64, 1,32, 1, 64, &
33,64, 33,64, 1, 64, &
1,32, 1,32, 65,128, &
1,32, 33,64, 65,128, &
33,64, 1,32, 65,128, &
33,64, 33,64, 65,128, &
1,32, 1,32, 129,192, &
1,32, 33,64, 129,192, &
33,64, 1,32, 129,192, &
33,64, 33,64, 129,192, &
1,32, 1,32, 193,256, &
1,32, 33,64, 193,256, &
33,64, 1,32, 193,256, &
33,64, 33,64, 193,256, &
1,32, 1,32, 257,320, &
1,32, 33,64, 257,320, &
33,64, 1,32, 257,320, &
33,64, 33,64, 257,320, &
1,32, 1,32, 321,384, &
1,32, 33,64, 321,384, &
33,64, 1,32, 321,384, &
33,64, 33,64, 321,384, &
1,32, 1,32, 385,448, &
1,32, 33,64, 385,448, &
33,64, 1,32, 385,448, &
33,64, 33,64, 385,448, &
1,32, 1,32, 449,512, &
1,32, 33,64, 449,512, &
33,64, 1,32, 449,512, &
33,64, 33,64, 449,512 /
DATA layout32G/ 1,33, 1,33, 1, 65, &
1,33, 32,64, 1, 65, &
32,64, 1,33, 1, 65, &
32,64, 32,64, 1, 65, &
1,33, 1,33, 64,129, &
1,33, 32,64, 64,129, &
32,64, 1,33, 64,129, &
32,64, 32,64, 64,129, &
1,33, 1,33, 128,193, &
1,33, 32,64, 128,193, &
32,64, 1,33, 128,193, &
32,64, 32,64, 128,193, &
1,33, 1,33, 192,257, &
1,33, 32,64, 192,257, &
32,64, 1,33, 192,257, &
32,64, 32,64, 192,257, &
1,33, 1,33, 256,321, &
1,33, 32,64, 256,321, &
32,64, 1,33, 256,321, &
32,64, 32,64, 256,321, &
1,33, 1,33, 320,385, &
1,33, 32,64, 320,385, &
32,64, 1,33, 320,385, &
32,64, 32,64, 320,385, &
1,33, 1,33, 384,449, &
1,33, 32,64, 384,449, &
32,64, 1,33, 384,449, &
32,64, 32,64, 384,449, &
1,33, 1,33, 448,512, &
1,33, 32,64, 448,512, &
32,64, 1,33, 448,512, &
32,64, 32,64, 448,512 /
CALL MPI_Init ( mpi_err )
comm = MPI_COMM_WORLD
CALL MPI_Comm_rank ( comm, myproc, mpi_err)
CALL MPI_Comm_size ( comm, nprocs, mpi_err)
DO i = 1, IARGC ()
CALL GETARG ( i, arg_str )
PRINT *, arg_str
IF ( arg_str == "-r" ) THEN
PRINT *, "Reading file"
opt_read = 1
ELSE IF ( arg_str == "-w" ) THEN
opt_write = 1
ELSE IF ( arg_str == "-g" ) THEN
opt_with_ghosts = 1
ELSE
PRINT *, "Illegal option ", arg_str, "\n"
PRINT *, "Usage: H5BlockTestAttributesF -w | -r [-g]"
END IF
END DO
SELECTCASE ( nprocs )
CASE ( 1 )
fname = "Fblockfile1.h5"
layout = layout1 ( :, myproc+1 )
CASE ( 8 )
IF ( opt_with_ghosts == 1 ) THEN
fname = "Fblockfile8G.h5"
layout = layout8g ( :, myproc+1 )
ELSE
fname = "Fblockfile8.h5"
layout = layout8 ( :, myproc+1 )
END IF
CASE ( 16 )
IF ( opt_with_ghosts == 1 ) THEN
fname = "Fblockfile16G.h5"
layout = layout16g ( :, myproc+1 )
ELSE
fname = "Fblockfile16.h5"
layout = layout16 ( :, myproc+1 )
END IF
CASE ( 32 )
IF ( opt_with_ghosts == 1 ) THEN
fname = "Fblockfile32G.h5"
layout = layout32g ( :, myproc+1 )
ELSE
fname = "Fblockfile32.h5"
layout = layout32 ( :, myproc+1 )
END IF
CASE DEFAULT
print *, "Run this test with 1, 8, 16 or 32 procs!"
END SELECT
h5pt_err = h5pt_set_verbosity_level ( 4_8 )
IF ( opt_write == 1 ) THEN
h5pt_err = write_file ( fname, myproc, comm, layout )
IF ( h5pt_err < 0 ) THEN
PRINT *, "Faild to write file ", fname, "!"
END IF
ELSE IF ( opt_read == 1 ) THEN
h5pt_err = read_file ( fname, myproc, comm, layout )
IF ( h5pt_err < 0 ) THEN
PRINT *, "Faild to write file ", fname, "!"
END IF
ENDIF
CALL MPI_Finalize
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
CONTAINS
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
INTEGER*8 FUNCTION write_file ( fname, myproc, comm, layout )
IMPLICIT NONE
CHARACTER(LEN=*), INTENT(IN) :: fname
INTEGER, INTENT(IN) :: myproc
INTEGER, INTENT(IN) :: comm
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: file
INTEGER*8 :: timestep = 1
PRINT "('PROC[',I,']: Open file ',A,' for writing ...')", myproc, fname
file = h5pt_openw_par ( fname, comm )
if ( file == 0 ) THEN
write_file = -1
RETURN
ENDIF
PRINT *, "file: ", file
h5pt_err = h5pt_setstep ( file, timestep )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
h5pt_err = write_field ( file, myproc, layout )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
h5pt_err = h5pt_close ( file )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
write_file = 0
END FUNCTION write_file
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
INTEGER*8 FUNCTION write_field ( file, myproc, layout )
IMPLICIT NONE
INTEGER*8, INTENT(IN) :: file
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: i, j, k
INTEGER*8 :: i_start
INTEGER*8 :: i_end
INTEGER*8 :: j_start
INTEGER*8 :: j_end
INTEGER*8 :: k_start
INTEGER*8 :: k_end
INTEGER*8 :: i_dims
INTEGER*8 :: j_dims
INTEGER*8 :: k_dims
REAL*8 :: value
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
PRINT *, "Reading field ..."
i_start = layout(1)
i_end = layout(2)
j_start = layout(3)
j_end = layout(4)
k_start = layout(5)
k_end = layout(6)
i_dims = i_end - i_start + 1
j_dims = j_end - j_start + 1
k_dims = k_end - k_start + 1
PRINT "('dims: (',I2,I2,I2,')')", i_dims, j_dims, k_dims
ALLOCATE ( data (i_dims,j_dims, k_dims) )
PRINT *, "Defining Layout ..."
h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end )
IF ( h5pt_err < 0 ) THEN
write_field = h5pt_err
RETURN
END IF
DO i = 1, i_dims
DO j = 1, j_dims
DO k = 1, k_dims
value = (k-1) + 1000*(j-1) + 100000*(i-1) + 10000000*myproc
data(i,j,k) = value
END DO
END DO
END DO
PRINT *, "Writing field ..."
h5pt_err = h5bl_3d_write_scalar_field ( file, "TestField", data )
IF ( h5pt_err < 0 ) THEN
write_field = h5pt_err
RETURN
END IF
write_field = 0
END FUNCTION write_field
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
INTEGER*8 FUNCTION read_file ( fname, myproc, comm, layout )
IMPLICIT NONE
CHARACTER(LEN=*), INTENT(IN) :: fname
INTEGER, INTENT(IN) :: myproc
INTEGER, INTENT(IN) :: comm
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: file
INTEGER*8 :: timestep = 1
PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..."
file = h5pt_openr_par ( fname, comm )
if ( file == 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = h5pt_setstep ( file, timestep )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = read_field ( file, myproc, layout )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = h5pt_close ( file )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
read_file = 0
END FUNCTION read_file
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
INTEGER*8 FUNCTION read_field ( file, myproc, layout )
IMPLICIT NONE
INTEGER*8, INTENT(IN) :: file
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: i, j, k
INTEGER*8 :: i_start, i_start2
INTEGER*8 :: i_end, i_end2
INTEGER*8 :: j_start, j_start2
INTEGER*8 :: j_end, j_end2
INTEGER*8 :: k_start, k_start2
INTEGER*8 :: k_end, k_end2
INTEGER*8 :: i_dims
INTEGER*8 :: j_dims
INTEGER*8 :: k_dims
INTEGER*8 :: ri, rj, rk, proc
REAL*8 :: value
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
PRINT *, "Reading field ..."
i_start = layout(1)
i_end = layout(2)
j_start = layout(3)
j_end = layout(4)
k_start = layout(5)
k_end = layout(6)
i_dims = i_end - i_start + 1
j_dims = j_end - j_start + 1
k_dims = k_end - k_start + 1
PRINT "('dims: (',I3,',',I3,',',I3,')')", i_dims, j_dims, k_dims
ALLOCATE ( data (i_dims,j_dims, k_dims) )
PRINT *, "Defining Layout ..."
h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end )
IF ( h5pt_err < 0 ) THEN
read_field = -1
RETURN
END IF
PRINT *, "Reading field ..."
h5pt_err = h5bl_3d_read_scalar_field ( file, "TestField", data )
IF ( h5pt_err < 0 ) THEN
read_field = -1
RETURN
END IF
DO i = 1, i_dims
DO j = 1, j_dims
DO k = 1, k_dims
ri = i + i_start - 1
rj = j + j_start - 1
rk = k + k_start - 1
proc = h5bl_get_proc_of ( file, ri, rj, rk )
h5pt_err = h5bl_get_partition_of_proc ( file, proc, i_start2, i_end2, j_start2, j_end2, k_start2, k_end2 )
ri = ri - i_start2
rj = rj - j_start2
rk = rk - k_start2
value = rk + 1000*rj + 100000*ri + 10000000*proc
if ( data(i,j,k) /= value ) THEN
PRINT "('data(',I3,',',I3,',',I3,') = ',F,' /= ',F)", i, j, k, data(i,j,k), value
PRINT "('proc: ', I2)", proc
PRINT "('i_start: ', I3, ' i_end: ', I3)", i_start, i_end
PRINT "('j_start: ', I3, ' j_end: ', I3)", j_start, j_end
PRINT "('k_start: ', I3, ' k_end: ', I3)", k_start, k_end
END IF
END DO
END DO
END DO
read_field = 0
END FUNCTION read_field
END PROGRAM
+468
View File
@@ -0,0 +1,468 @@
#include <stdio.h>
#include <stdlib.h>
#include <hdf5.h>
#include "H5Part.h"
#include "H5Block.h"
#include "H5BlockTypes.h"
#ifndef PARALLEL_IO
#ifndef MPI_COMM_WORLD
#define MPI_COMM_WORLD 0
#endif
#endif
struct H5BlockPartition Layout1[1] = {
{ 0, 63, 0, 63, 0, 511 }
};
#define _calc_index( i, i_dims, j, j_dims, k, k_dims ) \
(i + j*i_dims + k*i_dims*j_dims)
static h5part_int64_t
_write_data (
H5PartFile *f,
int myproc,
struct H5BlockPartition *layout
) {
h5part_int64_t i, j, k, idx;
h5part_int64_t herr;
h5part_float64_t *data;
h5part_int64_t i_dims = layout->i_end - layout->i_start + 1;
h5part_int64_t j_dims = layout->j_end - layout->j_start + 1;
h5part_int64_t k_dims = layout->k_end - layout->k_start + 1;
printf ( "Writing Step #%lld\n", (long long)f->timestep );
data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) );
for ( i = 0; i < i_dims; i++ ) {
for ( j = 0; j < j_dims; j++ ) {
for ( k = 0; k < k_dims; k++ ) {
idx = _calc_index (
i, i_dims,
j, j_dims,
k, k_dims );
*(data + idx) = k
+ 1000*j
+ 100000*i
+ 10000000*myproc;
}
}
}
herr = H5BlockDefine3DFieldLayout (
f,
layout->i_start, layout->i_end,
layout->j_start, layout->j_end,
layout->k_start, layout->k_end );
if ( herr < 0 ) return herr;
herr = H5Block3dWriteScalarField ( f, "TestField", data );
if ( herr < 0 ) return herr;
free ( data );
return 1;
}
static h5part_int64_t
_write_attributes (
H5PartFile *f,
const int myproc
) {
h5part_int64_t herr = H5BlockWriteFieldAttribString (
f,
"TestField",
"TestString",
"42" );
if ( herr < 0 ) return -1;
h5part_int64_t ival[1] = { 42 };
h5part_float64_t rval[1] = { 42.0 };
herr = H5BlockWriteFieldAttrib (
f,
"TestField",
"TestInt64",
H5PART_INT64,
ival, 1 );
if ( herr < 0 ) return -1;
herr = H5BlockWriteFieldAttrib (
f,
"TestField",
"TestFloat64",
H5PART_FLOAT64,
rval, 1 );
if ( herr < 0 ) return -1;
herr = H5Block3dSetFieldOrigin ( f, "TestField", 1.0, 2.0, 3.0 );
if ( herr < 0 ) return -1;
herr = H5Block3dSetFieldSpacing ( f, "TestField", 2.0, 3.0, 4.0 );
if ( herr < 0 ) return -1;
return H5PART_SUCCESS;
}
static h5part_int64_t
_write_file (
const char *fname,
const int myproc,
MPI_Comm comm,
struct H5BlockPartition *layout
) {
H5PartFile *f;
h5part_int64_t timestep = 0;
h5part_int64_t herr;
printf ("PROC[%d]: Open file \"%s\" for writing ...\n",
myproc, fname );
#ifdef PARALLEL_IO
f = H5PartOpenFileParallel (
fname,
H5PART_WRITE,
comm
);
#else
f = H5PartOpenFile (
fname,
H5PART_WRITE
);
#endif
if ( f == NULL ) return -1;
herr = H5PartSetStep ( f, timestep );
if ( herr < 0 ) return herr;
if ( _write_data ( f, myproc, layout ) < 0 ) {
printf ("Failed to write file \"%s\"\n", fname );
return 2;
}
if ( _write_attributes ( f, myproc ) < 0 ) {
printf ("Failed to write attributes \"%s\"\n", fname );
return 2;
}
herr = H5PartCloseFile ( f );
if ( herr < 0 ) return -1;
return 0;
}
static h5part_int64_t
_read_data (
H5PartFile *f,
int myproc,
struct H5BlockPartition *layout
) {
h5part_int64_t i, j, k, idx;
h5part_int64_t herr;
h5part_float64_t *data;
h5part_int64_t i_dims = layout->i_end - layout->i_start + 1;
h5part_int64_t j_dims = layout->j_end - layout->j_start + 1;
h5part_int64_t k_dims = layout->k_end - layout->k_start + 1;
printf ( "Reading Step #%lld\n", (long long)f->timestep );
data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) );
herr = H5BlockDefine3DFieldLayout (
f,
layout->i_start, layout->i_end,
layout->j_start, layout->j_end,
layout->k_start, layout->k_end );
if ( herr < 0 ) return herr;
herr = H5Block3dReadScalarField ( f, "TestField", data );
if ( herr < 0 ) return herr;
for ( i = 0; i < i_dims; i++ ) {
for ( j = 0; j < j_dims; j++ ) {
for ( k = 0; k < k_dims; k++ ) {
idx = _calc_index (
i, i_dims,
j, j_dims,
k, k_dims );
/*
what do I need to calculate the value?
proc which has the item written
i, j, k relative to proc
*/
h5part_int64_t ri = i + layout->i_start;
h5part_int64_t rj = j + layout->j_start;
h5part_int64_t rk = k + layout->k_start;
int proc = (int) H5Block3dGetProcOf ( f, ri, rj, rk );
h5part_int64_t i_start, i_end;
h5part_int64_t j_start, j_end;
h5part_int64_t k_start, k_end;
H5Block3dGetPartitionOfProc (
f,
proc,
&i_start, &i_end,
&j_start, &j_end,
&k_start, &k_end );
ri -= i_start;
rj -= j_start;
rk -= k_start;
h5part_float64_t value = rk
+ 1000*rj
+ 100000*ri
+ 10000000*proc;
if ( *(data + idx) != value ) {
printf (
"PROC[%d]: "
"value missmatch for (%lld,%lld,%lld); is: %f;"
" should be: %f\n",
myproc,
(long long)i, (long long)j, (long long)k,
*( data + idx ), value );
printf (
"PROC[%d]: "
"My partition is: "
"%lld:%lld, %lld:%lld, %lld:%lld\n",
myproc,
(long long)layout->i_start, (long long)layout->i_end,
(long long)layout->j_start, (long long)layout->j_end,
(long long)layout->k_start, (long long)layout->k_end );
printf (
"PROC[%d]: "
"Value has been written by proc %d\n",
myproc, proc );
printf (
"PROC[%d]: "
"The partition for this proc was: "
"%lld:%lld, %lld:%lld, %lld:%lld\n",
myproc,
(long long)i_start, (long long)i_end,
(long long)j_start, (long long)j_end,
(long long)k_start, (long long)k_end );
return -1;
}
}
}
}
free ( data );
return 0;
}
static h5part_int64_t
_read_file (
const char *fname,
const int myproc,
MPI_Comm comm,
struct H5BlockPartition *layout
) {
H5PartFile *f;
h5part_int64_t timestep = 0;
h5part_int64_t herr;
printf ("PROC[%d]: Open file \"%s\" for reading ...\n",
myproc, fname );
#ifdef PARALLEL_IO
f = H5PartOpenFileParallel (
fname,
H5PART_READ,
comm
);
#else
f = H5PartOpenFile (
fname,
H5PART_READ
);
#endif
if ( f == NULL ) return -1;
herr = H5PartSetStep ( f, timestep );
if ( herr < 0 ) return herr;
if ( _read_data ( f, myproc, layout ) < 0 ) {
printf ("Failed to read file \"%s\"\n", fname );
return 2;
}
herr = H5PartCloseFile ( f );
if ( herr < 0 ) return -1;
return 0;
}
static h5part_int64_t
_read_attributes (
const char *fname,
const int myproc,
MPI_Comm comm
) {
h5part_int64_t timestep = 0;
printf ("PROC[%d]: Open file \"%s\" for reading ...\n",
myproc, fname );
#ifdef PARALLEL_IO
H5PartFile *f = H5PartOpenFileParallel (
fname,
H5PART_READ,
comm
);
#else
H5PartFile *f = H5PartOpenFile (
fname,
H5PART_READ
);
#endif
if ( f == NULL ) return -1;
h5part_int64_t herr = H5PartSetStep ( f, timestep );
if ( herr < 0 ) return herr;
char sval[16];
herr = H5BlockReadFieldAttrib (
f,
"TestField",
"TestString",
sval );
if ( herr < 0 ) return -1;
if ( strcmp ( sval, "42" ) != 0 ) {
printf ( "Error reading string attribute: "
"Value is \"%s\" and should be \"42\"\n", sval );
}
h5part_int64_t ival[1];
h5part_float64_t rval[1];
herr = H5BlockReadFieldAttrib (
f,
"TestField",
"TestInt64",
ival );
if ( herr < 0 ) return -1;
if ( ival[0] != 42 ) {
printf ( "Error reading int64 attribute: "
"Value is %lld and should be 42\n",
(long long) ival[0] );
}
herr = H5BlockReadFieldAttrib (
f,
"TestField",
"TestFloat64",
rval );
if ( herr < 0 ) return -1;
if ( rval[0] != 42.0 ) {
printf ( "Error reading float64 attribute: "
"Value is %f and should be 42.0\n",
rval[0] );
}
h5part_float64_t x_origin;
h5part_float64_t y_origin;
h5part_float64_t z_origin;
h5part_float64_t x_spacing;
h5part_float64_t y_spacing;
h5part_float64_t z_spacing;
herr = H5Block3dGetFieldOrigin (
f, "TestField",
&x_origin,
&y_origin,
&z_origin );
if ( herr < 0 ) return -1;
if ( x_origin != 1.0 || y_origin != 2.0 || z_origin != 3.0 ) {
printf (
"Error reading field origin: Read values (%f,%f,%f)\n",
x_origin, y_origin, z_origin );
}
herr = H5Block3dGetFieldSpacing (
f, "TestField",
&x_spacing,
&y_spacing,
&z_spacing );
if ( herr < 0 ) return -1;
if ( x_spacing != 2.0 || y_spacing != 3.0 || z_spacing != 4.0 ) {
printf (
"Error reading field spacing: Read values (%f,%f,%f)\n",
x_spacing, y_spacing, z_spacing );
}
herr = H5PartCloseFile ( f );
if ( herr < 0 ) return -1;
return 0;
}
int
main (
int argc,
char **argv
) {
char *fname = "blockfile0.h5";
int myproc =0;
int opt_read = 0;
int opt_write = 0;
int ex = 0;
MPI_Comm comm = MPI_COMM_WORLD;
#ifdef PARALLEL_IO
int nprocs;
MPI_Init( &argc, &argv );
MPI_Comm_size ( comm, &nprocs );
MPI_Comm_rank( comm, &myproc );
#endif
while ( --argc ) {
if ( strcmp ( argv[argc], "-r" ) == 0 )
opt_read = 1;
else if ( strcmp ( argv[argc], "-w" ) == 0 )
opt_write = 1;
else {
fprintf ( stderr,
"Illegal option %s\n\n"
"Usage: %s -w -r\n",
argv[argc], argv[0] );
return 1;
}
}
H5PartSetVerbosityLevel ( 4 );
if ( opt_write ) {
if ( _write_file ( fname, myproc, comm, Layout1 ) < 0 ) {
printf ("Failed to write file \"%s\"\n", fname );
ex = 1;
goto cleanup;
}
} else if ( opt_read ) {
if ( _read_file ( fname, myproc, comm, Layout1 ) < 0 ) {
printf ("Failed to read file \"%s\"\n", fname );
ex = 1;
goto cleanup;
}
if ( _read_attributes ( fname, myproc, comm ) < 0 ) {
printf ("Failed to read attributes \"%s\"\n", fname );
ex = 1;
goto cleanup;
}
}
cleanup:
#ifdef PARALLEL_IO
MPI_Finalize();
#endif
return ex;
}
+341
View File
@@ -0,0 +1,341 @@
PROGRAM H5BlockTestAttributesF
IMPLICIT NONE
INCLUDE 'H5PartF90.inc'
INCLUDE 'H5BlockF90.inc'
INTEGER :: myproc = 0
INTEGER :: nprocs = 1
INTEGER*8 :: h5pt_err
INTEGER :: i
CHARACTER(LEN=32) :: arg_str
INTEGER :: opt_read = 0
INTEGER :: opt_write = 0
INTEGER*8 :: layout(6)
DATA layout / 1, 64, 1, 64, 1, 512 /
DO i = 1, IARGC ()
CALL GETARG ( i, arg_str )
PRINT *, arg_str
IF ( arg_str == "-r" ) THEN
PRINT *, "Reading file"
opt_read = 1
ELSE IF ( arg_str == "-w" ) THEN
opt_write = 1
ELSE
PRINT *, "Illegal option ", arg_str, "\n"
PRINT *, "Usage: H5BlockTestAttributesF -w | -r"
END IF
END DO
h5pt_err = h5pt_set_verbosity_level ( 4_8 )
IF ( opt_write == 1 ) THEN
h5pt_err = write_file ( "blockfile0.h5", myproc, layout )
ELSE IF ( opt_read == 1 ) THEN
PRINT *, "Calling read_file"
h5pt_err = read_file ( "blockfile0.h5", myproc, layout )
ENDIF
CONTAINS
INTEGER*8 FUNCTION write_file ( fname, myproc, layout )
CHARACTER(LEN=*), INTENT(IN) :: fname
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: file
INTEGER*8 :: timestep = 1
PRINT *, "PROC[",myproc,"]: Open file ",fname," for writing ..."
file = h5pt_openw ( fname )
if ( file == 0 ) THEN
write_file = -1
RETURN
ENDIF
PRINT *, "file: ", file
h5pt_err = h5pt_setstep ( file, timestep )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
h5pt_err = write_field ( file, myproc, layout )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
h5pt_err = write_attributes ( file )
h5pt_err = h5pt_close ( file )
IF ( h5pt_err < 0 ) THEN
write_file = h5pt_err
RETURN
ENDIF
write_file = 0
END FUNCTION write_file
INTEGER*8 FUNCTION write_field ( file, myproc, layout )
INTEGER*8, INTENT(IN) :: file
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: i, j, k
INTEGER*8 :: i_start
INTEGER*8 :: i_end
INTEGER*8 :: j_start
INTEGER*8 :: j_end
INTEGER*8 :: k_start
INTEGER*8 :: k_end
INTEGER*8 :: i_dims
INTEGER*8 :: j_dims
INTEGER*8 :: k_dims
REAL*8 :: value
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
PRINT *, "Reading field ..."
i_start = layout(1)
i_end = layout(2)
j_start = layout(3)
j_end = layout(4)
k_start = layout(5)
k_end = layout(6)
i_dims = i_end - i_start + 1
j_dims = j_end - j_start + 1
k_dims = k_end - k_start + 1
PRINT *, "dims: (", i_dims, j_dims, k_dims, ")"
ALLOCATE ( data (i_dims,j_dims, k_dims) )
PRINT *, "Defining Layout ..."
h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end )
IF ( h5pt_err < 0 ) THEN
write_field = h5pt_err
RETURN
END IF
DO i = 1, i_dims
DO j = 1, j_dims
DO k = 1, k_dims
value = (k-1) + 1000*(j-1) + 100000*(i-1)
data(i,j,k) = value
END DO
END DO
END DO
PRINT *, "Writing field ..."
h5pt_err = h5bl_3d_write_scalar_field ( file, "TestField", data )
IF ( h5pt_err < 0 ) THEN
write_field = h5pt_err
RETURN
END IF
write_field = 0
END FUNCTION write_field
INTEGER*8 FUNCTION write_attributes ( file )
INTEGER*8, INTENT(IN) :: file
INTEGER*8 :: h5pt_err = 0
CHARACTER(LEN=128) :: s_val
INTEGER*8 :: i_val(1)
REAL*8 :: r_val(1)
s_val = "42"
h5pt_err = h5bl_writefieldattrib_string ( file, "TestField", "TestString", s_val )
IF ( h5pt_err < 0 ) THEN
write_attributes = h5pt_err
RETURN
END IF
i_val(1) = 42
h5pt_err = h5bl_writefieldattrib_i8 ( file, "TestField", "TestInt64", i_val, 1_8 )
IF ( h5pt_err < 0 ) THEN
write_attributes = h5pt_err
RETURN
END IF
r_val(1) = 42.0
h5pt_err = h5bl_writefieldattrib_r8 ( file, "TestField", "TestFloat64", r_val,1_8 )
IF ( h5pt_err < 0 ) THEN
write_attributes = h5pt_err
RETURN
END IF
END FUNCTION write_attributes
INTEGER*8 FUNCTION read_file ( fname, myproc, layout )
CHARACTER(LEN=*), INTENT(IN) :: fname
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: file
INTEGER*8 :: timestep = 1
PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..."
file = h5pt_openr ( fname )
if ( file == 0 ) THEN
read_file = -1
RETURN
ENDIF
PRINT *, "file: ", file
h5pt_err = h5pt_setstep ( file, timestep )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = read_field ( file, myproc, layout )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = h5pt_close ( file )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..."
file = h5pt_openr ( fname )
if ( file == 0 ) THEN
read_file = -1
RETURN
ENDIF
PRINT *, "file: ", file
h5pt_err = h5pt_setstep ( file, timestep )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
h5pt_err = read_attributes ( file )
h5pt_err = h5pt_close ( file )
IF ( h5pt_err < 0 ) THEN
read_file = -1
RETURN
ENDIF
read_file = 0
END FUNCTION read_file
INTEGER*8 FUNCTION read_field ( file, myproc, layout )
INTEGER*8, INTENT(IN) :: file
INTEGER, INTENT(IN) :: myproc
INTEGER*8, INTENT(IN) :: layout(6)
INTEGER*8 :: i, j, k
INTEGER*8 :: i_start
INTEGER*8 :: i_end
INTEGER*8 :: j_start
INTEGER*8 :: j_end
INTEGER*8 :: k_start
INTEGER*8 :: k_end
INTEGER*8 :: i_dims
INTEGER*8 :: j_dims
INTEGER*8 :: k_dims
REAL*8 :: value
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
PRINT *, "Reading field ..."
i_start = layout(1)
i_end = layout(2)
j_start = layout(3)
j_end = layout(4)
k_start = layout(5)
k_end = layout(6)
i_dims = i_end - i_start + 1
j_dims = j_end - j_start + 1
k_dims = k_end - k_start + 1
PRINT *, "dims: (", i_dims, j_dims, k_dims, ")"
ALLOCATE ( data (i_dims,j_dims, k_dims) )
PRINT *, "Defining Layout ..."
h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end )
IF ( h5pt_err < 0 ) THEN
read_field = -1
RETURN
END IF
PRINT *, "Reading field ..."
h5pt_err = h5bl_3d_read_scalar_field ( file, "TestField", data )
IF ( h5pt_err < 0 ) THEN
read_field = -1
RETURN
END IF
DO i = 1, i_dims
DO j = 1, j_dims
DO k = 1, k_dims
value = (k-1) + 1000*(j-1) + 100000*(i-1)
if ( data(i,j,k) /= value ) THEN
PRINT *, "data(",i,",",j,",",k,") = ",data(i,j,k), " /= ",value
END IF
END DO
END DO
END DO
read_field = 0
END FUNCTION read_field
INTEGER*8 FUNCTION read_attributes ( file )
INTEGER*8, INTENT(IN) :: file
INTEGER*8 :: h5pt_err = 0
CHARACTER(LEN=128) :: s_val
INTEGER*8 :: i_val(1)
REAL*8 :: r_val(1)
h5pt_err = h5bl_readfieldattrib_string ( file, "TestField", "TestString", s_val )
IF ( h5pt_err < 0 ) THEN
read_attributes = h5pt_err
RETURN
END IF
IF ( s_val /= "42" ) THEN
PRINT *, "Error reading string attribute: Value is ", s_val, " and should be 42"
END IF
h5pt_err = h5bl_readfieldattrib_i8 ( file, "TestField", "TestInt64", i_val )
IF ( h5pt_err < 0 ) THEN
read_attributes = h5pt_err
RETURN
END IF
IF ( i_val(1) /= 42 ) THEN
PRINT *, "Error reading int64 attribute: Value is ", i_val(1), " and should be 42"
END IF
h5pt_err = h5bl_readfieldattrib_r8 ( file, "TestField", "TestFloat64", r_val )
IF ( h5pt_err < 0 ) THEN
read_attributes = h5pt_err
RETURN
END IF
IF ( r_val(1) /= 42.0 ) THEN
PRINT *, "Error reading float64 attribute: Value is ", r_val(1), " and should be 42.0"
END IF
END FUNCTION read_attributes
END PROGRAM H5BlockTestAttributesF
+111
View File
@@ -0,0 +1,111 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hdf5.h>
#include "H5Part.hh"
#ifdef READTEST
#endif
#ifdef REGRESSIONTEST
/*
A simple regression test that shows how you use this API
to write and read multi-timestep files of particle data.
*/
#ifdef PARALLEL_IO
int main(int argc,char *argv[]){
int sz=5;
double *x,*y,*z;
h5part_int64_t *id;
char name[64];
H5PartFile *file;
int i,t,nt,nds;
int nprocs,myproc;
hid_t gid;
MPI_Comm comm=MPI_COMM_WORLD;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&nprocs);
MPI_Comm_rank(comm,&myproc);
x=(double*)malloc(sz*nprocs*sizeof(double));
y=(double*)malloc(sz*nprocs*sizeof(double));
z=(double*)malloc(sz*nprocs*sizeof(double));
id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t));
/* parallel file creation */
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
for(t=0;t<5;t++){
MPI_Barrier(comm);
for(i=0;i<sz;i++) {
x[i]=(double)(i+t)+10.0*(double)myproc;
y[i]=0.1 + (double)(i+t);
z[i]=0.2 + (double)(i+t*10);
id[i]=i+sz*myproc;
}
printf("Proc[%u] Writing timestep %u file=%u\n",myproc,t,file->file);
H5PartSetStep(file,t); /* must set the current timestep in file */
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
/* now write different tuples of data into this timestep of the file */
H5PartWriteDataFloat64(file,"x",x);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",x);
H5PartWriteDataFloat64(file,"py",y);
H5PartWriteDataFloat64(file,"pz",z);
H5PartWriteDataInt64(file,"id",id);
}
unsigned int idStart = 0+sz*myproc;
unsigned int idEnd = (sz-1)+sz*myproc;
printf("AllDone p[%u]\n",myproc);
H5PartCloseFile(file);
MPI_Barrier(comm);
printf("p[%u:%u] : OK, close file and reopen for reading idStart %u idEnd %u \n",myproc,nprocs,idStart,idEnd);
file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm);
H5PartSetStep(file,0);
unsigned int np = 0;
// unsigned int np = (int)H5PartGetNumParticles(file);
// nt=H5PartGetNumSteps(file); /* get number of steps in file */
//nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
MPI_Barrier(comm);
// H5PartSetView(file,idStart,idEnd);
printf("steps= %u datasets= %u particles= %u\n",nt,nds,np);
if(x)
free(x);
if(y)
free(y);
if(z)
free(z);
if(id)
free(id);
H5PartCloseFile(file);
MPI_Barrier(comm);
fprintf(stderr,"proc[%u]: done\n",myproc);
return MPI_Finalize();
}
#else
#endif
#endif
+119
View File
@@ -0,0 +1,119 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <hdf5.h>
#include "H5Part.h"
/*
A simple regression test that shows how you use this API
to write and read multi-timestep files of particle data.
*/
#ifdef PARALLEL_IO
int main(int argc,char *argv[]){
int N = 10;
int sz=0;
double *x,*y,*z;
h5part_int64_t *id;
H5PartFile *file;
int i,t,nt,nds;
int nprocs,myproc;
unsigned int np = 0;
MPI_Comm comm=MPI_COMM_WORLD;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&nprocs);
MPI_Comm_rank(comm,&myproc);
/* parallel file creation */
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
for(t=0;t<5;t++){
MPI_Barrier(comm);
sz = myproc*N;
// proc[0] sz = 10, (next step N=10), sz=10
// proc[1] sz = 20, (next step N=20), sz=40
fprintf(stderr,"proc[%u] sz=%u\n",myproc,(unsigned)sz);
x =(double*)malloc(1+sz*sizeof(double));
y =(double*)malloc(1+sz*sizeof(double));
z =(double*)malloc(1+sz*sizeof(double));
id=(h5part_int64_t*)malloc(1+sz*sizeof(h5part_int64_t));
for(i=0;i<sz;i++) {
x[i]=(double)(i+t)+10.0*(double)myproc;
y[i]=0.1 + (double)(i+t);
z[i]=0.2 + (double)(i+t*10);
id[i]=i+sz*myproc;
}
fprintf(stderr,"Proc[%u] Writing timestep %u Np=%u\n",myproc,t,sz);
H5PartSetStep(file,t); /* must set the current timestep in file */
fprintf(stderr,"Proc[%u]: setNumParticles start\n",myproc);
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
fprintf(stderr,"Proc[%u]: setNumParticles done\n",myproc);
/* now write different tuples of data into this timestep of the file */
fprintf(stderr,"Proc[%u]: WriteX start\n",myproc);
H5PartWriteDataFloat64(file,"x",x);
fprintf(stderr,"Proc[%u]: WriteX done\n",myproc);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",x);
H5PartWriteDataFloat64(file,"py",y);
H5PartWriteDataFloat64(file,"pz",z);
H5PartWriteDataInt64(file,"id",id);
if(x)
free(x);
if(y)
free(y);
if(z)
free(z);
if(id)
free(id);
// remove the next line and everything is ok
N = 1 + sz;
}
printf("AllDone p[%u]\n",myproc);
H5PartCloseFile(file);
MPI_Barrier(comm);
unsigned int idStart = 0;
unsigned int idEnd = myproc*10;
printf("p[%u:%u] : OK, close file and reopen for reading idStart %u idEnd %u \n",myproc,nprocs,idStart,idEnd);
file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm);
H5PartSetStep(file,0);
nt = H5PartGetNumSteps(file); /* get number of steps in file */
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
MPI_Barrier(comm);
H5PartSetView(file,idStart,idEnd);
np = H5PartGetNumParticles(file);
printf("steps= %u datasets= %u particles= %u\n",nt,nds,np);
H5PartCloseFile(file);
MPI_Barrier(comm);
fprintf(stderr,"proc[%u]: done\n",myproc);
return MPI_Finalize();
}
#endif
+298
View File
@@ -0,0 +1,298 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hdf5.h>
#include "H5Part.h"
/*
A simple regression test that shows how you use this API
to write and read multi-timestep files of particle data.
*/
#ifdef PARALLEL_IO
int main(int argc,char *argv[]){
int sz=5;
double *x,*y,*z;
h5part_int64_t *id;
H5PartFile *file;
int i,t,nt,nds;
int nprocs,myproc;
MPI_Comm comm=MPI_COMM_WORLD;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&nprocs);
MPI_Comm_rank(comm,&myproc);
x=(double*)malloc(sz*nprocs*sizeof(double));
y=(double*)malloc(sz*nprocs*sizeof(double));
z=(double*)malloc(sz*nprocs*sizeof(double));
id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t));
/* parallel file creation */
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
for(t=0;t<5;t++){
MPI_Barrier(comm);
for(i=0;i<sz;i++) {
x[i]=(double)(i+t)+10.0*(double)myproc;
y[i]=0.1 + (double)(i+t);
z[i]=0.2 + (double)(i+t*10);
id[i]=i+sz*myproc;
}
printf("Proc[%u] Writing timestep %u file=%u\n",myproc,t,file->file);
H5PartSetStep(file,t); /* must set the current timestep in file */
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
/* now write different tuples of data into this timestep of the file */
H5PartWriteDataFloat64(file,"x",x);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",x);
H5PartWriteDataFloat64(file,"py",y);
H5PartWriteDataFloat64(file,"pz",z);
H5PartWriteDataInt64(file,"id",id);
}
unsigned int idStart = 0+sz*myproc;
unsigned int idEnd = (sz-1)+sz*myproc;
printf("AllDone p[%u]\n",myproc);
H5PartCloseFile(file);
fprintf(stderr,"Closed files p[%u]\n",myproc);
MPI_Barrier(comm);
fprintf(stderr,"p[%u:%u] : OK, close file and reopen for reading idStart %u idEnd %u \n",myproc,nprocs,idStart,idEnd);
file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm);
H5PartSetStep(file,0);
// unsigned int np = 0;
unsigned int np = (int)H5PartGetNumParticles(file);
nt=H5PartGetNumSteps(file); /* get number of steps in file */
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
MPI_Barrier(comm);
H5PartSetView(file,idStart,idEnd);
np = (int)H5PartGetNumParticles(file);
printf("After SetView(%d,%d): steps= %u datasets= %u particles= %u\n",
(int)idStart,(int)idEnd,
nt,nds,np);
if(x)
free(x);
if(y)
free(y);
if(z)
free(z);
if(id)
free(id);
H5PartCloseFile(file);
MPI_Barrier(comm);
fprintf(stderr,"proc[%u]: done\n",myproc);
return MPI_Finalize();
}
#else
int main(int argc,char *argv[]){
int sz=10;
double *x,*y,*z;
h5part_int64_t *id;
H5PartFile *file;
int i,t,nt,nds,np;
h5part_int64_t idStart = 0;
h5part_int64_t idEnd = 0;
x=(double*)malloc(sz*sizeof(double));
y=(double*)malloc(sz*sizeof(double));
z=(double*)malloc(sz*sizeof(double));
id=(h5part_int64_t*)malloc(sz*sizeof(h5part_int64_t));
/* parallel file creation */
file=H5PartOpenFile("parttest.h5",H5PART_WRITE);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
H5PartWriteFileAttribString(file,"File Description", "This file is created by H5PartTest.cc. Simple H5Part file for testing purpose...");
char* FileAttrib = "Created by H5PartTest.cc";
H5PartWriteFileAttrib(file, "Origin", H5T_NATIVE_CHAR, FileAttrib ,strlen(FileAttrib));
for(t=0;t<5;t++){
fprintf(stdout,"Writing timestep %u\n",t);
for(i=0;i<sz;i++) {
x[i]=(double)(i+t);
y[i]=0.1 + (double)(i+t);
z[i]=0.2 + (double)(i+t*10);
id[i]=i;
fprintf(stdout,"\tp[%u] x=%f y=%f z=%f id=%d\n",
i,x[i],y[i],z[i],(int)id[i]);
}
H5PartSetStep(file,t); /* must set the current timestep in file */
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
/* now write different tuples of data into this timestep of the file */
H5PartWriteDataFloat64(file,"x",x);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",x);
H5PartWriteDataFloat64(file,"py",y);
H5PartWriteDataFloat64(file,"pz",z);
H5PartWriteDataInt64(file,"id",id);
H5PartWriteStepAttribString(file,"Step Description", "STEP STEP STEP");
char* StepAttrib = "STEP";
H5PartWriteStepAttrib(file, "Step", H5T_NATIVE_CHAR, StepAttrib ,strlen(StepAttrib));
}
printf("AllDone writing\n");
H5PartCloseFile(file);
/*+++++++++++++ Reopen File for Reading +++H5PartSetStep(h5partFile,0)++++++++*/
file=H5PartOpenFile("parttest.h5",H5PART_READ);
/********************************************/
H5PartSetStep(file,0);
nt=H5PartGetNumSteps(file); /* get number of steps in file */
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
np=H5PartGetNumParticles(file);
fprintf(stdout,"OK, close file and reopen for reading\n");
fprintf(stdout,"steps= %u\tdatasets=%u\tparticles= %u\n",
nt,nds,np);
// clear the particles
for(i=0;i<np;i++){
x[i]=y[i]=z[i]=0.0;
id[i]=0;
}
H5PartReadDataFloat64(file,"x",x);
H5PartReadDataFloat64(file,"y",y);
H5PartReadDataFloat64(file,"z",z);
H5PartReadDataInt64(file,"id",id);
for(i=0;i<np;i++){
fprintf(stdout,
"\tp[%3u] x=%lf y=%lf z=%lf id=%lld\n",
i,x[i],y[i],z[i],(long long)(id[i]));
}
/************************ std::cout << "nParticles: " << nParticles << std::endl;
********************/
printf("Set to last step and reload data\n");
H5PartSetStep(file,nt-1);
H5PartReadDataFloat64(file,"x",x);
H5PartReadDataFloat64(file,"y",y);
H5PartReadDataFloat64(file,"z",z);
H5PartReadDataInt64(file,"id",id);
for(i=0;i<np;i++){
fprintf(stdout,"\tp[%3u] x=%lf y=%lf z=%lf id=%lld\n",
i,x[i],y[i],z[i],(long long) (id[i]));
}
/********************************************/
idEnd=np;
printf("Old View is %d:%d\n",(int)idStart,(int)idEnd);
H5PartSetView(file,idStart,idEnd>>1);
printf("Set new view = %d:%d\n",(int)idStart,(int)(idEnd>>1));
H5PartGetView(file,&idStart,&idEnd);
np=H5PartGetNumParticles(file);
printf("steps= %u datasets= %u particles= %d with view %d:%d\n",
nt,nds,(int)np,(int)idStart,(int)idEnd);
H5PartSetStep(file,nt-1); // set to last step
printf("Setting to last step = %u\n",nt-1);
for(i=0;i<10;i++){ x[i]=y[i]=z[i]=0.0; id[i]=0; } /* clear the arrays */
H5PartReadDataFloat64(file,"x",x);
H5PartReadDataFloat64(file,"y",y);
H5PartReadDataFloat64(file,"z",z);
H5PartReadDataInt64(file,"id",id);
for(i=0;i<np;i++){
fprintf(stdout,
"\tp[%3u] x=%lf y=%lf z=%lf id=%lld\n",
i,x[i],y[i],z[i],(long long)id[i]);
}
/********************************************/
printf("Now set the view to the latter half of the data in step #%u\n",nt-1);
H5PartResetView(file);
H5PartGetView(file,&idStart,&idEnd);
printf("Reset view = %d:%d\nSetting to %u:%u\n",
(int)idStart,(int)idEnd,
(int)idEnd>>1,(int)idEnd);
H5PartSetView(file,(idEnd>>1),idEnd);
np=H5PartGetNumParticles(file);
printf("Now particles in selection are %d\n",np);
printf("doubleCheck=%lld\n", (long long)H5PartGetView(file,0,0));
for(i=0;i<10;i++){ x[i]=y[i]=z[i]=0.0; id[i]=0; } /* clear the arrays */
H5PartReadDataFloat64(file,"x",x);
H5PartReadDataFloat64(file,"y",y);
H5PartReadDataFloat64(file,"z",z);
H5PartReadDataInt64(file,"id",id);
for(i=0;i<np;i++){
fprintf(stdout,
"\tp[%3u] x=%lf y=%lf z=%lf id=%lld\n",
i,x[i],y[i],z[i],(long long)id[i]);
}
// read dataset names
h5part_int64_t status = H5PART_SUCCESS;
const h5part_int64_t lenName = 64;
char datasetName[lenName];
h5part_int64_t datasetType;
h5part_int64_t datasetNElems;
H5PartSetStep(file,0);
for (h5part_int64_t i=0; i < nds; i++) {
status = H5PartGetDatasetInfo(file, i, datasetName, lenName,
&datasetType, &datasetNElems);
if (status != H5PART_SUCCESS) {
perror("Could not retrieve dataset names!");
}
else {
printf("datasetName: %s, type: %d, nElements: %d ",
datasetName, datasetType, datasetNElems);
if (datasetType == H5PART_INT64) {
printf("H5PPART_INT64 \n");
}
else {
printf("H5PPART_FLOAT64 \n");
}
}
}
if(x)
free(x);
if(y)
free(y);
if(z)
free(z);
if(id)
free(id);
H5PartCloseFile(file);
fprintf(stderr,"done\n");
}
#endif
+120
View File
@@ -0,0 +1,120 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hdf5.h>
#include "H5Part.h"
#ifdef PARALLEL_IO
/*
This regression test is used to ensure parallel I/O is
working correctly and that Views are working for
parallel reads.
*/
int main(int argc,char *argv[]){
const int sz=5000;
double *x,*y,*z;
h5part_int64_t *id;
char name[64];
H5PartFile *file;
int i,t,nt,nds;
int nprocs,myproc;
hid_t gid;
MPI_Comm comm=MPI_COMM_WORLD;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&nprocs);
MPI_Comm_rank(comm,&myproc);
x=(double*)malloc(sz*nprocs*sizeof(double));
y=(double*)malloc(sz*nprocs*sizeof(double));
z=(double*)malloc(sz*nprocs*sizeof(double));
id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t));
/* parallel file creation */
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
for(t=0;t<5;t++){
MPI_Barrier(comm);
for(i=0;i<sz;i++) {
x[i]=(double)(i+t)+10.0*(double)myproc;
y[i]=0.1 + (double)(i+t);
z[i]=0.2 + (double)(i+t*10);
id[i]=i+sz*myproc;
}
printf("Proc[%u] Writing timestep %u\n",myproc,t);
if(t==0){
printf("Proc[%u]: data values x[first,last]=%f:%f y[%u:%u]=%f:%f z[:]=%f:%f id[:]=%f:%f\n",
myproc,x[0],x[sz-1],0,sz-1,y[0],y[sz-1],z[0],z[sz-1],(int)id[0],(int)id[sz-1]);
}
H5PartSetStep(file,t); /* must set the current timestep in file */
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
/* now write different tuples of data into this timestep of the file */
H5PartWriteDataFloat64(file,"x",x);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",x);
H5PartWriteDataFloat64(file,"py",y);
H5PartWriteDataFloat64(file,"pz",z);
H5PartWriteDataInt64(file,"id",id);
}
printf("AllDone p[%u]\n",myproc);
H5PartCloseFile(file);
MPI_Barrier(comm);
printf("p[%u:%u] : OK, close file and reopen for reading\n",myproc,nprocs);
file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm);
H5PartSetStep(file,0);
unsigned int np,total_np = (int)H5PartGetNumParticles(file);
nt=H5PartGetNumSteps(file); /* get number of steps in file */
nds = H5PartGetNumDatasets(file);
if(myproc==0){
fprintf(stdout,"steps= %u\tdatasets=%u\tparticles= %u\n",
nt,nds,total_np);
}
MPI_Barrier(comm);
/* now lets compute the appropriate idStart and idEnd
for this particular processor */
h5part_int64_t idStart = sz*myproc;
h5part_int64_t idEnd = (sz-1)+sz*myproc;
H5PartSetView(file,idStart,idEnd);
np=H5PartGetNumParticles(file);
printf("Proc[%u]: View=%u:%u : particles= %u\n",
myproc,(int)idStart,(int)idEnd,H5PartGetNumParticles(file));
/* now lets read them and print some out */
H5PartReadDataFloat64(file,"x",x);
H5PartReadDataFloat64(file,"y",y);
H5PartReadDataFloat64(file,"z",z);
H5PartReadDataInt64(file,"id",id);
printf("Proc[%u]: data values x[first,last]=%f:%f y[%u:%u]=%f:%f z[:]=%f:%f id[:]=%f:%f\n",
myproc,x[0],x[sz-1],(int)idStart,(int)idEnd,y[0],y[sz-1],z[0],z[sz-1],(int)id[0],(int)id[sz-1]);
/* H5PartCloseFile(file); MPI_Finalize(); exit(0); */
if(x)
free(x);
if(y)
free(y);
if(z)
free(z);
if(id)
free(id);
H5PartCloseFile(file);
MPI_Barrier(comm);
fprintf(stderr,"proc[%u]: done\n",myproc);
return MPI_Finalize();
}
#else
#error This file only works when PARALLEL_IO is enabled.
#endif
+147
View File
@@ -0,0 +1,147 @@
#include <stdio.h>
#include <stdlib.h>
#include <hdf5.h>
#include "H5Part.h"
#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
/*
A simple regression test that shows how you use this API
to write and read multi-timestep files of particle data.
*/
int ReadFile(const string fn){
char name[64];
H5PartFile *file;
int i,nt,nds;
cout << "Open " << fn << endl;
file= H5PartOpenFile(fn.c_str(),H5PART_READ);
nt=H5PartGetNumSteps(file);
H5PartSetStep(file,0);
nds=H5PartGetNumDatasets(file);
cout << "Timesteps = " << nt << " dataSets per timestep = " << nds << endl;
cout << endl << endl << "===============================" << endl;
for(i=0;i<nds;i++){
H5PartGetDatasetName(file,i,name,64);
printf("\tDataset[%u] name=[%s]\n",
i,name);
}
cout << "===============================" << endl << endl;;
for (int steps=0; steps<nt; steps++) {
H5PartSetStep(file,steps);
h5part_int64_t n = H5PartGetNumParticles(file);
cout << "number of particles this step =" << n << endl;
double *x=new double[n];
double *y=new double[n];
double *z=new double[n];
double *px=new double[n];
double *py=new double[n];
double *pz=new double[n];
h5part_int64_t *id=new h5part_int64_t[n];
H5PartReadParticleStep(file,steps,x,y,z,px,py,pz,id);
double sumx = 0.0;
double sumpz = 0.0;
for (h5part_int64_t i=0; i<n; i++) {
sumx += x[i];
sumpz += pz[i];
}
cout << "\tstep= " << steps << " sum(x)= " << sumx << " sum(pz)= " << sumpz << endl;
cout << "\tfirst x is " << x[0] << "\tlast x is " << x[n-1] << endl;
cout << "\tFor fake data, expect sumx to be =" << x[0]*((double)n)<<endl;
delete x;
delete y;
delete z;
delete px;
delete py;
delete pz;
delete id;
}
H5PartCloseFile(file);
return 1;
}
int WriteFile(const string fn){
H5PartFile *file;
int i,t;
h5part_int64_t n;
const int nt = 5;
const h5part_int64_t np = 1024*1024;
cout << "Open " << fn << endl;
file= H5PartOpenFile(fn.c_str(),H5PART_WRITE);
double *x=new double[np];
double *y=new double[np];
double *z=new double[np];
double *px=new double[np];
double *py=new double[np];
double *pz=new double[np];
h5part_int64_t *id=new h5part_int64_t[np];
H5PartSetNumParticles(file,np); // sets number of particles in simulation
for(n=0;n<np;n++) {
id[n]=i;
x[n]=1.0;
y[n]=2.0;
z[n]=3.0;
px[n]=1.0*((double)i)*((double)(i%10));
py[n]=2.0*((double)i)*((double)(i%10));
pz[n]=3.0*((double)i)*((double)(i%10));
}
for(t=0;t<nt;t++){
// setup the step number
H5PartSetStep(file,t);
printf("Write Step %u\n",t);
// write fake data
H5PartWriteDataFloat64(file,"x",x);
H5PartWriteDataFloat64(file,"y",y);
H5PartWriteDataFloat64(file,"z",z);
H5PartWriteDataFloat64(file,"px",px);
H5PartWriteDataFloat64(file,"py",py);
H5PartWriteDataFloat64(file,"pz",pz);
H5PartWriteDataInt64(file,"id",id);
}
H5PartCloseFile(file);
return 1;
}
int main(int argc,char **argv){
char *str;
char dstr[]="testfile.h5";
if(argc>1) str=argv[1];
else str=dstr;
const string fn = string(str);
/* f=fopen(fn.c_str(),"r");
if(f!=NULL) { a poor-man's stat()
fclose(f);
*/
if(!WriteFile(fn)){
cerr << "Failed to write file " << fn << endl;
exit(0);
}
/*
}
else {
cout << "File " << fn << " already exists, so we will proceed to reading" << endl;
} */
if(!ReadFile(fn)){
cerr << "Failed to read file " << fn << endl;
}
}
+107
View File
@@ -0,0 +1,107 @@
c ==============
c
c Sample Fortran program that uses HDF5 bindings
c
c ==============
program H5testF
implicit none
include 'H5Part.inc'
INTEGER*8 file
INTEGER*8 nstep,ndata
INTEGER*8 npoints
INTEGER*8 step
INTEGER*8 err
INTEGER*8 I,J
REAL*8,ALLOCATABLE:: X(:),Y(:),Z(:),PX(:),PY(:),PZ(:)
INTEGER*8,ALLOCATABLE:: ID(:)
REAL*8 REALTIME
file = h5pt_openw("testfilef.h5")
print *,"Opened file testfilef.h5 for writing"
npoints = 1024
nstep = 10
ALLOCATE(X(npoints),Y(npoints),Z(npoints))
ALLOCATE(PX(npoints),PY(npoints),PZ(npoints))
ALLOCATE(ID(npoints))
print *," Npoints=",npoints," nsteps=",nstep
print *," writing X,Y,Z,PX,PY,PZ,ID"
print *," ... initialize the data arrays"
do I=1,npoints
X(I)=0.0
Y(I)=1.0+I
Z(I)=100.0+I*2.0
ID(I)=I
enddo
print *,"Tell h5pt how many particles are stored in the file"
c set the number of points
err = h5pt_setnpoints(file,npoints)
print *,"write an attribute string"
c write an annotation to the file
err=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3")
print *,"and now write the steps"
do I=1,nstep
c Set the step number
print *,"Write Step ",I
err = h5pt_setstep(file,I)
c Now start writing the data arrays for this step
err = h5pt_writedata_r8(file,"x",X)
err = h5pt_writedata_r8(file,"y",Y)
err = h5pt_writedata_r8(file,"z",Z)
err = h5pt_writedata_r8(file,"px",PX)
err = h5pt_writedata_r8(file,"py",PY)
err = h5pt_writedata_r8(file,"pz",PZ)
err = h5pt_writedata_i8(file,"id",ID)
do J=1,npoints
ID(J)=ID(J)+10
enddo
c And write a simple floatingpoint attribute associated with this timestep
REALTIME = I*0.1
err=h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1)
enddo
print *,"Done writing, now close the file"
err = h5pt_close(file)
c **************** Clean out some variables ***************
nstep=0
c npoints=0
do I=1,npoints
X(I)=-1.0
Y(I)=-1.0
Z(I)=-1.0
ID(I)=0
enddo
c *****************Now Reopen for Reading ******************
print *,"Open file for reading"
file = h5pt_openr("testfilef.h5")
print *," Opened testfilef.h5"
nstep = h5pt_getnsteps(file)
print *," Nsteps = ",nstep
err = h5pt_setstep(file,1_8)
print *,"now get the number of datasets"
ndata = h5pt_getndatasets(file)
print *," Ndata=",ndata
npoints = h5pt_getnpoints(file)
print *," NP=",npoints
do step=1,nstep
print *,"Read step ",step
c set the current step
err = h5pt_setstep(file,step)
err=h5pt_readdata_i8(file,"id",ID)
c read the Z data from the current step
c err = h5prt_readdata(file,step,X,Y,Z,PX,PY,PZ,ID)
do J=1,10
print *," ID(",J,")==",ID(J)
enddo
enddo
err = h5pt_close(file)
print *,"done"
end
+123
View File
@@ -0,0 +1,123 @@
! ==============
!
! Sample Fortran program that uses HDF5 bindings
!
! ==============
program H5testFpar
implicit none
include 'mpif.h'
include 'H5PartF90.inc'
INTEGER*8 file
INTEGER*8 nstep
INTEGER*8 ndata
INTEGER*8 npoints,pointoffset
INTEGER*8 step
INTEGER*8 I
INTEGER*8 J
REAL*8,ALLOCATABLE:: X(:),Y(:),Z(:),PX(:),PY(:),PZ(:)
INTEGER*8,ALLOCATABLE:: ID(:)
REAL*8 REALTIME(1)
INTEGER myproc,nprocs
INTEGER ierr
INTEGER*8 rc
INTEGER:: comm
call MPI_Init(ierr)
comm = MPI_COMM_WORLD
call MPI_Comm_rank(comm,myproc,ierr)
call MPI_Comm_size(comm,nprocs,ierr)
file = h5pt_openw_par("testfilef.h5",comm)
print *,"Opened file testfilef.h5 for writing"
npoints = 1024
nstep = 10
ALLOCATE(X(npoints),Y(npoints),Z(npoints))
ALLOCATE(PX(npoints),PY(npoints),PZ(npoints))
ALLOCATE(ID(npoints))
print *," Npoints=",npoints," nsteps=",nstep
print *," writing X,Y,Z,PX,PY,PZ,ID"
print *," ... initialize the data arrays"
do I=1,npoints
X(INT(I))=0.0
Y(I)=1.0+REAL(I)
Z(I)=100.0+REAL(I)*2.0
ID(I)=I
enddo
print *,"Tell h5pt how many particles are stored in the file"
! set the number of points
rc = h5pt_setnpoints(file,npoints)
print *,"write an attribute string"
! write an annotation to the file
rc=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3")
print *,"and now write the steps"
do I=1,nstep
! Set the step number
print *,"Write Step ",I
rc = h5pt_setstep(file,I)
! Now start writing the data arrays for this step
rc = h5pt_writedata_r8(file,"x",X)
rc = h5pt_writedata_r8(file,"y",Y)
rc = h5pt_writedata_r8(file,"z",Z)
rc = h5pt_writedata_r8(file,"px",PX)
rc = h5pt_writedata_r8(file,"py",PY)
rc = h5pt_writedata_r8(file,"pz",PZ)
rc = h5pt_writedata_i8(file,"id",ID)
do J=1,npoints
ID(J)=ID(J)+10
enddo
! And write a simple floatingpoint attribute associated with this timestep
REALTIME(1) = REAL(I)*0.1
rc = h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1_8)
enddo
print *,"Done writing, now close the file"
rc = h5pt_close(file)
! **************** Clean out some variables ***************
nstep=0
! npoints=0
do I=1,npoints
X(I)=-1.0
Y(I)=-1.0
Z(I)=-1.0
ID(I)=0
enddo
! *****************Now Reopen for Reading ******************
print *,"Open file for reading"
file = h5pt_openr_par("testfilef.h5",comm)
print *," Opened testfilef.h5"
nstep = h5pt_getnsteps(file)
print *," Nsteps = ",nstep
rc = h5pt_setstep(file,1_8)
print *,"now get the number of datasets"
ndata = h5pt_getndatasets(file)
print *," Ndata=",ndata
npoints = h5pt_getnpoints(file)
print *," Total NP=",npoints
npoints = npoints/nprocs
pointoffset = npoints*myproc;
rc = h5pt_setview(file,pointoffset,pointoffset+npoints)
print *," Pointoffset=",pointoffset," Local NP=",npoints
! Now we need to set our view to read correct points
do step=1,nstep
print *,"Read step ",step
! set the current step
rc = h5pt_setstep(file,step)
rc = h5pt_readdata_i8(file,"id",ID)
! read the Z data from the current step
! rc = h5prt_readdata(file,step,X,Y,Z,PX,PY,PZ,ID)
do J=1,10
print *," ID(",J,")==",ID(J)
enddo
enddo
rc = h5pt_close(file)
print *,"done"
call MPI_Finalize()
end
+164
View File
@@ -0,0 +1,164 @@
# test level Makefile.am
# PATH SETTING
HDF5ROOT = @HDF5ROOT@
# COMPILER SETTING
CXX = @CXX@
FC = @FC@
MPIFC = @MPIFC@
MPICXX = @MPICXX@
MPICC = @MPICC@
# COMPILER FLAG SETTING
CFLAGS = @CFLAGS@
FFLAGS = @FFLAGS@ @MPIINC@
# LIBRARIES
SZLIB = @SZLIB@
HDFLIB = -L$(HDF5ROOT)/lib -lhdf5 -lz $(SZLIB) @LDFLAGS@
MPILIB = @MPILIB@
H5LIB = -L@H5P_LIB_LOC@ -lH5Part
LIBS = ${H5LIB} $(HDFLIB) $(MPILIB) -lm @STDCXX@
# H5Part compiled library location
# H5PLIB = -L@prefix@/lib
# INCLUDES
HDFINC = -I$(HDF5ROOT)/include
MPIINC = @MPIINC@
H5INC = -I@H5P_LIB_LOC@
INC = $(HDFINC) $(MPIINC) $(H5INC)
# What to build... make install will place these files in the $(prefix)/bin directory.
bin_PROGRAMS = @TTARGET@
# Some useful scripts that I wish to place in the $(prefix)/bin directory.
bin_SCRIPTS =
#bin_SCRIPTS = JAC_H5PartTestP_script.scr JAC_H5testFpar_script.scr JAC_RUN_ALL_script.scr
# Listing of all programs that maybe built. (Has to know statically...)
EXTRA_PROGRAMS =
# Extra files that I wish to include in the dist tar ball.
EXTRA_DIST = Bench.c \
H5ParallelTest.cc \
H5PartTest.cc H5PartTestParallel.cc \
H5PartAndreasTest.cc \
H5test.cc H5testF.f \
H5testFpar.f90 \
H5BlockParTestScalarField.c H5BlockParTestScalarFieldF.f90 \
H5BlockTestAttributes.c H5BlockTestAttributesF.f90 \
$(bin_SCRIPTS)
# Specific building instruction (What compilers to use...)
# ------------ Build Tests ------------
Bench: Bench.c
$(CC) $(CFLAGS) $(INC) -o $@ $< $(H5PLIB) -lH5Part $(LIBS)
###############################################################################
H5PartTest: H5PartTest.o
$(CXX) -o $@ $< $(H5PLIB) -lH5Part $(LIBS)
H5PartTest.o: H5PartTest.cc
$(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -g -c $<
###############################################################################
H5PartTestP: H5PartTestP.o
$(CXX) $(INC) -o $@ $< $(H5LIB) -lH5Part $(LIBS)
H5PartTestP.o: H5PartTest.cc
$(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -c $< -o $@
###############################################################################
H5PartTestParallel: H5PartTestParallel.o
$(CXX) -o $@ $< $(H5LIB) -lH5Part $(LIBS)
H5PartTestParallel.o: H5PartTestParallel.cc
$(CXX) $(CFLAGS) $(INC) -c $<
###############################################################################
H5PartAndreasTest: H5PartAndreasTest.o
$(CXX) -o $@ $< $(H5LIB) -lpH5Part $(LIBS)
H5PartAndreasTest.o: H5PartAndreasTest.cc
$(CXX) $(CFLAGS) $(INC) -c $<
###############################################################################
H5testF: H5testF.o
$(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS)
H5testF.o: H5testF.f
$(FC) $(FFLAGS) -c $(H5INC) $<
###############################################################################
H5testFpar: H5testFpar.o
$(MPIFC) -o $@ $< $(H5LIB) -lpH5PartF -lpH5Part $(LIBS)
H5testFpar.o: H5testFpar.f90
$(MPIFC) $(FFLAGS) -c $(H5INC) $<
###############################################################################
H5test: H5test.o
$(CXX) -o $@ $< $(H5LIB) $(LIBS)
H5test.o: H5test.cc
$(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -g -c $<
###############################################################################
% : %.o
$(CC) -o $@ $< $(H5LIB) $(LIBS)
%.o : %.c
$(CC) $(CFLAGS) $(INC) -g -c $<
%.o : %.f90
${FC} $(FFLAGS) -c $(H5INC) $<
H5BlockTestAttributes.o: H5BlockTestAttributes.c
H5BlockTestAttributes: H5BlockTestAttributes.o
H5BlockTestAttributesF.o: H5BlockTestAttributesF.f90
H5BlockTestAttributesF: H5BlockTestAttributesF.o
$(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS)
H5BlockParTestScalarField.o: H5BlockParTestScalarField.c
H5BlockParTestScalarField: H5BlockParTestScalarField.o
H5BlockParTestScalarFieldF.o: H5BlockParTestScalarFieldF.f90
H5BlockParTestScalarFieldF: H5BlockParTestScalarFieldF.o
$(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS)
H5BlockDissolveGhosts.o: H5BlockDissolveGhosts.c
H5BlockDissolveGhosts: H5BlockDissolveGhosts.o
###############################################################################
clean:
${RM} -f *~ *.o ${bin_PROGRAMS}
distclean: clean
${RM} -rf .deps
${RM} -rf .libs
${RM} -f parttest.h5
${RM} -rf config.status config.log config.h Makefile
+83
View File
@@ -0,0 +1,83 @@
# tools level Makefile.am
# PATH SETTING
HDF5ROOT = @HDF5ROOT@
# COMPILER SETTING
CXX = @CXX@
TOOLS_CXX = @TOOLS_CXX@
# COMPILER FLAG SETTING
CFLAGS = @CFLAGS@
# # -L$(HDF5ROOT)/lib -lhdf5
# LIBRARIES
SZLIB = @SZLIB@
HDFLIB = @TOOLS_HDFLIB@ -lz $(SZLIB)
LIBS = $(HDFLIB) $(MPILIB) -lm @STDCXX@ @LDFLAGS@
# H5Part compiled library location
# H5PLIB = -L@prefix@/lib
H5PLIB = -L@H5P_LIB_LOC@ @TOOLS_H5PART_LIB@
# INCLUDES
HDFINC = -I$(HDF5ROOT)/include
INC = $(HDFINC) $(H5PINC) $(MPIINC)
# H5Part header file location
# H5PINC = -I@prefix@/include
H5PINC = -I@H5P_LIB_LOC@
# What to build... make install will place these files in the $(prefix)/bin directory.
bin_PROGRAMS = @BUILD_TOOLS@
# Listing of all programs that maybe built. (Has to know statically...)
EXTRA_PROGRAMS = h5pAttrib h5pToGNUplot # homdynToH5p
# Extra files that I wish to include in the dist tar ball.
EXTRA_DIST = h5pAttrib.cc h5pToGNUplot.cc## TO BE TAILORED LATER...
# Listing of sources
h5pAttrib_SOURCES = h5pAttrib.cc
h5pToGNUplot_SOURCES = h5pToGNUplot.cc
#homdynToH5p_SOURCES = homdynToH5p.cc
# Specific building instruction (What compilers to use...)
# ------------ Build Tools ------------
h5pAttrib: h5pAttrib.o
$(TOOLS_CXX) -o h5pAttrib h5pAttrib.o $(H5PLIB) $(LIBS)
h5pAttrib.o: h5pAttrib.cc
$(TOOLS_CXX) $(CFLAGS) $(INC) -g -c h5pAttrib.cc
h5pToGNUplot: h5pToGNUplot.o
$(TOOLS_CXX) -o h5pToGNUplot h5pToGNUplot.o $(H5PLIB) $(LIBS)
h5pToGNUplot.o: h5pToGNUplot.cc
$(TOOLS_CXX) $(CFLAGS) $(INC) -g -c $<
homdynToH5p : homdynToH5p.o
$(TOOLS_CXX) -o $@ $< $(H5PLIB) $(LIBS)
homdynToH5p.o: homdynToH5p.cc
$(TOOLS_CXX) $(CFLAGS) $(INC) -g -c $<
clean:
rm -f *~ *.o h5pAttrib h5pToGNUplot
distclean: clean
rm -rf .deps
rm -rf Makefile
# # bash-3.00$ /usr/bin/mpcc_r -g -O2 -I/scratch/scratchdirs/cristina/hdf5/hdf5_par/include -I/u2/antino/trunk/src -c h5pAttrib.cc
# # bash-3.00$ /usr/bin/mpcc_r -o h5pAttrib h5pAttrib.o -L/u2/antino/trunk/src -lpH5Part -L/scratch/scratchdirs/cristina/hdf5/hdf5_par/lib -lhdf5 -lz -lm
#####################################################################################################################
+356
View File
@@ -0,0 +1,356 @@
TABLE OF CONTENTS
--------------------
[1] Quick Guide
--- For h5pAttrib
[2] To see number of timesteps in a h5part file
[3] To see file attributes in a h5part file
[4] To see step attributes in a h5part file
[5] To see dataset in a h5part file
[6] Providing more than one flag at once for h5pAttrib
--- For h5pToGNUplot
[7] What parameters to provide
[8] How to create an input file to GNUplot
************************************************************************************************
[1] Quick Guide
------------------
--> -h option will display a concise help page.
$>> ./h5pAttrib -h
usage: h5pAttrib [OPTIONS] file
OPTIONS
-h, --help Print help page
-n, --nstep Print number of steps
-A, --fileA Print file attributes
-a, --stepA Print step attributes & values for time step n
-d, --dataset Print data sets names & values for time step n
-H, --header Print shorter version without the values
Examples:
1) Show file attribute names & values of sample.h5part
h5pAttrib -A sample.h5part
2) Show step attribute names for time step 5 of sample.h5part
h5pAttrib -a 5 -H sample.h5part
$>> ./h5pToGNUplot -h
usage: h5pToGNUplot -t TIMESTEP -1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS]
FLAGS
-h, --help Print help page
-1, --1var (REQUIRED) Takes first variable parameter
-2, --2var (REQUIRED) Takes second variable parameter
-i, --input (REQUIRED) Takes input file name
-t, --timestep (REQUIRED) Sets the timestep (Value -1 will result in dumping values of all timesteps.)
-o, --output (OPTIONAL) Takes output file name (without this flag, the program will print to stdout)
-n, --number (OPTIONAL) Sets number of output points
-s, --start (OPTIONAL) Sets the starting particle index
Examples:
1) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54
h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt
2) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54
using 1200 points from particle index 76
h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt -s 76 -n 1200
************************************************************************************************
--- For h5pAttrib
************************************************************************************************
[2] To see number of timesteps in a h5part file
--------------------------------------------------
EXAMPLE>>
$>> ./h5pAttrib -n sample.h5part
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing number of timesteps for: sample.h5part ...
There are total 252 number of timesteps.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
done
[3] To see file attributes in a h5part file
----------------------------------------------
EXAMPLE>>
$>> ./h5pAttrib -A sample.h5part
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing file attributes for: sample.h5part ...
The number of file attributes for file sample.h5part is 0 ...
There are no file attributes.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
done
NOTE: -H option will omit the list of values of file attributes.
[4] To see step attributes in a h5part file
----------------------------------------------
EXAMPLE>>
$>> ./h5pAttrib -a 2 sample.h5part
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing step attributes for: sample.h5part ...
The number of step attributes for timestep #2 is 10 ...
Attribute #0 = Step
There are 1 elements in the attribute
Attribute Type is H5T_NATIVE_INT64
Printing 1 element value(s):
COUNT[0]: 2
Attribute #1 = Spos
There are 1 elements in the attribute
Attribute Type is H5T_NATIVE_DOUBLE
Printing 1 element value(s):
COUNT[0]: 0.143580
Attribute #2 = structLen
There are 1 elements in the attribute
Attribute Type is H5T_NATIVE_DOUBLE
Printing 1 element value(s):
COUNT[0]: 2.393000
.
.
.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
done
NOTE: -H option will omit the list of values of step attributes.
[5] To see dataset in a h5part file
--------------------------------------
EXAMPLE>>
$>> ./h5pAttrib -d 2 -H sample.h5part
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing names of datasets for: sample.h5part ...
The number of datasets for timestep #2 is 7 ...
Dataset Name #0 = id
Dataset Type is H5T_NATIVE_INT64
Number of elements: 67587
Dataset Name #1 = px
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
Dataset Name #2 = py
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
Dataset Name #3 = pz
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
Dataset Name #4 = x
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
Dataset Name #5 = y
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
Dataset Name #6 = z
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 67587
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
done
NOTE: -H option will omit the list of values of dataset attributes.
[6] Providing more than one flag at once
-------------------------------------------
When more than one flags are provided, one result after another will be displayed.
EXAMPLE>>
$>> ./h5pAttrib -H -a 1 -d 1 sample.h5part
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing step attributes for: sample.h5part ...
The number of step attributes for timestep #1 is 10 ...
Attribute #0 = Step
Attribute #1 = Spos
Attribute #2 = structLen
Attribute #3 = org
Attribute #4 = maxX
Attribute #5 = minX
Attribute #6 = maxP
Attribute #7 = minP
Attribute #8 = centroid
Attribute #9 = nloc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Printing names of datasets for: sample.h5part ...
The number of datasets for timestep #1 is 7 ...
Dataset Name #0 = id
Dataset Type is H5T_NATIVE_INT64
Number of elements: 60214
Dataset Name #1 = px
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
Dataset Name #2 = py
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
Dataset Name #3 = pz
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
Dataset Name #4 = x
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
Dataset Name #5 = y
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
Dataset Name #6 = z
Dataset Type is H5T_NATIVE_DOUBLE
Number of elements: 60214
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
done
************************************************************************************************
--- For h5pAttrib
************************************************************************************************
[7] What parameters to provide
---------------------------------
When you execute the program with -h option, it displays what flags are necessary and what flags
are optional.
-h, --help Print help page
-1, --1var (REQUIRED) Takes first variable parameter
-2, --2var (REQUIRED) Takes second variable parameter
-i, --input (REQUIRED) Takes input file name
-t, --timestep (REQUIRED) Sets the timestep (Value -1 will result in dumping values of all timesteps.)
-o, --output (OPTIONAL) Takes output file name (without this flag, the program will print to stdout)
-n, --number (OPTIONAL) Sets number of output points
-s, --start (OPTIONAL) Sets the starting particle index
[8] How to create an input file to GNUplot
---------------------------------------------
EXAMPLE>>
Create input file to GNUplot that plots x vs. y.
$>> ./h5pToGNUplot -1 x -2 y -t 1 -i sample.h5part -o output.txt
$>> cat output.txt
-0.390779 -0.254793
-0.396527 -0.252781
-0.375362 -0.285137
-0.396527 -0.252781
-0.379917 -0.283147
-0.390779 -0.254793
-0.387536 -0.287346
-0.371787 -0.319797
-0.379917 -0.283147
-0.378967 -0.326058
-0.378976 -0.326078
-0.387536 -0.287346
-0.378957 -0.326069
-0.379917 -0.283147
-0.388762 -0.265390
-0.371787 -0.319797
-0.390779 -0.254793
-0.376825 -0.266804
-0.379917 -0.283147
-0.375362 -0.285137
...
Then run GNUplot...
$>> gnuplot
G N U P L O T
Version 4.0 patchlevel 0
last modified Thu Apr 15 14:44:22 CEST 2004
System: Linux 2.6.11.4-21.11-smp
Copyright (C) 1986 - 1993, 1998, 2004
Thomas Williams, Colin Kelley and many others
This is gnuplot version 4.0. Please refer to the documentation
for command syntax changes. The old syntax will be accepted
throughout the 4.0 series, but all save files use the new syntax.
Type `help` to access the on-line reference manual.
The gnuplot FAQ is available from
http://www.gnuplot.info/faq/
Send comments and requests for help to
<gnuplot-info@lists.sourceforge.net>
Send bugs, suggestions and mods to
<gnuplot-bugs@lists.sourceforge.net>
Terminal type set to 'x11'
gnuplot> plot "output.txt"
This will open a GNUplot window that plots output.txt.
File diff suppressed because it is too large Load Diff
+461
View File
@@ -0,0 +1,461 @@
/* h5pToGNUplot.cc
Antino Kim
This utility will output a GNU Plot input file accodring to the flags provided from the command line.
The parser was imported from the example of h5dump utility with slight modifications.
*/
#include <stdio.h>
#include <stdlib.h>
#include <cctype>
#include <string.h>
#include <hdf5.h>
#include "H5Part.h"
#define MAX_LEN 100
/* Function headers */
int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts);
static void print_help();
static void variable_assign(int argc, const char *argv[]);
/* Global variables */
static char* var_1 = NULL;
static char* var_2 = NULL;
static char* input_name = NULL;
static char* output_name = NULL;
static char* timestep = NULL;
static char* start = NULL;
static char* npoints = NULL;
static int print_all = 0;
/* `get_option' variables */
int opt_err = 1; /*get_option prints errors if this is on */
int opt_ind = 1; /*token pointer */
const char *opt_arg = NULL; /*flag argument (or value) */
/* indication whether the flag (option) requires an argument or not */
enum {
no_arg = 0, /* doesn't take an argument */
require_arg, /* requires an argument */
};
/* struct for flags (options) */
typedef struct long_options
{
const char *name; /* name of the long option */
int has_arg; /* whether we should look for an arg */
char shortval; /* the shortname equivalent of long arg
* this gets returned from get_option */
} long_options;
/* List of options in single characters */
static const char *s_opts = "h1:2:i:o:n:t:s:";
/* List of options in full words */
static struct long_options l_opts[] =
{
{ "help", no_arg, 'h' }, // Print help page
{ "1var", require_arg, '1' }, // Takes first variable parameter
{ "2var", require_arg, '2' }, // Takes second variable parameter
{ "input", require_arg, 'i' }, // Takes input file name
{ "output", require_arg, 'o' }, // Takes output file name (without this flag, the program will print to stdout)
{ "number", require_arg, 'n' }, // Sets number of output points
{ "start", require_arg, 's' }, // Sets the starting particle index
{ "timestep", require_arg, 't' }, // Sets the timestep
{ NULL, 0, '\0' }
};
/************************************************************************************
*********************************** FUNCTIONS *************************************
*************************************************************************************/
/* get_option is the parsing function that was majorly ported from h5dump utility */
int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts)
{
static int sp = 1; /* character index in current token */
int opt_opt = '?'; /* option character passed back to user */
if (sp == 1)
{
/* check for more flag-like tokens */
if (opt_ind >= argc || argv[opt_ind][0] != '-' || argv[opt_ind][1] == '\0')
{
return EOF;
}
else if (strcmp(argv[opt_ind], "--") == 0)
{
opt_ind++;
return EOF;
}
}
if (sp == 1 && argv[opt_ind][0] == '-' && argv[opt_ind][1] == '-')
{
/* long command line option */
const char *arg = &argv[opt_ind][2];
int i;
for (i = 0; l_opts && l_opts[i].name; i++)
{
size_t len = strlen(l_opts[i].name);
if (strncmp(arg, l_opts[i].name, len) == 0)
{
/* we've found a matching long command line flag */
opt_opt = l_opts[i].shortval;
if (l_opts[i].has_arg != no_arg)
{
if (arg[len] == '=')
{
opt_arg = &arg[len + 1];
}
else if (opt_ind < (argc - 1) && argv[opt_ind + 1][0] != '-')
{
opt_arg = argv[++opt_ind];
}
else if (l_opts[i].has_arg == require_arg)
{
if (opt_err)
fprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
}
else
{
if (arg[len] == '=')
{
if (opt_err)
fprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
opt_arg = NULL;
}
break;
}
}
if (l_opts[i].name == NULL)
{
/* exhausted all of the l_opts we have and still didn't match */
if (opt_err)
fprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
opt_opt = '?';
}
opt_ind++;
sp = 1;
}
else
{
register char *cp; /* pointer into current token */
/* short command line option */
opt_opt = argv[opt_ind][sp];
if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0)
{
if (opt_err)
fprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt);
/* if no chars left in this token, move to next token */
if (argv[opt_ind][++sp] == '\0')
{
opt_ind++;
sp = 1;
}
return '?';
}
if (*++cp == ':')
{
/* if a value is expected, get it */
if (argv[opt_ind][sp + 1] != '\0')
{
/* flag value is rest of current token */
opt_arg = &argv[opt_ind++][sp + 1];
}
else if (++opt_ind >= argc)
{
if (opt_err)
{
fprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt);
}
opt_opt = '?';
}
else
{
/* flag value is next token */
opt_arg = argv[opt_ind++];
}
sp = 1;
}
else
{
/* set up to look at next char in token, next time */
if (argv[opt_ind][++sp] == '\0')
{
/* no more in current token, so setup next token */
opt_ind++;
sp = 1;
}
opt_arg = NULL;
}
}
/* return the current flag character found */
return opt_opt;
}
/* Assigns functions according to the parsed result */
static void variable_assign(int argc, const char *argv[])
{
int option;
/* set options according to the command line */
while ((option = get_option(argc, argv, s_opts, l_opts)) != EOF)
{
switch ((char)option)
{
case 'h': // Print help page
print_help();
exit(1);
case '1': // Print file attributes
var_1 = strdup(opt_arg);
break;
case '2': // Print step attributes & values for time step n
var_2 = strdup(opt_arg);
break;
case 'i': // Print data sets names & values for time step n
input_name = strdup(opt_arg);
break;
case 'o': // Print number of steps
output_name = strdup(opt_arg);
break;
case 'n': // Print shorter version without the values
npoints = strdup(opt_arg);
break;
case 's': // Print shorter version without the values
start = strdup(opt_arg);
break;
case 't': // Print shorter version without the values
timestep = strdup(opt_arg);
if(atoi(timestep)==-1)
{
print_all = 1;
}
break;
default:
print_help();
exit(1);
}
}
}
/* For printing help page */
static void print_help()
{
fflush(stdout);
fprintf(stdout, "\nusage: h5pToGNUplot -t TIMESTEP -1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS]\n");
fprintf(stdout, "\n");
fprintf(stdout, " FLAGS\n");
fprintf(stdout, " -h, --help Print help page\n");
fprintf(stdout, " -1 par, --1var par (REQUIRED) Takes first variable parameter to \"par\"\n");
fprintf(stdout, " -2 par, --2var par (REQUIRED) Takes second variable parameter to \"par\"\n");
fprintf(stdout, " -i file, --input file (REQUIRED) Takes input file name to \"file\"\n");
fprintf(stdout, " -t step, --timestep step (REQUIRED) Sets the timestep to \"step\" (Value -1 will result in dumping values of all timesteps.)\n");
fprintf(stdout, " -o file, --output file (OPTIONAL) Takes output file name to \"file\" (without this flag, the program will print to stdout)\n");
fprintf(stdout, " -n num, --number num (OPTIONAL) Sets number of output points to \"num\"\n");
fprintf(stdout, " -s idx, --start idx (OPTIONAL) Sets the starting particle index to \"idx\"\n");
fprintf(stdout, "\n");
fprintf(stdout, " Examples:\n");
fprintf(stdout, "\n");
fprintf(stdout, " 1) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54\n");
fprintf(stdout, "\n");
fprintf(stdout, " h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt\n");
fprintf(stdout, "\n");
fprintf(stdout, " 2) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54 \n using 1200 points from particle index 76\n");
fprintf(stdout, "\n");
fprintf(stdout, " h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt -s 76 -n 1200\n");
fprintf(stdout, "\n");
}
int main(int argc, const char *argv[])
{
/* Numerous variables */
H5PartFile *h5file = NULL;
char data_name[MAX_LEN];
int i, j, start_indx = 0;
h5part_int64_t type;
hid_t type_1;
hid_t type_2;
int num_dataset;
h5part_int64_t nparticles;
int stop = 0;
void* value_1 = NULL;
void* value_2 = NULL;
FILE * outFile;
int ntime_step = 0;
variable_assign(argc, argv);
if(input_name == NULL)
{
fprintf(stdout, "missing file name\n");
print_help();
exit(1);
}
if(var_1 == NULL || var_2 == NULL || timestep == NULL)
{
fprintf(stdout, "missing required parameters\n");
print_help();
exit(1);
}
h5file = H5PartOpenFile(input_name, H5PART_READ);
if( h5file == NULL )
{
fprintf(stdout, "unable to open file %s\n", input_name);
print_help();
exit(1);
}
j = atoi(timestep);
ntime_step = j+1;
if(print_all)
{
j=0;
ntime_step = H5PartGetNumSteps(h5file);
}
for (; j<ntime_step; j++)
{
H5PartSetStep(h5file,j);
num_dataset = H5PartGetNumDatasets(h5file);
for(i=0; i<num_dataset; i++)
{
H5PartGetDatasetInfo(h5file, i, data_name, MAX_LEN, &type, &nparticles);
if(strcmp(data_name, var_1))
{
type_1=type;
}
if(strcmp(data_name, var_2))
{
type_2=type;
}
}
if (type_1 == H5T_NATIVE_INT64)
{
value_1 = (h5part_int64_t*)malloc(sizeof(h5part_int64_t)*nparticles);
H5PartReadDataInt64(h5file, var_1, (h5part_int64_t*)value_1);
}
else if (type_1 == H5T_NATIVE_DOUBLE)
{
value_1 = (double*)malloc(sizeof(double)*nparticles);
H5PartReadDataFloat64(h5file, var_1, (double*)value_1);
}
else
{
fprintf(stdout, "Dataset Type is UNKNOWN for %s. (Check the variable name.)\n", var_1);
exit(1);
}
if (type_2 == H5T_NATIVE_INT64)
{
value_2 = (h5part_int64_t*)malloc(sizeof(h5part_int64_t)*nparticles);
H5PartReadDataInt64(h5file, var_2, (h5part_int64_t*)value_2);
}
else if (type_2 == H5T_NATIVE_DOUBLE)
{
value_2 = (double*)malloc(sizeof(double)*nparticles);
H5PartReadDataFloat64(h5file, var_2, (double*)value_2);
}
else
{
fprintf(stdout, "Dataset Type is UNKNOWN for %s. (Check the variable name.)\n", var_2);
exit(1);
}
if(start != NULL)
{
start_indx = atoi(start);
}
if(npoints != NULL)
{
stop = atoi(npoints) + start_indx;
}
else
{
stop = nparticles;
}
if(stop > nparticles)
{
stop = nparticles;
}
if(output_name != NULL)
{
outFile = fopen (output_name,"w");
for(i=start_indx; i<stop; i++)
{
if (type_1 == H5T_NATIVE_INT64)
fprintf(outFile, "%lld", ((long long*)value_1)[i]);
else if (type_1 == H5T_NATIVE_DOUBLE)
fprintf(outFile, "%lf", ((double*)value_1)[i]);
if (type_2 == H5T_NATIVE_INT64)
fprintf(outFile, "\t%lld", ((long long*)value_2)[i]);
else if (type_2 == H5T_NATIVE_DOUBLE)
fprintf(outFile, "\t%lf", ((double*)value_2)[i]);
fprintf(outFile, "\n");
}
fprintf(outFile, "\n");
fclose (outFile);
}
else
{
for(i=start_indx; i<stop; i++)
{
if (type_1 == H5T_NATIVE_INT64)
fprintf(stdout, "%lld", ((long long*)value_1)[i]);
else if (type_1 == H5T_NATIVE_DOUBLE)
fprintf(stdout, "%lf", ((double*)value_1)[i]);
if (type_2 == H5T_NATIVE_INT64)
fprintf(stdout, "\t%lld", ((long long*)value_2)[i]);
else if (type_2 == H5T_NATIVE_DOUBLE)
fprintf(stdout, "\t%lf", ((double*)value_2)[i]);
fprintf(stdout, "\n");
}
fprintf(stdout, "\n");
}
free(value_1);
free(value_2);
}
H5PartCloseFile(h5file);
return 0;
}
+173
View File
@@ -0,0 +1,173 @@
/*
Read Homdyn Hxxx.DAT and convert it to the H5Part data
format.
g++ -I/Users/adelmann/install/hdf5-1.6.5/hdf5/include -I/Users/adelmann/svnwork/H5Part/src -g -c homdynToH5p.cc
g++ -o homdynToH5p homdynToH5p.o -L/Users/adelmann/svnwork/H5Part/src -lH5Part -L/Users/adelmann/install/hdf5-1.6.5/hdf5/lib -lhdf5 -lz -lm
Usage: homdynToH5p [-f newFilename]
Reads HBUNCH.OUT and writes the data to HBUNCH.h5 or newFilename.h5
*/
#include "H5Part.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,char *argv[]){
const int nCol = 25;
const int nHeader = 1;
int nLines = 0;
H5PartFile *file;
double data[nCol][10000];
string headers[nCol];
string units[nCol];
string fnStr("HBUNCH.OUT");
ifstream in;
/*
Open and read HOMDYN File:
*/
in.open(fnStr.c_str());
/*
over read possible header
*/
for (int l=0;l<nHeader;l++) {
for (int c=0;c<nCol;c++) {
in >> headers[c];
cout << c << " - - " << headers[c] << endl;
}
}
headers[0] = string("SPOS"); // H5Root needs this name
/*
read in file data
*/
while (1) {
for (int c=0;c<nCol;c++)
in >> data[c][nLines];
if (!in.good()) break;
nLines++;
}
in.close();
cout << "In HBUNCH.OUT found " << nLines << " lines " << endl;
file=H5PartOpenFile("HBUNCH.h5",H5PART_WRITE);
if(!file) {
perror("File open failed: exiting!");
exit(0);
}
H5PartWriteFileAttribString(file,"File Description", "This file contains HOMDYN HBUNCH.OUT data");
H5PartWriteFileAttribString(file,"tUnit","s");
H5PartWriteFileAttribString(file,"xUnit","m");
H5PartWriteFileAttribString(file,"yUnit","m");
H5PartWriteFileAttribString(file,"zUnit","m");
H5PartWriteFileAttribString(file,"pxUnit","#beta#gamma");
H5PartWriteFileAttribString(file,"pyUnit","#beta#gamma");
H5PartWriteFileAttribString(file,"pzUnit","#beta#gamma");
H5PartWriteFileAttribString(file,"idUnit","1");
H5PartWriteFileAttribString(file,"SPOSUnit","m");
H5PartWriteFileAttribString(file,"TIMEUnit","s");
H5PartWriteFileAttribString(file,"#gammaUnit","1");
H5PartWriteFileAttribString(file,"ENERGYUnit","MeV");
H5PartWriteFileAttribString(file,"#varepsilonUnit","m rad");
H5PartWriteFileAttribString(file,"#varepsilonrUnit","m rad");
H5PartWriteFileAttribString(file,"#varepsilonr-geomUnit","m rad");
H5PartWriteFileAttribString(file,"RMSXUnit","m");
H5PartWriteFileAttribString(file,"RMSRUnit","m");
H5PartWriteFileAttribString(file,"RMSPUnit","#beta#gamma");
H5PartWriteFileAttribString(file,"maxdEUnit","MeV");
H5PartWriteFileAttribString(file,"max#phiUnit","deg");
H5PartWriteFileAttribString(file,"phizUnit","deg");
H5PartWriteFileAttribString(file,"enezUnit","keV");
/*
1 Z_[m]
2 sigma_r_[mm]
3 sigma_z_[mm]
4 I_[A]
5 sigma_x_[mm]
6 enx_[um]
7 sigma_y_[mm]
8 eny_[um]
9 T_[MeV]
10 dg/g_[%]
11 DE_[MeV]
12 elz_[KeVmm]
13 Ez_[MV/m]
14 Bz_[T] Bx_[G] By_[G]
15 Qgrad_[T/m]
16 ByWig
17 BHOR_[T]
18 Time_[nsec]
19 beta
20 R/gL
21 Lplas_[m]
22 Zeq_[m]
23 EWsteady
*/
for (int t=0;t<nLines;t++) {
H5PartSetStep(file,t); /* must set the current timestep in file */
double d3[3];
double dummy = 0.0;
int rc;
rc = H5PartWriteStepAttrib(file,"SPOS", H5T_NATIVE_DOUBLE,&data[0][t],1);
dummy = data[1][t]/1000.0;
rc = H5PartWriteStepAttrib(file,"RMSR", H5T_NATIVE_DOUBLE,&dummy,1);
rc = H5PartWriteStepAttrib(file,"TIME", H5T_NATIVE_DOUBLE,&data[17][t],1);
rc = H5PartWriteStepAttrib(file,"ENERGY", H5T_NATIVE_DOUBLE,&data[8][t],1);
d3[0] = data[4][t]/1000.0;
d3[1] = data[6][t]/1000.0;
d3[2] = 0.0;
rc = H5PartWriteStepAttrib(file,"RMSX", H5T_NATIVE_DOUBLE,&d3,3);
d3[0] = data[5][t]/1000000.0;
d3[1] = data[7][t]/1000000.0;
d3[2] = 0.0;
rc = H5PartWriteStepAttrib(file,"#varepsilon", H5T_NATIVE_DOUBLE,&d3,3);
d3[0] = 0.0;
d3[1] = 0.0;
d3[2] = 0.0;
rc = H5PartWriteStepAttrib(file,"#gamma", H5T_NATIVE_DOUBLE,&dummy,1);
rc = H5PartWriteStepAttrib(file,"#varepsilonr", H5T_NATIVE_DOUBLE,&d3,3);
rc = H5PartWriteStepAttrib(file,"#varepsilonr-geom", H5T_NATIVE_DOUBLE,&d3,3);
rc = H5PartWriteStepAttrib(file,"RMSP", H5T_NATIVE_DOUBLE,&d3,3);
rc = H5PartWriteStepAttrib(file,"maxdE", H5T_NATIVE_DOUBLE,&dummy,1);
rc = H5PartWriteStepAttrib(file,"max#phi", H5T_NATIVE_DOUBLE,&dummy,1);
rc = H5PartWriteStepAttrib(file,"phiz", H5T_NATIVE_DOUBLE,&dummy,1);
rc = H5PartWriteStepAttrib(file,"enez", H5T_NATIVE_DOUBLE,&dummy,1);
}
H5PartCloseFile(file);
}
@@ -0,0 +1,626 @@
h5partPluginInfo.o: h5partPluginInfo.C h5partPluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DatabasePluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/gnu/stubs.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \
/usr/include/bits/types.h /usr/include/bits/wordsize.h \
/usr/include/bits/typesizes.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
/usr/include/gconv.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
/usr/include/bits/stdio.h /usr/include/c++/4.0.2/string \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \
/usr/include/c++/4.0.2/bits/stringfwd.h \
/usr/include/c++/4.0.2/bits/char_traits.h \
/usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \
/usr/include/string.h /usr/include/xlocale.h \
/usr/include/c++/4.0.2/bits/stl_algobase.h \
/usr/include/c++/4.0.2/climits \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
/usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \
/usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
/usr/include/endian.h /usr/include/bits/endian.h \
/usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
/usr/include/bits/select.h /usr/include/bits/sigset.h \
/usr/include/bits/time.h /usr/include/sys/sysmacros.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
/usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \
/usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \
/usr/include/locale.h /usr/include/bits/locale.h \
/usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \
/usr/include/libintl.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \
/usr/include/bits/initspin.h /usr/include/bits/sigthread.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/getopt.h /usr/include/c++/4.0.2/cctype \
/usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \
/usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \
/usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \
/usr/include/c++/4.0.2/exception_defines.h \
/usr/include/c++/4.0.2/bits/stl_pair.h \
/usr/include/c++/4.0.2/bits/cpp_type_traits.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.2/bits/concept_check.h \
/usr/include/c++/4.0.2/bits/stl_iterator.h \
/usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \
/usr/include/assert.h /usr/include/c++/4.0.2/memory \
/usr/include/c++/4.0.2/bits/allocator.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \
/usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \
/usr/include/c++/4.0.2/exception \
/usr/include/c++/4.0.2/bits/stl_construct.h \
/usr/include/c++/4.0.2/bits/stl_uninitialized.h \
/usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.2/limits \
/usr/include/c++/4.0.2/bits/stl_function.h \
/usr/include/c++/4.0.2/bits/basic_string.h \
/usr/include/c++/4.0.2/bits/atomicity.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \
/usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \
/usr/include/c++/4.0.2/bits/stl_heap.h \
/usr/include/c++/4.0.2/bits/stl_tempbuf.h \
/usr/include/c++/4.0.2/bits/basic_string.tcc \
/usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \
/usr/include/c++/4.0.2/bits/stl_bvector.h \
/usr/include/c++/4.0.2/bits/vector.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_plugin_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit-config.h
h5partCommonPluginInfo.o: h5partCommonPluginInfo.C h5partPluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DatabasePluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/gnu/stubs.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \
/usr/include/bits/types.h /usr/include/bits/wordsize.h \
/usr/include/bits/typesizes.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
/usr/include/gconv.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
/usr/include/bits/stdio.h /usr/include/c++/4.0.2/string \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \
/usr/include/c++/4.0.2/bits/stringfwd.h \
/usr/include/c++/4.0.2/bits/char_traits.h \
/usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \
/usr/include/string.h /usr/include/xlocale.h \
/usr/include/c++/4.0.2/bits/stl_algobase.h \
/usr/include/c++/4.0.2/climits \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
/usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \
/usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
/usr/include/endian.h /usr/include/bits/endian.h \
/usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
/usr/include/bits/select.h /usr/include/bits/sigset.h \
/usr/include/bits/time.h /usr/include/sys/sysmacros.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
/usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \
/usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \
/usr/include/locale.h /usr/include/bits/locale.h \
/usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \
/usr/include/libintl.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \
/usr/include/bits/initspin.h /usr/include/bits/sigthread.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/getopt.h /usr/include/c++/4.0.2/cctype \
/usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \
/usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \
/usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \
/usr/include/c++/4.0.2/exception_defines.h \
/usr/include/c++/4.0.2/bits/stl_pair.h \
/usr/include/c++/4.0.2/bits/cpp_type_traits.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.2/bits/concept_check.h \
/usr/include/c++/4.0.2/bits/stl_iterator.h \
/usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \
/usr/include/assert.h /usr/include/c++/4.0.2/memory \
/usr/include/c++/4.0.2/bits/allocator.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \
/usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \
/usr/include/c++/4.0.2/exception \
/usr/include/c++/4.0.2/bits/stl_construct.h \
/usr/include/c++/4.0.2/bits/stl_uninitialized.h \
/usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.2/limits \
/usr/include/c++/4.0.2/bits/stl_function.h \
/usr/include/c++/4.0.2/bits/basic_string.h \
/usr/include/c++/4.0.2/bits/atomicity.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \
/usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \
/usr/include/c++/4.0.2/bits/stl_heap.h \
/usr/include/c++/4.0.2/bits/stl_tempbuf.h \
/usr/include/c++/4.0.2/bits/basic_string.tcc \
/usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \
/usr/include/c++/4.0.2/bits/stl_bvector.h \
/usr/include/c++/4.0.2/bits/vector.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_plugin_exports.h \
avth5partFileFormat.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMTSDFileFormat.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtFileFormat.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/array_ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \
/usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \
/usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \
/usr/include/c++/4.0.2/bits/ios_base.h \
/usr/include/c++/4.0.2/bits/locale_classes.h \
/usr/include/c++/4.0.2/streambuf \
/usr/include/c++/4.0.2/bits/streambuf.tcc \
/usr/include/c++/4.0.2/bits/basic_ios.h \
/usr/include/c++/4.0.2/bits/streambuf_iterator.h \
/usr/include/c++/4.0.2/bits/locale_facets.h \
/usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \
/usr/include/c++/4.0.2/bits/codecvt.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \
/usr/include/c++/4.0.2/bits/basic_ios.tcc \
/usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \
/usr/include/c++/4.0.2/bits/locale_facets.tcc \
/usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \
/usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \
/usr/include/c++/4.0.2/bits/fstream.tcc \
/usr/include/c++/4.0.2/backward/strstream \
/usr/include/c++/4.0.2/backward/backward_warning.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSelection.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/pipeline_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ImproperUseException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtexception_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/PipelineException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtTypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/dbatts_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/void_ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/utility_exports.h \
/d/visusers/cristina/H5Part/H5ecloud/H5Part.hh \
/d/visusers/cristina/H5Part/H5ecloud/H5Part.h \
/usr/local/hdf5/include/hdf5.h /usr/local/hdf5/include/H5public.h \
/usr/local/hdf5/include/H5pubconf.h /usr/include/inttypes.h \
/usr/local/hdf5/include/H5api_adpt.h \
/usr/local/hdf5/include/H5Apublic.h /usr/local/hdf5/include/H5Ipublic.h \
/usr/local/hdf5/include/H5ACpublic.h \
/usr/local/hdf5/include/H5Bpublic.h /usr/local/hdf5/include/H5Dpublic.h \
/usr/local/hdf5/include/H5Epublic.h /usr/local/hdf5/include/H5Fpublic.h \
/usr/local/hdf5/include/H5FDpublic.h \
/usr/local/hdf5/include/H5Gpublic.h /usr/local/hdf5/include/H5Opublic.h \
/usr/local/hdf5/include/H5HGpublic.h \
/usr/local/hdf5/include/H5HLpublic.h \
/usr/local/hdf5/include/H5MMpublic.h \
/usr/local/hdf5/include/H5Ppublic.h /usr/local/hdf5/include/H5Zpublic.h \
/usr/local/hdf5/include/H5Rpublic.h /usr/local/hdf5/include/H5Spublic.h \
/usr/local/hdf5/include/H5Tpublic.h /usr/local/hdf5/include/H5FDcore.h \
/usr/local/hdf5/include/H5FDfamily.h /usr/local/hdf5/include/H5FDgass.h \
/usr/local/hdf5/include/H5FDlog.h /usr/local/hdf5/include/H5FDmpi.h \
/usr/local/hdf5/include/H5FDmpio.h \
/usr/local/hdf5/include/H5FDmpiposix.h \
/usr/local/hdf5/include/H5FDmulti.h /usr/local/hdf5/include/H5FDsec2.h \
/usr/local/hdf5/include/H5FDsrb.h /usr/local/hdf5/include/H5FDstdio.h \
/usr/local/hdf5/include/H5FDstream.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMTSDFileFormatInterface.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtFileFormatInterface.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtGenericDatabase.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetDatabase.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatabase.h \
/usr/include/c++/4.0.2/list /usr/include/c++/4.0.2/bits/stl_list.h \
/usr/include/c++/4.0.2/bits/list.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSpecification.h \
/usr/include/c++/4.0.2/map /usr/include/c++/4.0.2/bits/stl_tree.h \
/usr/include/c++/4.0.2/bits/stl_map.h \
/usr/include/c++/4.0.2/bits/stl_multimap.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILRestriction.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSIL.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILCollection.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILMatrix.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILSet.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtGhostData.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataset.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtCommonDataFunctions.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataRepresentation.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObject.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectInformation.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataAttributes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisWindowTypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtVector.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/math_exports.h \
/usr/include/math.h /usr/include/bits/huge_val.h \
/usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
/usr/include/bits/inf.h /usr/include/bits/nan.h \
/usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
/usr/include/bits/mathinline.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/viswindow_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMatrix.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataValidity.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPipelineSpecification.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataTree.h \
/usr/include/c++/4.0.2/set /usr/include/c++/4.0.2/bits/stl_set.h \
/usr/include/c++/4.0.2/bits/stl_multiset.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtIOInformation.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMaterial.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSpecies.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtVariableCache.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/MIR.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/mir_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/MIROptions.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkSystemIncludes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkWin32Header.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/vtkConfigure.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIOStream.h \
/usr/include/c++/4.0.2/iomanip /usr/include/c++/4.0.2/functional \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIdType.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStreamWrapper.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStrStreamWrapper.h \
/usr/include/c++/4.0.2/deque /usr/include/c++/4.0.2/bits/stl_deque.h \
/usr/include/c++/4.0.2/bits/deque.tcc
h5partMDServerPluginInfo.o: h5partMDServerPluginInfo.C h5partPluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DatabasePluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/gnu/stubs.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \
/usr/include/bits/types.h /usr/include/bits/wordsize.h \
/usr/include/bits/typesizes.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
/usr/include/gconv.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
/usr/include/bits/stdio.h /usr/include/c++/4.0.2/string \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \
/usr/include/c++/4.0.2/bits/stringfwd.h \
/usr/include/c++/4.0.2/bits/char_traits.h \
/usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \
/usr/include/string.h /usr/include/xlocale.h \
/usr/include/c++/4.0.2/bits/stl_algobase.h \
/usr/include/c++/4.0.2/climits \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
/usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \
/usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
/usr/include/endian.h /usr/include/bits/endian.h \
/usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
/usr/include/bits/select.h /usr/include/bits/sigset.h \
/usr/include/bits/time.h /usr/include/sys/sysmacros.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
/usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \
/usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \
/usr/include/locale.h /usr/include/bits/locale.h \
/usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \
/usr/include/libintl.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \
/usr/include/bits/initspin.h /usr/include/bits/sigthread.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/getopt.h /usr/include/c++/4.0.2/cctype \
/usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \
/usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \
/usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \
/usr/include/c++/4.0.2/exception_defines.h \
/usr/include/c++/4.0.2/bits/stl_pair.h \
/usr/include/c++/4.0.2/bits/cpp_type_traits.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.2/bits/concept_check.h \
/usr/include/c++/4.0.2/bits/stl_iterator.h \
/usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \
/usr/include/assert.h /usr/include/c++/4.0.2/memory \
/usr/include/c++/4.0.2/bits/allocator.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \
/usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \
/usr/include/c++/4.0.2/exception \
/usr/include/c++/4.0.2/bits/stl_construct.h \
/usr/include/c++/4.0.2/bits/stl_uninitialized.h \
/usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.2/limits \
/usr/include/c++/4.0.2/bits/stl_function.h \
/usr/include/c++/4.0.2/bits/basic_string.h \
/usr/include/c++/4.0.2/bits/atomicity.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \
/usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \
/usr/include/c++/4.0.2/bits/stl_heap.h \
/usr/include/c++/4.0.2/bits/stl_tempbuf.h \
/usr/include/c++/4.0.2/bits/basic_string.tcc \
/usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \
/usr/include/c++/4.0.2/bits/stl_bvector.h \
/usr/include/c++/4.0.2/bits/vector.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_plugin_exports.h
avth5partFileFormat.o: avth5partFileFormat.C avth5partFileFormat.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMTSDFileFormat.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtFileFormat.h \
/usr/include/stdlib.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/gnu/stubs.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \
/usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
/usr/include/endian.h /usr/include/bits/endian.h /usr/include/xlocale.h \
/usr/include/sys/types.h /usr/include/bits/types.h \
/usr/include/bits/wordsize.h /usr/include/bits/typesizes.h \
/usr/include/time.h /usr/include/sys/select.h \
/usr/include/bits/select.h /usr/include/bits/sigset.h \
/usr/include/bits/time.h /usr/include/sys/sysmacros.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
/usr/include/alloca.h /usr/include/c++/4.0.2/string \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \
/usr/include/c++/4.0.2/bits/stringfwd.h \
/usr/include/c++/4.0.2/bits/char_traits.h \
/usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \
/usr/include/string.h /usr/include/c++/4.0.2/bits/stl_algobase.h \
/usr/include/c++/4.0.2/climits \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
/usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/cstdlib \
/usr/include/c++/4.0.2/iosfwd \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \
/usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
/usr/include/gconv.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \
/usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
/usr/include/c++/4.0.2/clocale /usr/include/locale.h \
/usr/include/bits/locale.h /usr/include/langinfo.h \
/usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \
/usr/include/bits/initspin.h /usr/include/bits/sigthread.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/getopt.h /usr/include/c++/4.0.2/cctype \
/usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \
/usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \
/usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \
/usr/include/c++/4.0.2/exception_defines.h \
/usr/include/c++/4.0.2/bits/stl_pair.h \
/usr/include/c++/4.0.2/bits/cpp_type_traits.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.2/bits/concept_check.h \
/usr/include/c++/4.0.2/bits/stl_iterator.h \
/usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \
/usr/include/assert.h /usr/include/c++/4.0.2/memory \
/usr/include/c++/4.0.2/bits/allocator.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \
/usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \
/usr/include/c++/4.0.2/exception \
/usr/include/c++/4.0.2/bits/stl_construct.h \
/usr/include/c++/4.0.2/bits/stl_uninitialized.h \
/usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.2/limits \
/usr/include/c++/4.0.2/bits/stl_function.h \
/usr/include/c++/4.0.2/bits/basic_string.h \
/usr/include/c++/4.0.2/bits/atomicity.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \
/usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \
/usr/include/c++/4.0.2/bits/stl_heap.h \
/usr/include/c++/4.0.2/bits/stl_tempbuf.h \
/usr/include/c++/4.0.2/bits/basic_string.tcc \
/usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \
/usr/include/c++/4.0.2/bits/stl_bvector.h \
/usr/include/c++/4.0.2/bits/vector.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/array_ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \
/usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \
/usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \
/usr/include/c++/4.0.2/bits/ios_base.h \
/usr/include/c++/4.0.2/bits/locale_classes.h \
/usr/include/c++/4.0.2/streambuf \
/usr/include/c++/4.0.2/bits/streambuf.tcc \
/usr/include/c++/4.0.2/bits/basic_ios.h \
/usr/include/c++/4.0.2/bits/streambuf_iterator.h \
/usr/include/c++/4.0.2/bits/locale_facets.h \
/usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \
/usr/include/c++/4.0.2/bits/codecvt.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \
/usr/include/c++/4.0.2/bits/basic_ios.tcc \
/usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \
/usr/include/c++/4.0.2/bits/locale_facets.tcc \
/usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \
/usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \
/usr/include/c++/4.0.2/bits/fstream.tcc \
/usr/include/c++/4.0.2/backward/strstream \
/usr/include/c++/4.0.2/backward/backward_warning.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSelection.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/pipeline_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ImproperUseException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtexception_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/PipelineException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtTypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/dbatts_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/void_ref_ptr.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/utility_exports.h \
/d/visusers/cristina/H5Part/H5ecloud/H5Part.hh \
/d/visusers/cristina/H5Part/H5ecloud/H5Part.h \
/usr/local/hdf5/include/hdf5.h /usr/local/hdf5/include/H5public.h \
/usr/local/hdf5/include/H5pubconf.h /usr/include/inttypes.h \
/usr/local/hdf5/include/H5api_adpt.h \
/usr/local/hdf5/include/H5Apublic.h /usr/local/hdf5/include/H5Ipublic.h \
/usr/local/hdf5/include/H5ACpublic.h \
/usr/local/hdf5/include/H5Bpublic.h /usr/local/hdf5/include/H5Dpublic.h \
/usr/local/hdf5/include/H5Epublic.h /usr/local/hdf5/include/H5Fpublic.h \
/usr/local/hdf5/include/H5FDpublic.h \
/usr/local/hdf5/include/H5Gpublic.h /usr/local/hdf5/include/H5Opublic.h \
/usr/local/hdf5/include/H5HGpublic.h \
/usr/local/hdf5/include/H5HLpublic.h \
/usr/local/hdf5/include/H5MMpublic.h \
/usr/local/hdf5/include/H5Ppublic.h /usr/local/hdf5/include/H5Zpublic.h \
/usr/local/hdf5/include/H5Rpublic.h /usr/local/hdf5/include/H5Spublic.h \
/usr/local/hdf5/include/H5Tpublic.h /usr/local/hdf5/include/H5FDcore.h \
/usr/local/hdf5/include/H5FDfamily.h /usr/local/hdf5/include/H5FDgass.h \
/usr/local/hdf5/include/H5FDlog.h /usr/local/hdf5/include/H5FDmpi.h \
/usr/local/hdf5/include/H5FDmpio.h \
/usr/local/hdf5/include/H5FDmpiposix.h \
/usr/local/hdf5/include/H5FDmulti.h /usr/local/hdf5/include/H5FDsec2.h \
/usr/local/hdf5/include/H5FDsrb.h /usr/local/hdf5/include/H5FDstdio.h \
/usr/local/hdf5/include/H5FDstream.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkFloatArray.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataArray.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkObject.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkObjectBase.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIndent.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkSystemIncludes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkWin32Header.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/vtkConfigure.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIOStream.h \
/usr/include/c++/4.0.2/iomanip /usr/include/c++/4.0.2/functional \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIdType.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStreamWrapper.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStrStreamWrapper.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkSetGet.h \
/usr/include/math.h /usr/include/bits/huge_val.h \
/usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
/usr/include/bits/inf.h /usr/include/bits/nan.h \
/usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
/usr/include/bits/mathinline.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkTimeStamp.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkRectilinearGrid.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataSet.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataObject.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkStructuredData.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkStructuredGrid.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPointSet.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPoints.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkUnsignedCharArray.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkUnstructuredGrid.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatabaseMetaData.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ExpressionList.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Expression.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/InvalidVariableException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DatabaseException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/InvalidFilesException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/BadIndexException.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkCellType.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPolyData.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkCellTypes.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIntArray.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkCellType.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkCellLinks.h
h5partEnginePluginInfo.o: h5partEnginePluginInfo.C h5partPluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DatabasePluginInfo.h \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/gnu/stubs.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \
/usr/include/bits/types.h /usr/include/bits/wordsize.h \
/usr/include/bits/typesizes.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
/usr/include/gconv.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
/usr/include/bits/stdio.h /usr/include/c++/4.0.2/string \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \
/usr/include/c++/4.0.2/bits/stringfwd.h \
/usr/include/c++/4.0.2/bits/char_traits.h \
/usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \
/usr/include/string.h /usr/include/xlocale.h \
/usr/include/c++/4.0.2/bits/stl_algobase.h \
/usr/include/c++/4.0.2/climits \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
/usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \
/usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
/usr/include/endian.h /usr/include/bits/endian.h \
/usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
/usr/include/bits/select.h /usr/include/bits/sigset.h \
/usr/include/bits/time.h /usr/include/sys/sysmacros.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
/usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \
/usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \
/usr/include/locale.h /usr/include/bits/locale.h \
/usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \
/usr/include/libintl.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \
/usr/include/bits/initspin.h /usr/include/bits/sigthread.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/getopt.h /usr/include/c++/4.0.2/cctype \
/usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \
/usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \
/usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \
/usr/include/c++/4.0.2/exception_defines.h \
/usr/include/c++/4.0.2/bits/stl_pair.h \
/usr/include/c++/4.0.2/bits/cpp_type_traits.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.2/bits/concept_check.h \
/usr/include/c++/4.0.2/bits/stl_iterator.h \
/usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \
/usr/include/assert.h /usr/include/c++/4.0.2/memory \
/usr/include/c++/4.0.2/bits/allocator.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \
/usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \
/usr/include/c++/4.0.2/exception \
/usr/include/c++/4.0.2/bits/stl_construct.h \
/usr/include/c++/4.0.2/bits/stl_uninitialized.h \
/usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.2/limits \
/usr/include/c++/4.0.2/bits/stl_function.h \
/usr/include/c++/4.0.2/bits/basic_string.h \
/usr/include/c++/4.0.2/bits/atomicity.h \
/usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \
/usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \
/usr/include/c++/4.0.2/bits/stl_heap.h \
/usr/include/c++/4.0.2/bits/stl_tempbuf.h \
/usr/include/c++/4.0.2/bits/basic_string.tcc \
/usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \
/usr/include/c++/4.0.2/bits/stl_bvector.h \
/usr/include/c++/4.0.2/bits/vector.tcc \
/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/database_plugin_exports.h
@@ -0,0 +1,104 @@
##
## Programs and options...
##
TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/
include $(TOPDIR)/include/make-variables
TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/
HOMEPLUGINS=/d/visusers/cristina/.visit/linux-x86_64/plugins
##
## Libraries and includes...
##
VTK_INCLUDE= \
-I$(TOPDIR)/include/vtk \
-I$(TOPDIR)/include/vtk/Common \
-I$(TOPDIR)/include/vtk/Filtering \
-I$(TOPDIR)/include/vtk/Graphics \
-I$(TOPDIR)/include/vtk/Hybrid \
-I$(TOPDIR)/include/vtk/IO \
-I$(TOPDIR)/include/vtk/Imaging \
-I$(TOPDIR)/include/vtk/Rendering
MOC=$(TOPDIR)/bin/moc
CXXFLAGS=$(CXXFLAGSORIG) -I/usr/local/hdf5/include -I/d/visusers/cristina/H5Part/H5ecloud
CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I/usr/local/hdf5/include -I/d/visusers/cristina/H5Part/H5ecloud -I$(TOPDIR)/include -I$(TOPDIR)/include/visit
LDFLAGS=$(LDFLAGSORIG) -L$(HOMEPLUGINS)/databases
##
## Files...
##
PLUGINDIR=databases
PLUGINNAME=h5partDatabase
WIDGETS=
ISRC=h5partPluginInfo.C
COMMONSRC=h5partPluginInfo.C h5partCommonPluginInfo.C
MSRC=h5partMDServerPluginInfo.C avth5partFileFormat.C
ESRC=h5partEnginePluginInfo.C avth5partFileFormat.C
SRC=$(ISRC) $(COMMONSRC) $(MSRC) $(ESRC)
SHLIB_FORCED=-L/d/visusers/cristina/H5Part/H5ecloud/ -lH5Part
ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
MLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
ILIBS=
MLIBS=-lpipeline_ser -ldatabase_ser -lmir_ser -lavtmath_ser -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lexpr -lparser -lplugin -lutility -lvisit_vtk -llightweight_visit_vtk -L$(HOMEPLUGINS)/databases -lI$(PLUGINNAME) $(MLIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS)
ESERLIBS=-lpipeline_ser -ldatabase_ser -lmir_ser -lavtmath_ser -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lexpr -lparser -lplugin -lutility -lvisit_vtk -llightweight_visit_vtk -L$(HOMEPLUGINS)/databases -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS)
EPARLIBS=-lpipeline_par -ldatabase_par -lmir_par -lavtmath_par -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lexpr -lparser -lplugin -lutility -lvisit_vtk -llightweight_visit_vtk -L$(HOMEPLUGINS)/databases -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS)
IDSO=$(HOMEPLUGINS)/databases/libIh5partDatabase.so
MDSO=$(HOMEPLUGINS)/databases/libMh5partDatabase.so
ESERDSO=$(HOMEPLUGINS)/databases/libEh5partDatabase_ser.so
EPARDSO=$(HOMEPLUGINS)/databases/libEh5partDatabase_par.so
DISTRIB=
##
## Derived objects
##
IOBJ=$(ISRC:.C=.o)
GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o)
SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o)
VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o)
MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o)
ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o)
EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o)
MOCSRC = $(WIDGETS:.h=_moc.C)
MOCOBJ = $(MOCSRC:.C=.o)
##
## Standard targets...
##
all: message $(IDSO) $(MDSERVERLIB) $(ENGINELIBSER) $(ENGINELIBPAR)
clean:
$(RM) $(IOBJ) $(COMMONOBJ)
$(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ)
$(RM) $(MOCSRC) $(MOCOBJ)
$(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO)
$(RM) $(JAVAOBJ)
##
## Other targets...
##
message:
@echo
@echo "****************************************************************************"
@echo "*** Building h5part Database Plugin"
@echo "****************************************************************************"
##
## moc
##
$(MOCSRC) or_no_widgets: $(WIDGETS)
@rm -f $@
$(MOC) $(@:_moc.C=.h) > $@
##
## Automatic dependency stuff
##
include $(TOPDIR)/include/make-targets
@@ -0,0 +1,21 @@
Reading H5Part data into VisIt:
VisIt, http://www.llnl.gov/visit, is an open source point-and-click 3D scientific visualization application that supports most of the common visualization techniques on structured and unstructured grids. One of its advantages is that it employs a distributed and parallel architecture in order to handle extremely large data sets interactively. VisIt's rendering and data processing capabilities are split into viewer and engine components that may be distributed across multiple machines.
This database plugins allows the user to read H5Part data into VisIt. To be recognized by VisIt the filename needs to have the extension ".h5part". This is important, otherwise VisIt will try to open the file with another reader and it will fail.
Building the plugin:
You must first install VisIt in your machine to be able to link to its libraries.
Modify the Makefile to reflect your installation.
TOPDIR is the path to the VisIt Distribution installation.
HOMEPLUGINS is the path to your home dir .visit plugin directory. Create it if not there.
SHLIB_FORCED is the path to your H5Part. I made H5Part statically linked to the hdf5 library, if you don't, add your -L/hdf5librarypath -lhdf5
Modify the location of the hdf5 include and the H5Part library.
If compiling a parallel version add -DPARALLEL_IO to the CXXFLAGS and CPPFLAGS.
Note: TOPDIR is defined twice because in make-variables it is defined by the VisIt developers to be in one of their machines.
@@ -0,0 +1,597 @@
// ************************************************************************* //
// avth5partFileFormat.C //
// ************************************************************************* //
#include <avth5partFileFormat.h>
#include <string>
#include <vector>
#include <vtkFloatArray.h>
#include <vtkRectilinearGrid.h>
#include <vtkStructuredGrid.h>
#include <vtkUnstructuredGrid.h>
#include <avtDatabaseMetaData.h>
#include <Expression.h>
#include <InvalidVariableException.h>
#include <InvalidFilesException.h>
#include <BadIndexException.h>
#include <vtkCellType.h>
#include <vtkPolyData.h>
//h5part specific
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iomanip>
#include <iostream>
#ifdef PARALLEL_IO
#include <mpi.h>
#include <avtParallel.h>
#endif
using namespace std;
// ****************************************************************************
// Method: avth5part constructor
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
avth5partFileFormat::avth5partFileFormat(const char *filename)
: avtMTMDFileFormat(filename)
{
// INITIALIZE DATA MEMBERS
H5PartFile *file;
fname = filename;
file = H5PartOpenFile(filename,H5PART_READ);
if (!file)
EXCEPTION1(InvalidFilesException, filename);
int i, j;
int npoints, npointvars;
int nspace = 3;
H5PartSetStep(file,0);
//points
npoints= (int) H5PartGetNumParticles(file);
if (npoints == 0)
EXCEPTION1(VisItException, "npoints is zero");
points.resize(npoints*nspace);
cout << "constructor: npoints: " << npoints << "\n";
//point vars
npointvars= (int) H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
pointvars.resize(npointvars);
pointvarnames.resize(npointvars);
cout << "constructor: nvariables: " << npointvars << "\n";
char name[128];
h5part_int64_t status;
for (j=0; j < npointvars; j++){
status = H5PartGetDatasetName(file,j, name,128);
if (status != H5PART_SUCCESS){
EXCEPTION1(VisItException, "could not read a variable name");
}
pointvarnames[j] = name;
}
H5PartCloseFile(file);
}
// ****************************************************************************
// Method: avtEMSTDFileFormat::GetNTimesteps
//
// Purpose:
// Tells the rest of the code how many timesteps there are in this file.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
int
avth5partFileFormat::GetNTimesteps(void)
{
h5part_int64_t nt;
H5PartFile *file;
file = H5PartOpenFile(fname.c_str(),H5PART_READ);
H5PartSetStep(file,0);
nt=H5PartGetNumSteps(file); /* get number of steps in file */
H5PartCloseFile(file);
return (int) nt;
}
// ****************************************************************************
// Method: avth5partFileFormat::FreeUpResources
//
// Purpose:
// When VisIt is done focusing on a particular timestep, it asks that
// timestep to free up any resources (memory, file descriptors) that
// it has associated with it. This method is the mechanism for doing
// that.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
void
avth5partFileFormat::FreeUpResources(void)
{
}
// ****************************************************************************
// Method: avth5partFileFormat::PopulateDatabaseMetaData
//
// Purpose:
// This database meta-data object is like a table of contents for the
// file. By populating it, you are telling the rest of VisIt what
// information it can request from you.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
void
avth5partFileFormat::PopulateDatabaseMetaData(avtDatabaseMetaData *md, int timeState)
{
//
// CODE TO ADD A MESH
//
// string meshname = ...
//
// AVT_RECTILINEAR_MESH, AVT_CURVILINEAR_MESH, AVT_UNSTRUCTURED_MESH,
// AVT_POINT_MESH, AVT_SURFACE_MESH, AVT_UNKNOWN_MESH
// avtMeshType mt = AVT_RECTILINEAR_MESH;
//
// int nblocks = YOU_MUST_DECIDE;
// int block_origin = 0;
// int spatial_dimension = 2;
// int topological_dimension = 2;
// float *extents = NULL;
//
// Here's the call that tells the meta-data object that we have a mesh:
//
// AddMeshToMetaData(md, meshname, mt, extents, nblocks, block_origin,
// spatial_dimension, topological_dimension);
//
//
// CODE TO ADD A SCALAR VARIABLE
//
// string mesh_for_this_var = meshname; // ??? -- could be multiple meshes
// string varname = ...
//
// AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT
// avtCentering cent = AVT_NODECENT;
//
//
// Here's the call that tells the meta-data object that we have a var:
//
// AddScalarVarToMetaData(md, varname, mesh_for_this_var, cent);
//
//
// CODE TO ADD A VECTOR VARIABLE
//
// string mesh_for_this_var = meshname; // ??? -- could be multiple meshes
// string varname = ...
// int vector_dim = 2;
//
// AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT
// avtCentering cent = AVT_NODECENT;
//
//
// Here's the call that tells the meta-data object that we have a var:
//
// AddVectorVarToMetaData(md, varname, mesh_for_this_var, cent,vector_dim);
//
//
// CODE TO ADD A TENSOR VARIABLE
//
// string mesh_for_this_var = meshname; // ??? -- could be multiple meshes
// string varname = ...
// int tensor_dim = 9;
//
// AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT
// avtCentering cent = AVT_NODECENT;
//
//
// Here's the call that tells the meta-data object that we have a var:
//
// AddTensorVarToMetaData(md, varname, mesh_for_this_var, cent,tensor_dim);
//
//
// CODE TO ADD A MATERIAL
//
// string mesh_for_mat = meshname; // ??? -- could be multiple meshes
// string matname = ...
// int nmats = ...;
// vector<string> mnames;
// for (int i = 0 ; i < nmats ; i++)
// {
// char str[32];
// sprintf(str, "mat%d", i);
// -- or --
// strcpy(str, "Aluminum");
// mnames.push_back(str);
// }
//
// Here's the call that tells the meta-data object that we have a mat:
//
// AddMaterialToMetaData(md, matname, mesh_for_mat, nmats, mnames);
//
//
// Here's the way to add expressions:
//Expression momentum_expr;
//momentum_expr.SetName("momentum");
//momentum_expr.SetDefinition("{u, v}");
//momentum_expr.SetType(Expression::VectorMeshVar);
//md->AddExpression(&momentum_expr);
//Expression KineticEnergy_expr;
//KineticEnergy_expr.SetName("KineticEnergy");
//KineticEnergy_expr.SetDefinition("0.5*(momentum*momentum)/(rho*rho)");
//KineticEnergy_expr.SetType(Expression::ScalarMeshVar);
//md->AddExpression(&KineticEnergy_expr);
//
int size;
size = 1;
#ifdef PARALLEL_IO
size = PAR_Size();
#endif
if (!points.size()) {
EXCEPTION1(InvalidFilesException, "Number of points is zero");
}
cout << "Populate: size, : " << size << "\n";
avtMeshMetaData *pmesh = new avtMeshMetaData;
int dimension = 3;
pmesh->name = "particles";
pmesh->originalName = "particles";
pmesh->meshType = AVT_POINT_MESH;
pmesh->topologicalDimension = 0;
pmesh->spatialDimension = dimension;
pmesh->numBlocks = size;
pmesh->blockTitle = "subset";
pmesh->blockPieceName = "subset";
pmesh->hasSpatialExtents = false;
md->Add(pmesh);
int i;
for (i=0; i < pointvarnames.size(); i++){
AddScalarVarToMetaData(md, pointvarnames[i], "particles", AVT_NODECENT);
}
}
// ****************************************************************************
// Method: avth5partFileFormat::GetMesh
//
// Purpose:
// Gets the mesh associated with this file. The mesh is returned as a
// derived type of vtkDataSet (ie vtkRectilinearGrid, vtkStructuredGrid,
// vtkUnstructuredGrid, etc).
//
// Arguments:
// timestate The index of the timestate. If GetNTimesteps returned
// 'N' time steps, this is guaranteed to be between 0 and N-1.
// domain The index of the domain. If there are NDomains, this
// value is guaranteed to be between 0 and NDomains-1,
// regardless of block origin.
// meshname The name of the mesh of interest. This can be ignored if
// there is only one mesh.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
vtkDataSet *
avth5partFileFormat::GetMesh(int timestate, int domain, const char *meshname)
{
cout << "GetMesh domain: " << domain << "\n";
H5PartFile *file;
file = H5PartOpenFile(fname.c_str(),H5PART_READ);
if (!file)
EXCEPTION1(InvalidFilesException, fname.c_str());
long int tnpoints, npoints;
int npointvars;
int nspace = 3;
int nprocs = 1;
#ifdef PARALLEL_IO
nprocs = PAR_Size();
#endif
H5PartSetStep(file,timestate);
//points
tnpoints= (int) H5PartGetNumParticles(file);
h5part_int64_t idStart = (( h5part_int64_t)(tnpoints/nprocs))*domain;
h5part_int64_t idEnd;
if (domain < nprocs-1)
idEnd = ((h5part_int64_t)(tnpoints/nprocs))*(domain+1);
else if (domain == nprocs - 1)
idEnd = tnpoints;
H5PartSetView(file,idStart,idEnd);
//points
npoints= (long int) H5PartGetNumParticles(file);
cout << "GetMesh: npoints for domain " << domain << ": " << npoints << "\n";
if (strcmp(meshname, "particles") != 0){
EXCEPTION1(InvalidVariableException, meshname);
}
if (npoints == 0)
EXCEPTION1(VisItException, "npoints is zero");
points.resize(npoints*nspace);
h5part_float64_t *x, *y, *z;
x = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints);
y = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints);
z = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints);
h5part_int64_t status = H5PART_SUCCESS;
status = H5PartReadDataFloat64(file, "x", x);
if (status != H5PART_SUCCESS)
EXCEPTION1(VisItException, "Could not read x coordinates");
status = H5PartReadDataFloat64(file, "y", y);
if (status != H5PART_SUCCESS)
EXCEPTION1(VisItException, "Could not read y coordinates");
status = H5PartReadDataFloat64(file, "z", z);
if (status != H5PART_SUCCESS)
EXCEPTION1(VisItException, "Could not read z coordinates");
for (long int i = 0; i < npoints; i++){
points[nspace*i] = (float) x[i];
points[nspace*i+1] = (float) y[i];
points[nspace*i+2] = (float) z[i];
}
free(x);
free(y);
free(z);
H5PartSetView(file,-1, -1);
vtkPolyData *dataset = vtkPolyData::New();
vtkPoints *vtkpoints = vtkPoints::New();
vtkpoints->SetNumberOfPoints((vtkIdType) npoints);
float *pts = (float *) vtkpoints->GetVoidPointer(0);
for (long int i=0; i < npoints*nspace; i++){
pts[i] = points[i];
}
dataset->Allocate(npoints*nspace);
for (long int i=0; i < npoints; i++){
vtkIdType onevertex = (vtkIdType) i;
dataset->InsertNextCell(VTK_VERTEX, 1, &onevertex);
}
dataset->SetPoints(vtkpoints);
vtkpoints->Delete();
H5PartCloseFile(file);
fprintf(stderr,"proc[%u]: done\n", domain);
return dataset;
}
// ****************************************************************************
// Method: avth5partFileFormat::GetVar
//
// Purpose:
// Gets a scalar variable associated with this file. Although VTK has
// support for many different types, the best bet is vtkFloatArray, since
// that is supported everywhere through VisIt.
//
// Arguments:
// timestate The index of the timestate. If GetNTimesteps returned
// 'N' time steps, this is guaranteed to be between 0 and N-1.
// domain The index of the domain. If there are NDomains, this
// value is guaranteed to be between 0 and NDomains-1,
// regardless of block origin.
// varname The name of the variable requested.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
vtkDataArray *
avth5partFileFormat::GetVar(int timestate, int domain, const char *varname)
{
//
// If you have a file format where variables don't apply (for example a
// strictly polygonal format like the STL (Stereo Lithography) format,
// then uncomment the code below.
//
// EXCEPTION1(InvalidVariableException, varname);
//
//
// If you do have a scalar variable, here is some code that may be helpful.
//
// int ntuples = XXX; // this is the number of entries in the variable.
// vtkFloatArray *rv = vtkFloatArray::New();
// rv->SetNumberOfTuples(ntuples);
// for (int i = 0 ; i < ntuples ; i++)
// {
// rv->SetTuple1(i, VAL); // you must determine value for ith entry.
// }
//
// return rv;
//
H5PartFile *file;
file = H5PartOpenFile(fname.c_str(),H5PART_READ);
if (!file)
EXCEPTION1(InvalidFilesException, fname.c_str());
h5part_int64_t status;
h5part_int64_t tnpoints, npoints;
int npointvars;
int nspace = 3;
int nprocs = 1;
#ifdef PARALLEL_IO
nprocs = PAR_Size();
#endif
H5PartSetStep(file,timestate);
//points
tnpoints= H5PartGetNumParticles(file);
//point vars
char name[64];
h5part_int64_t *idvar;
double *data;
h5part_int64_t idStart = ((h5part_int64_t)(tnpoints/nprocs))*domain;
h5part_int64_t idEnd;
if (domain < nprocs-1)
idEnd = ((h5part_int64_t)(tnpoints/nprocs))*(domain+1);
else if (domain == nprocs - 1)
idEnd = (h5part_int64_t)tnpoints;
H5PartSetView(file,idStart,idEnd);
npoints= H5PartGetNumParticles(file);
cout << "GetVar: npoints for domain " << domain << ": " << npoints << "\n";
for (size_t j=0; j < (size_t)(pointvarnames.size()); j++){
status = H5PartGetDatasetName(file,j, name,64);
if (pointvarnames[j] == name) {
if (strstr(name, "id") != NULL){
idvar = (h5part_int64_t *) malloc(sizeof(h5part_int64_t)*npoints);
status = H5PartReadDataInt64(file, name, idvar);
if (status != H5PART_SUCCESS)
EXCEPTION1(VisItException, "Could not read dataset");
pointvars[j].resize(npoints);
for (size_t i=0; i < (size_t) npoints; i++){
pointvars[j][i] = (float) idvar[i];
}
if (idvar != NULL)
free(idvar);
} else {
data = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints);
status = H5PartReadDataFloat64(file, name, data);
if (status != H5PART_SUCCESS)
EXCEPTION1(VisItException, "Could not read dataset");
pointvars[j].resize(npoints);
for (size_t i=0; i < (size_t)(npoints); i++){
pointvars[j][i] = (float) data[i];
}
if (data != NULL)
free(data);
}
}
}
H5PartSetView(file,-1, -1);
for (int i=0; i < pointvarnames.size(); i++){
if (pointvarnames[i] == string(varname)){
vtkFloatArray *scalars = vtkFloatArray::New();
scalars->SetNumberOfTuples(npoints);
float *ptr = (float*) scalars->GetVoidPointer(0);
memcpy(ptr, &pointvars[i][0], sizeof(float)*npoints);
return scalars;
}
}
H5PartCloseFile(file);
EXCEPTION1(InvalidVariableException, varname);
}
// ****************************************************************************
// Method: avth5partFileFormat::GetVectorVar
//
// Purpose:
// Gets a vector variable associated with this file. Although VTK has
// support for many different types, the best bet is vtkFloatArray, since
// that is supported everywhere through VisIt.
//
// Arguments:
// timestate The index of the timestate. If GetNTimesteps returned
// 'N' time steps, this is guaranteed to be between 0 and N-1.
// domain The index of the domain. If there are NDomains, this
// value is guaranteed to be between 0 and NDomains-1,
// regardless of block origin.
// varname The name of the variable requested.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:47:07 PST 2006
//
// ****************************************************************************
vtkDataArray *
avth5partFileFormat::GetVectorVar(int timestate, int domain,const char *varname)
{
//
// If you have a file format where variables don't apply (for example a
// strictly polygonal format like the STL (Stereo Lithography) format,
// then uncomment the code below.
//
// EXCEPTION1(InvalidVariableException, varname);
//
//
// If you do have a vector variable, here is some code that may be helpful.
//
// int ncomps = YYY; // This is the rank of the vector - typically 2 or 3.
// int ntuples = XXX; // this is the number of entries in the variable.
// vtkFloatArray *rv = vtkFloatArray::New();
// int ucomps = (ncomps == 2 ? 3 : ncomps);
// rv->SetNumberOfComponents(ucomps);
// rv->SetNumberOfTuples(ntuples);
// float *one_entry = new float[ucomps];
// for (int i = 0 ; i < ntuples ; i++)
// {
// int j;
// for (j = 0 ; j < ncomps ; j++)
// one_entry[j] = ...
// for (j = ncomps ; j < ucomps ; j++)
// one_entry[j] = 0.;
// rv->SetTuple(i, one_entry);
// }
//
// delete [] one_entry;
// return rv;
//
return NULL;
}
@@ -0,0 +1,75 @@
// ************************************************************************* //
// avth5partFileFormat.h //
// ************************************************************************* //
#ifndef AVT_h5part_FILE_FORMAT_H
#define AVT_h5part_FILE_FORMAT_H
#include <avtMTMDFileFormat.h>
#include <H5Part.h>
#include <vector>
#include <string>
// ****************************************************************************
// Class: avth5partFileFormat
//
// Purpose:
// Reads in h5part files as a plugin to VisIt.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Mon Feb 27 13:53:31 PST 2006
//
// ****************************************************************************
class avth5partFileFormat : public avtMTMDFileFormat
{
public:
avth5partFileFormat(const char *);
virtual ~avth5partFileFormat() {;};
//
// This is used to return unconvention data -- ranging from material
// information to information about block connectivity.
//
// virtual void *GetAuxiliaryData(const char *var, const char *type,
// int timestep, int domain,void *args,
// DestructorFunction &);
//
//
// If you know the times and cycle numbers, overload this function.
// Otherwise, VisIt will make up some reasonable ones for you.
//
// virtual void GetCycles(std::vector<int> &);
// virtual void GetTimes(std::vector<double> &);
//
virtual int GetNTimesteps(void);
virtual const char *GetType(void) { return "h5part"; };
virtual void FreeUpResources(void);
virtual vtkDataSet *GetMesh(int, int, const char *);
virtual vtkDataArray *GetVar(int, int, const char *);
virtual vtkDataArray *GetVectorVar(int, int, const char *);
protected:
// DATA MEMBERS
virtual void PopulateDatabaseMetaData(avtDatabaseMetaData *, int);
std::string fname; //filename
std::vector<float> points; //point coordinates
std::vector<std::vector<float> > pointvars; //point variables
std::vector<std::string> pointvarnames; //point variables' names
std::vector<float> minExtents; //min extents
std::vector<float> maxExtents; //max extents
};
#endif
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<Plugin name="h5part" type="database" label="h5part" version="1.0" enabled="true" mdspecificcode="false" onlyengine="false" noengine="false" dbtype="MTMD" haswriter="false" hasoptions="false">
<CXXFLAGS>
-I/usr/local/hdf5/include
</CXXFLAGS>
<LIBS>
-L/d/visusers/cristina/H5Part/H5ecloud/ -lH5Part
</LIBS>
<Extensions>
h5part
</Extensions>
<Attribute name="" purpose="" persistent="true" exportAPI="" exportInclude="">
</Attribute>
</Plugin>
@@ -0,0 +1,65 @@
#include <h5partPluginInfo.h>
#include <avth5partFileFormat.h>
#include <avtMTMDFileFormatInterface.h>
#include <avtGenericDatabase.h>
// ****************************************************************************
// Method: h5partCommonPluginInfo::GetDatabaseType
//
// Purpose:
// Returns the type of a h5part database.
//
// Programmer: cristina -- generated by xml2info
// Creation: Mon Feb 27 13:53:31 PST 2006
//
// ****************************************************************************
DatabaseType
h5partCommonPluginInfo::GetDatabaseType()
{
return DB_TYPE_MTMD;
}
// ****************************************************************************
// Method: h5partCommonPluginInfo::GetDefaultExtensions
//
// Purpose:
// Returns the default extensions for a h5part database.
//
// Programmer: cristina -- generated by xml2info
// Creation: Mon Feb 27 13:53:31 PST 2006
//
// ****************************************************************************
std::vector<std::string>
h5partCommonPluginInfo::GetDefaultExtensions()
{
std::vector<std::string> defaultExtensions;
defaultExtensions.push_back("h5part");
return defaultExtensions;
}
// ****************************************************************************
// Method: h5partCommonPluginInfo::Setuh5partDatabase
//
// Purpose:
// Sets up a h5part database.
//
// Arguments:
// list A list of file names.
// nList The number of timesteps in list.
// nBlocks The number of blocks in the list.
//
// Returns: A h5part database from list.
//
// Programmer: cristina -- generated by xml2info
// Creation: Mon Feb 27 13:53:31 PST 2006
//
// ****************************************************************************
avtDatabase *
h5partCommonPluginInfo::SetupDatabase(const char *const *list,
int nList, int nBlock)
{
return new avtGenericDatabase(
new avtMTMDFileFormatInterface(
new avth5partFileFormat(list[0])));
}
@@ -0,0 +1,39 @@
#include <h5partPluginInfo.h>
#if defined(__APPLE__)
#define GetEngineInfo h5part_GetEngineInfo
#endif
// ****************************************************************************
// Function: GetEngineInfo
//
// Purpose:
// Return a new EnginePluginInfo for the h5part database.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
extern "C" EngineDatabasePluginInfo* GetEngineInfo()
{
return new h5partEnginePluginInfo;
}
// ****************************************************************************
// Method: h5partCommonPluginInfo::GetWriter
//
// Purpose:
// Sets up a h5part writer.
//
// Returns: A h5part writer.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
avtDatabaseWriter *
h5partEnginePluginInfo::GetWriter(void)
{
return NULL;
}
@@ -0,0 +1,25 @@
#include <h5partPluginInfo.h>
#if defined(__APPLE__)
#define GetMDServerInfo h5part_GetMDServerInfo
#endif
// ****************************************************************************
// Function: GetMDServerInfo
//
// Purpose:
// Return a new MDServerPluginInfo for the h5part database.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
extern "C" MDServerDatabasePluginInfo* GetMDServerInfo()
{
return new h5partMDServerPluginInfo;
}
// this makes compilers happy... remove if we ever have functions here
void h5partMDServerPluginInfo::dummy()
{
}
@@ -0,0 +1,124 @@
// ************************************************************************* //
// File: h5partPluginInfo.C
// ************************************************************************* //
#include <h5partPluginInfo.h>
#include <visit-config.h>
#if defined(__APPLE__)
extern "C" const char *h5partVisItPluginVersion = VERSION;
#else
extern "C" const char *VisItPluginVersion = VERSION;
#endif
#if defined(__APPLE__)
#define GetGeneralInfo h5part_GetGeneralInfo
#endif
// ****************************************************************************
// Function: GetGeneralInfo
//
// Purpose:
// Return a new GeneralPluginInfo for the h5part database.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
extern "C" GeneralDatabasePluginInfo* GetGeneralInfo()
{
return new h5partGeneralPluginInfo;
}
// ****************************************************************************
// Method: h5partGeneralPluginInfo::GetName
//
// Purpose:
// Return the name of the database plugin.
//
// Returns: A pointer to the name of the database plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
char *
h5partGeneralPluginInfo::GetName() const
{
return "h5part";
}
// ****************************************************************************
// Method: h5partGeneralPluginInfo::GetVersion
//
// Purpose:
// Return the version of the database plugin.
//
// Returns: A pointer to the version of the database plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
char *
h5partGeneralPluginInfo::GetVersion() const
{
return "1.0";
}
// ****************************************************************************
// Method: h5partGeneralPluginInfo::GetID
//
// Purpose:
// Return the id of the database plugin.
//
// Returns: A pointer to the id of the database plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
char *
h5partGeneralPluginInfo::GetID() const
{
return "h5part_1.0";
}
// ****************************************************************************
// Method: h5partGeneralPluginInfo::EnabledByDefault
//
// Purpose:
// Return true if this plugin should be enabled by default; false otherwise.
//
// Returns: true/false
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
bool
h5partGeneralPluginInfo::EnabledByDefault() const
{
return true;
}
// ****************************************************************************
// Method: h5partGeneralPluginInfo::HasWriter
//
// Purpose:
// Return true if this plugin has a database writer.
//
// Returns: true/false
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// ****************************************************************************
bool
h5partGeneralPluginInfo::HasWriter() const
{
return false;
}
@@ -0,0 +1,60 @@
// ****************************************************************************
// h5partPluginInfo.h
// ****************************************************************************
#ifndef H5PART_PLUGIN_INFO_H
#define H5PART_PLUGIN_INFO_H
#include <DatabasePluginInfo.h>
#include <database_plugin_exports.h>
class avtDatabase;
class avtDatabaseWriter;
// ****************************************************************************
// Class: h5partDatabasePluginInfo
//
// Purpose:
// Classes that provide all the information about the h5part plugin.
// Portions are separated into pieces relevant to the appropriate
// components of VisIt.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 9 09:51:18 PDT 2006
//
// Modifications:
//
// ****************************************************************************
class h5partGeneralPluginInfo : public virtual GeneralDatabasePluginInfo
{
public:
virtual char *GetName() const;
virtual char *GetVersion() const;
virtual char *GetID() const;
virtual bool EnabledByDefault() const;
virtual bool HasWriter() const;
};
class h5partCommonPluginInfo : public virtual CommonDatabasePluginInfo, public virtual h5partGeneralPluginInfo
{
public:
virtual DatabaseType GetDatabaseType();
virtual std::vector<std::string> GetDefaultExtensions();
virtual avtDatabase *SetupDatabase(const char * const *list,
int nList, int nBlock);
};
class h5partMDServerPluginInfo : public virtual MDServerDatabasePluginInfo, public virtual h5partCommonPluginInfo
{
public:
// this makes compilers happy... remove if we ever have functions here
virtual void dummy();
};
class h5partEnginePluginInfo : public virtual EngineDatabasePluginInfo, public virtual h5partCommonPluginInfo
{
public:
virtual avtDatabaseWriter *GetWriter(void);
};
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<Plugin name="Binner" type="operator" label="Binner" version="1.0" enabled="true" mdspecificcode="false" onlyengine="false" noengine="false" iconFile="icon.xpm">
<Attribute name="Binner" purpose="Bin particles" persistent="true" exportAPI="" exportInclude="">
<Field name="dim1" label="dim1" type="int">
</Field>
<Field name="dim2" label="dim2" type="int">
</Field>
<Field name="dim3" label="dim3" type="int">
</Field>
</Attribute>
</Plugin>
@@ -0,0 +1,47 @@
// ************************************************************************* //
// File: BinnerCommonPluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <BinnerFilter.h>
// ****************************************************************************
// Method: BinnerCommonPluginInfo::AllocAttributes
//
// Purpose:
// Return a pointer to a newly allocated attribute subject.
//
// Returns: A pointer to the newly allocated attribute subject.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
AttributeSubject *
BinnerCommonPluginInfo::AllocAttributes()
{
return new Binner;
}
// ****************************************************************************
// Method: BinnerCommonPluginInfo::CopyAttributes
//
// Purpose:
// Copy a Binner attribute subject.
//
// Arguments:
// to The destination attribute subject.
// from The source attribute subject.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
void
BinnerCommonPluginInfo::CopyAttributes(AttributeSubject *to,
AttributeSubject *from)
{
*((Binner *) to) = *((Binner *) from);
}
@@ -0,0 +1,44 @@
// ************************************************************************* //
// File: BinnerEnginePluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <avtBinnerFilter.h>
#if defined(__APPLE__)
#define GetEngineInfo Binner_GetEngineInfo
#endif
// ****************************************************************************
// Function: GetEngineInfo
//
// Purpose:
// Return a new EnginePluginInfo for the Binner operator.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
extern "C" EngineOperatorPluginInfo* GetEngineInfo()
{
return new BinnerEnginePluginInfo;
}
// ****************************************************************************
// Method: BinnerEnginePluginInfo::AllocAvtPluginFilter
//
// Purpose:
// Return a pointer to a newly allocated avtPluginFilter.
//
// Returns: A pointer to the newly allocated avtPluginFilter.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
avtPluginFilter *
BinnerEnginePluginInfo::AllocAvtPluginFilter()
{
return new avtBinnerFilter;
}
@@ -0,0 +1,535 @@
#include <BinnerFilter.h>
#include <DataNode.h>
// ****************************************************************************
// Method: Binner::Binner
//
// Purpose:
// Constructor for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
Binner::Binner() : AttributeSubject("iii")
{
}
// ****************************************************************************
// Method: Binner::Binner
//
// Purpose:
// Copy constructor for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
Binner::Binner(const Binner &obj) : AttributeSubject("iii")
{
dim1 = obj.dim1;
dim2 = obj.dim2;
dim3 = obj.dim3;
SelectAll();
}
// ****************************************************************************
// Method: Binner::~Binner
//
// Purpose:
// Destructor for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
Binner::~Binner()
{
// nothing here
}
// ****************************************************************************
// Method: Binner::operator =
//
// Purpose:
// Assignment operator for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
Binner&
Binner::operator = (const Binner &obj)
{
if (this == &obj) return *this;
dim1 = obj.dim1;
dim2 = obj.dim2;
dim3 = obj.dim3;
SelectAll();
return *this;
}
// ****************************************************************************
// Method: Binner::operator ==
//
// Purpose:
// Comparison operator == for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
Binner::operator == (const Binner &obj) const
{
// Create the return value
return ((dim1 == obj.dim1) &&
(dim2 == obj.dim2) &&
(dim3 == obj.dim3));
}
// ****************************************************************************
// Method: Binner::operator !=
//
// Purpose:
// Comparison operator != for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
Binner::operator != (const Binner &obj) const
{
return !(this->operator == (obj));
}
// ****************************************************************************
// Method: Binner::TypeName
//
// Purpose:
// Type name method for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
const std::string
Binner::TypeName() const
{
return "Binner";
}
// ****************************************************************************
// Method: Binner::CopyAttributes
//
// Purpose:
// CopyAttributes method for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
Binner::CopyAttributes(const AttributeGroup *atts)
{
if(TypeName() != atts->TypeName())
return false;
// Call assignment operator.
const Binner *tmp = (const Binner *)atts;
*this = *tmp;
return true;
}
// ****************************************************************************
// Method: Binner::CreateCompatible
//
// Purpose:
// CreateCompatible method for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeSubject *
Binner::CreateCompatible(const std::string &tname) const
{
AttributeSubject *retval = 0;
if(TypeName() == tname)
retval = new Binner(*this);
// Other cases could go here too.
return retval;
}
// ****************************************************************************
// Method: Binner::NewInstance
//
// Purpose:
// NewInstance method for the Binner class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeSubject *
Binner::NewInstance(bool copy) const
{
AttributeSubject *retval = 0;
if(copy)
retval = new Binner(*this);
else
retval = new Binner;
return retval;
}
// ****************************************************************************
// Method: Binner::SelectAll
//
// Purpose:
// Selects all attributes.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
Binner::SelectAll()
{
Select(0, (void *)&dim1);
Select(1, (void *)&dim2);
Select(2, (void *)&dim3);
}
///////////////////////////////////////////////////////////////////////////////
// Persistence methods
///////////////////////////////////////////////////////////////////////////////
// ****************************************************************************
// Method: Binner::CreateNode
//
// Purpose:
// This method creates a DataNode representation of the object so it can be saved to a config file.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
Binner::CreateNode(DataNode *parentNode, bool completeSave, bool forceAdd)
{
if(parentNode == 0)
return false;
Binner defaultObject;
bool addToParent = false;
// Create a node for Binner.
DataNode *node = new DataNode("Binner");
if(completeSave || !FieldsEqual(0, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("dim1", dim1));
}
if(completeSave || !FieldsEqual(1, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("dim2", dim2));
}
if(completeSave || !FieldsEqual(2, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("dim3", dim3));
}
// Add the node to the parent node.
if(addToParent || forceAdd)
parentNode->AddNode(node);
else
delete node;
return (addToParent || forceAdd);
}
// ****************************************************************************
// Method: Binner::SetFromNode
//
// Purpose:
// This method sets attributes in this object from values in a DataNode representation of the object.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
Binner::SetFromNode(DataNode *parentNode)
{
int i;
if(parentNode == 0)
return;
DataNode *searchNode = parentNode->GetNode("Binner");
if(searchNode == 0)
return;
DataNode *node;
if((node = searchNode->GetNode("dim1")) != 0)
SetDim1(node->AsInt());
if((node = searchNode->GetNode("dim2")) != 0)
SetDim2(node->AsInt());
if((node = searchNode->GetNode("dim3")) != 0)
SetDim3(node->AsInt());
}
///////////////////////////////////////////////////////////////////////////////
// Set property methods
///////////////////////////////////////////////////////////////////////////////
void
Binner::SetDim1(int dim1_)
{
dim1 = dim1_;
Select(0, (void *)&dim1);
}
void
Binner::SetDim2(int dim2_)
{
dim2 = dim2_;
Select(1, (void *)&dim2);
}
void
Binner::SetDim3(int dim3_)
{
dim3 = dim3_;
Select(2, (void *)&dim3);
}
///////////////////////////////////////////////////////////////////////////////
// Get property methods
///////////////////////////////////////////////////////////////////////////////
int
Binner::GetDim1() const
{
return dim1;
}
int
Binner::GetDim2() const
{
return dim2;
}
int
Binner::GetDim3() const
{
return dim3;
}
///////////////////////////////////////////////////////////////////////////////
// Keyframing methods
///////////////////////////////////////////////////////////////////////////////
// ****************************************************************************
// Method: Binner::GetFieldName
//
// Purpose:
// This method returns the name of a field given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
std::string
Binner::GetFieldName(int index) const
{
switch (index)
{
case 0: return "dim1";
case 1: return "dim2";
case 2: return "dim3";
default: return "invalid index";
}
}
// ****************************************************************************
// Method: Binner::GetFieldType
//
// Purpose:
// This method returns the type of a field given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeGroup::FieldType
Binner::GetFieldType(int index) const
{
switch (index)
{
case 0: return FieldType_int;
case 1: return FieldType_int;
case 2: return FieldType_int;
default: return FieldType_unknown;
}
}
// ****************************************************************************
// Method: Binner::GetFieldTypeName
//
// Purpose:
// This method returns the name of a field type given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
std::string
Binner::GetFieldTypeName(int index) const
{
switch (index)
{
case 0: return "int";
case 1: return "int";
case 2: return "int";
default: return "invalid index";
}
}
// ****************************************************************************
// Method: Binner::FieldsEqual
//
// Purpose:
// This method compares two fields and return true if they are equal.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
Binner::FieldsEqual(int index_, const AttributeGroup *rhs) const
{
const Binner &obj = *((const Binner*)rhs);
bool retval = false;
switch (index_)
{
case 0:
{ // new scope
retval = (dim1 == obj.dim1);
}
break;
case 1:
{ // new scope
retval = (dim2 == obj.dim2);
}
break;
case 2:
{ // new scope
retval = (dim3 == obj.dim3);
}
break;
default: retval = false;
}
return retval;
}
///////////////////////////////////////////////////////////////////////////////
// User-defined methods.
///////////////////////////////////////////////////////////////////////////////
@@ -0,0 +1,66 @@
#ifndef BINNER_H
#define BINNER_H
#include <AttributeSubject.h>
// ****************************************************************************
// Class: Binner
//
// Purpose:
// Bin particles
//
// Notes: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 30 12:05:25 PDT 2006
//
// Modifications:
//
// ****************************************************************************
class Binner : public AttributeSubject
{
public:
Binner();
Binner(const Binner &obj);
virtual ~Binner();
virtual Binner& operator = (const Binner &obj);
virtual bool operator == (const Binner &obj) const;
virtual bool operator != (const Binner &obj) const;
virtual const std::string TypeName() const;
virtual bool CopyAttributes(const AttributeGroup *);
virtual AttributeSubject *CreateCompatible(const std::string &) const;
virtual AttributeSubject *NewInstance(bool) const;
// Property selection methods
virtual void SelectAll();
// Property setting methods
void SetDim1(int dim1_);
void SetDim2(int dim2_);
void SetDim3(int dim3_);
// Property getting methods
int GetDim1() const;
int GetDim2() const;
int GetDim3() const;
// Persistence methods
virtual bool CreateNode(DataNode *node, bool completeSave, bool forceAdd);
virtual void SetFromNode(DataNode *node);
// Keyframing methods
virtual std::string GetFieldName(int index) const;
virtual AttributeGroup::FieldType GetFieldType(int index) const;
virtual std::string GetFieldTypeName(int index) const;
virtual bool FieldsEqual(int index, const AttributeGroup *rhs) const;
private:
int dim1;
int dim2;
int dim3;
};
#endif
@@ -0,0 +1,116 @@
package llnl.visit.operators;
import llnl.visit.AttributeSubject;
import llnl.visit.CommunicationBuffer;
import llnl.visit.Plugin;
// ****************************************************************************
// Class: Binner
//
// Purpose:
// Bin particles
//
// Notes: Autogenerated by xml2java.
//
// Programmer: xml2java
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
public class Binner extends AttributeSubject implements Plugin
{
public Binner()
{
super(3);
dim1 = 0;
dim2 = 0;
dim3 = 0;
}
public Binner(Binner obj)
{
super(3);
dim1 = obj.dim1;
dim2 = obj.dim2;
dim3 = obj.dim3;
SelectAll();
}
public boolean equals(Binner obj)
{
// Create the return value
return ((dim1 == obj.dim1) &&
(dim2 == obj.dim2) &&
(dim3 == obj.dim3));
}
public String GetName() { return "Binner"; }
public String GetVersion() { return "1.0"; }
// Property setting methods
public void SetDim1(int dim1_)
{
dim1 = dim1_;
Select(0);
}
public void SetDim2(int dim2_)
{
dim2 = dim2_;
Select(1);
}
public void SetDim3(int dim3_)
{
dim3 = dim3_;
Select(2);
}
// Property getting methods
public int GetDim1() { return dim1; }
public int GetDim2() { return dim2; }
public int GetDim3() { return dim3; }
// Write and read methods.
public void WriteAtts(CommunicationBuffer buf)
{
if(WriteSelect(0, buf))
buf.WriteInt(dim1);
if(WriteSelect(1, buf))
buf.WriteInt(dim2);
if(WriteSelect(2, buf))
buf.WriteInt(dim3);
}
public void ReadAtts(int n, CommunicationBuffer buf)
{
for(int i = 0; i < n; ++i)
{
int index = (int)buf.ReadByte();
switch(index)
{
case 0:
SetDim1(buf.ReadInt());
break;
case 1:
SetDim2(buf.ReadInt());
break;
case 2:
SetDim3(buf.ReadInt());
break;
}
}
}
// Attributes
private int dim1;
private int dim2;
private int dim3;
}
@@ -0,0 +1,92 @@
// ************************************************************************* //
// File: BinnerGUIPluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <BinnerFilter.h>
#include <QvisBinnerWindow.h>
#if defined(__APPLE__)
#define GetGUIInfo Binner_GetGUIInfo
#endif
// ****************************************************************************
// Function: GetGUIInfo
//
// Purpose:
// Return a new GUIPluginInfo for the Binner operator.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
extern "C" GUIOperatorPluginInfo* GetGUIInfo()
{
return new BinnerGUIPluginInfo;
}
// ****************************************************************************
// Method: BinnerGUIPluginInfo::GetMenuName
//
// Purpose:
// Return a pointer to the name to use in the GUI menu.
//
// Returns: A pointer to the name to use in the GUI menu.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
const char *
BinnerGUIPluginInfo::GetMenuName() const
{
return "Binner";
}
// ****************************************************************************
// Method: BinnerGUIPluginInfo::CreatePluginWindow
//
// Purpose:
// Return a pointer to an operator's attribute window.
//
// Arguments:
// type The type of the operator.
// attr The attribute subject for the operator.
// notepad The notepad to use for posting the window.
//
// Returns: A pointer to the operator's attribute window.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
QvisPostableWindowObserver *
BinnerGUIPluginInfo::CreatePluginWindow(int type, AttributeSubject *attr,
QvisNotepadArea *notepad)
{
return new QvisBinnerWindow(type, (Binner *)attr,
"Binner operator attributes", "Binner operator", notepad);
}
// ****************************************************************************
// Method: BinnerGUIPluginInfo::XPMIconData
//
// Purpose:
// Return a pointer to the icon data.
//
// Returns: A pointer to the icon data.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
#include <icon.xpm>
const char **
BinnerGUIPluginInfo::XPMIconData() const
{
return icon_xpm;
}
@@ -0,0 +1,113 @@
##
## Programs and options...
##
include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-variables
TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64
##
## Libraries and includes...
##
VTK_INCLUDE= \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Filtering \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Graphics \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Hybrid \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/IO \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Imaging \
-I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Rendering
MOC=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/bin/moc
CXXFLAGS=$(CXXFLAGSORIG) $(QT_CXXFLAGS) $(PY_CXXFLAGS)
CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit
LDFLAGS=$(LDFLAGSORIG) $(PY_LDFLAGS) -L/d/visusers/cristina/.visit/linux-x86_64/plugins/operators
##
## Files...
##
PLUGINDIR=operators
PLUGINNAME=BinnerOperator
WIDGETS=QvisBinnerWindow.h
ISRC=BinnerPluginInfo.C
COMMONSRC=BinnerPluginInfo.C BinnerCommonPluginInfo.C Binner.C
GSRC=BinnerGUIPluginInfo.C QvisBinnerWindow.C
VSRC=BinnerViewerPluginInfo.C
ESRC=BinnerEnginePluginInfo.C avtBinnerFilter.C
SSRC=BinnerScriptingPluginInfo.C PyBinner.C
SRC=$(ISRC) $(COMMONSRC) $(GSRC) $(VSRC) $(ESRC) $(SSRC)
JAVASRC=Binner.java
JAVAOBJ=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java/llnl/visit/operators/Binner.class
JAVAPLUGINFLAGS=-d /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java -classpath /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java
SHLIB_FORCED=
ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
VLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
ILIBS=
GLIBS=-lgui -lmdserverproxy -lviewerproxy -lproxybase -lmdserverrpc -lviewerrpc -lwinutil -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lplugin -lexpr -lparser -lutility -lI$(PLUGINNAME) $(QT_LDFLAGS) $(QT_LIBS) $(QUI_LIBS) $(X_LIBS)
SLIBS=-lstate -lmisc -lcomm -lutility $(PY_LIB) -lI$(PLUGINNAME)
VLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser $(VLIBS_FOR_MACOSX_PREBINDING) -lI$(PLUGINNAME) $(VTK_LIBS)
ESERLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS)
EPARLIBS=-lpipeline_par -lplotter_par -lavtfilters_par -lavtmath_par -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_par -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS)
IDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libIBinnerOperator.so
GDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libGBinnerOperator.so
SDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libSBinnerOperator.so
VDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libVBinnerOperator.so
ESERDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEBinnerOperator_ser.so
EPARDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEBinnerOperator_par.so
DISTRIB=
##
## Derived objects
##
IOBJ=$(ISRC:.C=.o)
GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o)
SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o)
VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o)
MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o)
ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o)
EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o)
MOCSRC = $(WIDGETS:.h=_moc.C)
MOCOBJ = $(MOCSRC:.C=.o)
##
## Standard targets...
##
all: message $(IDSO) $(GUILIB) $(VIEWERLIB) $(ENGINELIBSER) $(ENGINELIBPAR) $(SCRIPTINGLIB) $(JAVACLASS)
clean:
$(RM) $(IOBJ) $(COMMONOBJ)
$(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ)
$(RM) $(MOCSRC) $(MOCOBJ)
$(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO)
$(RM) $(JAVAOBJ)
##
## Other targets...
##
message:
@echo
@echo "****************************************************************************"
@echo "*** Building Binner Operator Plugin"
@echo "****************************************************************************"
##
## moc
##
$(MOCSRC) or_no_widgets: $(WIDGETS)
@rm -f $@
$(MOC) $(@:_moc.C=.h) > $@
##
## Automatic dependency stuff
##
include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-targets
@@ -0,0 +1,107 @@
// ************************************************************************* //
// File: BinnerPluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <BinnerFilter.h>
#include <visit-config.h>
#if defined(__APPLE__)
extern "C" const char *BinnerVisItPluginVersion = VERSION;
#else
extern "C" const char *VisItPluginVersion = VERSION;
#endif
#if defined(__APPLE__)
#define GetGeneralInfo Binner_GetGeneralInfo
#endif
// ****************************************************************************
// Function: GetGeneralInfo
//
// Purpose:
// Return a new GeneralPluginInfo for the Binner operator.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
extern "C" GeneralOperatorPluginInfo* GetGeneralInfo()
{
return new BinnerGeneralPluginInfo;
}
// ****************************************************************************
// Method: BinnerGeneralPluginInfo::GetName
//
// Purpose:
// Return the name of the operator plugin.
//
// Returns: A pointer to the name of the operator plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
char *
BinnerGeneralPluginInfo::GetName() const
{
return "Binner";
}
// ****************************************************************************
// Method: BinnerGeneralPluginInfo::GetVersion
//
// Purpose:
// Return the version of the operator plugin.
//
// Returns: A pointer to the version of the operator plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
char *
BinnerGeneralPluginInfo::GetVersion() const
{
return "1.0";
}
// ****************************************************************************
// Method: BinnerGeneralPluginInfo::GetID
//
// Purpose:
// Return the id of the operator plugin.
//
// Returns: A pointer to the id of the operator plugin.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
char *
BinnerGeneralPluginInfo::GetID() const
{
return "Binner_1.0";
}
// ****************************************************************************
// Method: BinnerGeneralPluginInfo::EnabledByDefault
//
// Purpose:
// Return true if this plugin should be enabled by default; false otherwise.
//
// Returns: true/false
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
bool
BinnerGeneralPluginInfo::EnabledByDefault() const
{
return true;
}
@@ -0,0 +1,85 @@
// ************************************************************************* //
// File: BinnerPluginInfo.h
// ************************************************************************* //
#ifndef BINNER_PLUGIN_INFO_H
#define BINNER_PLUGIN_INFO_H
#include <OperatorPluginInfo.h>
#include <operator_plugin_exports.h>
class Binner;
// ****************************************************************************
// Class: BinnerPluginInfo
//
// Purpose:
// Five classes that provide all the information about an Binner operator
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
class BinnerGeneralPluginInfo : public virtual GeneralOperatorPluginInfo
{
public:
virtual char *GetName() const;
virtual char *GetVersion() const;
virtual char *GetID() const;
virtual bool EnabledByDefault() const;
};
class BinnerCommonPluginInfo : public virtual CommonOperatorPluginInfo, public virtual BinnerGeneralPluginInfo
{
public:
virtual AttributeSubject *AllocAttributes();
virtual void CopyAttributes(AttributeSubject *to, AttributeSubject *from);
};
class BinnerGUIPluginInfo : public virtual GUIOperatorPluginInfo, public virtual BinnerCommonPluginInfo
{
public:
virtual const char *GetMenuName() const;
virtual QvisPostableWindowObserver *CreatePluginWindow(int type,
AttributeSubject *attr, QvisNotepadArea *notepad);
virtual const char **XPMIconData() const;
};
class BinnerViewerPluginInfo : public virtual ViewerOperatorPluginInfo, public virtual BinnerCommonPluginInfo
{
public:
virtual AttributeSubject *GetClientAtts();
virtual AttributeSubject *GetDefaultAtts();
virtual void SetClientAtts(AttributeSubject *atts);
virtual void GetClientAtts(AttributeSubject *atts);
virtual void InitializeOperatorAtts(AttributeSubject *atts,
const ViewerPlot *plot,
const bool fromDefault);
virtual const char **XPMIconData() const;
static void InitializeGlobalObjects();
private:
static Binner *defaultAtts;
static Binner *clientAtts;
};
class BinnerEnginePluginInfo : public virtual EngineOperatorPluginInfo, public virtual BinnerCommonPluginInfo
{
public:
virtual avtPluginFilter *AllocAvtPluginFilter();
};
class BinnerScriptingPluginInfo : public virtual ScriptingOperatorPluginInfo, public virtual BinnerCommonPluginInfo
{
public:
virtual void InitializePlugin(AttributeSubject *subj, void *data);
virtual void *GetMethodTable(int *nMethods);
virtual bool TypesMatch(void *pyobject);
virtual char *GetLogString();
virtual void SetDefaults(const AttributeSubject *atts);
};
#endif
@@ -0,0 +1,142 @@
// ************************************************************************* //
// BinnerScriptingPluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <PyBinner.h>
#if defined(__APPLE__)
#define GetScriptingInfo Binner_GetScriptingInfo
#endif
// ****************************************************************************
// Function: GetScriptingInfo
//
// Purpose:
// Return a new ScriptingPluginInfo for the Binner plot.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
extern "C" ScriptingOperatorPluginInfo* GetScriptingInfo()
{
return new BinnerScriptingPluginInfo;
}
// ****************************************************************************
// Method: BinnerScriptingPluginInfo::InitializePlugin
//
// Purpose:
// Calls the initialization function for the plugin.
//
// Arguments:
// subj : A pointer to the plugin's state object.
// data : A pointer to data to be used by the observer function.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
BinnerScriptingPluginInfo::InitializePlugin(AttributeSubject *subj,
void *data)
{
PyBinner_StartUp((Binner *)subj, data);
}
// ****************************************************************************
// Method: BinnerScriptingPluginInfo::GetMethodTable
//
// Purpose:
// Returns a pointer to the plugin's Python method table. These methods are
// added to the top-level visit module's methods.
//
// Arguments:
// nMethods : Returns the number of methods in the method table.
//
// Returns: A pointer to the method table.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void *
BinnerScriptingPluginInfo::GetMethodTable(int *nMethods)
{
return PyBinner_GetMethodTable(nMethods);
}
// ****************************************************************************
// Method: BinnerScriptingPluginInfo::TypesMatch
//
// Purpose:
// Returns whether or not the input PyObject is Binner plot attributes.
//
// Arguments:
// pyobject : A PyObject cast to void*.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
BinnerScriptingPluginInfo::TypesMatch(void *pyobject)
{
return PyBinner_Check((PyObject *)pyobject);
}
// ****************************************************************************
// Method: BinnerScriptingPluginInfo::GetLogString
//
// Purpose:
// Gets a string representation of the current attributes.
//
// Arguments:
// val : Whether or not to log state information.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
char *
BinnerScriptingPluginInfo::GetLogString()
{
std::string s(PyBinner_GetLogString());
char *v = new char[s.size() + 1];
strcpy(v, s.c_str());
return v;
}
// ****************************************************************************
// Method: BinnerScriptingPluginInfo::SetDefaults
//
// Purpose:
// Used to set the default values for a plugin's state object.
//
// Arguments:
// atts : The new state.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
BinnerScriptingPluginInfo::SetDefaults(const AttributeSubject *atts)
{
PyBinner_SetDefaults((const Binner *)atts);
}
@@ -0,0 +1,175 @@
// ************************************************************************* //
// File: BinnerViewerPluginInfo.C
// ************************************************************************* //
#include <BinnerPluginInfo.h>
#include <BinnerFilter.h>
#if defined(__APPLE__)
#define GetViewerInfo Binner_GetViewerInfo
#endif
// ****************************************************************************
// Function: GetViewerInfo
//
// Purpose:
// Return a new ViewerPluginInfo for the Binner operator.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
extern "C" ViewerOperatorPluginInfo* GetViewerInfo()
{
BinnerViewerPluginInfo::InitializeGlobalObjects();
return new BinnerViewerPluginInfo;
}
//
// Storage for static data elements.
//
Binner *BinnerViewerPluginInfo::clientAtts = NULL;
Binner *BinnerViewerPluginInfo::defaultAtts = NULL;
// ****************************************************************************
// Method: BinnerViewerPluginInfo::InitializeGlobalObjects
//
// Purpose:
// Initialize the operator atts.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
void
BinnerViewerPluginInfo::InitializeGlobalObjects()
{
BinnerViewerPluginInfo::clientAtts = new Binner;
BinnerViewerPluginInfo::defaultAtts = new Binner;
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::GetClientAtts
//
// Purpose:
// Return a pointer to the viewer client attributes.
//
// Returns: A pointer to the viewer client attributes.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
AttributeSubject *
BinnerViewerPluginInfo::GetClientAtts()
{
return clientAtts;
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::GetDefaultAtts
//
// Purpose:
// Return a pointer to the viewer default attributes.
//
// Returns: A pointer to the viewer default attributes.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
AttributeSubject *
BinnerViewerPluginInfo::GetDefaultAtts()
{
return defaultAtts;
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::SetClientAtts
//
// Purpose:
// Set the viewer client attributes.
//
// Arguments:
// atts A pointer to the new client attributes.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
void
BinnerViewerPluginInfo::SetClientAtts(AttributeSubject *atts)
{
*clientAtts = *(Binner *)atts;
clientAtts->Notify();
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::GetClientAtts
//
// Purpose:
// Get the viewer client attributes.
//
// Arguments:
// atts A pointer to return the client default attributes in.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
void
BinnerViewerPluginInfo::GetClientAtts(AttributeSubject *atts)
{
*(Binner *)atts = *clientAtts;
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::InitializeOperatorAtts
//
// Purpose:
// Initialize the operator attributes to the default attributes.
//
// Arguments:
// atts The attribute subject to initialize.
// md The metadata used to initialize.
// atts The variable name used to initialize.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
void
BinnerViewerPluginInfo::InitializeOperatorAtts(AttributeSubject *atts,
const ViewerPlot *plot,
const bool fromDefault)
{
if (fromDefault)
*(Binner*)atts = *defaultAtts;
else
*(Binner*)atts = *clientAtts;
}
// ****************************************************************************
// Method: BinnerViewerPluginInfo::XPMIconData
//
// Purpose:
// Return a pointer to the icon data.
//
// Returns: A pointer to the icon data.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
#include <icon.xpm>
const char **
BinnerViewerPluginInfo::XPMIconData() const
{
return icon_xpm;
}
@@ -0,0 +1 @@
s/Binner/Binner/g
@@ -0,0 +1,114 @@
##
## Programs and options...
##
TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64
include $(TOPDIR)/include/make-variables
TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64
PLUGINSHOME=$(HOME)/.visit/linux-x86_64/plugins
##
## Libraries and includes...
##
VTK_INCLUDE= \
-I$(TOPDIR)/include/vtk \
-I$(TOPDIR)/include/vtk/Common \
-I$(TOPDIR)/include/vtk/Filtering \
-I$(TOPDIR)/include/vtk/Graphics \
-I$(TOPDIR)/include/vtk/Hybrid \
-I$(TOPDIR)/include/vtk/IO \
-I$(TOPDIR)/include/vtk/Imaging \
-I$(TOPDIR)/include/vtk/Rendering
MOC=$(TOPDIR)/bin/moc
CXXFLAGS=$(CXXFLAGSORIG) $(QT_CXXFLAGS) $(PY_CXXFLAGS)
CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I$(TOPDIR)/include -I$(TOPDIR)/include/visit
LDFLAGS=$(LDFLAGSORIG) $(PY_LDFLAGS) -L$(PLUGINSHOME)/operators
##
## Files...
##
PLUGINDIR=operators
PLUGINNAME=BinnerOperator
WIDGETS=QvisBinnerWindow.h
ISRC=BinnerPluginInfo.C
COMMONSRC=BinnerPluginInfo.C BinnerCommonPluginInfo.C BinnerFilter.C
GSRC=BinnerGUIPluginInfo.C QvisBinnerWindow.C
VSRC=BinnerViewerPluginInfo.C
ESRC=BinnerEnginePluginInfo.C avtBinnerFilter.C
SSRC=BinnerScriptingPluginInfo.C PyBinner.C
SRC=$(ISRC) $(COMMONSRC) $(GSRC) $(VSRC) $(ESRC) $(SSRC)
JAVASRC=Binner.java
JAVAOBJ=$(TOPDIR)/java/llnl/visit/operators/BinnerFilter.class
JAVAPLUGINFLAGS=-d $(TOPDIR)/java -classpath $(TOPDIR)/java
SHLIB_FORCED=
ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
VLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS)
ILIBS=
GLIBS=-lgui -lmdserverproxy -lviewerproxy -lproxybase -lmdserverrpc -lviewerrpc -lwinutil -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lplugin -lexpr -lparser -lutility -lI$(PLUGINNAME) $(QT_LDFLAGS) $(QT_LIBS) $(QUI_LIBS) $(X_LIBS)
SLIBS=-lstate -lmisc -lcomm -lutility $(PY_LIB) -lI$(PLUGINNAME)
VLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser $(VLIBS_FOR_MACOSX_PREBINDING) -lI$(PLUGINNAME) $(VTK_LIBS)
ESERLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS)
EPARLIBS=-lpipeline_par -lplotter_par -lavtfilters_par -lavtmath_par -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_par -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS)
IDSO=$(PLUGINSHOME)/operators/libIBinnerOperator.so
GDSO=$(PLUGINSHOME)/operators/libGBinnerOperator.so
SDSO=$(PLUGINSHOME)/operators/libSBinnerOperator.so
VDSO=$(PLUGINSHOME)/operators/libVBinnerOperator.so
ESERDSO=$(PLUGINSHOME)/operators/libEBinnerOperator_ser.so
EPARDSO=$(PLUGINSHOME)/operators/libEBinnerOperator_par.so
DISTRIB=
##
## Derived objects
##
IOBJ=$(ISRC:.C=.o)
GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o)
SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o)
VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o)
MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o)
ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o)
EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o)
MOCSRC = $(WIDGETS:.h=_moc.C)
MOCOBJ = $(MOCSRC:.C=.o)
##
## Standard targets...
##
all: message $(IDSO) $(GUILIB) $(VIEWERLIB) $(ENGINELIBSER) $(ENGINELIBPAR) $(SCRIPTINGLIB) $(JAVACLASS)
clean:
$(RM) $(IOBJ) $(COMMONOBJ)
$(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ)
$(RM) $(MOCSRC) $(MOCOBJ)
$(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO)
$(RM) $(JAVAOBJ)
##
## Other targets...
##
message:
@echo
@echo "****************************************************************************"
@echo "*** Building Binner Operator Plugin"
@echo "****************************************************************************"
##
## moc
##
$(MOCSRC) or_no_widgets: $(WIDGETS)
@rm -f $@
$(MOC) $(@:_moc.C=.h) > $@
##
## Automatic dependency stuff
##
include $(TOPDIR)/include/make-targets
@@ -0,0 +1,422 @@
#include <PyBinner.h>
#include <ObserverToCallback.h>
#include <ColorAttribute.h>
#include <snprintf.h>
// ****************************************************************************
// Module: PyBinner
//
// Purpose:
// Bin particles
//
// Note: Autogenerated by xml2python. Do not modify by hand!
//
// Programmer: xml2python
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// ****************************************************************************
//
// This struct contains the Python type information and a Binner.
//
struct BinnerObject
{
PyObject_HEAD
Binner *data;
bool owns;
};
//
// Internal prototypes
//
static PyObject *NewBinner(int);
std::string
PyBinner_ToString(const Binner *atts, const char *prefix)
{
std::string str;
char tmpStr[1000];
SNPRINTF(tmpStr, 1000, "%sdim1 = %d\n", prefix, atts->GetDim1());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%sdim2 = %d\n", prefix, atts->GetDim2());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%sdim3 = %d\n", prefix, atts->GetDim3());
str += tmpStr;
return str;
}
static PyObject *
Binner_Notify(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
obj->data->Notify();
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
Binner_SetDim1(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
int ival;
if(!PyArg_ParseTuple(args, "i", &ival))
return NULL;
// Set the dim1 in the object.
obj->data->SetDim1(ival);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
Binner_GetDim1(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
PyObject *retval = PyInt_FromLong(long(obj->data->GetDim1()));
return retval;
}
static PyObject *
Binner_SetDim2(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
int ival;
if(!PyArg_ParseTuple(args, "i", &ival))
return NULL;
// Set the dim2 in the object.
obj->data->SetDim2(ival);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
Binner_GetDim2(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
PyObject *retval = PyInt_FromLong(long(obj->data->GetDim2()));
return retval;
}
static PyObject *
Binner_SetDim3(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
int ival;
if(!PyArg_ParseTuple(args, "i", &ival))
return NULL;
// Set the dim3 in the object.
obj->data->SetDim3(ival);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
Binner_GetDim3(PyObject *self, PyObject *args)
{
BinnerObject *obj = (BinnerObject *)self;
PyObject *retval = PyInt_FromLong(long(obj->data->GetDim3()));
return retval;
}
static struct PyMethodDef Binner_methods[] = {
{"Notify", Binner_Notify, METH_VARARGS},
{"SetDim1", Binner_SetDim1, METH_VARARGS},
{"GetDim1", Binner_GetDim1, METH_VARARGS},
{"SetDim2", Binner_SetDim2, METH_VARARGS},
{"GetDim2", Binner_GetDim2, METH_VARARGS},
{"SetDim3", Binner_SetDim3, METH_VARARGS},
{"GetDim3", Binner_GetDim3, METH_VARARGS},
{NULL, NULL}
};
//
// Type functions
//
static void
Binner_dealloc(PyObject *v)
{
BinnerObject *obj = (BinnerObject *)v;
if(obj->owns)
delete obj->data;
}
static int
Binner_compare(PyObject *v, PyObject *w)
{
Binner *a = ((BinnerObject *)v)->data;
Binner *b = ((BinnerObject *)w)->data;
return (*a == *b) ? 0 : -1;
}
static PyObject *
Binner_getattr(PyObject *self, char *name)
{
if(strcmp(name, "dim1") == 0)
return Binner_GetDim1(self, NULL);
if(strcmp(name, "dim2") == 0)
return Binner_GetDim2(self, NULL);
if(strcmp(name, "dim3") == 0)
return Binner_GetDim3(self, NULL);
return Py_FindMethod(Binner_methods, self, name);
}
static int
Binner_setattr(PyObject *self, char *name, PyObject *args)
{
// Create a tuple to contain the arguments since all of the Set
// functions expect a tuple.
PyObject *tuple = PyTuple_New(1);
PyTuple_SET_ITEM(tuple, 0, args);
Py_INCREF(args);
bool retval = false;
if(strcmp(name, "dim1") == 0)
retval = (Binner_SetDim1(self, tuple) != NULL);
else if(strcmp(name, "dim2") == 0)
retval = (Binner_SetDim2(self, tuple) != NULL);
else if(strcmp(name, "dim3") == 0)
retval = (Binner_SetDim3(self, tuple) != NULL);
Py_DECREF(tuple);
return retval ? 0 : -1;
}
static int
Binner_print(PyObject *v, FILE *fp, int flags)
{
BinnerObject *obj = (BinnerObject *)v;
fprintf(fp, "%s", PyBinner_ToString(obj->data, "").c_str());
return 0;
}
PyObject *
Binner_str(PyObject *v)
{
BinnerObject *obj = (BinnerObject *)v;
return PyString_FromString(PyBinner_ToString(obj->data,"").c_str());
}
//
// The doc string for the class.
//
static char *Binner_Purpose = "Bin particles";
//
// The type description structure
//
static PyTypeObject BinnerType =
{
//
// Type header
//
PyObject_HEAD_INIT(&PyType_Type)
0, // ob_size
"Binner", // tp_name
sizeof(BinnerObject), // tp_basicsize
0, // tp_itemsize
//
// Standard methods
//
(destructor)Binner_dealloc, // tp_dealloc
(printfunc)Binner_print, // tp_print
(getattrfunc)Binner_getattr, // tp_getattr
(setattrfunc)Binner_setattr, // tp_setattr
(cmpfunc)Binner_compare, // tp_compare
(reprfunc)0, // tp_repr
//
// Type categories
//
0, // tp_as_number
0, // tp_as_sequence
0, // tp_as_mapping
//
// More methods
//
0, // tp_hash
0, // tp_call
(reprfunc)Binner_str, // tp_str
0, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_CHECKTYPES, // tp_flags
Binner_Purpose, // tp_doc
0, // tp_traverse
0, // tp_clear
0, // tp_richcompare
0 // tp_weaklistoffset
};
//
// Helper functions for object allocation.
//
static Binner *defaultAtts = 0;
static Binner *currentAtts = 0;
static PyObject *
NewBinner(int useCurrent)
{
BinnerObject *newObject;
newObject = PyObject_NEW(BinnerObject, &BinnerType);
if(newObject == NULL)
return NULL;
if(useCurrent && currentAtts != 0)
newObject->data = new Binner(*currentAtts);
else if(defaultAtts != 0)
newObject->data = new Binner(*defaultAtts);
else
newObject->data = new Binner;
newObject->owns = true;
return (PyObject *)newObject;
}
static PyObject *
WrapBinner(const Binner *attr)
{
BinnerObject *newObject;
newObject = PyObject_NEW(BinnerObject, &BinnerType);
if(newObject == NULL)
return NULL;
newObject->data = (Binner *)attr;
newObject->owns = false;
return (PyObject *)newObject;
}
///////////////////////////////////////////////////////////////////////////////
//
// Interface that is exposed to the VisIt module.
//
///////////////////////////////////////////////////////////////////////////////
PyObject *
Binner_new(PyObject *self, PyObject *args)
{
int useCurrent = 0;
if (!PyArg_ParseTuple(args, "i", &useCurrent))
{
if (!PyArg_ParseTuple(args, ""))
return NULL;
else
PyErr_Clear();
}
return (PyObject *)NewBinner(useCurrent);
}
//
// Plugin method table. These methods are added to the visitmodule's methods.
//
static PyMethodDef BinnerMethods[] = {
{"Binner", Binner_new, METH_VARARGS},
{NULL, NULL} /* Sentinel */
};
static Observer *BinnerObserver = 0;
std::string
PyBinner_GetLogString()
{
std::string s("Binner = Binner()\n");
if(currentAtts != 0)
s += PyBinner_ToString(currentAtts, "Binner.");
return s;
}
static void
PyBinner_CallLogRoutine(Subject *subj, void *data)
{
Binner *atts = (Binner *)subj;
typedef void (*logCallback)(const std::string &);
logCallback cb = (logCallback)data;
if(cb != 0)
{
std::string s("Binner = Binner()\n");
s += PyBinner_ToString(currentAtts, "Binner.");
cb(s);
}
}
void
PyBinner_StartUp(Binner *subj, void *data)
{
if(subj == 0)
return;
currentAtts = subj;
PyBinner_SetDefaults(subj);
//
// Create the observer that will be notified when the attributes change.
//
if(BinnerObserver == 0)
{
BinnerObserver = new ObserverToCallback(subj,
PyBinner_CallLogRoutine, (void *)data);
}
}
void
PyBinner_CloseDown()
{
delete defaultAtts;
defaultAtts = 0;
delete BinnerObserver;
BinnerObserver = 0;
}
PyMethodDef *
PyBinner_GetMethodTable(int *nMethods)
{
*nMethods = 1;
return BinnerMethods;
}
bool
PyBinner_Check(PyObject *obj)
{
return (obj->ob_type == &BinnerType);
}
Binner *
PyBinner_FromPyObject(PyObject *obj)
{
BinnerObject *obj2 = (BinnerObject *)obj;
return obj2->data;
}
PyObject *
PyBinner_NewPyObject()
{
return NewBinner(0);
}
PyObject *
PyBinner_WrapPyObject(const Binner *attr)
{
return WrapBinner(attr);
}
void
PyBinner_SetDefaults(const Binner *atts)
{
if(defaultAtts)
delete defaultAtts;
defaultAtts = new Binner(*atts);
}
@@ -0,0 +1,21 @@
#ifndef PY_BINNER_H
#define PY_BINNER_H
#include <Python.h>
#include <BinnerFilter.h>
//
// Functions exposed to the VisIt module.
//
void PyBinner_StartUp(Binner *subj, void *data);
void PyBinner_CloseDown();
PyMethodDef *PyBinner_GetMethodTable(int *nMethods);
bool PyBinner_Check(PyObject *obj);
Binner *PyBinner_FromPyObject(PyObject *obj);
PyObject *PyBinner_NewPyObject();
PyObject *PyBinner_WrapPyObject(const Binner *attr);
void PyBinner_SetDefaults(const Binner *atts);
std::string PyBinner_GetLogString();
std::string PyBinner_ToString(const Binner *, const char *);
#endif
@@ -0,0 +1,279 @@
#include "QvisBinnerWindow.h"
#include <BinnerFilter.h>
#include <ViewerProxy.h>
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qspinbox.h>
#include <qvbox.h>
#include <qbuttongroup.h>
#include <qradiobutton.h>
#include <QvisColorTableButton.h>
#include <QvisOpacitySlider.h>
#include <QvisColorButton.h>
#include <QvisLineStyleWidget.h>
#include <QvisLineWidthWidget.h>
#include <QvisVariableButton.h>
#include <stdio.h>
#include <string>
using std::string;
// ****************************************************************************
// Method: QvisBinnerWindow::QvisBinnerWindow
//
// Purpose:
// Constructor
//
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
QvisBinnerWindow::QvisBinnerWindow(const int type,
Binner *subj,
const char *caption,
const char *shortName,
QvisNotepadArea *notepad)
: QvisOperatorWindow(type,subj, caption, shortName, notepad)
{
atts = subj;
}
// ****************************************************************************
// Method: QvisBinnerWindow::~QvisBinnerWindow
//
// Purpose:
// Destructor
//
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
QvisBinnerWindow::~QvisBinnerWindow()
{
}
// ****************************************************************************
// Method: QvisBinnerWindow::CreateWindowContents
//
// Purpose:
// Creates the widgets for the window.
//
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
QvisBinnerWindow::CreateWindowContents()
{
QGridLayout *mainLayout = new QGridLayout(topLayout, 3,2, 10, "mainLayout");
dim1Label = new QLabel("dim1", central, "dim1Label");
mainLayout->addWidget(dim1Label,0,0);
dim1 = new QLineEdit(central, "dim1");
connect(dim1, SIGNAL(returnPressed()),
this, SLOT(dim1ProcessText()));
mainLayout->addWidget(dim1, 0,1);
dim2Label = new QLabel("dim2", central, "dim2Label");
mainLayout->addWidget(dim2Label,1,0);
dim2 = new QLineEdit(central, "dim2");
connect(dim2, SIGNAL(returnPressed()),
this, SLOT(dim2ProcessText()));
mainLayout->addWidget(dim2, 1,1);
dim3Label = new QLabel("dim3", central, "dim3Label");
mainLayout->addWidget(dim3Label,2,0);
dim3 = new QLineEdit(central, "dim3");
connect(dim3, SIGNAL(returnPressed()),
this, SLOT(dim3ProcessText()));
mainLayout->addWidget(dim3, 2,1);
}
// ****************************************************************************
// Method: QvisBinnerWindow::UpdateWindow
//
// Purpose:
// Updates the widgets in the window when the subject changes.
//
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
QvisBinnerWindow::UpdateWindow(bool doAll)
{
QString temp;
double r;
for(int i = 0; i < atts->NumAttributes(); ++i)
{
if(!doAll)
{
if(!atts->IsSelected(i))
{
continue;
}
}
const double *dptr;
const float *fptr;
const int *iptr;
const char *cptr;
const unsigned char *uptr;
const string *sptr;
QColor tempcolor;
switch(i)
{
case 0: //dim1
temp.sprintf("%d", atts->GetDim1());
dim1->setText(temp);
break;
case 1: //dim2
temp.sprintf("%d", atts->GetDim2());
dim2->setText(temp);
break;
case 2: //dim3
temp.sprintf("%d", atts->GetDim3());
dim3->setText(temp);
break;
}
}
}
// ****************************************************************************
// Method: QvisBinnerWindow::GetCurrentValues
//
// Purpose:
// Gets values from certain widgets and stores them in the subject.
//
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
QvisBinnerWindow::GetCurrentValues(int which_widget)
{
bool okay, doAll = (which_widget == -1);
QString msg, temp;
// Do dim1
if(which_widget == 0 || doAll)
{
temp = dim1->displayText().simplifyWhiteSpace();
okay = !temp.isEmpty();
if(okay)
{
int val = temp.toInt(&okay);
atts->SetDim1(val);
}
if(!okay)
{
msg.sprintf("The value of dim1 was invalid. "
"Resetting to the last good value of %d.",
atts->GetDim1());
Message(msg);
atts->SetDim1(atts->GetDim1());
}
}
// Do dim2
if(which_widget == 1 || doAll)
{
temp = dim2->displayText().simplifyWhiteSpace();
okay = !temp.isEmpty();
if(okay)
{
int val = temp.toInt(&okay);
atts->SetDim2(val);
}
if(!okay)
{
msg.sprintf("The value of dim2 was invalid. "
"Resetting to the last good value of %d.",
atts->GetDim2());
Message(msg);
atts->SetDim2(atts->GetDim2());
}
}
// Do dim3
if(which_widget == 2 || doAll)
{
temp = dim3->displayText().simplifyWhiteSpace();
okay = !temp.isEmpty();
if(okay)
{
int val = temp.toInt(&okay);
atts->SetDim3(val);
}
if(!okay)
{
msg.sprintf("The value of dim3 was invalid. "
"Resetting to the last good value of %d.",
atts->GetDim3());
Message(msg);
atts->SetDim3(atts->GetDim3());
}
}
}
//
// Qt Slot functions
//
void
QvisBinnerWindow::dim1ProcessText()
{
GetCurrentValues(0);
Apply();
}
void
QvisBinnerWindow::dim2ProcessText()
{
GetCurrentValues(1);
Apply();
}
void
QvisBinnerWindow::dim3ProcessText()
{
GetCurrentValues(2);
Apply();
}
@@ -0,0 +1,67 @@
#ifndef QVISBINNERWINDOW_H
#define QVISBINNERWINDOW_H
#include <QvisOperatorWindow.h>
#include <AttributeSubject.h>
class Binner;
class QLabel;
class QCheckBox;
class QLineEdit;
class QSpinBox;
class QVBox;
class QButtonGroup;
class QvisColorTableButton;
class QvisOpacitySlider;
class QvisColorButton;
class QvisLineStyleWidget;
class QvisLineWidthWidget;
class QvisVariableButton;
// ****************************************************************************
// Class: QvisBinnerWindow
//
// Purpose:
// Defines QvisBinnerWindow class.
//
// Notes: This class was automatically generated!
// Programmer: xml2window
// Creation: Thu Mar 30 12:05:26 PDT 2006
//
// Modifications:
//
// ****************************************************************************
class QvisBinnerWindow : public QvisOperatorWindow
{
Q_OBJECT
public:
QvisBinnerWindow(const int type,
Binner *subj,
const char *caption = 0,
const char *shortName = 0,
QvisNotepadArea *notepad = 0);
virtual ~QvisBinnerWindow();
virtual void CreateWindowContents();
protected:
void UpdateWindow(bool doAll);
virtual void GetCurrentValues(int which_widget);
private slots:
void dim1ProcessText();
void dim2ProcessText();
void dim3ProcessText();
private:
QLineEdit *dim1;
QLineEdit *dim2;
QLineEdit *dim3;
QLabel *dim1Label;
QLabel *dim2Label;
QLabel *dim3Label;
Binner *atts;
};
#endif
@@ -0,0 +1,350 @@
// ************************************************************************* //
// File: avtBinnerFilter.C
// ************************************************************************* //
#include <avtBinnerFilter.h>
#include <avtDatasetExaminer.h>
#include <avtDataAttributes.h>
#include <avtExtents.h>
#include <vtkStructuredGrid.h>
#include <vtkDataArray.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkMath.h>
#include <InvalidDimensionsException.h>
#ifdef PARALLEL_IO
#include <mpi.h>
#include <avtParallel.h>
#endif
// ****************************************************************************
// Method: avtBinnerFilter constructor
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
avtBinnerFilter::avtBinnerFilter()
{
nprocs = 1;
#ifdef PARALLEL_IO
nprocs = PAR_Size();
#endif
sgrid = NULL;
dims[0] = 10;
dims[1] = 10;
dims[2] = 10;
}
// ****************************************************************************
// Method: avtBinnerFilter destructor
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// Modifications:
//
// ****************************************************************************
avtBinnerFilter::~avtBinnerFilter()
{
}
// ****************************************************************************
// Method: avtBinnerFilter::Create
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
avtFilter *
avtBinnerFilter::Create()
{
return new avtBinnerFilter();
}
// ****************************************************************************
// Method: avtBinnerFilter::SetAtts
//
// Purpose:
// Sets the state of the filter based on the attribute object.
//
// Arguments:
// a The attributes to use.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
void
avtBinnerFilter::SetAtts(const AttributeGroup *a)
{
atts = *(const Binner*)a;
}
// ****************************************************************************
// Method: avtBinnerFilter::Equivalent
//
// Purpose:
// Returns true if creating a new avtBinnerFilter with the given
// parameters would result in an equivalent avtBinnerFilter.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
bool
avtBinnerFilter::Equivalent(const AttributeGroup *a)
{
return (atts == *(Binner*)a);
}
// ****************************************************************************
// Method: avtBinnerFilter::PreExecute
//
// Purpose:
// Called before "Execute". This will set up the range's we are operating
// on and the data structures we use to count the density.
//
// Programmer:
// Creation:
//
// ****************************************************************************
void
avtBinnerFilter::PreExecute(void)
{
cout << "In PreExecute\n";
avtStreamer::PreExecute();
ndims = GetInput()->GetInfo().GetAttributes().GetSpatialDimension();
if (ndims < 2) {
EXCEPTION2(InvalidDimensionsException, "Binner", " <2D");
}
dims[0] = atts.GetDim1()+1;
dims[1] = atts.GetDim2()+1;
if (ndims == 2)
dims[2] == 1;
else
dims[2] = atts.GetDim3()+1;
grid_size = dims[0]*dims[1]*dims[2];
data = (float *) calloc (grid_size, sizeof(float));
avtDataset_p input = GetTypedInput();
avtDatasetExaminer::GetSpatialExtents(input, extents);
#ifdef PARALLEL_IO
UnifyMinMax(extents, 2*ndims, 0);
#endif
for (int i=0; i < ndims; i++){
cout << "spatial extents: " << extents[2*i+1] << " " << extents[2*i] << "\n";
}
}
// ****************************************************************************
// Method: avtBinnerFilter::ExecuteData
//
// Purpose:
// Sends the specified input and output through the Binner filter.
//
// Arguments:
// in_ds The input dataset.
// <unused> The domain number.
// <unused> The label.
//
// Returns: The output dataset.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
vtkDataSet *
avtBinnerFilter::ExecuteData(vtkDataSet *in_ds, int domain, std::string)
{
cout << "domain: " << domain << "\n";
float x[3];
int numvar = GetInput()->GetInfo().GetAttributes().GetNumberOfVariables();
cout << "numvar: " << numvar << "\n";
for (int i=0; i < numvar; i++){
cout << GetInput()->GetInfo().GetAttributes().GetVariableName(i) << "\n";
}
for (int i=0; i < ndims; i++){
step[i] = (extents[2*i+1] - extents[2*i])/(dims[i]-1);
}
for (int i=0; i < ndims; i++){
extents[2*i] = extents[2*i] - 2*step[i];
extents[2*i+1] = extents[2*i+1] + 2*step[i];
}
for (int i=0; i < ndims; i++){
step[i] = (extents[2*i+1] - extents[2*i])/(dims[i]-1);
}
vtkPointData *inPD = in_ds->GetPointData();
vtkDataArray *in_data = inPD->GetScalars();
vtkPointData *outPD = sgrid->GetPointData();
vtkIdType npoints = in_ds->GetNumberOfPoints();
cout << "I have data: npoints: " << in_data->GetName() << " " << npoints << "\n";
int bin[3];
float delta[3];
for (vtkIdType i = 0; i < npoints; i++) {
in_ds->GetPoint(i, x);
/* find the corresponding bin */
for (int j=0; j < ndims; j++){
delta[j] = (x[j] - extents[2*j])/step[j];
bin[j] = (int) delta[j];
}
if (ndims == 2){
bin[2] = 0;
}
/* 5 contribution */
data[bin[0]+ dims[0] * ( dims[1] * bin[2] + bin[1])] += 1;
}
float check_nptlc = 0.0;
for (vtkIdType i=0; i < grid_size; i++){
check_nptlc += data[i];
}
cout << "nptlc " << check_nptlc << "\n";
cout << "npoints " << npoints << "\n";
return NULL;
}
// ****************************************************************************
// Method: avtBinnerFilter::RefashionDataObjectInfo
//
// Purpose:
// Tells the output that
//
// ****************************************************************************
void
avtBinnerFilter::RefashionDataObjectInfo(void)
{
cout << "Refashioning\n";
avtDataAttributes &inAtts = GetInput()->GetInfo().GetAttributes();
avtDataAttributes &outAtts = GetOutput()->GetInfo().GetAttributes();
if (pipelineVariable != NULL){
outAtts.AddVariable(pipelineVariable);
outAtts.SetVariableDimension(1, pipelineVariable);
outAtts.SetVariableType(AVT_SCALAR_VAR, pipelineVariable);
outAtts.SetCentering(AVT_ZONECENT, pipelineVariable);
outAtts.SetActiveVariable(pipelineVariable);
outAtts.GetTrueDataExtents(pipelineVariable)->Clear();
outAtts.GetTrueDataExtents(pipelineVariable)->Set(drange);
outAtts.GetCurrentDataExtents()->Clear();
outAtts.GetCurrentDataExtents()->Set(drange);
}
outAtts.GetEffectiveSpatialExtents()->Set(extents);
outAtts.GetCumulativeCurrentSpatialExtents()->Set(extents);
outAtts.GetCumulativeTrueSpatialExtents()->Set(extents);
outAtts.GetTrueSpatialExtents()->Set(extents);
outAtts.SetSpatialDimension(inAtts.GetSpatialDimension());
outAtts.SetTopologicalDimension(inAtts.GetSpatialDimension());
}
// ****************************************************************************
// Method: avtBinnerFilter::VerifyInput
//
// Purpose:
// Verifies the input
// ****************************************************************************
void
avtBinnerFilter::VerifyInput(void)
{
cout << "Checking Spatial Dimensions: " << GetInput()->GetInfo().GetAttributes().GetSpatialDimension() << "\n";
cout << "Checking Topological Dimensions: " << GetInput()->GetInfo().GetAttributes().GetTopologicalDimension() << "\n";
}
void
avtBinnerFilter::PostExecute(void)
{
avtPluginStreamer::PostExecute();
/* need to put the data together */
#ifdef PARALLEL_IO
cout << "In PostExecute : " << PAR_Rank() << "\n";
#endif
vtkFloatArray *out_data = vtkFloatArray::New();
out_data->Resize(grid_size);
out_data->FillComponent(0,0.0);
#ifdef PARALLEL_IO
SumFloatArrayAcrossAllProcessors(data, out_data->GetPointer(0), grid_size);
#else
memcpy(out_data->GetPointer(0), data, grid_size*sizeof(float));
#endif
// Create the structured grid.
float x[3];
#ifdef PARALLEL_IO
cout << "making the grid: " << PAR_Rank() << "\n";
#endif
sgrid = vtkStructuredGrid::New();
sgrid->SetDimensions(dims);
vtkPoints *points = vtkPoints::New();
points->Allocate(grid_size);
for ( int k=0; k<dims[2]; k++){
if (ndims == 2)
x[2] = 0;
else
x[2]=step[2]*k + extents[4];
for (int j=0; j<dims[1]; j++){
x[1]=step[1]*j + extents[2];
for (int i=0; i<dims[0]; i++){
x[0]=step[0]*i + extents[0];
points->InsertNextPoint(x);
}
}
}
sgrid->SetPoints(points);
points->Delete();
out_data->SetName(pipelineVariable);
sgrid->GetPointData()->SetScalars(out_data);
sgrid->GetScalarRange(dataRange);
drange[0] = (double) dataRange[0];
drange[1] = (double) dataRange[1];
#ifdef PARALLEL_IO
UnifyMinMax(drange, 2, 0);
#endif
cout << "drange: " << drange[0] << " " << drange[1] << "\n";
out_data->Delete();
out_data = NULL;
sgrid->Update();
#ifdef PARALLEL_IO
if (PAR_Rank() == 0){
#endif
avtDataTree_p tree = new avtDataTree();
tree = new avtDataTree(sgrid, 0);
SetOutputDataTree(tree);
sgrid->Delete();
sgrid = NULL;
#ifdef PARALLEL_IO
}
#endif
RefashionDataObjectInfo();
}
@@ -0,0 +1,64 @@
// ************************************************************************* //
// File: avtBinnerFilter.h
// ************************************************************************* //
#ifndef AVT_Binner_FILTER_H
#define AVT_Binner_FILTER_H
#include <avtPluginStreamer.h>
#include <BinnerFilter.h>
class vtkDataSet;
class vtkStructuredGrid;
// ****************************************************************************
// Class: avtBinnerFilter
//
// Purpose:
// A plugin operator for Binner.
//
// Programmer: cristina -- generated by xml2avt
// Creation: Thu Mar 16 15:04:17 PST 2006
//
// ****************************************************************************
class avtBinnerFilter : public avtPluginStreamer
{
public:
avtBinnerFilter();
virtual ~avtBinnerFilter();
static avtFilter *Create();
virtual const char *GetType(void) { return "avtBinnerFilter"; };
virtual const char *GetDescription(void)
{ return "Binner"; };
virtual void SetAtts(const AttributeGroup*);
virtual bool Equivalent(const AttributeGroup*);
protected:
Binner atts;
virtual void RefashionDataObjectInfo(void);
virtual void VerifyInput(void);
virtual vtkDataSet *ExecuteData(vtkDataSet *, int, std::string);
virtual void PostExecute(void);
virtual void PreExecute(void);
private:
vtkStructuredGrid *sgrid;
int nprocs;
int ndims;
int grid_size;
int dims[3];
double extents[6];
float step[3];
float dataRange[2];
double drange[2];
float *data;
};
#endif
@@ -0,0 +1,519 @@
/* XPM */
static const char *icon_xpm[] = {
/* width height num_colors chars_per_pixel */
" 256 256 256 2",
/* colors */
".. c #000000",
".# c #030b01",
".a c #061101",
".b c #081502",
".c c #0b1b02",
".d c #101f03",
".e c #0e2103",
".f c #132b04",
".g c #112503",
".h c #1a3505",
".i c #223b05",
".j c #303f04",
".k c #274606",
".l c #394c05",
".m c #375606",
".n c #2c5308",
".o c #3a680c",
".p c #27661a",
".q c #791428",
".r c #771b37",
".s c #6b1b37",
".t c #7a0f1f",
".u c #5b2c59",
".v c #5c264e",
".w c #5b356b",
".x c #583366",
".y c #5b3973",
".z c #573b78",
".A c #4e3972",
".B c #692348",
".C c #672b57",
".D c #772347",
".E c #762b58",
".F c #71305d",
".G c #63356b",
".H c #6b3163",
".I c #673468",
".J c #633973",
".K c #633d7b",
".L c #6b3973",
".M c #6a3c7a",
".N c #773367",
".O c #763b77",
".P c #6e2f60",
".Q c #721f40",
".R c #404d04",
".S c #475705",
".T c #515e05",
".U c #496507",
".V c #556906",
".W c #5a7508",
".X c #49780e",
".Y c #667706",
".Z c #6b7704",
".0 c #516b33",
".1 c #6f417b",
".2 c #6f716e",
".3 c #5c5d61",
".4 c #6e3f80",
".5 c #553f80",
".6 c #4b4386",
".7 c #584387",
".8 c #574b96",
".9 c #4f4b96",
"#. c #5a52a5",
"## c #5c58b1",
"#a c #6b4183",
"#b c #664488",
"#c c #684b96",
"#d c #764487",
"#e c #774b96",
"#f c #735398",
"#g c #6754a7",
"#h c #685bb6",
"#i c #7853a6",
"#j c #785bb6",
"#k c #724fa0",
"#l c #7464b5",
"#m c #7764c7",
"#n c #7269d0",
"#o c #7971e2",
"#p c #31902d",
"#q c #34a838",
"#r c #1d9036",
"#s c #2db347",
"#t c #13ab4c",
"#u c #27d35d",
"#v c #548915",
"#w c #4a9525",
"#x c #50ad2f",
"#y c #688609",
"#z c #768806",
"#A c #70950e",
"#B c #75a814",
"#C c #6cb22a",
"#D c #67952f",
"#E c #65a855",
"#F c #68cc33",
"#G c #59d854",
"#H c #3dc13e",
"#I c #3ff293",
"#J c #8a0206",
"#K c #870b18",
"#L c #970205",
"#M c #960b17",
"#N c #90101d",
"#O c #871428",
"#P c #871b36",
"#Q c #961427",
"#R c #971b36",
"#S c #900f20",
"#T c #a70205",
"#U c #a70b17",
"#V c #b70205",
"#W c #b50d16",
"#X c #a71427",
"#Y c #a71b37",
"#Z c #b71b38",
"#0 c #b61326",
"#1 c #a02339",
"#2 c #862447",
"#3 c #872b56",
"#4 c #972447",
"#5 c #972b57",
"#6 c #8f3259",
"#7 c #863468",
"#8 c #873b77",
"#9 c #973467",
"a. c #963b78",
"a# c #8e2f60",
"aa c #a72447",
"ab c #a72b57",
"ac c #b72447",
"ad c #b62b57",
"ae c #b03555",
"af c #a73467",
"ag c #a63b77",
"ah c #b73467",
"ai c #b73b76",
"aj c #ab2f60",
"ak c #9e1f40",
"al c #8e4478",
"am c #b14775",
"an c #b54459",
"ao c #c70204",
"ap c #d70204",
"aq c #ce0d17",
"ar c #ce172f",
"as c #d12734",
"at c #e70205",
"au c #fe0204",
"av c #f50508",
"aw c #fa0b16",
"ax c #f01117",
"ay c #f91626",
"az c #ec1930",
"aA c #f82832",
"aB c #c72346",
"aC c #d12b51",
"aD c #c73567",
"aE c #c73c77",
"aF c #d7386f",
"aG c #ed2b4e",
"aH c #e63668",
"aI c #d81f40",
"aJ c #cd4775",
"aK c #fb4951",
"aL c #f14c70",
"aM c #e85d68",
"aN c #943f80",
"aO c #864487",
"aP c #864b97",
"aQ c #974487",
"aR c #964b97",
"aS c #8f5595",
"aT c #8754a7",
"aU c #885ab6",
"aV c #9654a7",
"aW c #975bb6",
"aX c #8d4fa0",
"aY c #9864b9",
"aZ c #8f68ae",
"a0 c #a64487",
"a1 c #a74b96",
"a2 c #b64588",
"a3 c #b74b96",
"a4 c #af5496",
"a5 c #a655a7",
"a6 c #a75bb6",
"a7 c #b755a7",
"a8 c #b65bb7",
"a9 c #b04fa0",
"b. c #a764b9",
"b# c #b16bb1",
"ba c #a46797",
"bb c #8864c6",
"bc c #9764c6",
"bd c #986bd5",
"be c #8c70d5",
"bf c #9077ec",
"bg c #a765c7",
"bh c #a76bd6",
"bi c #b565c6",
"bj c #b074d3",
"bk c #a675e5",
"bl c #ab79e9",
"bm c #9e5fc0",
"bn c #c74587",
"bo c #c64b98",
"bp c #d24c8e",
"bq c #c555a6",
"br c #c759ad",
"bs c #ce6bb2",
"bt c #ea568b",
"bu c #f46b91",
"bv c #eb71ac",
"bw c #d16b93",
"bx c #cb77ca",
"by c #e17cc5",
"bz c #cf3f80",
"bA c #879706",
"bB c #8b9709",
"bC c #97a706",
"bD c #8eb00e",
"bE c #a7b705",
"bF c #aab409",
"bG c #94b22a",
"bH c #89a765",
"bI c #95c715",
"bJ c #b1c90b",
"bK c #a2db28",
"bL c #9ae455",
"bM c #c9d509",
"bN c #d3e70e",
"bO c #ebf10b",
"bP c #daea2c",
"bQ c #dff24c",
"bR c #8e928d",
"bS c #adafad",
"bT c #a692ac",
"bU c #9286f8",
"bV c #b48bd0",
"bW c #b18def",
"bX c #aea2e4",
"bY c #e58ab0",
"bZ c #cf8cd3",
"b0 c #cc93e7",
"b1 c #cfabd5",
"b2 c #d2adf0",
"b3 c #ea8fd1",
"b4 c #ebb0ed",
"b5 c #eba4da",
"b6 c #d0d0d1",
"b7 c #eeccf6",
"b8 c #e1d6f3",
"b9 c #b2d2a5",
/* pixels */
"aWbjb4aW.7.5.A#ibVbf.y.ybbaU#i#c.5.A#cb8.z#fbVa6b0a8bhbgaW#i.4.xbkb0bmaVaX#k#k#e.1.K.w.1b4aW.waPaO.O.ubmaT.4.4.w.x.1b4bgaT#baUaTbhb4b0aW#k.4.xa6aV#d.y.xaPaQ#8a3a9aXaX.4.O.x.1b8.H.H.u.1baa4.v.HbZa7a4#8.F.Ca3a2a0#9.N.B.Ca.......................aBaBaa#P.rae#X..............................atao#Janazar#Xb6aGadab#2.r#2b4...q#O#YaB............#Kar#0#Q#O#KbY....................#U#M.t#MaA..........................................................#L#Jas..................................................................",
".6bjbjaW#d#c#g#maT#d.w.4bf.4bhbcaU#i.8bb......aVaVbhb4b0aV#e.5.xbcbcaTaT.4.J.J.4.y.x#daZaYaS.....I.ubhbhaWaX.4.z#daZbmaT.4.y.4.4bhb0bhaT#k.5.w#i#e.4.xbaaW#8.Pa9a1.O.4.4.u.1b#bg.....N#8.H.C.Fa7a1a1a.#7.C.Ha.a.a.#7.C.FbT#3..........aIac#O........#R#P#Pamar#S#Q..............................#L#0aAbvar#QaGb3aC#P.r#6bw....aGaB#R..................#S#O#OaC........................#M#Wax.....................#auavao#L................................................................avao..................................",
".8a6aV#e.y.xaWaT.4.A.yaSblbkbhbdaU#i#b.y........aObibjb.aT#d.y.waX#i.4.4.y.y.4.J.4.4aPaW#eb7a6aT.4bhb7bjaV#e.1.w....ad#b.y.ybV.ybmbcaT#e.4.A.yaT.4.x#bb.aP.Pbybxa1bia6aR.4aR..#Z..............#ZaN#8#7.C.FbV#U.N.E.C.Eala7#9........a3a3aQ#7..........#4aa#0#Xar#O.....#..aiag........aIar#Qazar#X..aAaz#Yah#5aH#Z#Raa#4....aGbuaB#Y.q....................ar..............ayawaq#L..............................auaAaw#V#L.............................................................#aKawao#L................................",
"#gbb#e.4.x#d.4#b.J.ybTbVbhb7b0bc#j#k#b.7.4........aWaWaT#e.z.x#aaT.7bg.w.1#daT.M.1.w.x.1bZbZbgaX.4bjb0bjaT#c.y.yaPaR.O#d#baTbgaUaUaT#e#b.y.JbTaWaWaT#daY#ea7bxbra8b4bxaR.O.I.OaB#O....bnag.E....#O.H.C.CaSa1bqb4.P.Eala0#6am......bqbybra0#7.C............aGaGar#Q....btbzaEaf#3.B..aGbtar#Q#Rar#Q#Qarbzbtai#5.D#Y#O#4aC....aHaG#Z#P.q..................................awaKaGao#M#U..............................auat#T#L............................................................auavap#V#J................................",
"bT.J.M.x#fbV.L.J.yaXbmbkblb2b2bcaT#e.4.K#b........aT#e#e.4.x.1b6.4bjbhbmaX.4.w#c.7.G#daXbhb0biaP.4bmbma6a5aXaO.4aTaP.O.u.J.MaT#e#b#e.4.w.1aZb0bibgaV#e.4.4a1a1aQa5a8aRal.H.uaOaraCaabvboaf.E.E........#8#La3bsbsbq#7.E.C#7........bobybsa.#7.B#7..........aGaL#Z#K...#bpbyaiaf#2.Bbpbpai#9.B#1#X.t#1..bpbuah#4.D#3#Pbu......aBac#1.q#1..................................axaxaq#T#K#W............................axaKat#V#J............................................................apap#V#L#W................................",
"beaSaWbxa6#d.x.Mbb#i.8bhblbkbdaY#e#c.5.z.7#i.........4.4.x.1aZbm.5bxb2aW#i.4.w.4#b#ebb.4bmbmbgaWaXbia8a6a5aRaO.4.xaO.L.xaRar.K#b.x.y.5.y#faYbhb7bjaTaP.4.yaQaN#8a5aRaO.1.u.Ia5bza3a0#7bna#.E#3............a0boa0a1aN.N.Ca0........a3a2a0#7.E.Cal#R........asar#X.qaraEbpaJaf#3.B.Dbpbyama#.DaC#N#Qb5..aEah#5#2.s#5aB........#Y#R#O.qaM..................................aqao#U#K#Uaz............................aAayap#T#Jauat#V........................................................#L#J#0..................................",
"....aVaVaO.L.waV#c.7.5bcbcbcaU#k#b.z.y.K#faU........#c.4.1#eaW.4bmbmaX#e.4.w.waP.....I.GaVbhb0a6aXbib4bja5aPaO.4.u.O.u.La5bdbc#i.z....#P#2adbxbxbj#i.4.y.yb1.H.NaOaO.L.I.Ib1azbybsaQ.N.F.E.Ba2............bya0bra9aR#7.Pboboa2a..Ea0a.#7.P.valba#R.q......#R#X#K#1....ahaf#6.D.B#2bnai#6#3.Bag#Qas..ayafab#2.s#6amb6..........#R#RaB................aGaGac#Q..............#L#M#0az.................#............avap#V#J#WaKat#V#L..............................................................................................",
"......#d.M.Mbaa6..#cbfaUaUaU#i#c#b.A.A#caZbb..bkbdaU#k.5aTaX.4.ybhbhaUaT.4.yaVaP.4bhbb#ebmaV#ebgbibyb0bxaVaO.4.I.u.O.1b7bhb4aWbWbc#i.5....aWbgaWaX#e.4.x.KaZ..bi#7.I.L.Oba.ubqbya7#8.P.C.Bbw......bpbnaf.Eadbrb4a7aQaNbqbvbsa0a..E.B#7.F.C.EbZac#P#R......boboa2a..E..#5#6.D.D#6bsag#9.E.Bal#0....azaK#2#2.Q#6bpaa#P........aGaHaI#0.q....aGaGaI#Z#QaGaL#Y#O#Y....ayayax#W#J......................auavao#J......ao#V#L#LaMawao#T#L..............................................................................................",
".........ybhbcaU#i.z#j#i#i#k#c.4.A.A.7bVb1..bWb2bcaU#f#b.7.4.Jbhb0bgaU#e#a.x.4aX.4.wbibib#aV#e.Ka6bxa8a5aRaO.L.x.x#db#bjbhbhbkb4aU#e.7#c....aVaT#e.K.x.1aS....aTa9a8a1#8a8a5aR.OaN.N.C.N#9........bybra.a3a7a7bsa7a..Obqb3bsam#8.F.B.E.E#7a0ag#3.B#Y.....#bvb5a0a..E.Bai.D.Da#bnaG#3#3.B#7am.#.#..bnaiaf#J#5aLaC#1.rbS......aGbuaB#Y#O....aGbYaB#Y#O#O#Z#R.qaB....ayaMar#W#K.#..........avap#VaqavaKawao#L.#auauap#T#Tapatap#V#J#V..auavao#J....................................................................................",
"........bhb2bcaU#e.4.y#j.4#c.5.y.x.z#ib1bhbkb2b2bc#j#c.z.5.4bhb2b2bjaT#e.K.y.4aP.4.w.Lb4bVaX#d.Ga5a6aVaPaO.O.I.u.IaSbbaTbc#ibdbc#e#b.5#f.L..#e#e#b.1.yaZbi.....4.4aQaNbrb4a5aO.O.xbiaWaX.M.D....a2a2#9brb3a1a5a1aN.N.va3bqa2#8.N.C.CaQbzb4a2ag#6.B......bobvbsa2#8.E.Caf#5#3aFah#9.DaEaga.aK..bzbvbqai#9#3.Dadak#P.rae......aIaI#Z#Q#O#ZaIaGaGaC#X.q#P#Q#Oaa......azar#0#M#Kaq........auawat#V#J#Tatao#T#JapaAaAao#Latat#V#T#J#0avauaAax#V#L....................................................................................",
"......bhb2b2bh#i#c.zbcbcaUaT.4.5.KaZbcbd..bdbkbdaU#c.8.z.5aUbhbjbgbcaP#e.y.w.4.4.L.w.MbiaW#d.M.xaRaRaPaO.O.G.u.Lbaa5#k#c#c#caU#i#c.y#baU.Ia8bi.J.M.yaTbg.waO.......Oa6a8bia5aO.Ibib2aWaP.1.x......a..NbobybvaQaN#8.H.Ca0a0a.#7.C.C.NaCbpboa2a#.E.B#9....a2a3a0#9.E.v.Eafbzbzbpaiaj#2.Baiaf.E.Bbzbybvafa#.D.Dak#P.samb8......#Z#Y#P.tae....aB#Z#Y#O.q#1#P#1...#azaraq#0#M#Kan..........ayaAapaxar#W#U#T#Jas..atao#T#L.e#T#Jaq#W....atatao#L#Maxap#T..............................................................................",
"#m#...bdbjbdaU#c#bbhbhbdbb#j#c.5.zbb#j#k.5bbbbaU#i#c.y.z#ibbaWbmaUaT.4.K.x.yaT.4.waWaT#eaP.4.w.x.4aOaO.4.G.I.x#fb4b..z.5#fbj#k#ba5.zbT.O.uaVa6aVaP#b.1.x.1..........a7a5aRaO.Ia8a5aR.OaO.L.wa5.4.x.B.Ea3a3a0.N.N.P.C.Oa.#7#7.F.C.Nb7..a2ag#9.E.s.EaiaL#0agaga..N.B.Fala#bzbybvah#5.D.Qa2#9.E.BaEbnai#5#3.B#3#P.ranaCaCaCaa....#O.q#1.#....#Y#Y#O#P#Pbt....aAaLaz#0#S#M#J#Z...........#avatayayar#0#M#Laq....#V#L#JaK.....#..........#V#L#LaMaAao#Lao................................................................at#V........",
"#m#g.6aWbcaT#k#bblb2bXbdaU#i#c.7.AbcaT#e.4#j#i#i#c.z.z#fb8#maTaTaP#d.1.x.1aZaYbgbgbmaU.4.4.J.w#fbZ.L.O.G.u.Ialb#a5....#d.y.1bda8a6aR.O.G.NbhaXaP.4.L.u.1bab.aV.4....b3aOaO.Oa8bra8aRaO.u.x.MaR.O.I..aAa0aN#7.N.H.H.OaR...N.E.valbs..aL#9#9#3.D.Eb5aGaI#Y.t#7.E.B.Eama2.DaEbpaE#5#5.Q.Dafa#.D.Eaiahaf#3.B.Banac#PaDaHbtaC#4.raHbuac#R.q......#P.qanaC......aAaGaG#X#K#Q................aoayaLaLaz#W#M#U........#Tat....................#T..atap#T#J...............................................................caxauap#J......",
"#h#..6.8#i#e#c.zb0b7b2bc#j#k.4.J.y#caT#ebmaWaTaP.z.z#cbXbc#g#j#e#e.4.1.K#db2bhblb0bmaT#d.4.xaSb......x.O.I.4aSaVbdbc#j.7#c..bib4biaO.N.xbhbj.4.4.L.I.1bTaYa6aX.4.y.4a6aVaO.Lbrb4a8aQ.O.I.1aZ.1.u#daGaH#8#7.F.v.Pbaa1#8..br#7.Na0.B#2btbt.E.E#6bn..ar#X#O#Z...E.E#9a2.B.BahahaEaEaf#5.Da#.B.B#7a##5#3.D.DbaaEaa#P#PaHaLad#R.raHaC#Y#P#P....................arar#0#N#Kas..................axaAaz#W#U#K#X....................................#T#L#Jas..............................................................auawax#V#J......",
"##.8.6#g#c#c.zbkblblbkbd#i#g.7.y.z#caTbhbhbmaV#e.K.KaZbc.8.8.A#c.4.5.yaSaYaWbhb2b2bgaT#e.4.w.4.........J#daWaqblb2bb#i.7#c..a8a6aR#8.x.LbmbmaU.I.G.LaZa5b2bhaX#a.w#abiaVaP.4.Ga6aR.4.H.u#daW.G.1a6ar#0b0.F.C.Fa4aQ#5.Qa2boa0a#bna2#9.Eae#3.sam......#O#Y......arar#X.t#5ajbzbvaEaj#5.D.D.B#6b6aj.D#3.Bambnaa#1.sabaDad#4.q#PaB#Z#R.q#R......................#X#N#Nanaz..................aqaraq#U#K#Xas..........................................................auauap#L........................................atatauavap......",
"#..6.7#l...z.4bdbdbcaU#j#c#c.z.A.7#jbhb2b2bcaT#d.K.w#e.7aP..#gbl#b#e#caT#c..bibjbgaY#e.4.y.w.4............aLaqbkbVaU#c.z#c..aVaP.K.I.Ga8aTaXaT#e.z.xa6bja6aV#d.1.x#dbxaV.4.I.IaRaO.N.u.Ia5.N.Ia5....aWbgaX.1.xaP#5#2.Dboa2a0a#b4a2#9.E.D#2am....................#X.tac..bzbvbvbnab#2.Q.DalbaaE#5.D.D#4aaaa#1.r#2aDaFaCac#Pb3#R#OazaIac#RaCaDaa................#S#Xaz......................#0#U#K#NaM..............................................atao.........#aKaxap#T..........................................auaKauap#T....",
".7.9#lbU..blbhaWbbaU#i#k.4.4.A.z#faZbhb0b0aWaP.4.y.y#e.7.z.y.Gbb#j#f.A.7bbbeaWaWaT#e#d.y.x.yaT.7..........aq#MbcaU#c.z.zbhbgaWaT#k.waVbxb4#d.4a8a9aRaO.IaX#d.4.x.JaWaVaO.M.x.GaV.L.N.Ib1a8.N.C..bqa3a0aN.N.I.1#5#2.Qbwb3bra.#7bqboa1aN.N#5.......................#bqa3a2aEaLaJah#6#2.Q#2aJai#5#3.Q#2..#Paiaf#5aDaHbvbzac#4.r#S#RaLaKar#Q.qaCaa#P......................azar#X................#M#M#W..............................................awaAap#T......avawat#V#L#V........................................auawav#V#Jao..",
".A.8bXbfbdb4b2#iaU#i#k#k.K.A.7#lb8bbbgbhaW#e.4.z.x.1aT.z.5.w#d#g#c.8.7bVbdbdaTaX#e#d.K.x.1b#aY.7.8.7......#M#M#i#c.5.zbib0b4aWaP.4.w.4bxbxa5bra8a8aR.4.O.u.1.y.1bSa8a5aR.4.x#d.I.I.Lbaa5a..H.Ca7b4bxa0a..N.Cb..D.Daibobsbq#9.Ebxb3a0#8.H.H........................b3b3a0ahahaf#5#3.B.Qafaf#9#2.Q#3b7bzbzaEaf#3.QaHbtaFak#P.rab.Daa#P#Y#Q.qaD#4.raa............ar#Z..aGaLar#X#M................................................................auaAaAao#T#T....apapao#L#Tax........................................atatao#T#J....",
"#.bUbfaUbdbkbc#f#f#f#c.4.5.7#bbVbj.zaWaWaT#e.4.w.w#faZ.y.4aTaS...z.7#ibdbWbd.4aP.4.4.1.yaZb6bgaU#e.7.............7.zaZbhblbZaW#ea8a8aVaR.O.Ibrb4bxaR.4.I.v.w.1aWbibia5aRaO.I.I.I.Ea1a1aN.N.ualbqbybsa0#8.F.E........a2a0a.#7a7brbsaQ.N.C.P....................a1bobvbqa.#5aj#5#2.Q.QbabY..#3.Q.Dbw..brbyai#5.D.DaCaCabak.r#2#5.raa.r#1.t#P#1.r#P..........aGaGaI#0#KaAaAaq#M#K.#........azar..................................................atavap#T#Jaq.bauap#V#L#Las..........................................#T#T#L#LaK....",
"aZb4bd#jaWaU#i#c.z#b#b.5.y#faZbc.y.yaTaP#d.4.w.y#db8aW.zaTbab.......bfbbbbbgaW.J.4.z.y#faYaWbdaU#e.5.K..............a5bmbmaVaTa8b3bxa5aR.O.GaOa8a7aN.4.P.uaOaPa8bxb4a8aR.O.N.G.u#8a.#8.N.C.FbZa3a3a0#8.N.B.FaQ....a2aga.#7.Ea1a1aQ.O.P.val..................bqbra0a2a0#7.C#2#3.B.Qanbw......#3....a2bnbnaj#3.B.Dacaa#2.s.rbw#4.Q#5.q#1#QaM.r.rbY..........aAaLar#X#K#Qar#X.t#X.......#aAazar#X.t..............................................aoao#T#L#0#LauaKat#V#Latao..............................................#Vap......",
"bdbWbbbfbe#k.4.4.z#fbV#c#b#iaU.z#lbhbh.4.4.x.x.1bTaY.y#fb2aW#O#0..blb2#gbxbgbmaT#d#b#baPb2b4bhaT#c.K.z..........aE#5aOaVaTaP#ea8b4b0aVaO.L.I.La1aP.O.H.u.Hbaala8a8a6aVaO.G.I.1.HaRa6.P.P.1a4..a0aQa..N.C.Fal........a#.E.E.B#8aN#8.P.C.1b7..................bsbsa.a.#7.P.v#6.D#5#6ah................ahafa#.D.Q#6..#P.r.ran#4.Q#2am#2anaB#X#4..............azas#0#S.t#Z#X.t#NaM......aAbuaLaq#X#K................auaAat#L........................#J#T#V#Vauawaxap#T#Lavap#T......................................................",
"..bbbWbU#o.5.5.A#lbh......bUb7.4bhb0b0aW.z.K#e#iaW.A#fbV#0#S#QbfbebmaU#ibhbcaU.4.K.w.4bhblbhbc#e.4.A.1........btbn#5bh.N.4.4.Ga8a8a5.4.O.I.u.OaOaO.N.u.1b1aVa5aVa5aRaO.O.u.IaSa1aQaWaT.J......a.#8.N.F.Palbs..........#7..a#ag.P.N.v.1bs........a5aN..bna2af#3a0#7#7.E.valb#bubtab#2#2..............a##5.D.Dalbs.....#ad#4.D#PbT#PaJ#M#Z..................ar#0#Q.t#1aI#K#X..........azaGar#0#Q.tar..............avaKap#Tauap......auavap#T........atao#L#Watap#T.t#WaAao#T#T....................................................",
"..bfb2bX#m#g.6.8..........bUbfbfbhb4b0aU#e#b.y#b.4#eaU#m.8#Xblb7bhbhbhbhbjaYaT#e.z.y#ebcbcaU#i#c.y.y#f..blbd#j.7abbmbgaVaX.4.Ja5aVaP.1.1.u.IaR.O.H.u.Ibaa4a8braOaPaO.O.G.xaSb4a5aQ.N.H.w.4aXa7a9.E.N.CaQa7aQ.N............#9#7.Ebq#8a0a..N....a8biaQbpbya2a..N.B.F.N#3.Na0adaFad#4.s#5............bnai.E.Q#9a2..........#2.r#5#Paa..........................#Q.tasaG................arar#0#M.t#N................avap#VavaKap#V..auaAaAap#T#T......#T#L#Lax#V#T#L#Uavap#V#Jaq....................................................",
"..bfbf#m#g.9.6#l......#obe#h#m#nbgbjbc#e#c.z.y#e#h.7.7#m#g.6bfbkb2bjbhb7b0aUaT#c.z.zaWaTaT#i#b.1.y#fb8#gb7bW#g.5bibibgaWaX.4.waRaOaO.L.u.Ibab4.x.L.Halba.Aa8b3bx.L.L.x.x.1bZb0a1aO.H.H.waVbrbxa9aR#8#8bqa7aQ#8.v.............E.Ebxb3a1a..P.Fa8bybia0bob3boa.#3.E.Fa4......#Xaa#4.r#2aD..........bobyaEahaf.E..............axao#Laq..............................as#Z..azazar#S......#0#0#N#N#Nbu........awaq....ao#T#Javav#V#L#Vavavat#V#J#W................#T#W#Wao#V#L#Tav....................................................",
"..be#m#h.8.6#lbe....bfbf#o#m#g.6aWaW#i.4.1.x.1aZ#g.6.9#j.7.zbhb0b2bcbhbjbhaW#e.4.ybhbmaWaT.4.y.y.1bXbh#g.7.G#gbgbxb7bZaV#e.4.y.J.O.H.u.H.1bZ.K#b#j#i#c.AaZa5a5aQ.O.G.OaOaRa5a5aO.O.u.N#dbja7b3a8aQ.N.u.NbYaQ#7.C.........#bnaga3bqa4aN.N.C.Fa5a9bza2a2a2aja#.D.E#9...........D#P#4aJ#O#Ra2af.E..bpbzbpaiaf#3.B............az#M#W..............................aKaG#ZazbuaG#0#S........#K#M#Rasan......awaAax#U#J..#Laqatao#T#Jaxapap#V#L#LbQ......................#L#T#Uay.............batao....................................",
".7bh#..8.6#cbdbdbc#j#cb2be#h#..5aT#k#k.4.w.AaZb7.6.6#g.8.A#gbgbhbhaUbcbcaT#e.4.zbjbhbhaUaP#c.w#baTbc#j#f.7.8.5bibjblbjaX#e.K.w.M.I.I.IaSaS#b.z#baW.z.yaTbdaQaO.O.I.Lb1....aRaN.O.C.1aSb.aPa3a9aN.O.P.uaOa0#7.F.CaQaD#2..bpb3ai#7a0aN#8.P.FalaObpb3a2a9a3a1aN.N#3..............aHaH#1.qbobra..E.Ea0bwbvai#5#2.B..........aGaG#X#XbS..ayar....................aGaHaG#XaGaGas#X#K#X........#L#Jas......awaAaAaq#M#J....atao#J#LaA....#T#L#JaA............................................aKav#V#L..................................",
"#b.Abc.8#.bkb0bVbb#k#b.A#n#..8.6#h#b.7.w.y#eb1.7.6#.b8.7.8bXaUbmaUaTaWaT#i#c.y.Ab0b4bVaU#e.4.y#bbfbb#g#b.5#g#iaWbgaWaP#e.1.x.w#daWbdaU#i#c.y.y#l#e.5.zbT.....Oa8a5aRaO.ubm.L.O.P.Cb#a9#e.4a1aQaN.N.v.Ha4#8.N.v.Fa2bn#5.Dboboa9a9a0a..C.Pbaa4..bpbnahbsbya0a..N.B..............ac#1.qaabwa2#7.Ba.a2bzaE#9#3.B.E......aFaFad#4#K#1b6ayaK#W#K.....#azar..........ar#Y#Oarar#X#K#Oas......axaqaxaq......aqaqaq#T#J#W....#T#J#W....................................auap........avao......avavap#T#L..................................",
".7.5blb2aUbhb2bWaU#c.7.z#j.8.6.7#n#c.y.5aTaW.8.5#lbW.8#fbe....aT#k#k#e#k#b.K.4bhbjbjbjaP#e.J.A#bbb#i#c.A.7be#iaWaVaT#e.4.w.x.yaVaO#j#i#e.7.zaZbc.BagaT..a5a5aO.Na8aRaO.IbcaT.4bmaXaP#e.J.J#8.O.P.H.Fb1#7.N.P.Fb5bzaj.D#9a2afbybZa0#7.C.Fa4....a2afbqb3bva2#8.P.C#P......aGaI#Y#R#O#PaDag#9.E.Na2..afaf#6.D.Ealad#4..bvbuab#4.sbRb6ax#W#K#MayayazaG#0#M........#Q#O#O#X#Q#N#Oanar#XawaGazaq#Maq#J..awaL#V#T#M#UaG............................................auaKap#T....auaxat#T....apao#T#JbY..................................",
".z.7#mbkblbdbdbb#e.4.z.KaU.6.8bTbe.7#daY.#....#g..............#c.4.K.x.K.7.y#caYbcaWaT.4#b.A.yaT#k.8.7.7bV.M#gaXaP#e.4.w.x.1bTbV.L#b#c.z.A#bbV.B#6....bib#a5aO.L.uaO.O.I.Obibia6aVaP.O.w#8.H.P.N.1baa3.E.P.Oa0..#5.D#2..#3a3aQ.NaN#7.C.N.B..bna#a#a3a9a0boa0aN.N#Q......aGaC#Q#P.......E.C.Bbs....#3#3.D.DalamaD#4aFaLaDaa#2.rabb6aHaHad#RaAaGaAaA#0#K#0................#XasaK#0#S#SaGaz#W#K#W#K..axaxap#U#Waxauauap#T..................................auavap#J#V#Lao..avaxao#Lao....#L#Laq....................................",
".z#fbb#ib2bbaU#i#c.5.A#faU.8#lbfbkbb#i.4#cbfbf#m#.bhbmaU#i#b..bf.z.K.z#iaU#b#iaUaU#i#e.4.z.A#faY.5#b.7#mblbf#mbf.4.M.y.x.w#dbg.7.z..bibgaVaP.1a..#..a8b4b0aRaO.H.u.O.I.uaObib7bjaVaO.J.L.N.Ca9aQ.N...#b3bsa..Ea1aQaQ..bqbqa9aQ#8.C.P.val.Cbza3a2aNa0a0brbsa1a..N.C......ac#Y.tac.........#......bzbv.D.D#9aiaLac#PaDadab#2.s.radbSbubtac#4.raqar#0#M#Naz................azaraq#X#Sayarazar#Xaq#1..ao#W#U#JaMayazaq#L#T#T..............................auaAaAao#L#L#U....apap#T#T................................................",
"#cb8bebdbl#i#k#e.7.z#fb8bh#lbe.zb7bc#i.KbUb8bfbhbhbgaYaUaP#b.A#kbe#h.9be.G#i#c.6#e#e#b.K.y#bb1aY#e#ba6a5aR.4#jbb#j.w.4.K#eaV#c.AbTbhb5bjaV#e.J.w....a8a8a5.4.1.x.IaR.xbabmbibxbjaP.4.G.L.Cbxa9aQ.N.Ha0a3a0aNa8a8a1aN.N.Lb4a7aQ#8.P.Nalb1.Pbqbrboa3agbqb3bya0#8.E.B......#R.qae......aGaI#X......aEaEaf#3adaCab#4.raaab#2#2.rbY..aDaHaD#4#P#2#U#M#M#KaM..................#Xar#X#KaybuaGaGar#0.tayawaq#L#LaqayaMazaq#L#Jaq................................atao#L#L#Uax....#L#T#JaA................................................",
"bVbe..bbbcaU.7.7.A#fbebc#k.7.A.7aZ#i#c.ybeaT.4blb4bVaYaT#e.4.y.4.4.4.7.1.xaT.7.5be.5.1.x#fb#aYaW#ea8a8a5aRaO.L.G#bbgbmaX#d.w.zaZ..bxb0b0aXaP.y.w....a5aRaPal.I.x.1.I.1bZaRa6aVaP.4.w.x#da7bxa8aN.P.I.Na.#7a8b3bxaRaO.N.Nbra9#8.N.C.Nb#.Fb7bsbpb4a3aga3a7a4a.#7.C.F..................aGaC#Q#Q....ajaf#5.D.Eab#4#P.Db3.r#2#2am....bRadaa#P.sae#X#0...........................t#Q#QazazaGaGar#M#OaGaLaq#Mawaq#TaAaz#W#M#Mav....................auauap#Lap..#V#L#LaK..........................................auavap................",
"be......#i#k#c.A#caTb2#i#c.z.7aZ#j#k.zbkbdaUbhb0b2bWaW#i#c.K.z#b.8.5.6#h#daWaVaP.4.w#b.4#eb2b0bhbib4bZa5aP.4.L.ubhb7aYaX#d.y.4..aWbgbgaT#d.4.x.1aT..aOaO.O.I.C.1b8.1aRb1.OaXaP#e.1.u.1baa1a1al.N.u#8a9a1aOa8bZbxa1aN.I.H.Oa..N.C.FaQ#8a4a0a3bpbsbqa.a0a0al#7.F.C#7.D................ar#X.taC.......D#2.Bam.r#P.raJ................#R#P.rabaC#NazaGar#XaBak.q..........azazar#X..aqaraIar#X#K#Kazaqawawazaq#W#K#W#L#K#0ao..........auavao....aAaAao#Lao#L..ao..............................................aAaxao#J..............",
".........5#c.A.zaTbd#k#c.z.KaZbd.4.zbkb7bd#jbhblblbcbb#i#b.y.A#b#i.5#cbeaZ.....4bc#i.4.8bgbxaWa8bxb4b0a5aP.4.I.u.Ob0bgaP.M.w.4#j.7aWaT#e.4.w.1#f....a6.I.L.v.1bjaV.I#ebc.I.O.4.G.w.1bVb.#8aO.1.C.Nb7b3a1a5a9a7a1.O.N.H.CaO.N.C.Fbaa1#8.P..a0a2a2a..N#8#8#7.F.C.1bY#5.D................#Q#Z..bpa2#9.B..bzaDab#2ab...................2b6aaaHaDad#PaLar#Q#O#RaGaCas#R...#aLaHar#U.t#U#X#0#X#N.taM#W#UawaMaAaq#W#L#L#J#Uaxapawawaq#T..aKaw#V#L..avaxauap#T#J................................................atavap#T#L..............",
"#i..bf#o#g..#k#caZbe#i.7.7#kaU.8.6#bbkblbd#ebcbdaYaT#k#c.7.A.z#faT.z#f....aWaU#ebjaT#b.yaUaT#ia6bib#a6a6.4.O.x.I.OaW#e.4.w.waP#j#caP#d.4.J.Abab8..biaRaP.1.O.Ibaa5#cbd.......x.L.MaOaV.4...I.H#8b#bxbiaQ.Oa1a1aO#8.I.v.FaQ.C.ualbsaN#7.P#8#7aga.#7.E.C.C.F.Calbaai#5.B....................bpbva2#7.CbzbvaDaj#2.D........ad#4.......#b9aHaDadab#2#1#X#O#RaGbYaC#Z#Q#PazaGas#Y#Q#O.##M#S#S#Oac....#Uawazaq#V#T#Jaq#0aKawawaMayaq#W#Javao#L#T..auaKaAap#T#T................................................#V#V#T#TaM..............",
".5.8bU#n#..6....b8bkbdaT#h#h.8.A#nbfbcaU#i.5aUaUaU#i#d#b.x.y.KaZaW#baT#ibhbVaW#i.z#e.z.y..#ebma5a8a5aRaO.O.x.x.GaS#e.4.J.x#daY#j#c.z.K.4.xaSbV....b0bi.O.G.u.1a6..............bhb4bc#i.4.K....biaVaP.I.O.CaOaO.O.H.u.CbYa9.N.Oa0a0#8.F.Cal...N#7.E.Bala3am..aEbtaJ#3.D#Z..................a2ag#7.BaFbtbuai#5.D.Q....aHbtaD#4.r......bTbzaJaDab#2#4#Q.taGaGaHaC#R.q#PaGaKaI#Z#Oac#Payazaz#0#K......ataq#V#U.t#0....apaoawaAaAao#T#J#W#L#T....atavap#T#Jaq....................................................#V..................",
".5.7.7#m.8.8.#bfbeb4b0#i.5.8bkbd#j#caT#i#c.z#iaT#k#c.5.y.y#bb1b1#b.GaUaTblb0aU#e.z#c.x#e.....4aRaVaPaO.4.N.u.1baaV#d.1.w.1b1bd#c.7.A#l..#d....bea6a6bkbd.M.OaR................bhbjbc#e.y.K..bxbZaVaO.G.4.CbZ.L.I.v.PaSb#....a1aQaN.N.vala1.......N#7a0a2....ahaf#5.D.D#X#Q......bnbnag#5....#7.E.EafaEah#5#2.s#3....aHbvad#4.D.#....aFbvb3aE#5.D.D.t#1aCaCac#Y#Q.q#1aGbuaC#1#Oaa#P#PaLar#X#K........#U#M#J#UaA....#L#Tataxap#V#J#Laq#Mao....aoao#V#L#Wav................................................................auap....",
".7#i.7#m.6#.#o#m#jbhaT#c.yblblbc#j#c.A.4.A.zaZ#e#c.5.y.y.1aZbVaP#d.w.yaUbhbc#e.4.z#f#bb0......aTaOaO.O.G.G.x#db4a6.J.1#daTaU#i.8.A.7#m......b7be#kaPblb4aU#c.A................aWaT#k.4.A#fa8bxbiaX.4.G.MaR.....I.NaQa1.......P#8.N.v.CbY......................#3.B.DaJ.tb5....bpbvbnaf#5.D#3a.#7ag..ajaj#3.s#3ah....aDad#4#2.rab....aDbpaJab#4.Q#2#ZbuaM#Y#Y#P#P#4aCaGaC#0#Q#O#Z.q#Raz#0#M#K..........#U#Vaq......awapaq#W#W#J#UbY#0#M#M......#L#T#Way................................auauap#T........................auaAap#L..",
"#f#j#i.9.6bX..aObfbe#h.6#bbWb2bb#i#b.z#i..#k.....7#b.A#baTbcaX#e#a.w.K#laU#i.4.A.KaUaY.........4.4.O.L.u.I#db#aVbxaY#b.w#j#i#c.z.KbXbdbf#j..be#j.7.Ibkbd#k.7.AaU..............#d#e.4.7aZaYaVa5aR.1.1.xaR.......................v.C.Pa4.......#aFboboa2a.#3......#3..#Oar......bvbvboaf#3.B.E#9.C#7..#2#3.s.Da4......abaaah#5am......ahahad#4#P.Qaj#4aHaCad#O#OaaaMaeaB#Z#R.q#1#P.rad#0#M.t#1....................awaKat#T#L#L#Uasaq#U#K#0.........aavavap#T...........................#avaAap#T#T..................auat#Vat#V#J.#",
"aZbbbcaU#k.7..bUb8#o#h.6aYbkbd#i#c.z.zaU..........bh#b#cbjbg#e#e.K.w.4#e#ebgbbaV#i.4.............w.5.O.LalaO..aWaT#e.y.waZ#c.A.KaZbebWbj#j.7#k.7.7bXaZ#i.4.A#c...................y.K#faY....aOaO.G.uaSa6....................................btbobybsa0a..E.v................aibnbnaf#5.D.s#9.E.C.......D#5ae........bzbzaEaf#3....aH#4#4#5#P.D#6aEab#2aa#4#4#P#P#2aF#Q#P.q#Obw#Pam#Q#Q.t#Qas..........awaw#V....awayao#T#L..aqaq#U#J#Maz.......#auaMawap#V#L..........................avap#V#J#L................avaKat#T#T#L#W..",
"b8bkbb#j#c.5.5bfbf##.8.z#nbb#j#k.7.w.8bb........bkbhbmbmaVaT#d.4.w.w#dblbkbjbcaTaP.5.xbhaU#d....a0be#maT.A#g...4#e.J.JaZaY#i#g#i.7b2bk#j#..A#m#k....#e#c.z.4bda6a5aP.O..........bcaU..a8a6aP.4.O.xaSb.......................................ahbobvbwal#7.E.B............aEaDajaiafa##6.B.Eam.Db#........a2a.........bzb5bnaf#2.BayaGbv.Q.r.s#9aJaDaa#2#2#P.r#2#4aD......#Q..#R#Y......#X..........auawaKax#W#M..ataq#U.taqat#T#L#M#XaK........auauayaxao#L#L..........................#V#T#L#W#J................avat#V#Laqaq....",
"bdb2bb#i#cbmaUaT#e.8.6#l..#k#c.5.5.7bWaU....bf#oaUaTaXaVaP.4#a.w.x.1aWbhb4b2bcaT.4.4.w.4aU.4.z....#h#c.7.8bf..b4bfbe#j.8#j.5.7#c#jaO#j#k.AbhbcaU#i.Kbf.7#cbca8a8a5aRaO.I....bkbWbc#ibib4aWaP.O.xaO..................boa3a0a..Nbqboag.N........a3a2ag#7.E.v.E...........#byaD#5#9#5.E.E.DbTaJ.Dag#3....b4a3#9.E....aEbpbnah#5.D.DayaFaFaaaFaDaLaEab#5.r#2#1................................axao..avaAaxax#W#M#L..#W#T#L#0avavao#Tauavao#L......apavatao#T#Jaq............................#Vao#LaK................aoao#L#L.#......",
"bWbd#jaPbhbhbmaW#i#b.z#o.....5.7bhbbaU#k.4bfbhbhbgaU#e#e.4.4.J.w.1bTbVbhblblbhaPa5aXaO.4bf#n#g......#.#i.#..aVblb7be#j.8.9.7b8a1aO.I.O.8bhb0bkaU#e.z.5bb#ga8b5b5a5aO.4.I.I..bjb0bcaVaVblaVaO.I.w..................bqbqbqa0a..N.Bb3aN.N.E....aEa0ag#9#6.C.Falbqa2#7....aFbpaJ#6.s.D.D.Ealbn.B#3af#3.Ba2bpam#7.Bam....aiah#5#3.s#6bzadaa#PaDaDahad#4.D.ram................................awawao#Uatap#W#W#U#JaM......aq..awap#TauaKaxao#L........aoao#T#J#WaM....auauap#L..........................................#L#V..........",
"bb#j#kbhbhbkbmaU#i#b.z.z....bkbkbhbcaU#e.4.AbWb7bdaU#e.M.4.w.x.1aSbgbmbgbcaWbibga6aVaP.4.G#m#cbcaU#ebkbdaU#i..blbUbe#g.5.8.......NaVaO.Ob0b0bjaT#k.z.zbia6bibxbxa5aO.O.u.L..bcbibgaWaX#d.w.O.x.1..a9a1aQ.H........brb4bsag#7.E.Ba.#7.Bal..bza7bx#7.F.C.Eala2bqa..Ca...ahab#5.Bbw..aj#6bqa3a0#7.F.D.Baga.#7.Bal......#5#6#3.D#2b5bz#P#4.qababab#4.r.DamaF..............................awaAaAao#L#U#T#U#J#Jas............ao#T#Javavap#T#Jap........#L#J#WaA......aAaKao#L........................................................",
"#j#ibjb0b7bVaYaT#e#b.J.K....bkb7b0bc#i#e.z.w#cb2bhaT#e.4.y.4.4#eaVbibgaWaTbibxb0a6aVaP.4.G.GbhbcaWaT.4.5aU#k.7.7#m#g.9.6#l..bWa8b.aVaRaO.xbdaU#c.4.y#bb7b.a5a5aRaO.O.I.u.1a7#ibhb4b.aP.4.w.4.1a7bxbxa1aN.I.I....bobqbqa3a..N.C.B#9.C.EbZ..aEa7bs.v.E.C#7a2..a..N.N......#2.s#6......bqb4a3a0.N.B.s.E...E.Bala3....bnaf.D.D#6bnaFaj#4.s#4ac#2.s#P.ranah.r..............................axaxap#T#Kaq........................#V..aoao#T#Jas........................axap#T#J.b......................................................",
".4.7bhb0b0blaU#i#e.1.y.yaTbdblblbjaU#e#b.z.y#ebhaU#d#b.z.z#e#ibfblb4bjaTaXbib4b5a8aXaO.L.G.Lb0bjaU#i.4.A#j#c.5.6#g.8.9#gbU..bib0b1a5aPaO.G.I#e#b.w#baTbiaWaRaRaO.4.H.u.1aR..bibxblaW#i.4.w.4aZa7b3bZa1.O.H.I....a0a3a0a.#7.E.v.Fa0.Na2....#9aRa1aRa0aO.u.1.....N.#.........#aFaj#2..bobqa4#7.F.Calb5......aHaDaa#Pbp#9.D....abab#2.Q.Eah..#P.rajaM#R.s#1aB#P..........................aqao#T#M#1ax..............................#L#T#0..........................#V#V#Las........................................................",
".z.7bgbjbhaW#e#e#b.y.x#baTbcbdbcaU#k#b.4.x.1aUaU#k#b.3.x.KaT.ybhb0b0bjaTa6bibjbia6aP.4.G.x.MaPbkaT#e.5.y#b.8.z#c.7.7#lbe....bib0bZa5aO.L.G.L#b#b.zaZbjaXaPaO.4.O.H.I.GbTa5..a6bgaW#e.4.5bga5aP.4braR#8.O.u.I..a0..a.a.#7.N.B.FbT............aObqa7a1aQ.Nb5................bzbvaj.r..a2a0a..F.v.Ea3......aGaLaL#Y.qaf#3.Q.......r#2#6bw..awaMaq#1#P#O#2aCad#R#P............aG#Z..........#M#L#0az..................................................................#Tao..........................................................",
"aU#jaWbcaUaT#e.4.y.A.y#fbbbfaWaUaT#c#b.A.K#faU#i#c.K.x.KbTaY#cbcbjbgaT#e.4a5a6aXaP.4.L.x.GaObhaY#e#b.y.w#f.z.z#ibe#g.7......a5a8aVaO.O.L.u.O.1.zaZbcaS#d.1.J.I.N.u.4bab#.Oa8aVaXaP.4.Jbibib.aX.4.G.4al.u.IaQb4ag.C#7#7.E.B.Fala4.............4bxb5a1#8.N.C................aDah#2.s..a.#8.E.C.Nb4..........ac#1#P#P#3.Bba..aiaf..........axaq#T#J#R#1aCaFak.r#4..........aGbu#X#O................................................................................................................................................",
"#i#gaUaUaT#e.4.1.x#aaTaYbf#o#i#k#c.7.z.z#fb8bh#b.z.x.z#fb2#i#baWaWaTaP#b.KaVaRaPaO.L.w.u.OaSaU#i#e.K.x.zaZ.6#fb7#m#g.7#g..bgaVaXaP.4.N.u.Oba#d#e.GaPbV.I.M#db#ba#8aPbiaPa8b4a6aP.4.4bib5b4aWaP#d.G.O.H.ubaa1a2#7.val.F.F.CaQa4..............bqa8bsa3#8.H.uaQ..........a7a1a.#2.Dba..a9.E.N.Na4al..........#R#P#Pbt.EalaHbzbzaf#5.D#2......#U#MaAbS..acak#PaHaFab.r......aI#Z#Q#Q........azaG#0#Q....................................at#T...........................#auat#V......................................................",
".9.7.7#k#e#b.5.K.y#bbXbcbX#o#n.5.z.A.y#fbVbcbU.z.A.z#ibVbb#k.4#eaX#e#b.K.xaP.4aO.O.I.x.1bSbZ#k#e.5.x.2bVaZ.8bX#m#g.8.6bbbhb0aO.4#d.L.I.Ibab#.L.L#db##c..........bgbZbiaOa6aWaPaO.J.JbmbibiaWaO.L.x#d#8aSb##7a..C#7..........................a1a9aQ#8.H.v.F..........bqb4a1aN.Cab......a0al.P.H..............#4........bzb5bqaf#3.B#4.r........bTb8....#PaFbubt#5.r......#S#O#P.#........aGaK#0#O#0...............................#aAauap#T........................avaKat#T#T....................................................",
"aU#j#g.4#b.K.A.x#caZaYb2bX#o#h.8.z.1#caT#l.9#l.8b2#ebkbc#e#c.z.z.4#b.J.A.zaS.L.O.I.x.1aSb##b#b.z.A.yaZbe.y#j#m#g.8.5bb#i.4bgbm.L.O.u.3aSb..4a6a5aP.Lbe............aVaXbibiaWaX.4.xaOaVaVaT#d.M.w.waZ#8.P.O....#7........a8a8a5aR#8.u........aQaN#8.N.C.1b1..........bqbqa0.N.Ca9a0#8..#8.C.Hb1........................aFbpbna#.D.B#9.D.........2b6.a....ahaDab#2.rah....................arar#Q#N................................avauaKao#Lavauap#V................avat#V#Laq....................................................",
"#g#c.5.A#c#b.K#f#eaUbUbU#o#h#..6.9#n#..9.9bS#obV#hbbaU#i#c.1.x.KaU.w.K.KaSaZbf.G.M.G#daRbVbd.A.7.zaZaY.z.y#ibmaTbkbdbd#jbhbZbmaV#e#daR.w.I.Obia6aP.O.x.............4bib4bZaVaP.4.w.4aPaPaP.M.x.1bab1.N.C.N.O............brb4a5aR.O.C....a1aRaO.N.N.v.Na4............a1aQ.Nbqbrbra1aN.C..................a2a...........aiaha##3.s.E.sae..........b6bS......#4#2#2bY......................#X#Q#Oan..................................avap#T#LauaKap#T#T............aK#V#V#L#T.#....................................................",
"#e.4.5#cbcbd#g##bf..#o#n#n#g.9.6#l#o#..9#lbfbd#j.8bhbcaUaT.4.7b1bdbcaU.4.z#n#h.9.8#..z#mbhaWbdbcaT#e.7.x#b#jbgaWbWb4bbbib5b0biaT.4.J.w.yaP.Mb0aWaO.M.IaW#e........bgbiblbjaV#d.J.w.4.Oa7a9a1aQ.Nbg.O.F.u.1.O.u........a7bsbxb#aO.I.u.Obra7a1aO.N.H.OaQ...............N.N.Pbqb3b3a0#8.C.N............bob3a3#9.E........#5a##3.D.Eb5#6aD..........bRb6........#2#5..................................................................ao#T#LaMavap#V#Jaq..........auaxap#L#V........................................................",
"#ebfbe#j.9.7##bU.1bvbU###..8.3##b2#l#obe#j.5bb#kbkbhbgaUaX.4.wbeb4bc#i#c.y.6.8.6#h#i.4bhb4bcaU#i#e#b.w.1#laUb0bkbWbWbdbmbxaU#i#b.4.w.ybgaWaT#eaR.4.x.LaP.8.y........a6a6aV#d#d.w.GaPbrbxbsa1aN.N.u.N.v.Fa1.I.CaN......a5a7a1aO#7.I.Ha8b0bZa1#8.N.v.....................F.Na3bqa1#8.F.v#8............bobrbo#9.E#7.........D#2#6a2#6..............bRb6............................aGaCac#R..................awawaq#U........................ao#V#L#L.#..........apapauauat#T......................................................",
"aTb2bb#g.6.8.I.1a5bo#o#o.9.9#lbe#hbUb7bd#g.7.7bhb0b4bdaU#e.5.y.4b0bc#e.4.z#f.z.9#n#b.ybUbf#m#k#e.5.1.KaZb1b0bjbdbdaU#ibhbdbmaT#e.J.wbhbhbmaT#d.y.L.x#dbe#h.A........aVaTaP#d.y.x.JaWbrb5bxaQ#8.H.C#7.Ib#b#.H.HaQ........aRaQ.N.P.ualbrbZbxaR.O.I.CaQ......................a0aQ#8.N.C.Na1........aFada2a0a.aiaf.D..................................b9b6........................aGbuaLac#R#O..............ayaLaGaq#Mawaq........................#V.#..............#TaKaAap#T#T....................................................",
"aUbe#k.8.A#l.1aR..a.#o#n##bUbf#n#.blbfbe#c.z#cbhb0blbV#i.4.z.y.4aW#i.4.4.zaZ#ob6.5.5bUb8be#j.8.K.5.yaZbVaWbcaTaUaU#ibhb2b0bcaT#k.Kbhb4b5bm#i#e.J.K#dbZ#ma6aVaPbgaW#d#e#d.1.J.w.1b6a9bra7a1#7.N.C.uaOa4a7.I.uba........a7.O.O.H.H.LbZa5a7a1#8.1.C.CaR..............ad......#8#8.N.F.FbT........aLbvab#7aNbpbnag#6.Q.................................2b6..............aGaGaCacaqaGaGaB#1.q#P......ayaz#W#Kayayaxaq#Kayap#Taxao#J....auazar........................avaxat#V#J#W..................................auauap#L..........",
"bh#g.8.A#gbe........#7##bXb8#o#mbmaWaXaP.7.5bebhbhbmaT#e#b.A.y#faUaT#b.waZaYbVbW#mbfbWbU#n#g.6.8b8#f#nbfaT#i#e#b#k.4bkb0b0bc#e.4.ybhb0bVaY#e.1.y.zbg#ma8a8a5aP.L.x#d.x.L.M.xaSb.aWa8a9aRaN.N.H.u.HaQ.O.H.I.1bZ......a7b5bx.I.H#8aR..aRaQaN#8.H.u.OaR............buaa.r.......C.P.Ca1.#a2a..E..aFad#4.sbnb3bvaf#3.B....................aHaDad#4.r....b6.#..........aGaGaLaCac#P#PaB#Y#O.qae....ayaMaz#0#Saybuax#W#LaAaq#T#J#T#M.aauayayar#0.t....................apapao#L#Uax................................auaMawao#L..........",
".6#j.A.7bX...........EbUbXbX#obhbiaWaVaP.1.z#oaWaWaT#k#c.y.y.KaZaU#e.1.y#ebfbe#n#..Abe#n##.8.9#l.6#lbebf#h.4.4.x#b.5bgbhbcaT#e.K.wbgbhaW#e.4.K.x.4#gbib5b5aV.4.G.I.M.w..bk#dbb#cbha5aN.4.O.P.v#3b6#d.H.NalaQ........a9a7a4#8.C.H....#8aO.O.P.H#7b5..............ad.rbY..............bobnaga#.Bab#4.r#6aEbnai#5.D.Bai................aHb3aJad#4.Q....bSb6..........aGaHaLaLaa#P#R#R#O#Oan......ayazaq#Sayayazar#U#J#U#W#J#M#L#L#LataGaLar#U#K................auavat#T#L#LaK..................................avavat#V#Jaq........",
"bXbf#kbb#k............#obfbfbhb2b2a6aT#e.4.x#oaT#k#e.4.J.A.7b1bV.4#c.x.yaT#g.5#..A#.#j#h.8.6#lbX.8bXb8#o#haVaT.4aU.xbcaUaT#e.5.x.zaWaTaT#e.4.x.1#i#ia8bxa8aP.1.x.GaS.1..bfbf#kbWb2a5aR.N.I.C.Nbaa1.O.uaS....bkbha5aRaOaQ#8.H.ual....a3.H.L.uaOb#al................aa..............bpb3bsaf#3.B..#2#5..afafa##2.Bba..........aGaI#Y.qaFaHaJaa#2.rab...2b6..........aIaCaBac#R.sad.....#........#W#W#U#KaMaqaq#W#M#Kas#M#MbY#JaM#Wazazar#W#M#K#M..............avaAap#T.#......................................ataoao#L#U..........",
"#o#j.8.7#c.z..#o#m....#o#o#mblb2b0aW#e.4.K.w.4#n#d.4.y.x.1aZbcaT#k.K.A#baZ#c.z#j#hbUbf#..6#lbU#g..bfbf#m#gbmaV#i.ybi#i#k#e#b.z.KaZaP#e#e.5.y.ybTb2bma5a5aR.4.I.u#d.1aW..bb#j.8bkbia8a5aO.H.NaOa5.1.u#fa5....b4a8a8aWaR.4.w.F.1a4....aNa.#7aO.valb5................................a2boaga#.E.Ba.........aiaf.B#6ai..........aLaC#X#Oadadaa#4.r#PaC....b6..........#Racaa#1.q#1aCayayax#U........#K#Masao#0#U#N#MaM#T#Uas#Las#T....aq#0#M#JaM#L#U............avat#V#Jat........................................#T#L#LaA..........",
"#n#gbU#o#o##.9#o##.9....#hbmbibibgaW#e.4.w.w.4#n#..6.4.1#kaUaT#k.K.z.1b1bd.A#c.#..b2b2#n#g.7#.....#n#m#gbhbgaU#ebib4bZ#c#b.A.w#fbVaV.1.4.x.xaSbVbZbcaRaPaO.L.x.1b7.1.4..bf.7.5a8b5bZaRaO.G.Ibk.G.LaRa5a5aR..a8b3bZa5aO.O.u.O...........N.F.C.Cbs..................................aga0#9.E.Bba.......#bpbzag#6.B............aB#Y.q#1aa#4#4.r#Pb5......bTb6..........#O#P#PaaaM#Y#QaAaq#S#U......auaMav#V#L#M#Maq#J.......a#W......#M#U.tas#U.tas............ao#T#Las............................................................",
"#m#cbXbU#n##.9####.6#h..bf#.bgaYaT#e.4.J.A.yaZ##.9.9bW#nbcbcaU#k#b#baZbc.7.7bX....bf#n#..9.9bf.8.5bgbcbhb4bVaT.4bibZb0aV.5.K#eaT.M#e#d.x.1#eaTbhblbjaP.O.L.u.1b#.JaP#dbWbU#h.5a8bxa8aO#8.I.I.x#c.zbibZa6aR.4a8b0bxaV.4.L.u.O....a1#8.....N.Nal......................................a#.E.Ebzaiag#3..bzb4bqaf#3.B........ai..#Q.t#1.....r#P#2aJ#5.......2b6............aIaGaC#Z#Q#Oaqayax#0......avaxax#T#JaAaAao#J..................#Waq#U#K#1ay..............#Tao....................................................avat#T....",
"##bUbXbU#n##.9####.6#o..bebfaTaTaP#d.y.x.1b#aW##.6#...bkbVbcaUaT#b.ybk.7.7##bU#o#.#n#h.8.9bX.9.9b0bVbmbhbhb.#e.4a6bmaT.4.5.x.JaXaP#d.z.y#daVaTbmaWaTbmaX.4.4aS.y.1aWaVbe#m.8.6aRaVaQ#8.I.uaO.waRbibxb4aWaO.La8a8aVaRaO.L.xaO..bxa9aN.C............boa0#9...............................Nbpb3bnaf#3a3a2a.bna#.D.B#9....bzbnafa#.B..bzbzahbpbpaiaf.D......b6bT............aB#Z#X.q#R#Ubuaz#W#K....atat#V#J#Watap#T#J.b..................#M#M#0ax......................................................................auaKat#L....",
"##bU#o#o##.9.9##.9.6#n..#nbU.4#e#a.K.K.yaZb1bd#n###obhblb2bcaU#k#b.4#baTbWbUbgaWaX#kbc#j#k.8.7bhb2b0aUaWaWaT.4.xaTaXaP.4.wbgbga6aT#e.K.1bg...4aTbibibmaX#d.x.y.wbVba.....8.6bXaOaO#8.I.u.1b5.1a5a8bxbiaVaO.GaVa8a8a5aRaO.uaV..bra9a1aQ#8........bob4a0#7.C......bobna0#7.B......a2a.#8bnbpbvbo#9bqbsa0a..E.E.B.E....bzb4bnaf#3.D..bvbsafbvbvai#5.D#3....bRb8..........az#Q#Q.q#ObYazazaq#U#KaGaI#Y#O#J#Tayazar#UaM....ayay#U........................................................................................avat#V#Jaq..",
".8#o#n##.9.6###o.6#.#obd#gbUb8.5.K.w.1aZbVa6bU#o#h.6bkb0b0bdaT#f.7.z#b#.bhbhbjaWaX#e.y.w#k.7.ybcbhaU#e#i#e#b.y.ybT#d.4.xbhbibgaYaV#e.M.x#ebhbgaTbxb4a6aP.4.w..............biblaX.L.O.ualbV.Ib1..a5aRaXaO.N.ua8b3b5a5aO#8.I.I..aQbrboa0a..C......a3bq#7.E.C......bybsa3a2a2a2a2a..Ea2a..Ea2a0#9#3byb3a0a..E.E.Db5aDbnbobwbp#6.E.Q#9bpaEaiaEai#5#6.B#9....bRb6.......#....#0#O#1#Z..arar#U#KaGbYaIak#P....aKaKaz#0#K....aLaz#U#M...............aap....................................................................aoao#L#T.#..",
".6.9##.9.6.9bX.9#.b2bUbd.7bUbf#obk#d.4aX#j#c.A#n##.9bgbhbcaUaX#c.z.z#ebUbhb7bxaWaP.4.K.J#k.4.yaTaU#e#b.y.4.4.1aZbg#c.M.wbib4b2aWaT#e.J.x.4b7bdbmbxbja6aO.L.x#e............bfbb#c.waV.4.G.IaV....aRaRaO.O.x.Ga8bxbxa5aO.O.I.N....bxb3a0#8.C#7....aNa..E.Cal....a2bpboa9boboboa0#8.E.B#9.E.E#9#3a0bqa2a.#7.v.NbwaHbtacaiag#9#3.B.Dagaf#5#2af#9#2.B#6am.....#bSbS...#.#....#O#Nas.#....#M#KaBaGaGaC#R.q#RayaGaGaq#U#K#0axaq#W#Kar............auaKat#T....................................................................#Lao......",
"#naZbf.9###o#.#.bfbe#m#..7bf#n#mblb7bVaU#j#b.6.8#..6bcbhbhbmaT.4.z.5aUbgblb0bjaW#e.4.J.4.4.A.y#f#e#b.y.zaZbgaT.z#ca6aVbgbhbjbjbg#e.4.w.x#eaP.OaWaWaXaP.4.x.JaV..........bWbWbb#i.za8a5aR.O......bg.O.L.x.xaPa8a8a5aQ#8.H.x.1a0#8bra0#7.N.Cal.......E.Ba0........bqb3bobsb5bra0#7.C.B#7.C.E#3.B.Ba0a.#6.B.Fam..aHaF#4aj#5#3.B.Dbw..#3.D.B#3#3.B.EbY.........2b8.#.....#...#..........az#WayaBac#Y.q.qaCaqazar#W#J#Kaz..#U#J#0..............avaw#V#Lap.............................#avao....auatao................................",
"bb#i.8be......bUb2bU#o#o#n#m##bdbfbWbkaU#k.7.A.8.9.6bhbxbhbmaT#e.1.wbcaWbmbgaV#e.4.y.J#daX.A#baU#j.K.K#ebc#b.4bibia6a5aPbma6aT#e.4.K.x.KaVaP.4.uaXaP.4.GbhbgaWaT#b#o#g..bWbW#j.4bib4a5aR.O.x....aWaW.I.IaS.waVaRaPaO.L.u.IaSa9aQ.H#8#7.Cala0..a3a0.N............a3bqbobqbqa2a.#7.C.Eam.Bal..#3...N.N.C.Cba....adaa.r#6.D.B.Bamaiak#X.....#..#3...#.......#..b6.#.#...#...........#..#X#KaK#Y#1#O#Pbw..#W#0#X#K#NaM.#.....#................aoao#L#T..............................avaAap#JauaKavao#L..............................",
"bb#g.8.5....bfblbUb2bfbeaU#g.7bbbdbdaU#k.4.z.5#i.9bhb0b4bVaU#i#c.y.y#e#naWaXaX.4.K.xbga6aVaR.4.4..............bib7bZaVaPaVaXaP#d.1.x.1#eaUaP.L.w.M.M.wbhbWbWaWaT.4.yaP.Jbe#j#k.7a8bxbibmaWaX.4..#eaP#d.K.waTaOaO.O.L.u.IbTb#a1aN.H.P.C.PbsaObqb4a0.N.P..........a0a0a2a3a2#9#7.E.v#6a2alb7.........F.E#7.........D#5......a#bvad#2#P#Q.....#.......#.#......bSbS.#.#.#.....#.#...#....ayazay#O#N#Y#W....#K#M#QaCaM............awaq............#V.#..............................axat#V#Javaxav#T#J.#............................",
"#j#k.7.7......bebfbkbfbcaU#k.5.zbb#j#i#c.5.z#kbmaTbhblbjbjaU#e#b.y.y#e#gaPaX.4.4.4bibibxa6aX.4.M.x......bf#oa6bjbxbxaX.4.4#e.4.K.J.w#fb7aX.4.G.x.4.L.4bhb2b2aU#e.K.yaP.J#i#kbkbea5aRbhbibmaX#e.J...K.4.x#fbia8.L.O.u.HaOb#a7aQal.C.I.Na9a7a1#8.Pa7aN.Na3a0a.......a.#9aga.#7.E.B.Nb5albs...#..bra5aN.C.....#.#.#.....#.#..aHaF#4.r#P.#...#.#...#.#.#.#.#.#...2b6.#.#.#.#.#.#..........arar#W#M#Uax#W#J......#Y..............awaLax#U............................................ao#V#JaMatap#V#J#L....................avavap#T..",
"#g.8bcbmaWaT.4.Kblb8bXbb#j#k.7.7#g#k#c.7bdbhbibmaTbmbhbcaU#e#d.J.x.1aU#g.5.4.J.wa8bib7bxa5aP.4.M.L.M....b8#o##a6a6aV.4.O.x.y.4.x.waSbVaX#d.M.x.LaV#kbjbcbiaY#e#c.z.zaZ.w.4bfb7bbaRaOb0b4a6aP#d.G.4a8biaP.1bib4biaX.NaNaOa1aN#8.C.Halbxbybya0#8.E.Na..N.Fa0#7.C.....C.Ea##7.E.B.Cbwa2.#......a7b3a8.1.x.#.#.#.....#..bnbnaia..E#P.rae...#.#...#...#...#.#.#.#.ab6.#.#.#.#.#.#...#.#.#.#.##U#L#KaHaB#Y#M......................away#W#Kaq............................................#Tao..#T#V#J#Tax..................auaAaxap#L..",
"#kbhbhbcaUaT#e.y.AbWbW#m#k.4.z.7#i.4bkbkbdbxb0aYaTaWaWaT#k#e.K.x.1#faV#c.A##.4.4bibib0bZaVaOaO.L.w.4..bfbU#n#.aVaPaP.4.w.I.MaV#c#daTaPaO.O.x.1bTaV.4bhaWaU#i#e.z.y#f.4.xaVbkbkbd#cbibjbjb.#e.M.x.1aRaRaO.xbibiaW.4.H.uaO.O.N.P.Hba#8bqbxa6aVaO.G.N#8.C.EaN.N.Ca......E.B.E.E#7a.a2.E.....#.#.#aRaO.H.1.#.#.#.#.#.#..bob5ai#9.E.Ean.#.....#.#.#.#.#.#.#.#.#.#.#bSbS.#.#.#.#.#.#...#.#az#0.##0aGaGaC#Z#P......................ao#V#L#U........................................................#V......................avavap#V#Jap",
"bhb0b4bjaW#k.4.K.x.4#m#i#c.7.A.8bbbeblb7bhb2b0bgaTaTaT#e.4.4.y.JaSb7bh.zbfbf#n##a6bibgaW#d#d.L.G.waObdaU#c.KbkaO.4.4.G.G.1b1#gbcaU.4.4.M.x.G#fb1....bm#e#e#b.K.y#fb8aTbVbfbbaU#g.5aWaWaV#e.4.x.GaS.4.O.u.1a5aRaO.4.ua8a7aRaO.H#8a1#8a1bxbZaVaO.L.Ga7a5aQ.N.B.CaQ............bpb4ag.E#3...#.#.##8.u.1a5.#.#.#.#.a.#bnbpbwa2#7.E.E.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.2b6.#.#.#.#.#aHaLac.saK#0#K..aGbuaB#1#Paa....ayayar#M..........#J#M..................................................................................apap#T#L#W.a",
"bib0b4bVaT#e#k.y.w.4#b#c.7.A#c#lbebkbWbWbibjbiaW.4.4.4#b.z.x.z#bbVaY.z#ibXbf#m#.a5aVaVaP#e.4.I.w.waSbhaU#c.Ab0bW.G.M.uaOa6.9bkbhbb#i.w.L.waSb#.7....aXaP.1#b.xaSbV#daWbkb2bkaRaO.zaTaXaP.4.G.ybaaW#e..aOaVaOaO.O.xa8bxbxaR#8.L.IaR.Oa8b3bxaR.4.Ibrb3a5aN.O.ub5......boa3a0#7.Ea2a#.B#7.#.#.#.#.#.#.#.#.a.a.a.b.b.a#9a2ag#9.E.v#7.#.a.a.#.a.#.#.#.#.#.a.a.a.a.#.bb6.#.#.a.a.#aLaJak.ras#U#O..aGaB#1#P.qacaGaI#Z.q#0#M#M............................................auauat#T............................................#L#Laqat..",
"bhbjbibcaX#e.K.w.w#d#c.z.z.7bTbkbfbdbkbdbmbcaT#e.4.y.x.x.K.z#faZaZ.A#fbbbXbU#h#.aVaXaP.4.4.G.u.1aZaZbd#k.z.zaUbb#kbf.4bf#mbhb2b0bb#i.4.Abd#e.z#c.#b8aU.J.x.z#b.xaSb...bda8a8a9aR.O.u.4.M.x.w#daY.y.#.....4.G.L.L.LbibZbxaP.O.u.Ial.HaWa6aR.4.La8bZbyaVaO.I.u......bob4bqa0#7.Ca#.E.Ebn.#.#.#.#.a.a.a.aa8a5#8.u.a.b.b#9a#.E.B#6b7.b.b.b.a.aaB#R.a.a.a.a.a.a.a.a.abRaB#Paz#0.aad#4.ram#Q#QbY.#ac#Y#R.q#1aGbYaC#Z#O#Uayaq#W..................................auao...#aKaKao#T#T....................................................",
"aWbmaWaT#d.4.J.x.KaT#c.z.7#lbdbbbbaUbbaUaTaTaX#d.y.x#bb1aW#i#e#b.A.1b6bf#o#m#g.7.6aO.4.4.J.u.G.1b1a6#i#b.A#baU#ibUbUb8bU#hbkb2bWaU#e.7.z#i.7#bbc#nbf#h.K#a.1bVbc......bbbxb5a1aO.O.u#m.J.y#daS.ya8a8a1aQ.N.4....a5bra5aR.O.H.H.H.H.CaVaXaO.O.ua5a8aVaO.O.u.I......bobra7#7.E.Ba.#3a7a3a0#8.#.a.a.b.aa7bxa5.O.u.b.c.c.d#3.B#6bw.b.b.c.c.cbtaC#Y#P.b.b.b.b.b.b.b.abtaCazaKar#X.##Pae.#.#.#.#.#aG#R.q#1aCaGaG#Z#Q.qacbuaz#U#J.............................#avawap#V#Lavap#V#Jaq....................................................",
"aWaTaT#e.4.K.x.1#faZ.7.7.8#h.5#g#g.7#i#i.4.4.4.y.J.1aZbcbU#b.7.A.zbTbd#n#m#g.9.3#g.I.L.w.x.x.1b#b##k.8.A#bb8#c.7bfbfbfbe##bdbdbb#e.4.A.zaU#haZbW#m.6#..Ab6#cbhbc#e.w..a8bxbsa5#8.I.uaO.6bV...4aXbsb4a5aO.O.u..aRaOa1aRaO.1.u.3aO.HaN...O.L.u.GaRaRaO.1.H.1aP.#.#..a2a2a..N.v.Ea0bqb4a7aQ#7.P.b.b.c.b.aaRaO.ual.e.e.e.e.e.c.d.dbzah#5.caCaGaaaCaB#P.b.c.b.b.b.aaBaC#YaAaG#0#N#N.a.#.#.#.#.#.##Z#Y.qan.#aB#Z#X#O#Paxayaq#M#J............................auaAaAap#T#Lap#V#J#Tau..............................................awauap",
"aT#e#e.4.K.y.yaTb6aY.7.A.4aU#n#m#c.7#i.8.4.A.5.K.1aZaY#..9##.z.zaUaU..#..8.9.9.9bXbebf.G.GaPaS.y...4.7#cbc.z.7#l#m#n#n#h.8bbaU#i#c.5.z#baU#.#gbf#h.6#lbe..a5aRaO#ba6a6aRa8aRaO.O.u.IaS........a7bxbia1#8.Ia8a7a5aQ.4.4.N.I.HaZbT.........L.1aPa8#8.O.I.IaSa1...#.#a.a..N.C.Eb1a3bqbZa7#8.E.C#8.b.c.c.c.N.ual.e.f.f.e.f.e.g.gbtbvaFaDad.d#YaGbvaB#R.c.e.c.c.c.c.caa#Parar#X.taB.a.#.b.#.#.#.#..#O#1.#..#Q#Q.q#Obuaqaq#U#JaM............................atavat#V#J#T#L#T#Uax..............................................auaAaAau",
".9#b#b.y.x.z.1bTaY.7.y.z#ibb#n#j#c.A#gbf.4.4#ibcaPbUbd#..9.9.9b8bf#h.6#c...8#.#n.7.7#m#.blbb#h.z..............#o#h#l#g.9.7#b#i.4.7.z#cb0#h.6#.#..9#h.#.#a8a8a1aO.O.Ia6aR.4.I.1.I.IbaaR.A......a5a5aRaO.I.ubrb3a9aQ.O.I.L.IaSb#a5..............brbx.x.I.4a5.#.#.#.#...F.E.Fa0.#a0a3a0aQ.N.C.FaQ#6.e.e.e.f.f.f.f.f.f.h.h.f.fa2btaFbtaFab#2#2aCaH#R.qae.e.g.e.e.b.c.a#P#M#Q.t#ZaGaB#R.#.#.#.#.#.#aGaIac#Rar#0#Rar#U#S#L#Kas................................ao#V#L#LaK......................................................atavaoav",
".9#n.y.K.w#faZaY.8.z.8#lb8bW#j#h.8.6#gbf#j.8.8bga6aWaR#d#i.5#obXbd#g.6#g.5be#m#c.A#l#..6bfbkaU#c.7..........bWbUb8.9.8.8#g#n.z.4.A#fbe#h.7.6be#l.6bf#ma8b4bxaRaO.L.xbiaP.4.I.I.H.1b##..z......aQaQaN#8.ua8bxbsa9#8.N.C.O.4aObs................a1aN.P.H.#.#...#...#.#a2a..#.#.#.#aNaN.O.C.Cam.sa0.e.e.f.f.f.h.h.f.h.h.h.h.h.haEbzbuaD#5#2.rac#1#P#4#Y.r.g.gaGaC#Z.r.cbT.c.caGbvaB#Y.t.a.#.#.#aGbuaHaB#R.q#W#Qauap#J.....#..................................#T#Wax....auauao#L..............................................#V#Tao",
"#h#g.6#m#m#f#c#b.z.z#bbXbdbe#j#g.6.6#hbe#g.7bibga6aVaX.4.J.w#h#m#l.7.6bU#o.9#c.7#cbbbf#m.8bW#j.7.7#.......a6bf#o#o#n.9bbaU#i.4.zbXb2bb#g.6#gbfbfbe#j.7a8bZbxaR#8.I.IaOaO.1.x.1aOaR#g.A#l.........O.N.u.Ha1a5aRaN.O.C.HaO..a9a0.O.................N.1a4...#.#.#.#.#bobra0#7.B.#.a.H.N.C.valbZa2.e.e.f.h.h.h.h.h.h.k.h.h.k.h.h#5aDaDab#2.s#4.h#P#PaD#R#O.haGbuaGak#P.d.3bS.baGaI#R#O#P.a.b.#.#aHbubt#Z#R.q#0#K#Mao#L.#.#.......#.....................................#aAawap#T...............aauat............................#V..",
"b8.6.7bW#..7.7#b.A#ibebe#m#j#g.8.A.7#m#n.9bib0b4b.aTaP.4.J.I#g.9.9.8b2bU#n.9bfbb#fbfbfbb#..5#c.A#g#...bgbmaT#b######.9bX#k.7.5bebk#m#g.9.6#mbfb2bb#h.7a5b#aRaO.1.u.IaO.O.x.waV..bgaW#e.J.............NaOaRaQaO.O.P.ubabqbqa7a1aN.H...........#.#.#.....#.#.#.#.#.#brbvag.N#7.b.b.abg.Eala0.g.f.f.f.h.h.h.h.h.h.k.k.k.h.k.i.iaFadab#2.r#2b7.i.i#Z#R.qb5.haIaCacaI#Zad.dbR.d#Z#Z#R.qb5.a.a.a.#aGaIac#R.q.r#U.t#X#T#J...................#............................avaxap#V#L..............awaKap#L..............................",
".8.A#mbe#m.8.8#l#i....#m#h#g.8.A#cbgbmaUbhbhb0b0bjaX#d.M.I.w.4.4#.#nbfbb#.bkbkbb#k.5#o##.9.6.z.9b2#obibZbmaX.4.w##.9#h#l.A.5#ibc#m#h.8.A#lbkbWbW#m#g.7aRaRaO.1.I.FaOaR.G.Ibabibjb2aV.4.w................b7.O.L.I.u.1b3bqb4bxaQ#8.P.H.............#...#.#.#.#.#.#a2a3a0#7.Fal.a.c.caWaX.1#b.f.f.f.h.h.h.k.k.k.n.h.h.k.k.h.kbtbvah#2.s.rbw.k.k.i.i#QaB.i.i#YacaGaGar#Y.qbH.d.d#P.qan.b.b.a.a.#aBaa#R.q.qbY#K#Qas#LaM.#.......#..........at#T........................#Tao#V#Jas..............atap#T#L..............................",
".A#.#o#h#g.9.7b8......#g#g.8.7.4bjbhbhbkbkb.bjb.aV#e#d.J.x.MaX.4.wb2bl#m#g.6bW#j#k.5####.9##.8bebUbhb0b0aWaT.4.y.4b8bb#c#c..bhbc.8.8.A.8bWbebf#m#g.8.A.O.4.O.1.I.2bZ.u.uaSb#b2bibg#d.M.xaV.7........aWbbbe#g.C.IalaR.Gbrbsa7a..O.C.N.......#...#.#.#.#.#.a.#.a.a.aa.#7.E.Bb7.c.c.c.e.K#f.f.f.h.h.h.h.k.k.p.k.k.k.n.n.n.kaEbzbvaj#4aa#4bpbzah#3.s.k.k.k.kaIaGbuaLac#Q.q.3bH.g.d.c.c.b.b.d.a.a..#P.q.qaa.t#NaJ#Vaq.#.#.....#...#.#..auauav#V#J.#......................#L#Laq................#L#L#LaA..............................",
"#.bf#o#m.8.9#m....a9#8be.5.7.7bhblb4bhb0b4aWaWaVaP#d.1.x.G#daV#d.J.KbW#j#c.z#i#i.4.5#j#..6#n.9....bgbjaYaT#d.y.x#ebd#k.z#hbkb7bj#k.4#c....#j#j#i.8.A#ca5.I.L.xaPb##c.6aO#.....aTaP#b.x.M#h.8.#....b0bga8a8a6aR.L.....4a1a1aQ#8.H.Cal.....#...#.#.#.#.#.aa3a0#7.a.b.F.C.Ba4.c.c.e.e.e.f.f.f.h.h.h.h.h.k.k.k.k.n.n.n.o.o.mahaDaj#5bzaEaj#2bsaf#6.D.n.n.n.n#XaGaGaB#1#O.q.fbH.2.f.d.c.dazazar#0.#.a#Rac.##Xas.#.#az#W.#.#...........#avaAav#V#L....................................................................................",
"##.6bf#h.7.8.9..b5a5.1bU#m##bfbhb0b0bhblblaXaXaP#d.M.w.3#db6aV.M.y.z#m#c.z.7#j#c.A.5bb##.9#o.9bfbfaWaVaT#e.1.x.yaV#i.7.8bdbhblbc#k.5.5....#f.4.8.5.8bia8a5aO.O.u.J.J.6#j....bh.4.4.x.1aY#..5......a5a5aX.Ma5aP.O.x..a5aNaN#8.N.valb7.....#.#.#.#.#.b.#bqbqa0a..C.b.b.c.c.e.e.e.e.f.f.f.h.h.h.h.k.k.k.p.naFaiab#2.o.n.m.o.mab#5bzb5aJaj#2.Q#9#2.Q#9.m.l.l.kaBaB#Y#1.qambH.0.0#E.2.daDaAaMar#X.t.a.#.#.#.#.#.#aKazar#M.#...#.#......atatao#L#W....auap................................auavap#L....................................",
"##.A#m#..6#..8..a1aO.ubU.9bUb2bcbjbcbcbhbc#d#e.4.M.J.G.1bTbibga6aVaX#d.K.A#kbb.7.7b1#m.8.6.9bUb8#obf#e.4.1.w.Kb1#g..#.....bbaU#i.z.y#ibb#c..b8#o#.a8b4b0aVaO.L.u.J.L.w......aWaU#g.4.6bX.AbV....bia8a5aR.1.uaO.L.IaP..aU.N.P.u.NbZ.....#.#.#.#..a9aN.abxb3a0#7.E.N.e.c.e.e.e.f.f.f.h.h.h.h.h.k.n.na3a0a.b5aiab.D.o.o.o.o.U.Q.raFbtaE#5.D.D#6.Q.D.m.o.m.m.m.l#R#O#P#1aC.2.i.f.j.3btazaGazazaq#M.b.b.b.a.a.#azaKaK#W#K#M...#.#....aGar#V#L#T.#..aAaAap#L............................auaMaxao#L....................................",
".9.6#n.6#.be#n...L.x.1#o#nbUb2aWaUaTaUaUaT#e.K.M.G.u.1aZbibia6a6aWaT#d.J.wb0.8.3aZ#n#..6.9#obUbUbma6aVaP.L.1babe#g.6......#c#ebfbfbb#g.5#g#obUbgaVa8bxbxaXaO.I.xaO.J.w..bb#e..#b.y.5bc........a8b3b4aVaO.O.u.O.x.IaVaV.O.4.N.NaQb1.#.#.#.#.#.ab3a8aOa0boa2#7.N.Cal.e.e.e.f.f.f.f.h.h.h.k.h.k.n.nbqboa2a..Eai#6.Qae.oaDad#4.X.Xahadab#3.s#6.D.DbY.U.o.U.U.UaHaL#R#R.l.2.0.i.i.haFbuaJaraLaGar#Q#M.b.b.a.a.#arar#W#M#Nas........aAaL#Z#Q#V.#..avaxat#V#Jao..........................avaxap#V#Jap..................................",
".6##.9.6bXbU.#....bfbU#o#obU#oaTaT#e#e#i#f#c.7.y.M.1#eaPbhb4b0b.aWaPaO.L.x.4b8#n#n##.6.9b6bX#obibia6aVaP.4.ubUbf#c.A......#h#gbWbU#m#h.6.8#nbhbjaWa5a6aR.4.N.x.IaX.4a8a5aR.G.z..#k....a5aR.O..a8bxbxa5aO.L.CaO.IbT.M.4bxbx#d#daT.....#.#a5#8a1a7aR.N.Ca0#8.N.valaV.f.f.e.f.f.h.h.h.h.h.h.k.n.n.nbyb3a0a..E.C.D.D.DaHbtah#4.r.W#5#5#2.D#2aJ#3a2.X.X.U.U.U.UaBak.qae.m.0.k.k.k.iahajabaAaGas#0#K#S.d.b.b.b.a.a#U#M#Man.#.....#..aIas#Y.t#1......atao#L#W.a..........................apap#V#L#W....................................",
"#n#####n#h......bUbUb2#n#.#o#n##.4#b.z.1.4.z.A.K#ibVb0bhbxb4b2bgaTaP.4.y.x#a#o#n#..6.6#m#o#hbibZb4b.aVaO.M.x.4#g.6bV..bhaW#ebfbXbW#j.8.A#h#ob0b0aTaRaXaO.4.x.1bTa5bibia5aO.O.uaU..a8a8a7aRaO.ua5a5aRaO.O.x.IaSa5a5.w.4bia6aO.x.O...#..b4a5.O.uaQbqa0#8.N.N.B.CbZ.f.f.f.f.h.h.h.k.k.h.k.n.n.n.oa3bra3a.#7.C.E.DbY.Bbtbtaj#2.Q#y.W.D.D#6aJ#v.W.W.W.W.U.V.U.U.U#Pan.S.U.UaGaGac#P.k#2.Qarar#0#N.t#Z.3.daB#Z.b.a.##U#0ar#Q.#.#.#.##Z#0#S#QaB.#...##T#L#Uax..............................#T#Laqax....................................",
"#obU#o#o##.9#o##bUbUbU#n###h##.9.6.K.1.KaT#b.4#c#ibhbxbibjbxblbgaX.4.M.w.x#dbUbfbU#o#h.6bf#jbibxbxbjaX#d.J.w.4.5#l..bjbjbd#j#i.K#m#g.6.6#naWbiaV#e.K.4.L.I.1aSb#a8b3b5a5aO.H.u....a8b4a8aO.O.IaRaRaO.1.H.1bTaV.O.C.Lb7aRaVaO.1ba.#.#a5a8aN.4.ubqbya0#7.E.g.L.f.f.f.f.g.hbnag#9.E.p.n.n.n.o.ma3boa2a..F.F.Cal.D.DbwaDad#4.r.D#v#y#y#v#v#y.W.W.W.W.W.V.U.U.U.U.U.U.U.S.laHbtac#P#R.i#5.i#U#M#O#N.h.0aGaH#Z#O.b.bazaKas#0#O.#.#....#Q#Nas...................................................#....................................b6",
"bUbXbU#o##.9###n####bU#nblb8.9.9###n.8b2bUbUbfbf#mbhbja6bib.aWaX#d.4.G.x.JaSa6a5aX#e.Lblbd#ma6bib.aT#d.M.x.waP#n..bhblbdbdbb#i.5.5.8.6bT#n#.aT#e#a.xaT.I.GaOaRaZa6bia6aQ.4.I.uaRaTa8a8a5#8.L.uaO.O.L.I.uala5aO.O.CaZ.Oa8a5aR.O.u.#.aaQaQ.N.uboa0aN.F.E.Ca..f.h.f.h.f.gbrbsa0#9.C.n.o.o.o.o.Sbrb3a2a..N.Bala1.Qbnbnaia#.Q.Db5#y#y#y#v#y#y.W.W.Y.W.W.W.V.W.V.U.V.T.U.SaCaHaBak.q#1.k.k.i.i#X#0.j.f.daHaH#Y.q.b.baGaGas#N#O.b.#...#.#.......#.#...................................................................................2",
"bUb6#o#o##.9####.9.9#obU#o#n.9#c.6#gbVbf#nbWb2be#maWaWaWaWaVaTaP#d.J.x.w.1aWbiaVaXaO.O.ubX#jaVaVaXaO.1.x.1.1aV#n#obhbkb7bVaU#e.7#b.A#l#i##.9.4.4.x.1bV.6#m....biaRaRaP.4.G.u.ObVa6a5aRaO.L.u.HaV.I.I.IaOaVa5#8.H.uaObrb4a4aO.O.u.#.a.b.N.ubybxa1#8.N.H.E.f.f.h.h.h.hbobybsag#7.E.E.o.o.o.obobvbsa2#7.E.Ca3.Dafbtb3aga#.Eae#z#z#A#y#y#vaFab.V.W.W.V.W.V.V.V.V.V.T.T.S.Uac#1#P#4aCaG#Z#O.i.j.i.j.f.hac#Y#O#1#E#Earar#X.t#XbQbM.#...#.#.#.#...#.............#.#....................................................auauat#V....bR.2",
"#o#o#o##.9.6####.6##bUb8#o##.9.9.6aZ#o#hbfb2bXbe#haTaTaXaTaTaP.4.M.w.y#bb1aVbZaVaP.4.L.u.O#f.5aPaO.1.G.w.1b1bmbfbfbdblbUbk#i#b.z.7#nbb#g.z.6bdbb#j#c.6.6#n..bfb2b0aO.4.L.Ibia6aVaPaOaO.O.I.IbT.u.1aW#ea1aRaO.L.v.Ia7bsbxbi#8.G.uaO.a.b.ca9bybyaR.O.C.Nb5.h.h.h.h.ha7a7a1aN.P.E.va..o.o.X.Xa0a2ama..N.v.F.B#Ba2bpa2af#3.B#6#A#A#y#y#ybnaEaf#4.r.W.W.V.V.V.V.U.U.T.U.T.S.r#P#4aJaGbtas#R#O.k.j.j.h.g#Q#O#PaC.e.3.2#X.t#X.#bMbF.#.#...#.......#...#..............................................................auayaKat#V#J...3b6",
"#o#n##.9.3#n#o.9#.#nbXbX#n##.9.9#obUbX#obfbfbe#l#g.7.1.1#d#e.4.J.1.1.MbTbVb0bZaVaP.4.G.x.O.7.z.J.4.w.x.1b#aW.8b2be#hbdbb#j#c.K.z#kbk#g#b.6blb2be#j#c.AbXbf#obmbiaW.I.N.ubhb4a6aT#e.K.L.I.1ba.x.Lb7#iaWaT#e.N.H.Ib4..a5aRaO.O.u.L.#.b.c.ca1a7aQ#8.1.ual.h.h.h.h.h.hb3bxaR#8.P.C#6a0.o.o#v#vaga.#8.E.B.Nb7babDbDaiaf#6.B.D.B#A#A#z#Abzbrbpaf.E.D.V.W.U.V.U.V.V.U.U.T.T.U.S.S.S.SaGaC#X#P#R.laq#U.i.j.i.f.h.fayaq#J.0#EbH.#.#.#.#.#.#.#.#.#.#.#...........#........................at#T........................auaKaxav#V#L#LbRbR..",
".9##.9.9.9bX.9.9bU#o#o#o##.9.6#lbUbU#obU#n#n#m#g.9.6#..w.K.M.4.y.walaZb#bib#a6aPaO.L.x.x#d.z#lbV#h.4.1#fbe#m.8.8#n#.aU#i#k.7.A#fb8#j#c.Abkblb2bc#i#b.7#ib8beaWaPaP.4.ubhbjb5bgaP.4.y#a.I.IaO.1ba.4bgbgaU#e.y.La7..a8aQa0#8.I.Nb1.b.c.b.eaQaN#8.O.vala4.h.k.k.h.ia7bxbZaQ#8.u.HbY.X#v#v#v#A#v.N.N.B.Cba#6bDbD#Ba##3.D.DbY#2bA#A#z#zbpbvbo#9.E.B.W.W.W.V.V.V.T.V.T.S.S.T.T.S.S.Sar#Z#1.qaBaKay#W#M.i.i.j.faGaLaq#K.d.dazar#W.3.b.a.a.#.#.#...#.................................#aAawao#T......................auawapao#T#LbY.3b6..",
"#m#g#.###n##.9#n#o#o#n#nbdbd#m#k#o#o##bUbU#h#g.9.7.8b6.8.6.8#h.4.4#eaWaVa5aRaR.4.O.G.u.LaV#k#..Abb.9bfbfbf#h.z.8##.9.8#c.5.z.7bX#h#c.A#fbdbfbf#j#c.5.7bbbWbga6aP.4.x.1bmbibgaT#d.K.w#f.u#daSaU#cbhb7bjaV#e.J.K#d..bqa3a1aQ.N.C.a.c.c.e.f.f.L.H.u.FbZ.i.h.h.k.k.ka9a9aQ.O.N.u.1.X.X#v#v#v#v#B#B#B.Nam#B#B#BbDbDbA.D#3af#3bA#A#z#A#za2aia..E.B#6.Y.V.V.U.U.T.V.T.U.T.T.S.T.S.R.S#Q#O.qaeaxayaq#M#X.k.j.j.iayaq#U#K.daybuar#U#Mba.3.a.a.#.#.#.........#..........................avao#Tao......................atat#L#T#JasbRbS....",
"#m#g.6#n####.9.9bSbU#.bfbfbe#m#k.7.z#i.4aU#c.8.6#gbT#h.9.9.7#.bl.5#cbfaXaXaP.4.O.I.x.1bTaW.8.8bTbfbe#o#n#h.8.6#l.6.9bV.z#b#b#f#c.z#l....bbbb#j#k.9.5#ibbbhb7a6aP.4.xbVaTaWaXaP.4.x.JaT.Ib1.....5biblbjaP#a.w#baZbobyb0a1aQ.N.C.N.c.e.f.e.f.f.h.Na0.p.h.k.k.k.p.kaQaQ#8.N.u.1aRa2aga#.F#B#B#BbD#BbIbDbDbDbDbDbCbCbDaJahbAbA#zbA#z#z#9#9#3.B#6bs.W.W.V.V.V.V.V.U.S.U.T.S.SbObM.S.RbObOayax#0#U#KazaIac.k.j#U#L#MaM#UaxaA#U#M#XawaAaq#U.a.a.#.#...#.#.#.#........................#V#L#L.#......................#T#V#L#LaKb8.3.#....",
"#l.8.5#gbU#..9#n#o#lblb2b2#o#j#g.7.6aT#k.y#k.5#.b8#o##.6.9.5#nbe#m#gb2bX.4aO.1.G.G.Ibab1.9bfbb#gb2#n#h#h.8.z#.bU#gaU..........bmbga6aR.4.G#k#c.7.A#fb8.Kbibjbj#dbc#i#b#j#e#e.4.x.waZaWaV........a6aWaT#d.w.AaZ..a7bybya1a..N.C.N.e.e.ea6aV.4.ha9aN.i.ka2a..j.na0a0.O.N.C.Pb#bvbyai#7.B.E#B#BbDbDbDbDbDbDbCbEbDbCbCb3aj.DbAbA#zaFaDad.D.Eala3.Y.Y.V.Y.V.V.V.T.U.T.T.S.S.RbObF.R.S.SawaMaz#0.t.laGbuas#Q.n.jayaGaz#Maq#W#M.t#ZayaKaq#T#M.2.a.#.#...#...#.............#............ao..............................#V....#Eb6......",
"#c.9.AaU#obU#o#n#..9blb2bWbmaU#k.4.5#j.4.z.4.K.5#n#h.9bfbfbf#m.8#gbUb2bX#m.G.O.u.1aSbxa6.6#h#m#c.6#g.8.8.6#g#obb#k.7..#o##....bib0a6aX.4.J.G.7.z#fbV#e.za6aVbkbhbcaU#e.A.7.y.x.xaTaW............aPaP#d.K.w#ab1..boa9a7a9aQ#8.Cal.e.e.fb4aV.MbrbxaOboboa3aN.P.Fa3a0#9.B.NaQbobsbqag.E.B#9#BbIbIboam#3bEbDbDbCbCbDaEai#3.QbA#zaFb3aFab#2#PbA.Y.W.Y.Y.ZbM.V.V.V.U.T.T.S.S.TbFbC.S.S.RazaAaz#U.t.RazaG#X#Oac.l.kaq#U#N.f#L.t#Xaxataq#T#Jaq.2bRbR.a.#.#.#.....#..........................................................b6.2........",
".8.A.9bebUbXbU#l.9.9bfbhbhbgaU#e.4.y#jaU#i.4.z#bbb#jbfb2bU#n#h.8.6bfbfbb#hbdbd.4.4aX.7#o#.be.7.7.6.8.7b1.8blbW#j#cbhbcaU.4bda8b0b0biaR.4.w.LbmbhbjaT#b.waPaPblb7bc#i#b.y.4b6..aX.9be...............4.y.x#fbV.#b2bra8bra1aR.O.P.N.f.fa6a8boa3a0#8aObob3bq#9.E.Fb3a0#7.C#v#va2a2a.a#.B.EalbDbDbDb5ag.Ebzbta2#9.EbDbA#3.sbw#z#zaFbzaD#4.r#2.W.W.W.V.WbObOaGaBaa.S.T.T.S.R.T.R.R.T.T.Razaq#0.tan.lar#0#N#Q.l.l.n#S#Mas.i.i.f.j.d#W#W#J#LaA.b.b.2bRbH.#.#.#.#.#...........................................................2b6........",
".6.8b2.6#o#o#n##.6bWbhbxb4bgaUaP#b.y.4aWaT#c.z#ibb#ibUb2bW#m#g.6.6#n#n#h#gbkb0bc#i#c.5.z##.9.A.A#l.5be#n.6bbaU#kbhaWaTaU.4.Aa6bib.aSaO.1.x.1.7aWaT#e.y.KaTbdbkblbh#e.7.w#k.............................4....bfbfbrb4b3a1aO.N.H.I.g.hbhbqboa3aN#7.C.Ea2a.#7.v#7a3#7.F.C#v#A#9#9a#.E.Eb1bDbIbEa2ama#.Bbpb3ai#5.E#2#z#z#A#y#y#yahad#5#2.Dam.V.V.V.V.VbMaHaHaCac#P.SaEah#5.S.R.R.R.R.R.R#U#K#X.R.l.R#Q#Qar.l.l.l.k.l.k.j.i.g.h.d.f#M#Xaz.c.d.b.b.a.2bRbR.#.#.#.#......................................................bS#E....at#V..",
".8be#h.6#g#h##.6blb2bhblb2bgaT#e.7.y.4aW#i.4.y.4bb#kbfbf#n##.8.6.8#o#h#.bkbWb2bcaU.4.7.7##.9.z#iblblbf#m.8.6#cbhbjbmaT.4aWaR.4aXaP#e.M.x.waS#c.7.4.y.wbV#.aUbcbbaP#b.w.zaZ.8................................bWa9brbsa8a4#8.N.C.Na7a1bobxb5a7aN#7.C.Ea.#7.B.1b7a..P.CbTa0.Pa2.B.E.Ca4a#.BbIbEbIa#.Ebzbpboaja#.B#3bA#z#y#z#z#y#2#4#2#2am.V.V.V.U.T.UaCaHbuaCak#P#Rbvah#5.Q.T.R.R.R.R.R.R.R.R.R.j.R.R.R.R.j.l.l.l.l.k.k.j.i.i.h.d.d.g.g.d.c.c.c.c.b.a.2bHbR...#.....#.#..............................................#Eb6..aAav#V#J",
"bhbcaU#i.7.9.9#gbebfbhblbjbm#e#c.y.w#e#i#c.5.y#b#k#b#n#n#m#..6.8#l#n.5.8bhblbkbc#k.7.z.K##.9##aUblbmaWaT#e.6.5bhb2bcbibia6aVaO.4.x.O.G.Gbaa5.7.7.w.yaZ.6#obfaT#i#c.J.zbTbb#g.8#h.6..........................bb#ia9a4aQ#8.O.C.ualb0a9a9bqbqa4#8.F.B.F.F.B.FbY.X.N.Balbra0.E.B#7bobvag#7.BbIbEbIbJ#3aiaiaf#5.D.Dan#A#A#z#z#y#z#y.Z.r#5.W.W.W.V.VbGaHaHaCaBaa#2.qaebtaj#3.Q.T.R.R.R.R.R.R.R.R.R.j.R.R.j.l.R.l.l.l.l.l.l.k.i.i.j.j.i.g.f.g.d.d.c.c.b.b.a.a.2bRbR.#.#.#.....#........................................bRbR..auaxav#V#J",
"bjbhaUaT#b.x#b..#n#mbcbmaTaP.4.5.A.1aZaU#c.5.w#i.4bmbmaT#e.K.7bTbk#n#..6bdbcaU#k#c.5.z#faU.9#nbdbjbhaWaT.4.5.Jbjbhbmbxb7a6aX#d.L.w.L.1bab#.8.A#gbX.8#.#.##bi.4#c.y.y#fbd#h.8.8#h.9.........................#.7.5a1aQ#8.N.P.u.1a4bxa5a0a0a0a..N.E.Bal.o.o.X.X#v#va3bqbq#9bpbnagbnag#7.D.BambJbEbEb7#5#9#6.D.Balbs#A#z#A#A#z#y.ZbMbJ.W.W.V.W.V.VaGaLaLaaaa#P.r#1aHaj#5.Q.D.RaGaLac.q.j.R.R.R.R.R.R.R.l.R.l.j.R.l.l.l.l.k.l.k.i.h.h.h.g.d.g.d.d.d.c.c.b.a.a.aalbabR.3...............................................3.#..apap#V#Jaq",
"b8bgaT#k.4.y#b..#o#caUaT#i.4.5.x.KaZaY#i#c.z.7bmbibVbmaU#e.1.xbfbU#h.8.6aUaU#i#g.7.A#caZ.9b9bdbib4b0aWaT#c.J.yaWaTbibxbZbiaP.O.I.xaPaOb##c.z#cb8##.6#o##.9bjb4aV.4#eaW#d.8.A#l.9.6......bd#k...............#...#.P.O.O.C.H.Nb1a4aRaOa.aN#8#7.C.Falb7.o.X#v#v#v#v#Aa0boa0.Ebv#9a.#9.E.BbabEbJbIbIbc#c.Q.E.B#9bwbzaEag#3#z#y#y.YbJbDbJ.V.V.V.U.UaIaCac#R.r.qaead#5#3.D.Db5bAaGaL#Y#O.l.R.R.R.R.R.R.R.j.l.R.R.R.R.l.l.l.l.k.k.i.i.h.g.g.h.f.g.d.d.c.c.b.b.a.a.a.#.3bHbR.2........................................bRbSap#V..#T#Jaq..",
"b0bh#i#e.z.A.4aUaT.4b8#e#c.K.A.y#bb1bm#k#b.5.4biblb4bcaX#e.4.Jbe#j#..6.Abe#k.8.5.A.zbTbb#obXbbbhb0b0aW#e.4.y.y#e#eaWbia6aP.4.1.x.MaW.8.8.A.9bV#..9#.#o##bmbia8a6aRaO.waP.z#l.6.9b6....b0be#k#b.........#.#.#.#.#.a.x.H.CaOa7bXaN#8.N.u.E#7.E.C.NbT#m.o#v#v#v#v#AbBbybrag#7.B#7.B.E.BambIbIbJbJbI.4.AbVbA#A#zbpbybnag#5.B#y.Y.W.W.U.V.V.V.U.Ta9#8#Y#P#O#PaI.B.S.l#2#2ae#O.Zac#Z.r#PbFbCbMbFbB.R.R.R.R.R.l.R.R.R.l.l.l.n.l.k.j.j.i.h.f.h.f.g.g.g.d.c.c.d.b.a.a.#.#.#.##EbSbR.#..................................auaAat#V#L........",
"aUaT#c.4.xbhbhbcaU#k.5bh.J.A.A#bbcbm.w.4bgbmaVaP.1b0aYaT.4.K.J#e#g.9.6bU#obf.5.A.KaZaY#gbUbdbebmbmaW#e#d.K.x#baW.K.AaVaPaP.O.x.1aS.9.9be#g#gbgbdbb#g..bf#obib4a6aP#d.I.O#l.8#.#h....aU.7#j.7#f.............#.#.a.b.c.c.e#c#n.h.i.I.uaSa5bf.N#7a0.z.X#v#v#v#v#B#Bbobvbsa..E.E.E.Fb7bIbIbIbIbJbEbDbDbDbA#AbA#Abpb3bpaf#3.D#3.V.WbNbE.V.V.V.Vbobr#8aL#R#1#R.q.D.R.R#S#Q#OaGbQ#P#O.qaMbB.ZbF#zbC.R.R.R.R.R.l.l.l.R.l.l.l.l.l.l.k.k.j.i.i.h.g.h.g.g.g.e.d.b.b.b.a.a.#.#.#...b.2bSbS.#............................bRauaAax#V#L........",
"aU#i.4.AbhbxbhbcaU#k.4.xbWb0#eaT.4.J.wbibga6aVaP#d.IaT#e.z.w.1aP.9.z#lbUbUbU#n#g.6##....bWb2beaWaVaT#e.4.x.waX.6b6.6#c#d.M.L.wbab.aWaT.4bf#jblbWbe#k.7b8a8bxbybjaP.O.I.O#h.6......bWbcbf#m.6bd.............#.#.a.c.e.e.f.f.h.h.k.k.n.n.nb2bW#k.zbX.Xa0a.#A#B#BbDa0a2a.#7.C#7.BambJbIbIbJbEbEa3.N#BbD#BbDbCamaibnah#6.E.D#9bNbJbJbF.V.U.UbMboaN.PaCaB#Y.q.r.EbA.l.l.l.jbAbMbC.l.jaHac#z.R.R.R.R.t.Rawaq#M.R.l.R.R.R.R.l.l.m.l.k.k.i.i.h.h.j.h.g.g.e.c.c.c.b.b.b.#.#...#.#....#EbSbS.#......................b6aSatat#V#Jaq........",
".4#c.K.zbhb4b2bcaU.4.z.z#caYaT.4.4.xbib4b0a6aVaP.4.w.L.4.x.A#faTaWaT.4bUb8bW#m#g.7###.bkbWb0bd#e#e#e.5.w.yaZb6#n##.9bU.G.G.1aSb#aVaX.4.M.Jblb2bW#j#g.7#caVa6a6aR.O.G.uaS.8.7....bkbkbXbX#j.7#h...#.....#.#.#.a.b.c.e.f.f.h.h.haSaR.I.n.pbd#j.7.z#vbqa7aQ#7.EbDbIbD#9.E.E.Fa4bIbJbEbEbpbnag#3a1.N#BbAbBbA#AbJaiafa##3.s.DafbNbCbMbMbFbJaCaHaCak.P#Zak#P#PbubYbM.lahajbFbMbC.Z.jaHaLaa.r.R.R.t.R.RawaMax#U.R.R.R.R.l.l.R.l.l.l.l.k.k.i.i.i.h.h.f.h.g.d.d.c.a.b.b.#.a.#.#.#.#...#...2bRbT....................#Eb6..#T#J#T..........",
".4.A.x#fbhblbkbcbgbmaU#i.KaX#e.4.x.wbhb4b0bmaX.4.M.I.LaR.x#bb8bgaWaT#b.xbfbe#g.8.9#h##bTbfbb#j#c#b#a.x.y#fbVbf##.9.9bU#mbha6bibia6aR.4.x.Jbebfbb#k.7.z#laVaVaP.4.I.uaSaV.6bX....aU#jbU#na8a5aO.O.f#o#n.9.#.a.a.c.e.e.f.ha7a1#8bxaR.O.Ibm#ka3aN.Nbqb3bra..F.CbDbEbIbI.F#7ambJbEbIbDbnbybsag#3.E.vbAbNbNbMbNbN#5#5.E.B.Bb1bNbJbMbCbEbJbBbtbtadaa.rbC#P.raDa2.S.RbzaEaj#2bF#zbGbBadaa.ram.RaqbBbA.Raxaq#W#Jar.l.l.R.R.l.R.R.R.m.l.l.j.j.j.i.h.g.g.g.g.d.d.b.d.#.b.a.#.a.#.a.#.#.....#...2bRbS.#............bSbT..avat..............",
"#h.4.4#ibcbcbjbhbhbmaT#e.y.y.4.y.xa6bgbjbib.aO#d.J.x.MaP.1b#bcb0aWaP.4.1.4#h#..6.6#n#o#jbb#j#k.7.A#g.1#aaT#nbmbgaWaP.Mbib7bib5b4a5aP.M.w.4#j#j#l.8.A#gbb.6.4.4.L.I.3bZ.8#hbb.8bb#j.5#ma8b0a5aO.N.wbU#n.6.a.b.c.c.e.fbgbrbxa1#8.CaR.N.Ibqa3a3aN#8.Ca9aN#7.C.NbIbDbIbU#n.9bJbDbDbDbDa2bpa2a#.B.DbabDbNbEbEbFa6a5.D.B.Ba4bNbNbEbJbCbIbKaHbtbtad#4.r#4bPbMbBbBbMbzbvbt#5.D#3bFbCbBbP#PaabBaLar#QbC.Z#U#V#L#T.l.R.l.R.R.laq.R.l.R.l.l.l.k.j.i.h.g.j.g.f.d.d.d.d.a.b.a.#.#auauap#T.#.#.#.#.#.#.2bRbS...........2..auaKatao#L..........",
"bXb0bVbbaWaTbhb7bZaZ#i#e.K.z.y.x.1aZa6aWaVaP.4.M.x.x.1aVaZbjblb0aX#e.J.w#a.8.6.8b8#o.9bU#g#c.7.4.7bV###h.8#gblbjaWaP.4.wbVa6bxb.a6aO.G.xaP.8#c.8.z#cbX.w#f.L.x.L.MaSa6bfbebhbhbdaU.4.AbibxaR.1.L.O#n.9.9.b.b.c.e.ebia7bxbyaQ.N.uaQ.ualbqb5a4a..N.Ba.#7.C.Fb8bIbEbXbU##.9bEbDbD#BbDagaga..E.BalbCbh#ebJ#Abib5a5.O.LbNai#3bJbCbEbAbQ#FaDaCad#4#P.qanbEaGaHaB#RaEaEae#2.s#5bEbA.ZbFbF.jarar#X.tbB.RbB#z#W.R.Saq.l.R.laKax#U.SawaAap#J.k.j.i.i.i.h.f.g.g.d.d.c.b.b.a.a.#axayap#Lao.........#...#aSbRbSataobSbS..auawap#T#T..........",
"bkb2b2bb#kbhbxblbWaU#e.4.y.z#e.4#eaYaVaXaP.4.M.G.x#faZaT#cbmbmaW#eaW.y.yaS.9#.#lbT##.8bU#m.7.5#cbebe.9.8#gbgb0b0aVaP.K.waWaVa5aX#e.M.x.waV....aW#c#d.x.1aWb2aT.OaO......bdbhb7bdaU.4.AbmaWaP.I.xaR.9#h.a.b.b.e.f.fa6aRa9aR#8.I.FaR.O.1a7bqa3#8.E.CaN.C.EbabDbIbI#o#o##.9bDbD#B#B#B#B#3.E.B.NbJbhbc#b.1#ya8a8aO.L.Obpa2#9bK#AbEbEbK#Bacabaa#P.sanaebJaLbuac#R#5ab#2.Q#6aEbBbMbB.ZbFbB.jaI#Xbtazazaq#M.RauaKax#V#Latax#V#Jaqawax#V#J.l.l.j.j.i.h.h.g.d.g.d.b.b.b.b.a.aavap#V#J.#.#...............#auaxap#T....atap#W#Jaq..........",
"bdbkbe#k#cbmbgbcaU#e#b.z.x#baZ#n#h#g.4aP#d.M.G.w.1bTbi#e.4aUaT#ebibmaV#e.4.Jbf#m.9.9bUbU#n#.bmbmaT.5.9#h#.bmbiaY#e#e.w.1aTaPaRaO.4.x.1bTa6.....4.4.K.yb1bhaW.4.y.yaU..bhb2bhbkbc#k.5bia8aWaP.4.xb4...#.a.b.c.eaRaR.4aP#8.O.H.Hb1.1.o#va1aQa..E.v.Na7a9aQ.O.HbIbIbD#.##bK#B#A#A#A#B#BbObN#7bCbC#f#e.zbc.WaRaR.1.HaSbna..DalbIbCbMbEbJbF#2#P.s#4aJbKbIaGaB#R.qae.r#2#9btbBaGaI#0#zbB.ZaGaz#UayaKaAaq#X.tawayao#M#W.R#V#M#T.RaoazaraB.l.k.k.i.i.h.j.h.f.g.d.c.c.a.b.b.a.##T#LaA.#...#...#...#....auaAayao#L#V....#T#Jaq............",
"bb#m#j#c.5.yaWaT#i#d.z.A#a#faUbdbb#i.8.M.4.x.u.1aSb..A.4.K#b#ebibib.aV#e.4.xbf#m.9.9b8bU#nbhbjaY#i.4.x#nbiaWaTaT.4.A.wa6aWaP.4.4.u.Iala5bmaT#e.z.K.KaS#baX#e.4.zbT#obUbdbhbbaU#i.7bib4b0aT#e.M.wbcaU#e.a.ca8a8a5aRaN.G.I.N.Pba.o.o#v#v.N#8.P.F.Nbrbxa9aQ.O.HbIbEbDbIbD#B#B#B#AbNbNbDbNbIbJbNbJbAbPboa0.NbJ.O.uaSbM#6.E.EbEbCbFbCbPbMbBbM.Z#4bAbAbI#D#Zak.q#2#4.YbB#AbFaGbYaI#X#ObBaCadazaraAaGaG#0#Q#Kaqap#W#Jax.m.l#V.l.RaAazar#X.t.l.j.k.i.i.g.d.h.g.g.c.d.a.b.b.a.#.a.#.#.#.#.....#........avaxap#V#Jao......................",
"bW#i#f.8.5#b#f#e#e.4.y.zaTb8bkbdbb#j.4bjb7.M.JaOaV.y.w#b.1aUbib0b4b.aTaP.J.w.4#h.9.9bU#o#hb0b2bm#e.K.y#.bh.4#e.4.J.ybia8aWaX#d.x.M.4bjb0bcaT.4.w#i#c.z#i.J.y.x#fbU..#oaUaT#f#f.5.5bgbjbjaX#d.G.yaTaU#d.ybfa8b3a6aRaO.N.I#na9aQ#8#p#v#v#v.E.F.Na4bxb3bqaQ.O.C.NbIbE#BbA#A#A#A#BbJbNbDbJbJbPbJbJ#AbJbqa..CalbNbEbKbIbJbNbJbBbIbJbKbDbCbMbCbJbE#FbJ#AbCbG#R#4abbE.WbBbGbFaIaG#Z#QaHaHaFac#R#Pazazaq#U#K#NaIar#Jaz.S.R.Z.R.RazaMaLar#X#K#W.k.k.j.i.i.h.d.d.g.d.d.b.b.a.b.a.a.#.#.#...#.#.#........aoao#V#J#W.#......................",
".wbd.7.z#fbV#c#b.7.A.z#cbXb2b2beaU#gbhblbmaVaX.4.4.y.y#e#n#ibgbjbhbi#e.4.G.x.4.8.6#g#obfbmbhaWbdbb#i.7aTaW#eaWaX.xbib4b0aWaP.4.G.Mbgblb0bj#e#b.y#e.A.z.#..bU#n.6....#n###c.A.7.5a6a6aWaT#d.1.x.1bWaT#c.ya8bxbZb#aP.4.P.La8a0a.aN.I#v#v#v#B#Bbja1a7a7a0.O.N.CalbD#B#A#A#v#A#B#B#BbJbIbJbDbJbJbD#zbPa..E.EbIbJbIbK#BbJbJbDbIbJbMbJ#BbJbFbDbD#BbL#BbBbKbKbP#ybJbDbGbD#y#z#Z#Z#X.taHbuaLaa#P.rar#0#U#K#ObYaLaB#X#O.RbC.Z.R.RazaGaz#0#M#K#0#M.l.i.i.f.h.g.g.g.d.d.c.d.d.a.c.a.a.a.#.#...#.........#..#L#L#W..........................",
".A#j#c.K.z#i#g.6.7.7#kaPbkb2b2beaU#kbibibiaWaX.4.J.w.zaT#.##aWa6aVaP.4.M.x.waT.6#.b8blbgbmaT#e.5bb#k.8.5aPaPaP.4.4bib0bZaVaO.L.w.MaWbhbcaT.4.J.waT.yb2.5bfbX#h.7......b7bb#gbibibgaPaX#e.M.x.1b1aT#c.z.xa7a8a5aRaO.N.ubqboa2ag#7.B.H#v#B#B#BaU#ea1aQ#8.1.v.FbabC#AbNbJ#A#AbDbDbDbJbEbDbEbDbNbN#vbJbzah#5bDbN.WaE#6bIbDbIbJbJbK#BbDbD#AbDbDbG#C#CbCbDbJbD#zbQbK#B#y.YbGbO#O.qaeaCaDac#P.q#4.W#Q#K#NaCaGaHar#Q#O.R.Z.Z.S.Rarar#0#U.t#N#L#J.k.j.i.h.h.g.g.g.g.c.c.c.bauat#T.#.a.#.#.#...#.#........b8.2............................",
".x.K.8.A#fbebb.5bcaU#e#cbdblbkaU#g.4bjbVbja6aT.4.K.w#aaU#k.5aVaXaP#d.1.x.1aZaV.7bVbbbhbhbmaU#e.K.w#k.5.6bf.K.J.4.Ma6bmaVaO.4.G.x#e.4aVaT#e.K.y#eaW.K#c.5bia6aX.4#b..bdbf#ga8bib7bjaX.4.K.x.Jb#bm#e.4.yaZaRaRaRaO.O.ubobybZa0a.#7.C.F#A#BbIbIbIbD#8#8.N.H.FbTbD#AbNbNbDbI#B#BbDbDbDbDbDbNbNbIbIbJbzb3ai#5.DbPbpbp#9.BbKbIbMbKbK#AbL#BbIbG#C#BaB#R#ybBbDbC#BbP#CaGaCac#QbObGbB#Aacaa#4.r#Pb4#AbB.Z#0#0as#Z#R.t#1.S.S.R.R.R#0#0#Q#S#NbY#J#T.l.k.i.j.h.f.g.g.d.e.d.b.caAaw#V#T.a.a.#.#.....#.#.....#bS.#............................",
".x#a.8.7bXbbbbbhbhaWaT.4bdbb#j#j#cbibhb4bVaVaP.4.z.x.4aY.7.zaZaP.4.4.J.G#db1#m#g.7bib0b4bgaV#d.y.w#c.z.7#j#m#g#dbcaVaRaP#d.L.x.1aZaVaP#e.K.K.1b1.x#f.za8a5aRaO.L.x#b#o#..7bgbibia6aP.O.x.MaP.##b.5.w#bbc.eaO.O.O.I.Hbobybva4a..E.C#7#m.8#BbIbIbDa5.H.I.IbabD#B#A#AbJbMbJ#BbNbNbDbDbDbDbMbIbObMbKaFbnaf#6.QbDbnal.E.EbI#B#BbD#BbGbDad#2bKaCbtaBak.qbGbD#B#A#BaGbYaC#Z#Q#ObDaFaHaF#P.q.ran#SbCbC#z#z#K#Y#Q#O#Raz.RbB.Z#z.ZaG.t#S#QaC.t#U#J.n.k.j.i.j.h.g.g.d.e.d.c.bavao#Lax.a.a.#.#.#.#.#.....#b8#E..............................",
".y#eaWaZbdbdbhb0bjaWaT#caUaT#i#cbkbibjblbjaW#e.4.J.w#e#h#g.zbRaU.M.J.waSb.bf#m#g.6bhbjbxbm#e#b.w.yaP.A#fbf#j#..5#jaOaP#d.1.I.LbVaVa6aX.4.x#faU.z#bbkbia8a6aRaO.N.xaO#o#h.6aWaWaVaP#d.x.GaZ.#.#.#.a#e.e.ga7bx.N.I.Lbaa3a3a0a.#7.C.Bal#m.7#m#BbIbJal#8.H.ObDboboa0#7.vbCbJbNbNbEbJbEbNbJbA#AbQbJbDahab#3.s#6bNa#.E.DaEbIbKaLaF#4aHaHaD#4.saGaGaBak#P#x#B#v#x#CaGaGaC#Y.q#ObGaHbYaLae.r#2#Q#Xazar#QbObMbFbB#XbB.SbB.Z#z.Z.T#Z#X#OaIayaz#U#K.n.l.j.i.f.h.d.d.g.d.c.d.c#T#J#W.a.#.a.#.#.......#.#.#bS.#..............................",
".1aT#nblbdbhb0b4bVaUaP.4.J#c#.bhb0aWbgb.aV.4.4.1.x.JaT#m#.#hb2bhbcaW#i#bbgbmaW#e.JbcbgaVaP.4.1.w.1aZ#cb8#m#g.z.8#m.z.M.M.u.1aZa6b4aWaP.4.x#h.1.4aU#hbxb4a6aRaO.I.HaS#n#..9bgaPaP#d.I.wbTaW.#.#.a.b.c.e.fa1a5aQ#8aO.Ca0aga.#7.F.B.Ea1#..8bDbDbIbIbIbJ.1bD#Bbrb5a0#7.Ca2a.bJbDbJbIbnai#6bNbNbJbCahbN#2.s#2bwbJbL#FbIbDbI#BbtaJ#2bzbtaD#4.QaGbYaC#Y.qaHaBaa.raGaBac#Z#R.q#1bDaDaDab#2.rab.tazaMar#X#MbFbF#zbB.Z.Z#z.T.Z.Z.R.S#Q#zbEaq#0#J#W.m.l.k.k.i.j.h.g.g.d.d.c.c.d.b.b.b.a.b.#.#.#.#......b8bR.#..............................",
"bVaWbkb2b2bcaW#i#eaT#e.5.A.4.7bkb2aVaVaX#e#d.K.x.1.1aW#.bf#obhbhbdaWaT#b.y.5#j#e.4aTaTaP#d.1.x.1b1#fbV#h#g.7.7b2.9#faTbg.4aPbibxbjaWaO.L.x#d.9#m##a8bxbxbiaO.O.I.uaP#g.6bUaXaP.M.L.1aSb#.#.#.#.b.c.e.e.faOaN#8.I.C.O#7#7#7.E.F.FbY#8.Ebfboa3a..PbJbIbD#Ba2bra7a..N.va.ag.Ea2bDbzb5aia#.BbMbPbpbn#9.Dbna2af.Eag.C#C.UbIbIad#4.saDadaa.r.raGaHac#RaHbuaD#4.qaL#Y#Y#Q#P#1aA#y#4ab#2.r#6aDaCaAaG#X#Q#O#M#A.Y.Z.Z.S.S.T.Z.T.T.R.R.RbCbC#M#0.S.S.m.n.j.j.g.g.f.g.g.c.e.b.c.b.b.b.a.a.#.#.#.#.....#b6..................................",
"b7bgbkblbhbhbcaT#e.z#b.y.w#fbcbhblbdaP#e.4.J.w.1aSb6aY#lbUbkb0b7bhaU#e.4.y.KaT#e.5.A.4#e.z.z.1bTaY.A#ia6aVaP.4.H#.bUbibhaWaXaWbmaV#e.M.w.JaZ......a5a8aVaR.4.H.u.LaP.6#g.....K.xaTa4aQaO...#.a.b.c.e.gbfbW.I.N.ualbsa5.C.P.B#8a4a0a..E.Cb4a1a..E.EbEbC#z#ya0a.#7.B#7bvboa2ag.E#7bpaf.E.BbEbza7a2aNbpbva2af.E.B.EbK#BbKbKbD.Dama.#4.r.rbYacac#R.qaCaCaa#P.raCar#O#O#1aC#y#y#A.s.r#5ahbKbJasar#X.t#ZazaqbB.R.R.R.l.S.S.T.R.R.S.T.TbA.S.T.S.S.Uayaxaq#K.h.h.j.g.g.d.d.c.d.d.#.a.a.#.#.#.....#.bbR..................................",
"aU##bcbhb0bZbm#i#e.y.y.A#faZ.9bcbcaU.K#a.J.x.I.1bTaW.9#o#nbhbWb0bjaT#e#b.y.4aU#e.K.zaT.z.4.KaVaY.Abibga6a5aP.O.u.xbb#cb2aW#eaPaXaP.4.w.1bVaV#g.6#naRaRaR.4.N.u.1aS.O.G.7#.....a8a7a5a1aN.I.C#b.c.e.e.fbebe#c.7.Oa8bra8aR.4bsb3bsa.#7.E.EbraRaO.C.FbD#B#A#y#7.N.C.Fbsbob4a3a..E.E.B#3.D#6bDbqb4a7bobrb3aiaf#6.Q#8bKbIbK#BbKbI#G#Gadakaa#w.l#R.q#Raaaa#P.qbY#Y#Q#OamaIac.YbG.X#w#y#B#A#AbK#Q#Q.taaayaGaq#M.ZbCbB.Z.l.S.T#z.S.R.T.R.Vax.S.S.Uaybuax#W#M.i.j.f.f.g.e.d.c.b.d.d.a.a.a.#.#......b6b6...........#......................",
"##.9#mblb4bWaYaP#c.y.z#ebVbc#laUaU#i#k.w#a.w#faTbg.6bXbU#obcbhbcaT#e#b.w.w#c#f.4.K.zaP#i#j#k#c.z.5bib7bjaVaP.4.xaObb#g.AaT.4.x.1.4.x.waSaVbb#g.z#hbb.4.4.N.L.Ibab#aO.G.Ibkbca9bxb4a5aQ.O.I.H.5.b.e.f.h#.#g.Ab1bfa8b4bxaQa2bqa3a0#7.N.B.Na8a5aO.L.IbD#A#v#A#B.E.Eam#7a3boa2#7.B.E.B.D.EambDbqbra7bnbna2a.#6.B.BambIbD#BbI.U#CaHaHaCak.r#x#xbL#F#C#x#P.rae#C#x#PaaaGaGac#P#BbL#G#p#yaHaFaabG#y#X#UayaA#0#K#0#z.ZbB.R.SbB.Zaxaq.T.TaMav#T#T.TayaAar#W#J#W.i.hawawap#L.d.c.c.b.b.a.a.#.#.#.#..bRat#T................................",
".6.6bgbhblbhaT#e.4.w.yaTaY.8bU#f#k.4.5.5.KbRbVaP.9bU#ob8#oaUaUaT#e#b.J.A.1aZ#d.z.A#baU#g.7#c.z.5a6biblbjaX.4.G.x.OaS.8.5#g.y#aaZb8.1aObUbe#g.7.6.6bd.4.L.I.4bab#aR.O.I.Lbra8a8bxbybraO.O.C.IaRaU.f.f.h.h.k.h.n.na8a8a5aO.La0aNa.#7.B.Calb2a5aP.I.G.E#v#y#A#A#Ba2a..Fa2ag#9.E.Ca.#3.EbIbIbIa2a0aN.Nafafa#.E.B#3bPbK#CbGaEah#3aHaLadaFaDabaa.s#x#E#q#p#x#wbG#C#GaGaLaLaa.r#1#F#x#F.jaHaL#R#P#A#AbFaqaq#M#K.S.m.Rawawao.Sawawaq#Lavaxao#L#W.Saqaq#W#J#Kat.j.kaKaAaq#T#L.d.b.b.a.a.a.#.#...#avauavao#J...#..............avao........",
"be#jbkbcaWaT#e#b.x.w#eaU.6bfbfbk.w.4.z.1aZbjaWaX#e##.9#o#o#eaP#e#b.K.w#bb1bV.z.A#baTbc.7#c#l#caUaVa6a6aXaO.1.u.GaS#cbdbdaU#caYaZ#o##.9#n#l.8.zbXbUbe#h.6a9a8a8aR#8.I.uaObrb4a5a8a1aQ.O.F.C.IaZ.e.f.haU#e.k.n.n.oa1aRaO.L.u#7#9.N.E.Cbaa3.CaR.1.I.I.E.Zbqa3a2bpboaga#.B#3.E.Eba#6bDbCbPbJbIala..N.C#6#3.D.D.DamaDab.Dbvbpah#3.QadaHaFaDab#2.Q#C#x#pbG#w#v#F#v#w#vaB#Z#O.r#C#p#x#F#wac#R.raC#A#AbI#M#M#JaMbMbFbBayax#UaxazaAao#Jaqao#L#TbMbJ#V#U#J#MaMat#VawayaAao#L#M.dbO.#.b.b.a.#.#.#.bavaAat#V#J................auaAap#L......",
"#h.8bkaTaT#e#b.y.y#fb1#l.9bW#hbcbd#e#caTblb0bbaT#c.A.6#o##.6.7.4.z.A#baZaY.K.y.zbTbj#c.6#c.7bUbf#oaXaPaO.O.I.1baaVbfblbd#j#c.A#h##.6#n..#c.6#lbUb2be#g.9bfaRaRaO.N.u.Oa9brbsaQaRaQ#8.N.v.1aSbU#n.fbWbc#i.AaX.1.o.4#8.N.1.Ib1.P.N.Fbaa4.F.CaO.I.CaS#7bqb4a3bpb3bsa..E.FbJ#7a..1bIbDbNbPbJa2#8.C.Falba.B.E#9aHbvaFab#2.Dbuaf#3.QaFbvbvahaa#2#2ab#CbL#D#v#v#s#x#x#p#R#P#Pbw#x#v.i#v#v#E#R#ybQbDbQazaraz#0bObMbC.Zaq#W#JbYaxaq#U#KbBbO#VbBbFbBbC.T#Uavavao#Lapaxaq#T.tar.dbPbF.b.a.a.#.#.#b6atat#V#J#T.......#avao...#awaxao#J......",
".7bdbk.4#e#c.J.K.zbTbc.6##bdbb#j#j#i.4bhb2b0aW#k#b.y#a#o.9.9b2...7.4#k#b.5.x.1aSbV#k#b.z#c.6b2bX#n.4.4.O.J.L#fbZ.8bkb2bU#ibhbcaU.8.1..bUbUbU#hbhbcaU#b.z#maO.O.H.L.GbTa1a7a0aQ.4.O.I.I.Hbaa9#o###.bWbdbgbf#m.8.w#v.u.N.Oba.Na1bqa4a.al.C.F.1.Hala5#7a3bqa3a2boa2#7.E.Ba.bJbIbJbK#CbPbKbva3#7.NbIbK#BbIbIbKbpbtah#5.r.Daf#4.B.DaDaJaEae#4.r#2#v#C#x#GbL#w#x#p#p#q#w#w#w#F.XbG#B#v#x.o#A#AbG.YayaGazazar#Sap#UbD.S#WbFbB#U#M#KaM#zbMbFbMbFbB.T.T.Uaoao#T#LbM#V#T#M#U.f.gbMbF.c.d.a.#.#.gbR.##T#J#Tau...#auaAaxap#T..apao#T#W......",
"bbaUbkb2.K.4.A#daZaY#f#.bkbkbc#j#c.7.zbhblbkaU#k.1.y#a#g##.b..bba6aWaX#d#e#b#e#j#i#b.3.7bbbfblbl#j.8.G.L.xaSa6bd#kbfbe#jbkblbcaT#c.y....be#mbhb2bj#i.K.z#fbi.L.L.1aZ.G.MaQaO#8.F.H.N.HbaaZbU#o.8a7a9aR.Nb2#m.8#..Xa7brbyaQ.N.Ca0aN#7.F.Fal.HaSb#.Fa0a2aN#8afa0#9.E.v.NbJbDbMbLbQ#vbJbNa2a..CalbIbIbNbIbKbKaDah#5#2.r#2#5.D.BbZadadad#4.r.Dan#G#p#H#F#x#w#w#p#p#w.o#s#FbK#w#B#v#C.obL#D#w.X#AaGaAaLaG#0#M#M#V#J#zbB.ZbJ.ZbJbMbFbBbF.ZbPbF.T.TbMbB.UbP#TbEbFbB#U#V.i.f.g.g.d.b.b.b.#.#b6bR.#...#........auaAaAao#Lao#L#T#Lav......",
"bgaTbkbWbWbk#iaT.z.z#f#ob0b2be#i.8.z#cbmbmaU#e.4.y.KaT#e.ybfbfbibga6aT#d.J.J#j#g#b.z.7bTbV#nbe#j#c.5bhbhaUbbbb#k.5aU#jbhb0b2bc#i.4.A#e..#g#.bdbhaW#c.y#bb7a6b#a6aO.O.G.4.N.O.P.C.HbZ.G.bbUbX##brbxa9aQ.N.Ca8a1aN.Ia3a7a0.O.P.P#7#7.F.Pbaa3#7.C.Cbaa5#8#7.F#3#7.E.B.Eb1bJbA#A#F#F#FbIbI#7.Pbna2ag#6bKbKbK#Baeae#2.s#2b4#2.EaHaHaF#4#2#2#2alaD#P#x#x.X#x#G#q#w#x#v#x#p#F#F#w#p#B#x#D#D.W#A#v#varazazaq#U#K#0#T#L#zbBbPbDbBbBbMbMbBbPbBbFbCbMbFbM#zbMbFbCbM.nbE.k.i.i.h.h.g.e.c.c.b.a.#bR.#.#............atatao#T#J................",
"b0#ebdbdbbaU#c.7.A.7aUbfbkbd#j#c.5.5aUaTaT#e.4.w.Abdbb#j#c.4bgb0b2aYaX#d.J.JaY#b.z.zaZ#n.8#m#h#g.7bhb2bkbfbfbd#j.4.5#cbdblbcaT#c.z.w#i....bmaWaX.M.5.1aZblaVaRaP.4.x.Gbaa8bx.O.1aN.x.O.b#n#na7bxbxa1#8.H.CbZa1aO.HaQa9a1aO.valb2.E.Pala3bD.C.Ca4aQ#8.H.C.Eal.B.Dala2bIbM#AbNbNbKa8a5aObKbpboa2aga#.E#FbIbL#F#2.s#6bY#F#p#GaHb3aFab#2.r#5aD.qae#p#G#q#w#q.0.p#E#x#w#pbG#wbK.o#v#x#qaxar#U#C.X#0araq#X#N#Nas#JbYbCbAbFbObB.Z.TbCbBbFbBbObMbMbBbCbFbBbF.U.RbM.n.k.k.i.h.f.g.g.d.c.b.ab8.2.#.#.#..........#V#V#T#T#Z............auau",
"bcaUaUbb#j#k#b.A#b#fbb..bbbkbd#j#c#f#c.5#c#b.A.5bkbdbc#j#k.5bib0b0aWaP.4.w.KaVbWaW#i.1.z#lbebe.8.7bhblbfbWb8be#j.7.7#.#jaU#i#f.7.x#caZ.9bxbZaWaX#a.xaZbb#c#d.4bjbgaUaP.zaOa6aVaO.L.uaSa5aR.4aRa5a9aO.O.C.IbxaR.O.ubra8a9aQ.N.EbU#h.6#mbIbDaR#A.O.1.H.IbT#BbDboboa2ag#9.EbKbNbIbib4a5aO.Gbzbybrafa#.E#3bKbKbKbK#Bbaa.#p#H#xaFaHaD#4.Q#P#R.rae#H#F#E#r#s#r.X#x#F#E.X#E#C.X#x#w#CbHaybuaq#U#C.X#v#D#K#N#1aK#W#D.XbG#zbObNbCbBbBbB.ZbMbBbPbFbCbBbA.V.T.U.UbMbFbMbM.k.i.h.f.f.g.e.c.b.ebT.#.#.#...#.#..........#Tao............auaMax",
"bdaU#k#i#f#b.7.A#fb8#j..bUbkbd#m#g.5#c#c#m.5.Ablb2bXbbaU#c.zbmbgaWaP#d.J.x#db0b0aU#e.z.KbU#obkb2bdaWaUaWaP.4bd#g.z.7aWaP#e#e.K.z.Kb1##.9b0b0aWaP.L.waPaU#b#bbgb0bjaW#e.K.yaOaO.L.uaOa8a8a1aN.PaNaN.O.H.LaOaQ#8.I.ua8b3a1#8.H.H#h.8bUbe#g.AaR.O.H.H.F#8a0aNbobpboa2a0#9.E.B#CbJa6bia6.L.ubnboa2a#.E.B#6bK#B#F#Bbqa3a0aHaFadaDadaa#2.rae#Pahab#x#w#w#s#s#p#w#x#F#w#x#x#paGac#w#w#xaxaq#U#Jas#v#w#x#D#C#x.X#B#vbBbB.Z#zbFbFbBbB.ZbBbBbBbFbBbBbFbC.V.V.V.W.UbBbMbBbF.h.h.h.f.g.e.b.cb6.2.#.....#...#...#.....#................avawav",
"bf#m#k.5#c.5.A#fbV#gbVblb8b2bb#j#c.5#cbfbf#n.8bkb0bWbb#i.8.zaWaTaP#d.1.x.1aSbgaU#e.4.x#fb2bdbb#i.5#cbhbcaT.4.A.7.A#iaRaO.H.5.z#cbeaZbfaVbiaW#e#d.w.waT#c.5#fbhb0b0aT#d.y.K#o.L.uaOa8b4a9a0aN.G.I.N.u.Cbaal#8.I.CbTa9a7#8.N.u.N.8bkbWbb#c.7aQ.H.O#v#vbqa3a.bnbvb3bnag#7.E.C#FbPaSaR.1.xaOaiag#9a#.B.Dam#F#F#G#Cbyb3albubuad#4#4#P#Pam#xbzaFah#5.Q#s#G#p#p#s#p#w#x#G#FaHbtac#P#p#w#W#W#M#X#x#CbG.0.X#w#w#B#v.X#A#AbG#v#vbNbE#z#z.Z.Z.ZbFbBbB.Zavavat#VbBbGbFbFbF.n.k.h.h.g.g.e.c.bbR.#.#.#.#.#.#.......#...#................atapao",
"bfbb#h.7.7#c#c#i.8bWbfbfblbW#m#g.7.z.8b8#o#m.8bdbdbd#f#c.5.A#eaP#d.M.w.wb#bjaT#k#b.A#bbcblb2bb#k.zbhb7bgaT.4.w.za8a6a5aX.4.G.y.x#daY#j.7aVaP#e.J.x#b#j.5.zbcbgbgaT#e.1.x#b...#.1aPbrbqa7a1aN.N.u.I.OaR.o.U.H.Hba.NaQaN#7.u.1b7bJbbbb#g.A#f.O.vba#Abobvbq#7bobwbpbo#9#3.B.EalbJbK.O.x.1aEa#a#.E.E.DbT#BbK#F#Fa0a7a1aFbtaFaa#2.r#P#4#Fbzb3bnaf#3.Q#F#G#H#x#w#w#s#E#q#paCaBak#O#qaI#0#x#UbK#x#D#v#D#B#xbHbHbD#w#BbD#B.WbObNbBbBbBbBbBbF.T.T.ZbBaAaKat#V#L#z.Z.m.l.n.k.ibF.f.g.e.cb6.2.#.#.#.#.#...#.........#..................#V#L",
"bf#j#g.7#cbbbc#k.zbfb2bdbebb#g#c.z.7#lbWbf#h.8bbbbbgbgaWaX#e.y.J.K.x.waSbe#o.4.7.A.1bV#obWbWaU#c.zbhbjbm#e.K.wa6bZb3a5aP.4.I.waSaW#m.8.8#d.4.M.J.1b..7.zbeaVaPaT#e.4.x#baZ.#...K.La7b4bsa1aN.N.u.IbZ.o.Sa6a5.N.H.Cal.N.C.HbsbMbEbD#c.z#cbe.uaQ#y#Aa6aX.O.Ea2a2a2a..N.E.B#3bKbJbI#FbQbJanaE.E.E.Eamah#B#F#F#B#Fa.#8aDadab#1.s.raHaBakaFbnai#5.D.D#p#I#s#p#E#w#G#E#p#Fac#Y.saJaAaz#Z#X#u#F#v#v#E#C#C#w#wawaq#y#vbG#A#BbObCbCbF.ZbBbPbMbCbObObAavat#V#L#Tavap.m.m.k.jbPbF.d.f.e.cbS.b.#.#.#.#.........#.#........................#V",
"#n#g.8.5.8#j..bf#o#hbW#m#j#g#c.7.7aZbe#n#h.8.6#kbibjbhaWaX.4.J.yaU#iaP.9.9####.9#ebfbe#j.8aU#c.5.5aWaUaP.4.x.4bib0b0aVaO.L.x.M#h#n.9.7..bd.y.L#daVaWbhbha8aWaX.4.Aa9aRaQ.N.#.#.#a3bsbybxaQ#8.P.C#8a9aR#8b4aV.4.x.4#BbDbNb2bb.1bDbDbDbDbJbE#y#y#AbibxaXaO.xagafaf#7.F.B#3a0bN#FbJbKbK#CbPaf#6.D.BbRbIbI#F#F#F#F#G.P.C#5#2#P.DbYbuad#Paiaf#9#2.s#3#H#u#s#x#w#w#s#p#p#x#x#PabaGbYaMar#X.t#qbK.X#w#C.W#vawaLaq#K#A#vbPbKazaqarbFbBbBbFbBbNbFbFbMapao#T#JbYaKap#T.m.n.kbFbB.f.f.eb9#E.a.#.#.#.#...#.#.....#...#......................",
"#j#c.6.7#l#h.6bU#o#h.8#h#c#b.z.7.8b2#n#j#..6.8bdbhb4b0aW#e.4.y.1aU#e.K.z#nblbe#gbUb8be#g.8.8#b.zbV#e#e.4.y.Kb8a5a8a5aR.O.w.IaObga6aT.4bUbkbW#jbhb2bhbib0bZaVaP.4.xa7a9aR.O.u.#.#a1a7a7aQ#8.O.u.PaQa7a1#8.HaO.L.xbhaU.AbDbd#c.AbDbDbDbD#A#y#y#AaZb0bxaP.O.w.B#7#6.E.E.EbTa2#BbKbIbKbIbzag.D#2.s#9aJ#H#CbL#B#F#F#x#q#x#F.D#2aJaCadak.q#1#6#2.D.Fam#s#p#u#s#r#H#u#H#p#q#w#q#sazaGaG#0#S.tbK#x#w#C#v.XbG#Baq#Mat#W.XbKaAaGaq#W#K#z.ZbBbBbMbFbC.Z.V#T#Laxavax#V#Lap.l.k.i.h.h.f.eb9.a.a.#.#.#.#.#.#.#.#.#.#..........................",
".y.9.A#lb8##.6bX#n#g.6#.bd.8.9#g#h.9bf.8.6#g#obcbgbjbjaY.4.K.w.1aV#c.y.1.Ab2bebfbUbU#m#g.6#c.zaZbf#m.z.5#fbg#eaVaVaX.4.L.u.IaVbdbdbb#k.wbbaU#cbcaUbcbib0bxaV#e.L.I#da5aO.N.CaOblbWaRaQ#8.N.C.Cala0bxaQ.O.H.O.ub#bl#k.z#i#c.zbTbDbDbD#A#y.W#y#AaVa6aRaO.G.G.BbP.E.E#6amambIbNbDbPbKbpbyaga#.B.PaQaJahab.r#4bL#C#F#F#F#G#F#x#Gakak#P.raC#r#3.F#I#t#r#p#p#u#r#G#H#E#E#x#p#E.0asar#0#Q.t#N#x#D.X#C#C.X#vbG#yawaAao#JazaGaKar#U#KarbFbCbMbMbB#zbMbFbA.V.Vao#V#L#VbJ.n.k.i.h.f.fb9.2.b.b.a.#.aauat#T.#.#...........#..................",
".z.A.8bX#l.9.6#h#h.8bhbhbhaU#k.5.6bUb8#o#j.8.8aTbmaWaT#e.4.y.w#f.4.K.w#f.6be#gbUbe#n#g.9.6bebfbUbe#g.6#.aUaT#c.4aOaO.1.G.1b1bdbWbkaU#i.5.5#c.A#i#caTa6a6aVaP.4.w.GaVa5#8.H.u.ObWbk#8#8.N.P.P.Nb1a8a4#8.N.Cal.1a5aP.7#eboa3aQ.PbDbD#B#A#y#v#v#A#BaPaO.x.xb1b1bKbI#B#y.W#v#vbJbKbKaEbtbwaf#3.B.PaHbvaDab#2.D.r#x#x#F#w#G#G#u#u#t#P#R#u#s#r#u#u#u#t#s#q#s#q#r#I#q#p#p#H#H.p#x#Y#0#Q#O#QbY#w#v#p#v#w#F#w#v.Xaxaxayaxaqazar#U#N#KarbFbBbFbFbF.TbFbCbA.V.V.W#V#VbMbB.n.n.k.h.f.gbSb9.b.b.a.aauaKat#V#T.#..............................",
".z#i#n#h#..A.9#n#..Abkb7bk#j#c.7.4bUbf#n#..6.8beaTaXaP.4.y.A#daP.K.A#cb8.8#h.9bX#j#i.7.zbTbU#n#n#h.8bmaU.4.4.wbx.I.L.u.1ba#dbkb2bW#j#c.z#c....bU.7bhaVaRaP#d.w.1aZaVaO.O.u.Ca1a3a7a3.P.N.valb#a1aRaO.N.u.Pba#v#Aa7a0bqbsa3aN.H.CbD#A#A#v#v#y#Aa2a..M.1b#a0#6.E#BbIbIbKbKbNbKbN#F#Bagaf#3.sbtaFbtbtah#5.r.r.r.D#x#x#x#q#G#q#s#u#u#p#H#saDadab#t#t#r#t#t#u#paGaB#Z.B#u#p#p#x#p#O#Q#OaC#w#xbL#G#x#w#x#w.X#vaqaybtaz#Waq#X#M.taJbBbM.ZbB.Z#z.V.VbC.Y.W.VbObObBbCbF.n.k.k.h.f.f#E.b.b.b.b.aavax#V#T#T...........#....................",
"#d#i#h#..9.9bX.8.6.8bhbjbj#i.4.z.1bf#n#gbdbmaT.4bf.4.4.wbga6aVaP.1.wbV.9#o##.9#o##.7.6#jbU#..6#.bhblbgaT#d.K.4bibgaV.4.y.waTbdbdaU#e.8.y#j....#o#maWaT.4.4.J.L.1a6aO#8.I.uala9brbra3aQ#8.O.F.G.I.O.O.H.Hb1#v#ybrbqa3a0#7a1#8.C.NbD#A#ya3a0a.bqbra..Ebybsag.E.EbKbNbJbJbzbnah#6.E#Fa##3.D#3btadaDad#5#2.s#3.r#4#x#w#H#saHad#4#u#I#t#GaHaJad#4.r#s#s#t#I#IaGbYaC#Y#O#q#H#s#p#x.p#E#p#w#p#pbL#x#w#w#F#B#x#w#vawazaz#W#K#M#KaBbGbBbF#A.Z.Z#z.VbCbC.Z.Y.VbNbFbB.UbKbB.n.i.h.fbTb9.b.c.b.b.aapap#T#LbY...#............................",
"#e.J.6.8#.be#g.6.9#nbcbcbc#j#c.K#fbc#hbhb0bcaT#c.wbf.4bibZa6aX.4.J.x#c#lbU.9.9##bUb2#n#..6#g#...bhb4bcaX#e.y.4aWaX#d.1.x.1aVaWaU#i.4.A#faY.......8.8#b.w.M.waSaZ.O.N.H.I.FbTa7bZb5a3aN.N.C.N.k.n.n.O.NaQ.X#v#ybrbybxa0#8.v.N.vaQbqa2a..Fa0#7.vbsa..Ebpama#.B.EbEbJbPbJbvbwaf#6.Q#F#7#2.EaDbzbzab#5#2.s#2b6.ram#w#GbLaHbvaB#P#2#s#saHbtbtad#4.r#2#I#t#u#taGaHaC#Q.raeb9#s#p#q#x#q#rar#Y#x#p#F#wbK#F#v#w#p#xaxaqaq#K#K#B#D#z.ZbAbCbBbBbBbB.V.V#z#A.Y.VbCbM.Z.UbMbB.k.k.i.f.2.c.c.b.b.b.b.a#L#LaA.#...#.#.#........................",
"#d.K.xbkb2aZ#i.6#caTbhbhbcaU#e.zb8aZ.9b0b2bb#e.5.z#jbgb4b0biaT.4.J.w#d#g.6#ib8.9bUbf#h.8bgbgaT.4bhbhbm#e.4.w#b#e#d.M.L.1b2#d.5a8a6aV.1b1..........bd#j......aYaT.7.H.N.OaQ.7a7bra7a1#8.N.u.N.k.kaV.4.o.X.X#va8a3bsbraN.Na0a.ala1b4a3a..Fa0#7.Ba.#7.va.#7.F.Fb7bJ#ybJbzbpbp#9.E.D#6bIbKbzaEai#9.D#2.s#2bw.DbT#u#t#u#Iaead#4.ran#u#tadaDad#4.r.raj#u#r#t#uaBac#R.q#O#s#H#q#H#x#p#EazaI#Z.q#s#w#F#pawayaq#Jayap#U#J#NaK.ZbD#vbBbObN#A.Y.Z#y#z.Y.V.V.TbObE#zbAbObObB.n.i.hbHbH.c.c.b.a.a.b.a.#.a.#.#.#.#...#........................",
"#d.J.x.4bl#j#c.z#cbhb2b0aW#i#e.5.zbb.8bhaY#i#c.w.zaTbgbxbga6.4.4.w.yaP.7.z#m.9bgaWaX#dbhblbgaVbgbmaU#e#b.x.yaZ#b.J.K#db#.4.ybibxa6aV#d.x........bfb2a5aXaO...5.4.wbbbf#j#c.Aa1a1aQa..N.C.CaQ.pa1aQ#e.x.x.Xa6bxa0a3boa3aQ.NaN.N.Cbqa3#7.C#7.E.Cal.B.N.E.E.BbabA#zbna2ag#9.E#3.B.DbK#Fbtbvbnai#5#3.D#2#2.D#5#u#t#q#u#t#R#4.r#2#p#q#u#4ab#1#2.ram#u#t#r#r.9#R#1.q#Obp#G#p#u#q#s#paGbuaC#0#O#X#x#x#xayaA#W#Kayao#L#UbC#y#AbCbNbCbObFbBbBbB.ZbB.ZbFbEbObPbC.W.UbCbCbM.k.h.hal.g.c.d.b.c.b.a.a.a.a.#.#.....#...#......................",
".4.y.w.4bb#g.5.zaUbjb2b0aU#i.4.y.z.8.8aU#i#e.y.zbTaUaVa6aX#e.4.G.x#daX#i.4##bibiaWaV.4.wb2bibjb4aP#ebmbmaT.5bmbgaWaX.y.K.4.Jbib4biaR.4.G.4bd#jbc#gbibmbia6aVaP.O.7..#j#c.z.8aNaNaN.N.H.CalbZa7a7a1aN.Pa0.O#vaRaObqbsa3aN#7.C.E.C.N.O.E.C.F.CbT.Eala4bIbNbNbNbDbpbza2a2#9.E.B.DbZa4bzbtbybpaf#5#2#3#x#H#x#F#H#q#G#q#H#q#s#uaDaa#t#u#t.Q#P.sah#u#I#t#r#u#r.p#sak#p#q#p#u#I#u#t.paBaI#Z#Q.q#u#q#E#waq#W#Janao#JaM#C#A#D#BbJbM#z.ZbJ.ZbB.ZbF.V.VbFbAbAbFbMbCbC.U.m.l.k.hb9.2.d.c.c.b.b.c.a.a.#.#.#.#.#..............................",
".K.x.w#e#g.7.5bdbbbhbhbcaT#k.5.y#aaW..bb#c.z.z#bbm.8aPaPaP.4.J.xbmaWaP.4.4.Abxb4bgaX.4.w.4bgblblaWbha6a6aXaO.LbjaWaP.4.J#j..a6a8aXbia6aV.4.5#j.7a8b0bibibiaVaP.O.u.....7#gbd.4.N.N.C.C.Nbsa7bybZa1.O.P.N#8.v.O.Lbrb3bq#8.N.C.C.P.H.N.FaQ.BaS.N.valbDbDbNbNbIbBbpb4bqag#9.E.Eam.D#8aEaLbza2#5#3.D.Dam#x#H#F#F#H#w#x#s#s#GaLaDaa.s#I#t#u#I#t#u#I#I#t#t#t#I#u#u#t#u#G#H#E#u#u#r#q#x#0#R.taM#w#F#p#v#D#Nas#D#Lax#B#w#vbPbQbJbCbFbDbM#z.ZbFbCbF.ZbBbB#z#z.WbC#zbJ#z.n.k.h#E.g.e.e.e.c.c.a.a.a.#.a.#.#...#.#..........................",
".w.w.MaV.7blbkbhbcbbaUaU#e#b.x.y#i.4....#i#c#ebb#h.6.4#a.4.G.xbhbgaWaT.4.y.A#kbia5aVaP.4aOaVbgaWbhbibia6aVaO.L.xaX.J.5.4..beaVaRbibjbgaVaP.J.G.7a8bibib4bjaRaO.L.u.1.#.##e#d.w.x.L.N#8.7.za7bxbsaN.O.C.N.N.CaN#Aa3a3a..N.C.E.B.N.CalalbM#A#BbKbIbJbMbDbJbJbIambpbpboa.a#.B.Bag.D.Hahahahaj#5.D.D#6#C#q#G#w#H#q#H#G#u#raHbtaJ#4.r#3#I#u#t#t#t#u#uaCaGaB#Y#I#t#u#G#I#r#s.p#s#s#x#w.X#O#YbL#F#E#FbQax#Var#UbL#x#v.0#vbKbKbF#AbPbD#AbF#ybB#zbBbB#z.W.V.V.W.W.UbCbD.k.kbS.0.g.d.e.d.c.c.a.c.a.#.#.#...#.#............................",
".x#bbSaZ#obkb7bVaU#iaT#e#b.z.z#fb8.4.5..bUb2bW#m#..5#gbT.G.Mbib0bjbcaP.4.w.4#kbibia6aX.4.JbiaT#kbgbxb4a6aX.4.G.x#e.4a8a5aRa8a6a5bhb7bVaRaP.G.G.5a5a5bibib#aO.4.I.uaO.#.a.a#a#e.bbc#e.zaT.Aa4a4aQ.O.P.vaQ.P.uaQ#AaNa.#7.C.Nb1.Ea4ala1a4a3al.ubJbJbDbDbDbDbDbJ#9a2a2aNa#.E.B#3#3.B#9ab#9#5#6.D.s#2bY#x#x#x#I#I#r#s#qaEaFahab.D#P.r#I#I#t#t#r#I#u#raHbuaB#Y.q#X#s.p#q#u#s#r#r#E#p#p#x#t#tbL#x#x#Fauayayaz#W.t#x#w#CbGbMbGbI#BbD#AbObObB.Z.T.Y.ZbB.YbC#z.W.W.X.obM.k.hal.f.g.g.e.c.c.c.a.b.a.a.#.#.#.#.#............................",
".ybTbV..bdbWb0bW#j#k#b.4.y.z.1bV#c.z.zaUbebf#m#g.9.zbe#k.5bib0b4bVaU#e.1.y.4bhb4biaVaP.4.J.M.M.4a8b0b0b.aP.O.I.GaO#ebZb#aRb0bZbmbjbjbiaP#d.w.waTaOaOa6aVaP.4.I.u.LaV.#.#.a.b.c.ebgbcaU.4bcaNaN#8.P.va3a3a2a0#7.EbA.F.C.Pba#7#7alba#vbsbra..F#B#BbDbBbobnaga#.Caga.a##3.B#6bZ.DaEaha#.D#6.D.v.Dam#F#F#F#F#u#s#s#s#rbtbwah#5.D#2bY#t#taDacak#u#tadaHaC#Z#O.q#X#Q#q#p#s#r#r.p#H#E.p#t#I#r#x#w#vauaAaAaLar#M#KbI#B#BbDbD#B#A#DbM#zbMbCbNbJ.V.V.V.VbCbB#y.W.X.UbObPbBb9.0.g.g.e.g.e.e.b.b.b.a.a.#.#.#.#.#.#..........................",
"aSb#..bUbbbdbdaU#k.4.z#b.1#faT#c.1.x#faU#m#m#g.8.6#lbebdaUbmbjbhaY#e#d.K.x#dbhb5bxaT#e.M.G.MaW#ka6bia5aP.4.N.u.LaX#e.K.KaRb0bZaVb.aVaP.4.J.x#a#....NaRaP.4.O.u.MbVaV#d.#.b.b.a.db4bjaT#c.w#k.N.N.uaQbsbra0aN#7.C#7bAa7bybsaQ#7.C#A#ya7boa3a0.EbNbMbpb3bnaga#.B#3a#.D.E.Eba.Ebzbzah#5.D.Q.D#6ag#F#x#x#x#G#x#u#s#qaFbvbuaj#4.Q#2#P#taHaCaBaa.B#I#uaB#Y#Q.q#1#N#1#u#r#u#r#r#t#p#p#q#s#t#r#wbQ#F#wataxaq#W#K#M#C#v#v#vawaxaq#LbQbA#zbObN#z.Z.V.V.YbObM.ZbFbEbMbFbFbM#E.f.f.g.e.c.d.c.b.b.b.a.a.#.#.#.#...#..........................",
"aV....bUbUbb#j#i.4.z.A.7bbaT#k.5.A#bb7bb#g#..8.6#fbXbkbhaTaTbcaUaT.4.K.x.yaZa6bga6#d.4.G.waOaW.4aVaVaPaO.L.u.1#faVaT.K.zaOa8aVaVaTaP#d.K.x.1b7bU.......O.G.I.Ibaa5aP.4.xa6aWaXaO.Kbj#i.z.z.7#ba6a.bqb3b5a0#9#7.E.Na5aRaObra..N.Cal#yaQb4a3aN.P.EbEbpbvbo#9.E.C#7.B.E#7an#F#5bvbyah#5.D.EbzaJaj.Q#G#x#u#H#H#H#p#raFaEah#5#2.s#5anaHbtbvadak.r#uac#R#Q.q#Oas#N#I#s#s#p#r#I#t#s#p#r#p#p#p#sbL#x#F#T#W#W#M#Kaz#x.X#vawaMawaq#LbJbGbMbFbGbP.Y.Z.Y.ZbObM.WbB#AbObC.navauat#L.e.e.c.c.c.b.b.b.a.#.#.#.#................................",
"......bf#n#i#k#c.7.5#cb1bdbU.4.A#fbVbX#n#..5..##..bkb0bha6aWaX#e.M.4.x.1b#b8aWaVaX#d.M.x.JaZaT.4.GaPaO.O.G.IaSb1aT.4.z.4aVaRbga6aXaO.G.w.1bV.7........aV.L.LaOb4aWaP.M.Mbxa6aX.4.x#i#b.A.1#b.kaPaObobqboa3#7.E.B.Na8aRaO.H#7.C.F.EbNbobrbq#8.P.NbEbna2#9a#.E.Bambra..E#7#FaibpaE#5#3.s#9bubt#5.Q#6#G#G#p#q#H#G#Iahadab#2.s#6ai#uaDaHaDak#P.qabaC#Y#O#2#t#M#H#s#raFaCak#t#t#q#r.0#u#x#w#s#q#p.X#E#x#L#N#F#w#w#C#Cawayaz#W#J#0bFbCbC.ZbQbF.V.Z.ZbFbC.W.W.VbPbB.naAaAap#L.g.e.c.e.c.b.b.a.a.a.#.#.#...#............................",
"#c....#h#.bb#b.7.A#faZbb.9#n.9.6bfbUbe#h.8.zbe....bgaWbibga6aVaP.M.x.4#fb1.xaPaO#d.M.w.xaZb1#e.4.x.1.O.G.uaObjaT#e.K.x#f.Ibibja6aXaP.M.GaP.w.4...........4bmbib.a6.4.y.waTbiaP.L.x#d.y.1b7a6aV.4.La2a0a0a..N.C.CalbZaRaO.I.N.Eb5.EbAa0bobna2#9.EbCag#9#7.E.B#6a0a..E.Ea0bKbDah#5#2.B#6aiaDaj#2.Dai#H#q#H#w#s#H#u#t#2#2.Q.DbsaHaHadaBaa#4.q#PbuaB#Y#P#t#taCac#RaHb3ad#4.s#H#H.p#s#x#F#C#x.o.oawax#W#C#C#x#p#v#v#xaqaq#V#L#JbNbBbQbF.ZbMbF.Z.V.V.Y.W.W#v.UbEbFbHaxat#V#J.g.g.c.c.c.e.b.a.a.#.#.....#...#..........................",
"#c.......6#fb8bU#c.8.7#m#.##.6bX#nbe#m#..A.9...#bjbZbhb0b1a6aX.4.M.x#a#i.y.1bZ.O.L.x.G#db1aP#a.w.1aV....alaTaT#c.4.x.1b8bib0b4b.aR.4.G.Ga5aRaO............aVaWaPaP.L.x.1a6aX#d.1.uaS#dbca8b4a5.4.xa.aN#8#7.F.CaSbYa8aR.O.I.Lba#7.Bal.Nbqb3a2a..E.E#B#7.B.B#6bnbD.E.BalbDbI#B#2#2.B.DbY#2#3.D.DbYbLahab#p#t#r#q#s#t#I#2.D#6#uaHbuadak#P#P#PbvaBak#O.qaCaGaGaB#Y#OaF#4#P.r#q#p#G#s#p#F#x#wbLawaKaq#W#L#v#w.X#w#wbG.W#W#J#LaMbMbBbMbF.TbQbC.ZbM.Y.W.YbE#A.X.m.nbHao#T#Lan.e.g.d.c.c.b.b.a.a.a.#.#.#................................",
"be.8......bf#n#h#h.8.8#hbbaP.K....#h#..7.8aUaUbib0b0bgb4b0aWaP.4.y.w#daW.4aTaZbc.w.JaSaV#e#a.J.JbTb.....aO#d#a.y.w.1bja8a6bibia6#d.L.x.GaRaVaN.I.O..a8a8a9aR#ebma5aP.Jb8aXaO.L.x#eaVaVa8a5aO.I.I.u.o.N.N.C.C#7a3a5aR.4.I.uba#7.E.Bambobqb3am#7.E#7#BbM#6#3bJbCbMbJbPbDbD#BbKbK#B#3bvaj#2#3#B#5#HbzaEaj.D#H#q#q#q#H#u#t#u#s#raDadak#P#P#Pad#Z#Y#R.qamaGbtbuac#Y#O#R#P.raM#p#I#H#G#F#x#G#s#C#waq#V#K#T#w#v#C#v#w#D#A.U#U.WbObObBbC.Z.ZbFbFbPbMbB.W.YbE#A.o.mbM.0.f#Vao.f.e.e.e.c.c.b.a.a.a.a.#.#.#................................",
"bU.8.8..bUbW#o#h.7.AbhbhbcaT.4bhbdbbaT#c.zaWaTbgbibgb.bxbgaW#d.4.x.waPb2bmaV#e.Jbc#jbfbf.x.M.GaZaY#b.z.....J.L.4.K#kbxb1a5a6aRaP.4.G.I.1bxaQ.4.GbgbmaVaO.LaObibiaWaP.M.x.4.L.G.ObZbjbra7boa0a..Fb#.ob2bd.N#8#Aa3a3a0#7.ubaa5.E.BbT#Aa2a2a2#7.N.valbJ#AbIbJbNbJbEbqbn#9.BbKbKbK#BaJah#4.Qaf#x#qaFbvbpab.Q#5#p#q#x#u#I#r#s#r#raaab#2aCacaa#u#r.q.qan#IaIaGaH#Z#Q.q#Y.ran#r#p#E#q#G#x#q#G#s#s#p#T#J#W#w#C#BbG#v.o#BbGbG.Y.WbMbFbMbF#DbF#z#zbFbC.Z.V.WbJbA.o.mbQbC.j.h.g.g.g.g.e.c.b.b.b.a.a.#...#..................................",
"#b.y#...bUb2#n#g.7#hblb7aW#ibkblblbb#i#c.Abc#eaWaWaTaWaWaXaP.4.y.x.1aZb0bjaVaP.J.J.9#o#mbhb0b2aW#e.7.K..bibhbmaX.4a6bibiaOaPaO.4.G.w#db8a5aO.Nbibxb#aV.4.G.Gb3b2aW#e.L.x.w.J#daX.f.hbqa3a3a0aN.E.B.obb#i.K#iboboa3aQ#7.Cba.F.CalbJ#Aa.aga.#7.B.Bam#A#z.Zboa0a#bKbrbra#.CbJbK#B#Caj#5.D#2aJ.K#G#GaEaj#2.s#F#G#E#saF#5#u#s#r#r#t.DaHaHaCaa.r#4#s#I#E#IaBaB#Z#R.q.qaB#Q.t#p.pawax#K#q#H#F#q#x#x#p#w#C#w#C#v#y#AbG#y#ybPbGbMbJ#z.Z.TbCbC.Z.Y#z.Y.W.Y#ybMbA.o.RbJbJ.f.f.f.f.e.f.e.c.c.b.b.a.#.#.#.#.#.#..............................",
"#c.y#i..bf#n#h.7.8bdbWbWbc#kbkb7bWaU#i.4.z#b#b.zaT.4aXaX#e.4.J.x.1b1aWb0bZaT#d.y.K.8b8#.bhb0bkaU#c.z.z..bib4bgaP.MaVaVaXaO.O.M.w.w.1bVaRaO.O.ubxb2b.aX#d.G.MbibgaP#d.x.GaVbe.e.e.g.fbpbqa3a0#7.P.va.#c.A#fa3byb5a1a..N.C#7bIbMbDbJbD#A#7.E.B.Bam#y#ybJbpboa2#7.Ca2#9.E.EbD#BbI#BbI#2#3aiai#9#x#q#4#2.Da4#F#p#saHbvab.Q#paGaCakaFbYbuadaa.r#2#r#t#q#t#t#X#Q#O.qbwar#Q#Q#saybuaq#M#p#G#G#w#H#E#p#E#C#v#x#w#p.XbG.WbBbI#AbEbBbFbPbMbAbA#ybB#zbM.Z.W#vbCbFbA#E#E.h.h.h.h.f.e.e.e.e.c.b.b.aauauap.#..................................",
"aU.zaUbUbfbb#j.7.7#obhaU#k.4bkbWbjaU#c.5.A#c.1.w.4.J.x.4.M.J.J.ybab.a6bgaV#d.K.x#d......bbbcaU#c.5.x#e..bgbiaV#d.x.1aOaO.L.x.G.O.1aPa6aO.N.N.IbibiaV#d.L.x.1aVaP#d.w.u.1.b.e.cbiaW#ebqb4bra0aN.E.vaQ.o.U.Xa3brbqa2#8.P.ualbNbJa5al#A#AbMbJ.Eal#y#ybMbqbvbva0#7.B#9a#.EbMbI#B#BbKbK#Abzbnaiaf#3.Q#x#xaf#H#q#w#paDae#2#2#qbYaCakaHaHaFaa#4.r#4#t#s#u#s#r#u#O#Pan#Z#Q#N#1#qayaq#U#J#p#G#x#x#x#p#q#C#x#x#E.o.X.0#D#v#v#ybObD.ZbObPbBbF.Z.Y#zbMbM#z.W#v.WbCbAbE#z.h.h.f.f.f.e.e.e.c.c.b.a.baxaKap#L..................................",
"bVbTbfb2bW#m#g.7.7..aUa5aVaP#dbbaU#e#b.z.zaZ.A.1b8.......J.M.1aSaW.zaVaX#e.4.x#db.......aUaT#e#b.A#cb8.JaVaX#e.K.zaS.7.M.xaSbTaObgb4b#aP.I.LaVaVaXaP.4.x.GaZaP#d.L.x.MbZ.b.c.cb4a6bqbsbsbsaN#7.E.C#8.o.U.Wa0a2a.#8.N.B.Fam#Abxa6#8.CbJbMbEbE.W#y#y.Ybsbnama#.E.CagbDbPbD#BbI#C#CbKbnbtbyaiaf#3.B#p#H#q#G#H#x#x#s.r#2#raCaC#Y#OadaBac#4.r.ran#r#t#r#r#G#s#I#u#Z#Y.t#Ob5#H#U#W#Kac#G#G#w#C#w#x#E#F#xbG#v#v#B#v#D#y#A#DbJbG.ZbNbFbC.Z.Y.YbB#zbB.W#y.YbPbCbJbE#z.h.h.h.f.e.f.e.c.c.b.b.a.aavav#V#Jap................................",
".1bXbfblbd#i.8.A.5bibia6aVaRaN.G.I#b.z#bbSbc.zbVbg......blblaWaPaU.7.8#e.1.J.1bV........aW.4.5.A.zbVbdaU#k.z.J.JaZ.7.8bia6aP.M.wa6bia6#d.G.yb4aPaO.4.G.xbVaOa8.G.xaSbg.aa9aQ.OaVaXa3a3a2a.#7.N.v.Eam.m.obrb4a.#8.N.C.Fb1#AbAa7aR.L.IbJ#ybE#y.W.W.Y.Waga.#9.E.BbabDbDbIbD#B#F#B#FbGbzbtbpbn#5.E.D#x#x#p#H#G#F#p#p#G#r#s#rak#PaC#4aa#2#P.rbw#u#t#t#r#t#s#s#u#t#p#O#SaC#H#x.X#x#0#x#p#H#H#F#v#w#w#C#v#x#D#C#B#v#w.YbG.XbF#zbBbFbC.YbA.Z.Y.Y.Z.Y.Y#v.WbEbC#D#B.i.h.h.f.f.f.f.e.e.c.a.b.a.aapao#L#W..................................",
"bbbUbbbb#j#k.6.5bdbjb0b#a5aR.4.L.H.z.7#lbh#a#eaT........bWbhbhbhbc#j#c.4.M.M#e.............4aW.4bhb2blaU#k.5#caPbfblbib2biaP.L.GaVaV#d.L.uaSbia6a9boa1aQal.Hb3aRaO.Ibra9a1aN.N.C.GaNa0aN#7#7.C.Cal.m.m.oa8a8aO.N.v.Fa0bJ#zbqa7a1aN.NbE#y.W.W.W.W.W.W#7.E.E.BambEbDbJbJbMbLbL#x#C#Cahaiaf#5.D.B#3#C#q#w#C#p#p#w#q#w#s#s#r#saHbtad.r#P.rae#t#t#r#G.p#H#q#q#s#q#p#r#s#q#G#p#H#x#x#w#p#w#w#w#qbK#F#v#p.X#w#waz#0bGbPawayax#UbBbJbCbBbA.YbB.Y.Y.V.Y.W.W.obH#D.h.hbNbM.f.f.f.f.c.e.c.b.b.a.#.##L#W.b..................................",
"..be#h#h#c.7.6bSbibib4bxaRaO.O.I.O.4aTaU....bf#mbcaU#ebebhb4blb0bc#i#c.y..bb#ibfbe#g.5.4bgbj.K#ebjb2blaUbmaP#dbfbf#ma6aVaO.M.x#d.G#d.J.J.1aVaSaObxbsa3aQ#7.Ca5aO.Gbrbqa7a1aN#7.C.O.f#7#7.N.F.CambZbc#b.SaQaO.N.Ib7bAbJbD#zbyb3a1a..N.HbJbA.X.W.W.V.V.VbMbJbDbDbIbJbA.UbK#B#F#F#B#B.Saf#5#3.B#6b5#F#x#w#G#H#D#p#G#HbzaFahaa.QaIar#R#P.p#s#s#r#s#r#s#p.p#t#r#p#s#r#u#G#G#w#s#x#F#p#E#p#w#F#HbKbK#C#vbG.Xayazar#UbBawaMaq#U#UbCbCbB#zbA.Y.V.Y.VbQbC.W.Xaxap.i.hbPbE.h.f.e.e.c.c.c.c.a.a.#.#.#.#....................................",
"aW.8bhbh#c.7bebea8bxbia8aPaO.L.I.GaO......bUbfbhb0aW#e.ybibhb2b2bb#k.4.y#kbd#j#cbb.8.7.4aWaVaP.4bcbcaWbibmaWaP.KbfbibmaVaO.G.Lb7b2aR.M.4b.aTaOa7b3b3a1#8.N.u.O.La7brb4bya1aN.N.C.N.g.f.F.F.PalbwbW#j.7a1.O.N.Hba#A#z#z#Abqbxbxa0#8.C.PbCbJ.W.VbObPbAbNbJbDbDbPbDbK#AbDbKbJbD#BbG.m#FbL#3.B#7a2#6#G#x#GbL#H#w#s#GaFbvbtad#5.Dbz#Z#P#R#r#r#r.p#r#s.p#p#u#u#r#s#p#E#s#p#qazaB#0#p#w#w#wbL#G#qbQbQ#A#w#DayaMaKaq#S#Kaxax#W#J#0bJbB#zbB#z.Z.Y.Y.YbFbE.Xayaxaq#L.hbFbD.f.f.e.e.e.e.c.b.a.b.#.#.#......................................",
".4bfb2bgbgaVaP.4a5a5a5aR.4.O.I.I.1aQ.....#b2bWbjb0aU#b.waZbdbhbcaU#c.z.zaZaU#d#b.z.9.8.z#e#d.1.1aUaUbib0biaT#e.M.Jb4bxaP.4.G.Lb3bxaR.4.x#e.y.Ja3bra3aQ#7.F.Calbra9bxbZbxaR#8.N.C.Na7a1aO.fb2be#g.5boa3a0.E.C.N#y#y#zbB#za1a7aQ#8.N.u.1bNbN#A.UbMbzbzaiaj.BbAbJbAbDbIbQbDbK#A#CbDbK#BbIbGaFaHaD#4.r#x#C#H#H#p#s#HaHbtbtah#4.Q#2#1#O#R#r#E#G#q.p#r#r#GaAayar#S#x#s#p#qaAaLas#Z#K#x#x#C#w#q#s#B#C#F.0#Caxazar#U#K#Mao#W#M#LaM.Y.Z.Y.ZbC.V.Z.W.W#v#vawaAayao#J.i.h.h.h.f.f.e.c.c.c.a.a.#.#.#.#......................................",
".5.zbjbibgaWaP.4aRa5aRaO.O.L.u.1aSaR....bf#o#gbmaU#e.AbUb8aYaUaT#c.K.x.1aWaT#f.w.7.9b8.yb8...M#daVa6bZb0biaT#d.y.JbiaW#d.O.x#dbxbjaP.J.G......a0aQaQ#8.H.v.Na4bxa1a7a7a1#8#8.P.u#8b5a1aO.NbW#j.4.4b3braN#7a0aN.N#y#y#AboaQaN#8.N.C.Nb7.ZbEbJ.U.Ubzbya2#5.D#3bJ.m.SbDbMbGbDbI#B.Rahaj#A#AaFbtad#2.r#F#C.o#x#C#paHaDaDab#5.r.san#O.qaD#E#HaHaL#4.p#q#qaMaGar#Kas#u#t#GaGaHaI#X.t#X#v#w#w#w#w#CbKbQbK#x#War#0#K#NbY.Y#J#JbC#z.Y#ybBbJbC.Y.ZbMbE#v.Xaqaxaq#L#L.h.h.h.h.f.f.e.e.c.a.a.a.#.#.#........................................",
".y.ybib7biaVaP.M.4aOaO.4.L.u.HaSb7....bf#n.7#g#k#e.1.y#o#o.y#i#c.7.z.7b6bb#i.4.y#e#m.M......b4bjaPaWbibgaV#d.1.x.1aVaO.4.x.ua6a5aP.1.uaO......#8#8#8.N.C.Fb3aRa7a7a1aRaN#7.N.v.FbabsaQ.O.I#8#k.AbobsbqaNbqa7a0a8aVaP.Gbnbo.N.N.u.Hb#.N.E.W.V.maEbtbtah#5.D#2bMbC.SbJbD#BbNa0#9bzaJaj#2.YaCad#4.r#4#C#w#D#x#p#FaFajab#5#2.s#6am.qaM#x#q#GaCad#P#H#H#sazar#U#K#u#u#t#qaIar#Y#N.q#w#w#CbL#w#CbQbKbP#BbGbK.t#M#Nas#vbJbG.Y.Y.Y.W.Z.ZbBbA.Y.VbO#A#y.Uat#T#M#LaA.h.h.h.f.f.f.e.e.c.a.a.a.#.#..........................................",
".AbmblblbjaX.4.L.x.4.4.I.u.IaSbZaU..bfbf#n#.be#j.7.K#f#n####.9.7.A#fbdbcaT#e.z.K#e........aWa6aX.4.xaWaXaP#a.w.1aZaO.O.G.IbTa7aO.M.I.Ob#....a5aR.C.N.C.1a4....aRaOaNa.#8.H.C.HbTb#aQ.N.P.I#c.A#fa2a0aNbobybxa8b4a5aO.I.Oag#7.E.Nala..F.E.Y.TbpbyaEaf#5.D.BagbNbAbP#BbKah#5bvaFbubtab#2#2#B#4.r.raC#w#v#x#H#p#xaCac#2#P.s.Dbw#R.qbv#H#G#G#s#Pazar#X#q#W#X#Nae#E#u#t#x#X#Q#O#OaMbL#wbL#F#w.obI#CbI#B#v#v#BbG#D.X.ZbPbI#A.Z.Y#ybB.Z.Y.YbFbBbFbCbDaKavaoavavatao.t.h.h.f.e.e.c.c.a.a.#.#.#..........................................",
".yaVaWaWaP.4.M.w.Jbibg.I.GaSaRaZbg..bgaUaP.4bf#j#c.A##.z##.8bhbcaU.4aU#i#f.1.A#caU..bmaVaObmaP#d.w.1#e#d.4.y.xbTbj.O.L.IaZaV.....L#d....a7a8a5aR#8.u.u.1...#...O.O.I.N.H.C.Hala7a3a0#7.vb#.f.hbhbm#7#7a3a3a3aNa..E.O.I.O#3.C.Ebaal#7.va4bJbnbvbvaj#5.E.B#6aDbCbJbEbtaHahab#2aDaFah#4.r#6#A#x#2#H#q#F#B#p#p#waGaGaBaa#O#4#w#p#w#F#p#p#G#I#paGaHaB#Y.q#p#w#0#DaGaB#R#w#p.t#O#Y#x#C#x#w#v#F#v#C#v#v#p#w.X#DbF#B#y#y#A#A#y.Z#zbG.Z.Y.Y.YbE#zbFbAavawav#VauaMatao#J.h.f.f.e.e.c.c.a.a.a.#.#..........................................",
"aZaYaTaTaP.4.x.wbiblbjaWaT#d.J.J..bjbjaWaP.y.K#j#b.z.L#c..blb2bbaT#c#k.4.K.x.Kb2bgbibmaT#d.G.4.K#fb..x.K.1.1aZaYbZ......................a8b5a7aO.O.uaObs...#...#...I.1.N.N#8bqb4a7aN.N.Cal.hbhb7aW#e.Pbobqa3a0a..E.C.Ia5#y.E#z#y.N.CalbJbD.Vaiag#3#3.salbnbF.l.lbzbtbYaDab#2#2af#5.D.Qb4#D.l.S#G#G#q#v#v#BaHbtbvadak#O#R#w#p#F#H#p#q#G#q#GaGaLar#Y.q.X#E#paGbuaB#Q#Q#p#p#w#C#B#C.X#wbK#F#pawawax#W#J#C#ybJbPbJbC#A.ZbMbF.Z.ZbJbCbB.Y#ybC.W.Waoap#V#Javax#V#T#L.f.f.f.e.e.c.a.a.a.#.#............................................",
"#g.7#e#d.4.A.x.1bhb4b0aWaP.4.G.JaPb2b2aV#e.y#b#g.5.7bbbdbdb0b0bc#i.4.z.z.w#bbca6bhb4bxaP#d.G.M#d.w.5#j....#a#daX......a6aR.O..........bma7a8aR.O.I.Ia4aR...#.....#.#.#.#.a.aa4bqa4#7.F.Cal.fbibmaX.4.Jbob4bra0#7.E.CbT#y#y#z.Z#z.ZbMboa2#7.V#9#7.D.Eb1ag#2bC.l.laDbzaEaD#2.r.D#2.Q.sambG#A#v.l#GaHaHad#R#vaCaHaFac#R.q#1#x#p#F#G#F#E#q#x#paIas#1#O#S#r#q#xaBaB#Y.qan#w.p#p#x.0#v#v.obG#A#DayaMaq#V#J.W.WbIbObDbFbAbJbMbBbNbFbE#zbDbCbAbMbB.X#D#L#Lasapap#T#JaM.f.f.f.e.c.c.c.a.#.#.#.#.#........................................",
"#k.7#c.J.w.x#db#bibjbiaW.4.4.w.MaVbhaW#d.4.x#e.8.A#gba..bbbhbc#k#c.z.zaU.7#i.4blbibia6#e.M.x#d.4.xbW#m.7............bxbxaR.O.Mbkbe#i.5..aRa9a1aQ.Nb#b4aV.L...#.#.#a9aR.O.a.#a0a0a..N.v.Ea0.faTaT.4.xbobwbvbra.#7.C.Cam.W#y.Y#z.ZbJbobvag.E.E.V.B.sa4bYag#3.DbC.laFahad#4.r.safbK#ybGbI#D#BbG#C#vaHaLac#4#PacaBacakaCaB#R#p#E#F#G#w#x#F#w#s#Y#X#O#ObY#p#F#F#w#R#O#1#w#w#C#w#p#p#x#D#p#w#Catayax#W#M#J#A.W#AbCbCbP#zbPbFbMbMbBbJbCbA#zataobA#D.0.n.mbO.k#T#Jas.f.f.e.e.e.c.c.a.a.#.#.........#....................................",
"#c.6#kbdbhbhaWaTaWaWaT#e.1.x.xaP.4aT#k#e.x#fb..7#cbU......aUaT#c.1.yaZaY.4.xbgbxaVaVaP.4.x.1aY.J.xaT#h.5..........bibxbiaO.G#db2bb#k.5a6bra7a1aQ#8.vaO.I.x.#....brb#aR#8.u.##8aN.N.C.Fb1.I.f.f.K.x#fa2a3a2a.#7.F.B.F.W.W#y#y#y.Z#za0ag#7.Ba..V.VbCbpbp#9.D.DbE.laD#5#5#2.r#6aJbQ#BbGbI#A#AbNbKaDaHaD#4.r#4#w#Y#RaGaCaB#Y.q#w#x#H#x#p#x#w#x#p#O#O#Z#p#w#F#E#w#w#F#C#v#w#F#C#w#x#p#G#F#F#w.Yaqaq#T#Kan#v#C#ybJbKbObCbJbMbAbCbJbAbBauauavap#L#D.n.nbNbFbFbObNbA.h.f.f.e.c.c.b.a.#.#...#avao........................................",
".z.6aZaTblb4bmaPaTaP#e#a.w.y#fb8#e#e.4.z#bbV#b#kbb........#c#c.5.z.7bX#d.x.4aWaW#e#e.4.G.ybV#a.x.1#g.7#l............aVaP.M.waVa5a9aRaNa7b3bZaRaN.N.C.4.xbZ......byb3aR.O.C.abq.E.N.Na4.B.g.g.f.f.f.h.ha.a.#7.F.v.Nam.W.W.Y#y.Y#y#y.Z#3.C.N.VbMbC.Uagaf#3.BambA.k#4#4.D.raeaJbJbIbK#B#ybFbDbK#B#Bacak#P.saeadakaGbubuaB#R.raa#x#p#p#w#E#p#w#s#q#x#E#p#w#F#x#x#wbG#w#v#w#C#C#x#w#EbL#x#x#v#x#L#U.t#0#B#v#vbDbJbEbQbFbNbNbA.ZbJbC#zauaKaxao#L#D.k.k.jbE.i.jbCbK.f.g.e.e.c.c.b.#.#....aAavao#J......................................",
".AbTbebgblblaW#e.J.4.K.y.y.1bV.1aWaP.K.J#f.E...................7#f#i.M.x.1bV..aP.4.G.K.JaZ.K.J.Mb..8#l.1.O..........#d.M.uaVbrbia9aR.4brbybxaR#8.I.C.1.IaU.4..a1a8a1.O.P.uaQbobsbr#8.P.Ca0.e.g.f.h.h.h.N#7.F.C.FbT.o.W.Wa2ag#6.Y.Y.Y.Y.Z.WbMbMbA.V.S#3.QambE.Ra8aR.r.DabbDbJbD#AbC#BbIbGbG#B#BbG#P#P.saeaLaD#4aGaHaC#1#P.qac#w#p#x#pbL#F#D#G#E#x#C#F.o#w#G#C#x#w#v#v#p#p#w#Eazar#X#w#BbG#FbNbDbB#A.XbGbPbN#AbCbMbFbFbFbJbGbEbB.Yavavap#T#Jao.k.n.k.ibObF.h.f.f.g.e.c.e.b.a.#.#.#auawax#V#J......................................",
"#fbeaW#ebmaU#e#b.w.K.M.J#daS.1b1bh#e.y.Jbf.........................M.wbV......aXaX#d.w.1aZ#d#b....aV.O.Ga5..............aR..a8b4a6aO.Oa9a7aR#8.1.C.IaR.I.O.zaU..aRaO.O.uba.#a1a0a..N.v.Fa1.c.g.f.f.h.h.i.C.E.Fal.o.mbqbtbpag#3.B.Ybnaiag.E.YbCbF.T.UbJ.SbFbAbMb4a5.O#d.jbMbJ.jbEbObNbK#vbG#yaHaCaa#P.laHaLaD#RaBacaa#R.q#1#O#q#C#p#pbL#F#C#q#DaAar#Q#C#w#CbG#w#p#w#x#x#xbHazaGar#0aGazar#X#NbI#w.X.XbDbM#BbG.Y.Z.Z.Y.ZbCbFbAbB.Waoao#V#Jas.o.k.k.h.hbNbC.h.f.f.d.e.c.b.b.a.#.#.#apapao#JaC......................................",
"bgaWaP.4aT#e#a.x.1bSbh.5.w.yaZbm#e.4.x.1..........................bdbb#j.........M.G.wbaaX.GaV..b0a6.4.I..................a5brb#a8.4.Ha1aQaN#8.H.ubaa4aR.O#k.#.#.P.N.ual.#.a#8#8.N.C.Eb5aR#8.P.g.f.f.h.h.i.k.k.n.m.obnbpa8a7aRaObpbvbnaf.E.E.V.T.VbMbCbA.lbMa5a8aO.CaO.jbMaFajbFbPbDbCa7a1aGb3aC#Y.rbGadad#4.q#2#1#O.q#OaM#Y#xbI#C#C#x#x.X#CaGaLar#Q#K#0#x#v#w#w#DazaIar#QaKaMarazaHaKar#X#K#A#v.XbG#BbFbDbD#A#D.V.Z.YbB.ZbA#z#A#y#J#Laq#D.n.p.k.h.h.h.f.f.f.gbObM.b.b.b.#.#.#....#T#J#T........................................",
"#caP.4.y.z#b.w.waSaW#a.w#e.ybdbb#i.x#aaYa6aV#e........bqa0.NbiaVbfbkbd#i.5..........blbf#h.A....bxa6.L.L......a8a5.O........a5aRaN.O.u.x#8.O.H.P.FbZa5aR.4.u.#...#.#.#...#.a.#.E.N.Na4a0#7.P.F.e.g.f.f.h.h.k.k.ia5aRaNa2bibZa1aObobrbo#9.D.C.T.Vaia#bA.S.lbCbCaO.I.FbC.jbzb3af.DbCbDbOb4a1aCaFaFah#5ae#Aak.r#2bK#C#R#R#P#PaCaGazar#OaCac#G#pazar#X#K#Y#0#K#A#H#paGaLaGar#R.qaI#0ayaGaKar#Q#K#0#DbCbD#y#A#AbPbC.Z.YbA.V.Z#zbCbA.YbMbFbJbBbObE.k.h.h.h.h.f.f.f.gbFbC.b.dbPbM.#.#.#................................................",
"#c.y.y.yaSaY#daTaP#e.y.waXbkbdbia6aVaP.Lb2aW#d.w....a9b3a1bib7aSbkb2aU#k.z#f........b2bc#i.5....aQ.4.xb8....bib2aR.O.Ga8a6aRaQaO.O.I.ubaa4.H.uala5b4a5aO.Oa9aQ#8...#.#.#.#.#.#.O.Obqbsa0#7.C.N.e.c.g.f.h.h.h.ibra7a1.O.HbxbsaQ.Oaiag#9#3.B#6bzbzaE#5.B.S.l.l.l.j.1bCbBbKaDah#2.DbC#za9a9aOaFaHaFad#5#2#2.X#v#B#CaGac#O#PaC#xaLaLar#OaJak.q#p#X#X#N#Qaq#K#M#C#C#waGbtaC#Z#O#O#0#Uazazar#X#S#K#B#vbPbJ#AbD.YbCbB.Y.YbMbE.Y.ZbA.ZbObPbFbFbObObB.k.p.h.h.h.f.f.f.f.e.b.a.abMbM.#.#...#..............................................",
".8.A#i#daW#d.y.waX.1.x.1.Kb2bibia6aV.4.O.xaX#d.xaP..a8a6aXaP.L#ebdbd#g#c.zaY........bkbd#j#c.z.....Ja9aRaO..a6a6.4.Gbibxa5aR.L.H.C.Halbs.uba..a6a8a8a6brbqa9aRaN.N.C.#...#.#.#.abobsbsaN.N.B#8.eboag.N.h.f.ha7b0bZaR.N.P.OaQ#8.I#9#9#6.B#6bsbzbvaia0#9#5boboa2a..BbAbBbFah#5.sa4bF.ibF.4.4aHbvbvad#4.r#2#D#AbHaLaLac#O#B#BaIaGar#X.tas#P#PbH.X#E#X#M#N#1#G#x#p.XaIaC#Z#Q.q#Q#Q.t#0#0#X#N#NaMbObMawavat#V#D#A.Y.Y.ZbFbB.V.Y.Y.W#ybMbFbCbEbFbM.k.i.kbM.f.f.f.e.e.c.c.b.b.b.#.#....................................................",
".z.5aUaT#e.4.A#d.4.L.1b1bda6bxb4a8aP#d.L.x#d.J.L..bibia6aVaO.L.xaU#c#b.AbR.#......bkb4bk#i#b.7..a8a8a5aR#8.HaRaO.1.IbibxaVaO.x.1.zaO..........aVaVaRaObrb4a9aQ#8.H.u.#.#.#.#.#.a..a2a0#7.E.Cala3boa2#7.B.f.fa9a8a5#8.N.CaO.4.IaEah#9.B#9a2bEaiboboa3ag.Ebqbya2#9.Ea#.jaHaFaD#5.DbF#z#ybN.OaFaFaE#5#4.s#2bGbDaGaHaH#Y#P#R#D.X#Z#Q.t#1#P#Pbvazar#QazaGaB#X#x#w#w#D#Z#Z#Q#O#Pb6#L#Q#C.t#Q#QaCbDbQbMauaMap#TaxaxaqbMbFbAbA.V.Y.Y#y#v#ybFbB.n.k.nbObMbNbM#B.f.f.g.d.d.a.b.a.#.#......................................................",
".A#caZ#k.4.KbmaWaP.4aZ.Jbcbmbibib#aP.4.I.x#e.wb1bkbjb4a6aRaO.G.xbb#e.zaT..........bdbdaU#c.z.7.Ia8b4a5aR#8.H.H.L.xaVaVaVaO.O.uaS.A#i............aOaOa9bybxa7aO.O.H.HaNa1#8.#.#.#..a.#7.F.CbT.cbobya0#7.C.h.haRaRaO.1.u.Ca1.Nbpbpaia#.D.T.VbAa#bqb4a2a.bobsbvai#7.E.Ebzbybpah#4.DaCad#PbQbDahahab#4.r.QanbK#A.YaBaa#P.qaD#B#v#v#Q#Z#x#F#waGbYar#QaGbuaB#X.q#wbKbGax#Q#O#O#1.tbY#y#D#v#vawat#TbQbMavax#VawaAawaq#TbCbBbA#z.Y#y#y#v.X#D.n.n.k.hbMbCbFbC.h.f.e.dbObF.b.a.#.#.#......................................................",
"#ebX#d.G.4bhbgaWaT.4.y.y#kaVa6aVaP.4.1.u.LaV#g#bbibxbxbiaP.1.G.G#d#c.7#k..........aUaU#k.5.KaYa5bxbxa8aO.O.P.N......aOaO.O.x.1bV#cb2...............La3a7a7aR#7.N.C.IaRa1#8.H.#.#bqby.P.Ca4#7.Ca2a0#7.F.N.g.i.haO.N.H.Fb3.Caibybyaia#.B#5bC.T.Tbobra2#7.Ca2a0#7.E.Ba.bzbtbtab#2.r#2aa#PbJbJ#Aaa#4.r.DamaJ#A#ybBak#P#Oam#B#BbG#BbI#v#BbQbKasaI#XaIaGaH#Z#O.qbDbKaMax#W#J#B#Laq#B#AbNbDauaKat#TbMbCao#W#LawaKaA#V#L#U#z.Z#z#y#y#y#vbG#DbNbC.h.i.hbJ.h.f.h.f.ebNbMbB.b.a.#.#.#.#....................................................",
"#e.y.K.xbibxbjaWaT#d.y.yaS.4aPaPaO.M.x.1aSaV#k.AaVa8a6aP.4.L.u.NaV.7.z#j........bWb0#b.z.zaZ.4bia7a5aQ.O.I.ual....a5aR.O.IaOb##fbebhbc#i.y.........4aQa1aQaN.N.C.Iala9al.Hal.#.#a0bob3bsa..E.C#7#7.E.Eb4.f.f.h.h.N.NaQ.C.Caibpaia#.D.BafbAbA.Ta2a0a..E.Ba.#9.E.B#6a2aDaEae#4.r.Qafak.qaB#P#B.Q#2.Qafah#z#A#A.YbF#zaAaIar#N#x#ybQbK#wbK#B#Q#Y#O#RaB#Z#R.q#ObGawazaz#T#J#y#A.ZbD#AbK#Bavaxao#L#V.Y#A#L#Maxaxaq#U#Kasauat#T.Z#y#v.X#D.mbMbD.kauao.h.h.f.f.e.g.dbJ.b.a.a.#.#...#....................................................",
"#a.y#d.4bxb4b0aWaP.4.w.yaX...4.4.M.1.wbTa6#i.7.AaXaRaPaO.O.x.1aPaV.A#f..........blbca6a5aO.I.IaVaQaOal.N.ualbaa8a8a5aRaN.Ia9aRaNbhb7bc#i.z..........a8#8#8.N.H.CalbZ.N.C#7boa0.N.#a3a3aN#7.C.F.g.c.N.c.e.g.g.j.f.h.h.i.k.k.kag#9#3.s#9.SbC.S.S#7a#.N.Ea#a3#3.BalbaaCabab#5.D.salaF.raHaCaa.r.ZbBbJ#BbD#AbG#AbG#ybBaHaH#Z#S#wbDbKbDbKazaGar#Y#X.X#R#Q.q#O#A#A#Waq#U.taMbJbA.WbB#ybD#Bapao#T#L.V.YbFbD#A#W#W#U#J#0awaAat#V#L#v.X#E#D.k.n.kavayap#L.f.f.f.e.e.c.b.a.a.#.#.....#....................................................",
".K.w#abmbhbjbiaT#c.1.w.4aXaT#b.y.L.LaTaZ#j#c.A.8bc.4aO.M.L.xbab#.A#cbX..........#ja8b4aVaO.x.Ib#.O.O.I.F.Ib1..bib5a5aR.O.G.LaR.4.Cbhbc#b.yaU........a5aR.H.C.CalbY.#.#..bhaW#e.xa.a.a.#7.E.Ca0ag#9.d.c.e.g.f.f.h.h.h.h.k.i.k.E#3.s.Nam.o.S.SaFaE.C.Eala4bzaEaf#5btad#4#2#2.s#5aD#PaHbvaD#4.raBbG.ZbObM#A#B#A#ybGaraG#Z#Q.t#ZbKbI#B.WaGaGaI#Z#ObCaq#0#R#XbObP#A#L#JasbQbFbNbC#D#ybPbD.0#z#Laq#T.Y.Zazaq#W.V#L#0bAaxayap#T#L.X.X#D.n.n.k.haxawao#J#V.h.f.e.e.c.b.a.#.#.#...#......................................................",
".w.yaVaVbmaWaV#d.7.y.w#baTaU#c.x#k#b.A.7.4.5.7bWbb.4.G.G.Gbab#..#c....a8a5aP.I....a8bxaR.1.uaPaOaO.O.N.OaO..a8bxbZa5aO.L.I.LaR.4.uaO#f.y#fa7a1aQ.F...4aO.G.G.1b1...#..bib4aW.4.wa0.#.N.C.Cbpboa2#9.E.c.e.g.f.h.h.f.h.h.i.k.k.k.n.m.m.m.m.U.TbuaFab.D.Sbpbvbnaga#.D#4.r.Da3#8.EbBbCaDaCab#2.qadbMbObMbF#ybIbGbNaC#Z#Z#X.q#QbPbQ#AbKaGbuaLaI#X#O#QbQ#M#YbJbMbFbCaGaAao#JbBbCbC#D#CbF#A#zawawax#W#Mayayaz#0#M.VbBbEavap#V#Jao.X#E#D.k.n.k.katap#T#L.h.f.e.e.c.c.a.a.#.#.#..............av#V........................................",
".wbSbmbcaTaT#e.4.1.x#daZbc#i#b.A#i.7#i..bc#cbdbb#iaV#e..............bib4a5aO.IaO..a5aR#8.u.Ha5aN.Ia8a9aQ.O..a5a8aVaR.O.I.uaRaNa7a1aN.N#ba7b4a1aN.I..a7.I.L.1b...bqa3a0bgbga3a0#7aT.#.#.a.#bpb4ai#9.E.E.d.g.g.f.f.f.i.h.h.k.k.k.k.n.n.m.m.SaEaJah#6.DaEbrbvbnaf#3.B#6.rb5a4.N.NbBbBaFaDaj#2bwbAbNbObCbFbBbBbQaGbY#Z#O#S#YbC#A#BbK#CazaGaI#X#O.t#ZbDbBbPbObOayar#Uaq#T#J#WbJ#DbG#B#v#z.YawaAaq#T#MawaKazaq#K#VbFbA#V#V#L#M#v.o#D.k.k.p.h.i#T#L#LaK.f.e.e.e.c.c.b.a.#.#...#..........auauap#L......................................",
"#fbmbWbb#d#e.4.y.J.ybTbjaY#e.z.x#i.4.z.4.5a6a5aP.4aWaP.L.4..........a6a8a5.O.uaRa9aO.O.I.Ib1a5aRa8bxa7aR.O.uaRaRaOaO.G.xalaVbra8a9aN.4.Cbqa8a9.O.uaObxaQ.P.N....braWaX.4bobsa2a..E.#.#.#.aboboa2#7.B#6a#.e.e.g.f.f.h.g.f.h.i.i.k.k.n.m.m.S.mab#4.D#6aibnaEaf#3.D.BafaaaN.N.Ca3bMaHaFaEaj#2.Q.ZbPbJbMbBbB#z#AaBaB#O#PbEbJbA.Y.Z.U.T#Z#Z#Z#X.t#1aB.U.XbQbPaybuar#U#K#JaMbB#A.W.Z#DbB.ZbBaxaq#W#J#Waxay#W#U#Jaq.YbC.W#v#V.X.obH.2.k.h.h.h.h.h.h.f.f.f.e.e.e.e.b.a.a.#.#.......#......aAaAao#L.#....................................",
"..bWb0bb#c.J.K.w.1aZbgaU#e.4.A.K.z.z.Ka8bia8a5aRaN.G.4.G.1..........aRaR.4.u.1aVa9.4.u.OaRa8bsa1bxb3a4a7a0aN.N.4.4.P.1.Jb5a7b3b5a9aN.4.PaNa0a3a3a0aN.N#8.C#8boa0bibiaVa3a0#8a0#7.C#7.#.#.aaga.#7.B.Ba2ag.g.e.g.g.h.f.i.h.h.i.i.k.k.k.l.m.m.m#2.r#6.S.Rahafa#.D.s#7ahab.raDab.SbFbpb3aJab#3.QbFbFbAbPbAbCbB.ZbM#R.raIbPbCbA.Y.0.U.U.S#Q#O#O#1aM#K.U.XbKbDayaA#W#N#NaqaMbD.Z.W.0.YbB.ZbB#z#V#L#Lapar#W#U#J#N.Z.Y.W.W#v.X.o.obNbJ.k.h.h.h.h.h.h.f.f.f.e.c.c.c.a.a.#.#.#..............atap#T#L......................................",
"..bdaY#g#c.Abdb2aTaU#i#e#b.yaZ#e.K.z#ca8b5bZa5aP.O.G.L.xaO.............O.I.IbxbcaT.4.C....bsbxaRa8bra8a8a1aN.H.C.G.GaOaR.Na9bra7aNaNa3boa1aN#7.Ca0aN.N.v.I#8.Cagb0b4bqboa2a..E.P.Ba4.#.#.#.E#3.B.EbTam.b.d.d.g.g.g.h.h.h.h.h.i.k.k.k.k.n.l.m.l.R.S.R.l#3#3.E.E.DbwaDabaFaFad#2ahbzbpaD#5.Q.QbB.Z.TbFbBbC.Z#zbMbObMbAbFbB.0.0.Y.TaGayar#S#1#U#Kan.V.Z.W.Yar#0#M#KbYbB#yauat#TbE#zbGbA.W.ZbBatap#V.t#U.t#XaAbNbMbM.W#v.o.o.lbObF.j.h.h.h.hauauatao.e.e.c.c.a.a.a.#...#...#.#........#V#T#Tas......................................",
"aO#j#i#c.z#cbcbkbb#c.4.4b2bWaT#e.y#bb8bxbxbZa5aO.L.H.O.4aV..........bhaWaT.7bhbgaW#e.y..bda5aQ#8aRbrb4bsaR#8.N.Nb2#8#8.N.CaRa1aQaNbobrbqa1aQ#7.E.PaN.N.C.N#7.C.Ebia3b3byag#7.C.Eba...#.#.#.#.a#7.e.a.b.b.c.dbnaiaf.B.f.g.haiaj.i.j.k.kaFah#4.l.l.R.R.R.R.R.D#6ag.R#4aFb3bpad#2.sahahae#2.s#2#z.Z.Z.SbCbF.Z.Z.ZbMbBbJ#zbB.Z.V.W.SaGaL#Z#Oar#Mar.V#D#z#A.Y.Y#M#SaB.W#zauaKap#TaobAbCbB.Y.V.Z#L#T#L#0avapbNbObObFbCbE.U.o.nbHbDbD.i.h.h.h.fauaKat#V#J.c.c.b.a.b.#.#.#....................................................ap........",
"bb.4#b.A#fbV#gaU#i#c.ybca5aRaO.4.w#b#ca6a6aRaO.1.G.IaSbVaZ........bkb4bbaP.4b0b0aU#e.J#bb0.O.O.Ha1aN.NbsaQ.O.F.CaNaT#b.NalbcaO#8.Na7b4b3a1aN#7.F.C#7.F.C.NaR.F#9aRa3boa3ag#7.C.E.#.#.#.....#.a.a.#.a.b.c.dbzb5a2#9.B.fbzbzaEaf.D.iaFaHaFad#4.s.l.m.l.l.l.S.R.R.R.R.RaDaFaD#4#2.Q#5#4#2.D#2am.Z.T.T.tbF#zbMbF#N.Z.T.VbGbB.Y.0.Y.Tazar#Q#ObFbF#z#z.Z.Z.Y.YbB#DbBbBbLbBavat#V#J#y.WbBbCbGbC.V.T#zbPauaAat#V#JbMbGbF.WbQbF.l#D.h.h.h.h.h.h.favav#V#T#L.c.b.a.#.#...#.#..................................................auavatao#J..",
"bb#k.z....#fa3#e.4.z.5a8a8aVaO.N.IaZaQaVaRaP.O.1.u.Ib.aZ..........bkblaW#ebgblbk#i.1.A#faU#cbra7a9aQ#8.C.O.I.C.1aR#b.AbVbV.....P.Cbqbxbra1#8.N.C.P.N.C.Cal.C#7..a0a0amaN#7.E.Ca4.#.#.#.#.#...#.#.#.a.b.b.bbnbnaf#3.B.gbzbybn#5.D#3aFbYbtab#4.r.m.l.l.l.R.R.R.R.R.S.Radadab#4.s#2.R.R.D#6.Z.T.Z.S.RbObNbObMbBbF#z.T.TaIac.T.W.0.T#O#Q#OaMbBbB.Y.V.V.V.V.Z.VbA#z.YbQbMbM#V#LaqbB#y#zbMbMbF.Z.T.TbFavaKat#V#LbMbB.o.XbMbFbH#E.h.h.f.h.f.f.fapao#T#LbY.b.b.a.#.#.#...#.#................................................auaKat#V#L..",
"aU#k.5#e....a.#7.5.zbibxa8aRaO.O.u#8.H.NaO#8.I.L.IbZ.#............bcaU#e.1.waW#i#b.x.zaW#k.5bsb0a1aQ.O.H.H.u.Nal.H.4aZ........a0aNa3a3a0#8.N.C.C#7.C.C.Pa0.Balbqa2#9#7#7.F.Bbwa3.......#...#.#.#.#.#.a.a.baiaf#3.B#7.gaiai#9#3.s#9aDaJad#4.D.Qae.l.l.l.l.l.R.R.R.l.R.l#4#2#2.DaF.R.R.R.Z.R.R.R.R.RbFbFbObFbC.T.Z.ZaAaGar#O.TbBaGaM#Z#O.V.V.Z#z.V.V.Z.T.TbB#z.Y.VbMbC.VbC#zbBbB#zbBbMbBbFbC.VbC.Vavax#V#L#WbBbM.U.mbM.l#E.h.h.f.h.f.g.f.g.d#T#Jaq.b.b.a.a.#.#.#.....#................................................auavao#T#L..",
".4.4.waU.......E.Na2brb0bxaR.4.I.xaO.#bhbc.L.ualb.al..............#e#e#b.A#b#d.4.1.za4a7a1brbZbZa1aO.O.P.H.Nbab#.Ca0.Dai..bqa7a1aNa0aN#8#8.P.v.1a4.C.Nb1.C.Fa0b3a2#7.B.E.Bama0...........#......a6aP.#bzbnbnaf#3.B.H.da#af#6.B#3aEadajab#2.s#6.n.l.l.l.m.l.m.m.R.R.Ra7b4aQ#5.S.R.R.R.R.R.R.RbMbM#zbB.VbFbCbB.Z#zazaLaH#Y#O#QbBaIar#Q#ObB.V.V.T.Y.Z.Y.VbBbG.Zat#W.TbG#z.ZbFbMbJ#z.Z.ZbF.Uaq#L#zavawawaq#W#KbCbPbBbObMbBbPbB.f.f.f.f.f.e.e.e.c.c.c.b.b.a.#.#.#.#.#.....#..............................................apao#T#JaM..",
".8.A#faW....ayar#N..a8a8a1#8.O.u.GaR..aT#eaP.O.u.NbZ.................5.z#fbj.#.4.K#ibxbia1a9a7a9aQ#8.N.u.OaQa4.Nba.Dam..bqbybsa3aN.O#8#7.P.P.FbT.v.1ba.F.EbZa3a0a..F.F.......................#aEa2#3.4bzb5aiaj#6.BaS.g.g.D.Dala4.i.i#5#2.D.rbw.l.l.n.l.l.l.S.R.RbM#za3a0.N.C.R.R.R.S.S.RbFbBbMbFbBbFbFbF.RbB.TbBaIaGar#R.tac.T#Y#Q#QbubA.V.VbC.Z.VbBbBbBbGawazaq#M#z.T.VbBbMbB.T.T.TbFayay#WaxavaAaMax#W#JbAbFbFbFbC#EbMbM.f.f.g.f.e.e.e.e.c.c.b.b.a.a.#.#.#.#.#.#....................................................#T#Lax....",
".z.zbV......aK#0#Kara1aRaO.O.I.IalaR.....4.5.N.1b...........a7aQ.N..#b.4.KbT......brb3b3a1a1aQaQ#8.1.u.CaSaTa3a1aQ.N..bqbob3b3a1aN.N.P.P.C.Na4a1al...N.Eal....#9.E.CbZ...........#.....#.#.#btbvah#5a2bpbtai#5.D.B#9.g.d.d.g.g.f.h.h.h#2#4ae.k.k.l.l.l.l.l.l.l.RbFbB.S.N.Ca5.R.R.R.l.l.lbFbBbJbB#zbMbMbM#zbFbB.S#z#Z#Q.q#1ayazar#N.VbCbF.T.VbB.YbCbC.Z.ZayaKaz#V#L.VbMbFbB.ZbC.T.T.TayaAaxavawaqayay#W#M#J.mbCbI.jbPbEavavap.g.e.g.e.e.e.c.b.b.a.a.#.#.#...#.#.#................................................................",
"#fb1....a5aOar#M#X..#8aN#8.I.u.1b1..............bhaW#e.4..brbsa0.N.C....a9a5aRaO..a9a8a7#8.O#8.1.N.H.Cbaa4bqa7a1aQ.N.vbra3bra4a3#8.C.C#7.........................Ea............#...........#bpbtaf.D.Damafa##6.Q.E.c.d.c.d.d.g.f.dbzaEaj#3.D.i.k.k.k.l.lbna2a#.CbF.R.l.R.l.R.R.l.R.R.RbFbFbC.RbC.RaGaB#RbFbFbAbC.S.S#Oaa.WaAaLar#Oar.VbBbJ.Z.V.V.V.ZbJbBaxazaq#U#JapbMbBbE.S.T.T.T.Uaxatao#Jap#Vaqaq#U.tan.n.k.k.hbMbCaxayap#TbMbA.c.c.c.b.b.b.a.#.a.#...#......................................................................",
".L.Ia8a8a5aO.N.I.#...L.N.N.v.1aV..............bhbibmaT.4.xbxbxaN.H.H..a8bia7a1#8.Ha1aQaQ.1.H.u.F.C.LaRa9.vbxb5a1aN.N.va3a0a0aN#8.N.C.CaS.......................................#.#....ab....aiaf#6.D.E#9#5#3.D.Db4.b.b.da7a1.4.gbzbpaEaf#3.Q.i.j.k.l.kbvb3aga#.B.l.m.R.R.R.R.l.R.R.RaDaabBbC.l.SaGbvaB#R#Q.R#z.R.S.S.SbBbAasar#M.t#B.ZbNbMbC.VbE.TbAbF#zaq#W#U#J#0bCbA.U.S.S.T.T.U.U.U#T#J#U.X#L#M#L#J#U.n.k.h.ibH.0auawaAao#L#TbJ.e.c.c.b.b.a.a.a.#.#.#.#......................................................................",
".I.Na8b4aRaO.G.I..bgbmaT.4.J#e..........a6a6aVaP.LaWaP.4.xa9aQ.4a8a1aR.Nb4bxaR.O.H.OaN.N.P.Calb#bsa7#8.Na7bsb#a1#7.F.CaQ#8aN#8.N.C.FbTbs............................................ai#9.D..#9#3.D.Bbs.##3.B.Bam.b.b.c.ab5a5.OaEbvbvaEaj#3.D#5.h.i.j.kbobo#9.E.B.l.l.l.l.l.R.l.RaHaHaFad#2#PbE.RaGaC#Z#O#Y.R.S.S.S.S.S.T.S#X#Q#SaJ.ZbFbFbCbBbFbH#z.Z.V.T.W.Z#KarbAbB.Z.T.U.T.U.U.V.U.W.U.X.o.U.U.m.m.n.nbM.j.i.ibH.fatatao#T#Jaq.e.c.b.b.b.b.a.#.a.#.......#....................................................................",
"bhaU#e.zaQ.O.u.1bjbVbmaT#d.x.y.z......bibibiaVaP.4.x#d.J.waP#8a8a8a1aQ.O.ua1al.I.uaObh.I.vaQa5a1a0#8.N.v.Na1aQ#8.N.v.Hbi.N.N.P.B.Cala4............................................bzbnaf.Eah...##6.....#.#.#.a.a.a.b.b.caRaO.HaEbpbnah#3.D.Bafaf#9.h.iaga.#3.B.E.l.l.l.l.l.R.R.RaFb3aFab#2.rbC.ZaB#Z#RaCaBaa.R.T.R.S.R.T.R.T.T.R.T.TbJbBbB.S#zbBbB.Z.S.SbGbBbF.TbM.Z.U.U.U.V.U.U.V.U.X.U.o.mbMbObE.n.nbObObB.hb9#E.g.d#V#T#Jas.e.b.e.b.b.b.a.#.#.#.#.#.#..............................................auap......................",
"blaW#i.z.K.I.1bgb0b0aW#e.1.w#e.yaR.Obobib7bxa6a6aRaO.M.w.JaVa8b3bZa1aO.O.C.O.N.u.HaVbgaWaP.M.x#a#8.N.P.Hb#aN#8.N.v.1b4b3bZaR.4.N#8..............................................bzbvbv#9.B.D.#.....#...#.#.#.#.#.a.a.b.b.N.u.1ahahaf#5#2.s.Dahaiaj#3.0.R.E.B#3a2.n.l.l.l.l.l.l.laHbtaJ#4.Q.QbB.S.R#OaHaGaDac#P.R.R.S.S.S.T.R.T.TbPbBbE.Z.S.S.Y.Y.T.T.S.SbAbPbFbObMbB.V.U.U.U.X.U.o.U.o.U.m.mbEbObC.n.kbJbFbM.hbH.g.g.d.c.e.c.e.c.b.b.b.a.b.a.#.#.#.#.#..............................................auaxat#T....................",
"b2aT#c.y.K.Hb#aWbib.aX#d.w.yaT.xaR.O.ubibxbia8a6aVaO.L.xb1.Na8bxa5aRaN.O.C.O.H.Ib1.waXaP.4.w.1b8bs.N#8a0aWa0.N.u.1baa8a6a5aO.I.GaRa0#8............................................aiaf#3.Bam.....#...#...#.#.#.#.b.a.a.b.baCad#4#5#5#2.D.Db1b3aD#9#2.s#3.i.i.k.k.k.k.jbPbF.l.l.RaDahab#2.r#2.R.S.R.RaHb3aDaa#P.r.R.S.S.S.S.S.S.RbFbF.SbF.S.S.S.T.T.S.S.T.TbFbObMbF.V.U.U.U.o.m.o.o.m.o.m.m.n.m.n.l.k.k.h.h.ib9#E.g.e.c.c.c.e.c.b.e.b.b.a.a.#.#.#.....#............................................avaxaAao#L#T..................",
"aW#d.7.x#b......aTaT.4.1.wbTaW.w#e.HaNa5a6bxb4a6aR.4.G.Ial.Na9a8a7aRaQ#8.I.C.O.H.4.waX.4.xa7a1aQ#8bobmbiaW.N.N.EaVaPbib4aVaO.I.Ob3a2#8.E................................a3a0a..P..a#.D.Da4.......#...#...#.#.#.#.#.#.a.aaHbtadaa.r.D.D#6ambvbtai#6.D.saf.E.i.i.i.i.k.kbMbB.R.n.lab#5#2.r#2b5.S.l.R.maHaHaDak.r#PbC.S.S.S.m.S.S.S.T.S.U.U.S.U.U.U.S.U.U.U.VbMbPbF.X.UbM.S.m.o.m.m.o.m.m.m.n.n.k.k.k.k.k.h.f.hbH.d.e.eavao.c.b.b.b.b.b.a.a.#.#.#.#....................................................atap#V#L.#..................",
".G.4.w#daY......#d.4.5.K#aaY.A.Jbra7aRaPbmbibxbiaP.4.x.IaV.Ia8bxbxa5aQaO.P.C.O.H.O.waTa7bra7a1aQ.O.ubhb4aW#da8a8a6a8bxbxaR.O.x.Ob3a0#8.Ea.............................bqboa0a..E.C...#......aCad.q.#.#...#.#.#.a.#.#.aaFbubvah#4.D#4.d.c.daEai#5#3.Q.D.Ea#.g.j.j.i.j.i.j.k.k.l.l.l#2.r#5am.R.S.l.S.ladac#4#P.sab.m.U.m.m.U.U.U.U.S.U.S.U.U.m.U.U.TbMbM.Z.U.UbFbB.mbMbPbB.n.m.m.m.n.l.l.n.k.n.k.k.h.h.h.h.fb9.2.e.eavayao#L.b.b.b.b.a.a.a.#.#.#.#.......#............................................#V#T#Tas....................",
".J.J.5bV........bjb0.5#eaZ.A.4b1b4a7aWa7aVa6aVaP.4.G.x.1a6.Pa8b4bZaRaO.O.H.uaQ.H.ObV..brb4bxa1aQ.O.I.HaVaP.Jbib4biaPa5aRal.G.Hbaa0#8.F.Ea...........................bqb5bZa0#8.E.C.......#..aHaa.s.#...#.#.#.#.#.#.a.#aDaFaE#5#P.D#4.b.c.caf#5#3.D.DbY.C#E.0.g.i.i.f.i.j.i.k.k.k.l.n.l.m.m.laCacak.m#Pak#P#Pam#N.S.m.U.S.U.m.m.m.m.o.m.U.o.m.S.RbM.ZbBbF.m.m.m.m.n.nbFbCbE.n.n.n.jbPbE.j.n.h.i.h.h.h.f.f.gbR.g.c.cavat#V#L.c.b.b.b.a.#.a.#.#.#.#.....#..........................................................................",
".w.JaV........bgb0b0aW#e.Ja7a1aQ.Nbgbma8a8aRaP.4.L.u.1ba.Ma9a8a8bsaR#8.N.H.HaO.ual....brbybya1aN.N.P.H.x.1.wa6a6aP.4aOaO.L.u#dala..N.v.1a0..............bzai#9......a3brbqa.#7.B.F..........aa#PbY.#...#.#...#.#.#.#.#adadaa#2.r#5an.a.2.2.D#2.Q.Dam.g.g.0.0.0.0.d.daB#Y.i.i.i.k.k.k.k.n.laHaHadak.qaGar#4#Q.qb5.m.m.m.m.m.m.m.max#W.m.m.n.l.m.lbFbB.l.l.mbMbM.k.k.k.jbMbA.n.n.k.kbMbB.k.i.ibNbN#A.h.f.g.g.2.c.c.cap#V#JbY.c.b.a.a.#.#.#.#.#....................................................................................",
".x.1......a9a1aWbiaWaP.4bra7a1aN.O.uaWaVa5.4.4.J.1.IbTaP.L.Ja9a5aRaO.O.H.u.NaQ.Ha1....a9a7a9aQ#8.H.Cal.xaVaPaRaRaO.G.1.L.IaV.....E.v.Cb#................b5ai#6.B....a0a0a.#7.E.val........a1#8.....#.#.#...#.#.#aHaD#4.s#4#2.s#2bs.3bHbHbR.d.b#4.d.b.d.d.d.g.0.2aGaGaIac#O#5.i.i.i.j.jaGaHb3btac#4.raI#Z#Q.taC.m.m.m.n.m.l.n.maAaxao#J.n.n.l.k.k.n.k.k.k.kbMbCbC.k.i.k.kbD.k.i.i.k.i.ibMauapbEbFbJ.f.g.gbSb9.c.b.b.b#V.b.b.b.a.a.b.#.#.#.#.#....................................................................................",
".JaS....brbra1#8aT#i#da7b3bZa1aO.N.u#8aOaQaO.G.L.1aSb1aVaR.GaQaQaN#8.H.u.1aQ.HbT.C.C..aRaRaQaO.P.v.Ha4.1.......L.w.xb#............................a7a9aQ.Na2#3.B......a.#7.E.B#7a3......a8a9aN.C.....#...#...#aFbvaDak.r.abp#6ag.Eb9.c.b.b.b.b.d.d.d.b.d.c.d.d.daGbvaI#Z#P#O#2#4.iaFadaaaHaHaFaa#2.rab#Q.taM.n.n.n.k.l.k.n.kaxayax#U#J.n.k.k.k.k.k.h.j.i.i.ibF.iavao.i.h.i.h.i.i.i.hbNaxayap#T.f.f.f.e.b#f.b.b.b.b.b.b.b.a.a.a.#.#.#.#.#.#.#.#.#................................................................................",
"b#bgaX.4bxb3a1.N.1#b.wa7bxbsaR.O.P.C#8.J.O.N.I.uaObZa8a5aO.I.N#8.1.H.I.Ib#a4a5#8.C.N..#8.4#8.N.C.HbTa4b.........................................a8bxa9a1aQ#8.vbabzaEaha#.N.Bala4......a7bxb#.O.C.......#.......#aCaa.r#2bpbybnaf.E.B.a.b.#.b.b.d.d.d.c.b.c.b.d.daGaHaC#Y.q#O.D#2aHaHaBaaadadaa#4aCaIac#R#K#Nawav#V.k.k.k.k.k.laq#V.tan.k.k.k.k.k.k.h.i.i.i.h.hauavap#T.f.h.h.f.i.h.hauaAaAao#L#TbC.d.cb9bR.b.b.b.b.b.a.b.a.a.#.a.#.#...#.#.#....auat#L..........................................................................",
"aVbgaVaP.J.waO.N.Ca1.4a1a1aQ#8.N.u.Ha1a6aVaO.LaObib4bZaX.4.L.I.I.I.u.1a4a5a3a..N.Cal.....N.L.v.Ibaa4bia6aO.x..........................bzai#5....brb3bqa7a0a..PaEbvboag#3.B..............aRal.C.H....aFah#4.#....#4#P.raDbnbtbn#9.D.D.a.a.b.a.b.a.b.baiaj.b.b.d.caCaB#Y#O.qaa.DaHbvbuad#4akak#5aGaGaCar#R.q.kaAax#L#W.i.i.k.i.i#J#Las.i.k.h.i.h.i.h.h.ibPbB.havaKaAap#T#T.h.f.h.f.h.hatatap#T#JaxbF.c.cbR.b.b.b.a.b.a.#.a.#.a.#.#.#.#.#.......#auaKap#T..........................................................................",
"b4biaV#d.J.L.N.ubaa1.P#8aN#8.N.C.NbTa7bjaVaO.L.La8bZbiaR.1.I.IaXaV#d.xa0a0a.#7.C.Ca1..a8b4a5.O#8.IaOb4aVboa2a0.E......................b3ah#5.B..a3a3b3bZa0#8.P.Nbtbzaiaf.D#9.............N.F.Fa4..btbvad#2.r.#bT.2bSb6b6aiag#9#3.Bal.b.a.a.a.a.b.abvbn#5.D.b.b.c#Y#Y#R.q#RaCamaDaLaD#4#2.s.raGaHbuaCac#R.qaxaq#K#U.i.i.i.i.i.i.i.i.i.h.h.i.h.h.f.h.h.fbFbC.hauawat#V#Laq.f.f.f.f.g.g.g#V#T#L#Z.c.c.cb9bH.a.a.b.a.a.a.#.#.#.#.#.#.#.#.#...#.#..avav#V#Jax........................................................................",
"b4bla5aVaO.OaXalbaa..N.H.N.N.C.Cbaa1b3bxaR.4.G.OaWaVaR.4.G.x.ObjaP.O.waP#8.Na8a7a9aO.Lbibxb#aO.L.H.OaWbob4a3a..E.E..................aibn#9.D.E..aQa7brbraQ#7.C.Nbzbqai#9.D.D......................aFaE#4.r.r.2bSb6...#.#.#a#.E.Dal.b.a.#.#.a.#.baEbpaE#5.Bai.a.b.a#P.qaeaC.baLadadaa#1.r#PaDaIaGaCaC#Y#O.qac#U#K.k.i.h.i.h.h.h.h.h.i.i.j.h.j.f.h.h.h.g.h.f.faoap#V#L#Uax.g.g.g.g.e.g.e.e.g.e.e.c.b.cbR.a.a.a.#.#.a.#.#.#.#.#...#.#.#.#...#....ao#V#L#V..........................................................................",
"bia8a5aVaR#8.IbZa1#8.C.N....#8aQ..a6a6aR#d.M.waSaPaP.4.L.u.1b8aX#e.x.1..a2a8bxbxa9aO.N.Ca5aR.O.I.CaS#dbobsbo#7.B.E....................#5#2.Bb4....aRa1aQ#7.P.CaSbvbvaf#3.B.D#Y....................ah#4#2.Danb6...#...#.#.#.#.E#7.#.#ay#X.#.a.#.#..aj#5.D#6as#X.q.a.a.#.a.b.baraz#4#P#P#PbYaraBaBac#Y#P.q#R#W#N#U.f.f.j.h.f.h.h.f.f.f.f.f.f.h.h.h.h.f.f.g.g.gbO#T#V#Uay.c.d.e.g.gbObO.d.c.c.c.c.b.bb6al.#.a.#.#.a.#.#.#.#.#.#.#.#.#..............#T#W.#..........................................................................",
"bib4biaRaO.4.I.Na..F.CaQ.N........aXaP#e.1.u#daZaN.I.L.x.Ib#.M.4.J.Gb1....a8b0b0aRaO.I.IaR.O.I.ualba..a2a0#8.F.Cal.......................D..........a.#8.H.Bbaaibzai#5#3.Bai#9.r................bTadab.ram...........#.#.#..aCak.#aAaG#0#N.#.#.#.##4.D#6aLaI#Y.t.#aGaGaB#Y.a#Oarar#P#P#Sas#0#K#Y#1#O#P#ObY.t#X.f.g.f.g.f.g.g.f.f.h.f.g.h.h.f.f.f.f.g.g.g.g.dbMbMbM.e.c.d.c.c.e.cbObFbJ.c.b.b.b.b.abR.#.a.a.#.#.#.#.#.#...#.#.#.#.#.#.#..........................................................................................",
".Gb4biaRaO.O.x.L.N.C#7a1al...........4.J.G.Gb1al.P.C.C.O.........4a2#9a5a5a5a8a5#8.O.u.IaR.I.u.1b#....#7a..E.v#7a3......................aHaHab.r.......N.Cala1#9afa##3bzbzaiaf.E.B..........aHaHaFaDad#2.D.............#.#bvaCak#Pazar#Sas.#.#.#.#azaHar#Q#Z#O#NazaGbuas#Q.q.a.a#QazaI#Z#K#N#Q.3#O#O#1aC#X#K.e.g.g.g.g.f.f.f.f.f.f.f.f.f.g.f.g.f.g.g.g.e.davap.e.c.c.c.c.d.b.c.bbFbC.a.b.b.b.b.ab6.2.#.#.#.#.#.#.#.#...#...#...........#........................................................................................",
".Gbia6aO.O.I.x.1aVala4ala4..........a..M.L.C#7bZ#9boa3aN.N.FaO.Iboa2#9bxbia1aRaO.1.I.Ialai..al.............EaQ#6.B......................aHaL#4.r................#3.D.Bbpb3aEaf#3.Q....b6.3bRbuaFb5adab#2.r.....#...#bnai#5#3aa#P#4.##N#X.#.#.#.#..aGaH#Z#O#Q#NaHaIaHaH#Y#Q.q.#.#azbuaG#Z#O#U.b.b.caras#X#N#N.e.c.d.g.g.g.g.g.g.g.g.g.g.g.g.g.e.e.e.d.g.eauauat#V.c.c.c.c.b.b.b.b.b.b.a.a.a.a.a.#bT.#.#.#.#.#.#...#.#.#.#.#auauat#Tat#V..........................................................................................",
".LaPaPaO.L.x.LaS#d.C.Nbs...............F.Ca.a4.Bbob4a3a..E.BaO.xbvbna8b3bxaRaO.O.H.Hala5..a5aO.L........aEbpam#3.B......................adaa.r#4................a0aQaEbtbtai#9#3.B#6.2bSb6b6acaFaLaD#4.r#P.#bzai#9bvbrai#5.B#P.qbu.#.#.#.#.#.#.#.#aI#Z#Q.qaB.#.#..aB#Z#R.t#1.#.#azazar#Q.tar.a.a.b.b#X#N#ObY#E.c.c.c.e.e.g.g.e.e.g.e.e.e.d.e.eauap#L.d.caxaKap#T#L.c.b.b.b.b.b.b.aauawap#V.#.#b6.2.#.........#.#.#.#.#.#auaAaAat#T#Lao#L........................................................................................",
".1aR.4.O.u.waSb6aP.O.w..........aVaO.x..#7.E.Ebabobsbq#7.E.Ca0.xaOa7a5a7a5aO.O.P.uaPb#a2bxbiaP.L.L......agafa#.B#3........................#P#5.....................N.PaJai#9#3.Q.Dafb6b6.....raDad#5#P.r#5bvbqaibzbybvaf#3.D#5...#.#.....#.#.#.#.##O#Q#Oan.#....aC#Z#P#O#R.#.#.##Z#Z#X#O#1.#.#.#.#.#.a#X.b.a#EbHbR.c.c.c.c.c.c.c.c.c.g.c.c.eauavat#V#L.cavat#V#Jaq.a.b.b.b.c.a.a.aawaKax#V#U.#bS.#.#.#.......#...#.#....avaxaxao#T#L#V#J........................................................................................",
"aS.O.L.x.x.1b1a5aP.L.G........a8a6aR.O.ua8a5aO.Ia0a0a..N.val.1.IaRa8aRaRaO.O.u.1aR......bxbxaO.I.O........#3.B#9am......................ad#P..........................af#9#2.D.BbT............#4#4#2.r#2aDbvbvagaibnah#6.D.Bam#O...#.#.#.#.#.....#.....#.#.#.#aGaIaB#Y.q.#.......##Q#O#OaC.#.#.#.#.a.#.#.a.a.a.c#EbRbR.b.c.c.b.c.c.c.c.c.c.caAaAap#T#L.c#V#V#L#T.b.b.b.a.b.b.#.#axawayaq#M#Lb8ba.#.....#...#...#...#.#..atatap#T.t#W#J#T........................................................................................",
"bZ.I.I.uaOb#bxa6.4.I.G....aEbib4a6aO.L.xb4a5aO.I#7#7#7.B.Fb4.ub1bxb##8#8.N.I.HbT.uaR....aRaP.L.Iba..................................aFaHaD#2#P......................bR.D#3.E.BanaE................#Pan..bzbnaia##9afa##3.safai.t#Z...#.#.#.#...#......aGaB#YaGaGaI#0#Q.q.#.......#...#...#.#..aCac#R.#.#.a.#.b.b.a.##EbRbR.a.b.b.b.c.b.c.b.baxap#W#L#L.b.d.a.c.b.a.b.a.a.#.#.a.#.#aqaq#U#JanbS.............#.......#....au#V#T#T#U#L#L..........................................................................................",
".va0bqa2#7aVaVaO.L.xaS..bza8bibia6aO.G.GaVa5.O.u.4.E.Fala4.IaVaRaRaO.L.x.L.Nal.u.1....a1aQ.N.Iba......................aGaI#R........aFbtad#2#2..ad#2aCaa.........2.2bSb6b6#3#9.qae................aGaB#Y#9ag#9#3.B.E.D.B#6am#O#1...#.....#.#...#aGaGaGbuaBakaGbYaI#Y#O#Oac.............#.#aGaGaIaB#Y.q.#.#.#.#.#.a.a.a.a#EbRbT.c.a.a.b.b.b.bao#V#L#Mav.a.a.a.#.a.a.b.#.a.#.a.#.#.##T#U#J#Wb8#E...................#......auaxat#V#L#V............................................................................................",
".N.Ea0#7.N.E#d.L.IbaaW.Pboa9a1aN.N.Ia0ag#7aO.I.IaV.L.Ib#.........4.I.Iba.L.O.H.Ib#..a8a7a1aO.u........................aLaB#O#Y......aCad#4.sambuaD#R.rak.rb9.2bRbSb6b6....#R#OaJah#5..............aLaC#P#R.D.D.B#3bw..#6....aa....aq#U.#.#......aGaLaGaLaBaGaKaLaB#X#O#O...#.#.......#....aGbuaLaB#Y.q...#.#.#.#.#.#.#.#.#.a.2bRbR.#.a.a.a.aauaA#L#V#L.b.a.#.#.a.#.#.a.#.#.#.#.#.#...#...#b6...........#.#.........#....atap#V#J#V..............................................................................................",
"#7.u.N.E.Calbo.Ial.N.Ba7a8a7aRaNboa3a2a0#7.E.HbZbY..a8a8aVaO.G......aO.L.ub#.O....brbxb3aR.1.C........................ac#Y.tas....aFb3aD#4#PaDaHaa#P#4#P#PbRbSb8...........#bzbzah#5.B............#Z#R#PaC..bpbvaf#3.D..........ayaEaj#4........aB#ZaCaB#X#PaIaI#0#N.tac...............#..aGaGaC#Y#O.qac.......#.#.#.#...#.#.#.#.2bRbR.2.a.#avaAap#T#T.#.a.#.#.a.a.#.#.#.#.#.#.#.#.#.#...#bR.....#.....#...#..............#V#L#L................................................................................................",
".N.C.N#S.Nbob4boa..E.Ebrb4b#aQaNbrbya2a0#7.E.C......bxbxaRaO.I.........I#d......a8b4a8a5aO.I.uaQ........................#OaB......aCaD#4#2#2..aa#P#PaD#PaGaIak............bzbvbrah#5.Q#2#4..........#OaCaI#Kbzbn#5.D.E..........bzaFah#4.s........#P#Z#Y#Q.q#Z#Y#R.q#1bu....aIaIar#Y...#.#aBaB#Z#R.q#P.....#.#.#.......#.#.#...#.#.##fbRbS#Eatat#V.tax.#.#.#.#.#.#.#.#.....#.#.....#.#..b9b6....................................................................................................................................",
".F.C#8#OaIbnbqa3#7.B.EbrbxbyaQbobyb3a0a.#7.C.Ea0..a5bxa8a7a7a1aO.HaI#Z#O........a9a8aRaQ.N.uba......................................#4#P#2bwbS.3#PbSb6b6bYaCak#OaAas#X....aFbubuaj#4.Q#2aa.r....ac#RaIaGaEah#5aj#6.ram........bzbvbtaj#4.Q....axaq....#O.qae..#Q.t#1aL#O..aGaHaGaB#Y.t#Y.#..#Y#Q#O#ObY...#...#.............#...#.#.#.#.#..bRbR#T#Jar.#...#.#...#.#.#.#.#.#.#.#.#...#...bbR.........#....................................................................................auauat#V................................",
".v.Fa4ae..a0aga..E.Cala7a1aQ.Oa3boboaN#7.F.B.N......a5a8bia8a1#8.P.H#Y.q........a1a1aN.H.u.1a1ab.....................................##RaH#Z.qb6b6b6....aC#Z#P#PaLaz#S#Q..aiaEah#4.D.sana..raaaGaI#Y#Obpbnaiaj.D.sa2........aEaEbzah#5#2.QahaGaI#Z#K.....#....aGbuaGaa#P#YazaLaK#Z#X#O#Y.q....#P#1#Z...........................#.......#.#.#.#bRbSbR...#.#...#.#...#.#.#.#.#.#.#.#...#b6bS..............................................................................atao............avaAatao#L..............................",
".CbTa9bqa9aQ#8.N.FaQ#8aRaQaN.1a0a0a.#8.E.v.Eal.#....aOa8b4bxaQ.O.P.H#O#O........a7a1aQ.N.P#2.r......................................aHaCak#Y.q.#........#Y#P.qaCar#X.taC..#5ab#5#2.s#6am#P.saGaH#Z#R#OaFbyai#5.D#3aHaC#ZaFaCadaaadab#2.s#6aGaI#Z#Q#O#Q........aGaLaCak.q#RaIaIar#Y#O#O#Z.q.........#.........#...........#...#.........#.....#....bRbRbT.#...#.#.#.....#...#..........bR............................................................................auauavao#L..........avavap#T#L..............................",
"ala4bqbqa9aQaN.P.Ca9aQ.OaN.P.H.H#7#8#7.F.Cbabs....brb4a7a8a4#8.1.u.N#RbY....aFbrb4a9aN#8.H.D..................................bS.2.2bvaCaa.sbw................bpa2agaDahab...D#2.s#9aJbs.rbwaBac#1.tacbnbnaf#3.Q#5buaCaaaFaFad#5.D#4.r#PamazaGaB#1#O#Y.......#ar#Z#Y#P#OaD#Z#Z#Y#Q.tanaIaB#Y#O.....#.......................................#...#.#...#bRbSbS.#.#...#...........#.#..b6bR............................................................................avaAaxao#L.#........atap#V#Jaq............................au",
"a0a3bxb5a1aN#8.P.Pa1aQ#8.P.I.HaQ..a#.B.Cala7.E#2axa7a8a1a1aO.N.C.Ha5......aFbvbqbxa8aN.P.Ca.........aFah#4................#f.2bTb9aCaJaC#4.rah................bpbybzbuaDaa.r......#7.##PacaI#Z#Q.qae#Pagaf#6.Q#6aiaHaDaFbybtad#4.D#4#3bYaGaLaL#Z#N#OaC....aGazazaraIac#Y....#Q#O.t#1aCaLaB#Y.q...#.........#.......#.............#.............#.......#..bRbSbS...#.............#.cbR..............................................................................atatap#T#J............#T#Jaq..............................at",
".ubqbxbya9#8.N.C.Ha0aO.N.P.NaQ.O..bqbo#7a.a#.C.N#4aQaQal#8.N.H.PbT........btaEa1a1#8.N.C.F........aFab#2.D#2...........2a2a.#7b6b6..ac#4.qbY........aEaiaj#2..bqbqaFbvah#4.D#4............bt#ZaB#Z#O#1#3.D.B.DbYaBaB#YaFaHaDaa#2.Q#5aFaHaIaIaI#X.t#Q#4....aGaLaIaHaGaB#Y#P......#XaGaLaL#Z#R#O#Y...........#.............#.......#.....#.......#.....#...#....bRbSbR..............b6bR................................................................................ao#T#TaM...............#................................#V",
".ua1a3a1aN.N.P.vala4#8.H.CalaR.Obobyb3a2a.a#.C.Nae#J.1.C.I.N.FaR..........aBabaN#8.O.H.ubZ......bzb3ae.Q.sam....bS.2aSboboa0#7.B..aI#P.saDakbna2a.aHbzaEafa#.QagagaDahab#2.raCaCaa#P....aIaC#R.q#O#1......#3......#R.radadab#4.r.Qahaaac#Y#Z#Y#O#Qb5#2....azazaIaI#X#K#Y.q#R......aIaI#Z#R#O.q.......................#...#.................................#......bRbSbT.......#..bR....................................................................................#V......................................................",
".IaNaQaN#8.N.v.Oa4#8.N.u.Ha1aQ.Nbnbwboa2#7.E.B#6#KaC...O..................#P.q#2.H.u.HaS........aDah#2.sam...2.2bRb1bobybrag#7.C.E..#Y#O#Pbpbza2afbtb3a2aj#3.Q#5a#adab#2.saHaHaDaa#P#P..ayaq#MbY.....................#..#4#2.D.rbw.Q#5.r.q#O#Q#Ran.rab....aGbuaHar#Q#O#R.q#4........#Z#R#O.qaJ..........................avaq.............................#.......#.....2bSbS.2..b6#E............................................................................................................................................",
"b5.O#8.N.H.H.HbTa1.N.F.FbTbs#8.Ca0a0a.a..E.v.Fa2............a7a3a0#7........bqboaQ#7.P............#4.Dbw.3.2bRb9b6b6bobsbqa..E.C#9....#O..brb5a2bzbvbuai#5#2.Q#5..#7#P.saCbtbvaCaa#P#PayaLaq#M....aw#W....................#2.Dab#P.rah..aHaaab#4.r#4aD....aGaKaL#0#S#K#Z.qaD..........#R#PaD..........................auawap#L.........#auauap#L..........................#fbTbSbS..............................................auatao..........................................................................................",
"aR..#P.F.P.Obaa4.L.C.F.1a7aO.H.Cb##9#7#6.B.FbTa3............bybsaN#7.C....a7a0#8.P.N.v............bS.2.2bSb9b6......a2a2a.#7.F.Cam......aibpbna2aibnaiaf#3.Q.saf........aCaFaDaa#4.r#4aqaq#U#K..aGaz#V#K..................abae#4.sam....aFaD.Q.r#5aJ......aIaIar#Q.t#N.sam............azar#U........................awaAaAaq#L#U......avaKaxao#L..............................bSbR............................................avaKavao#L........................................................................................",
"................aIaNal#X.O.P.Ial....#3.B.Cama2............a7bsa7.O.Ca3a0bqbra2#8.C.C.C.........2.2babSbSb6............a.#7.E.CbS..........agag#9ajafab#5.D.B#6ai..........adac#4.r#2ae..#M.taL..axaq#M#L....................#P.s#5.#aFaDaa.r.r#4.#........#Y#Z#X#N#ObYaa............ayaLar#U#K................awaq....axap#T#Jaq......avaxap#V#Jap.............................2..............................................auaAav#V#L........................................................................................",
"................aAbuas#Q#Q#W..arboboa2#9.E.E................aQaN.Nbqa3a3b3b3a0#8.C.N.N..b6.3.2baa0a#b6.....#azar#N.......E.Ea4............#9#7.E.D#3#3.D.E.Ebw............#4#P.r#Pam...#aEad....#T#M#U.#aGaBac#O.................#aFbyaDaa.raa..............#O#O.taC#1..............azaGaq#M#S..............awaKaq#L..#W#W#J#W........aoao#V#Las..............................bR..............................................atatao#L#T........................................................................................",
"..................ar#X.taB.#azasbybyag#9.E.E................#7.Pbob4bsa3bra3#7.N.v.Na9.2albSbqbra2a..C....aGaL#0#S#X.........................E.BalboaH.D#3af..................#4......btbpaj#2........aHaGaI#Z#P#P..............ayaHaFaD#4.raj......................................araq#W.tas..............axayaq#Jaq....................#Tavauat#T........................bRbS................................................#V#L#LaK........................................................................................",
"..................#X#S#Q..azaHbobsbsag#6.C.E......aEaf#3........a7brbra0a0a.al.C.Fa4bHbSb6b8bqb5a2a..C.E..arar#Q.t.#...................abzaiaf.E..aHbuac#R.r..........................aEah#5.rah......aGbuaB#Y#Q#O..............aCaCac#P.razar#0#Q..................................ayawaq#M................aqao#L#U........................auaxat#V#L.......................2.......................................................#..........................................................................................",
".B........a3a0#7..........arara0a2aga#.E.B#7.D.#bzaEaf#3.B......a1a0a..N#7#7.F.FbYbSb6b6..aHbobraN#7.B#7....#Q#SaJ....................bzbnaiaf#3.BaCaBak#P#P..........................aj#5.sam......aFaGaHac#1.q#R............aHaHaCac#R.qazaI#Z#O#X..............................awaGaA#W#J#W..................#U........................avaxayap#T#Lat#L................bSbT..................................................................................................................................................",
".B#7....bqbra0#7.C..........#S#Ka.#9.E.B#7b4.Dbtb5bnaf#2.QaFaFaD#8#8#7.C.C.N.F#8.Nb6......aHa0a.#7.E.Fa0............................bzbyb3ai#9#2.B#4aa#P.raF......aCaIac.r......aFaFaDab#2aj......aHbtaB#Z#Y#O#PaeaCaCac....aGbubvaDaa#P.qbtaGaCaB#X#O..............................axaq#T#J................................................avap#V#Jaqat#J.................2b8..................................................................................................................................................",
".C#7aya3bsbsa..N.Ca.....aHaCac.r..#3.valbw#2.QaJbpbn#5.Q.Qaibvad#4.C.P.Ha1.N.C.Ba0........aC#7a#.E.Cam.Eag..........................aibpa2af#6.B.Daf..#P.#.......#bYaG#Y#O......btbtaDab#2.Q......aFbu#R#R#O#OambtaHaDac#P..aCaHaHaC#P.r.raBaLaKaB#Y#O..............................#U#L#Man..........avaq..................................#V#T#L#Wat#V#L..............b6bR....................................................................................................................................................",
".u.Ha4aQ.Na0#8.C.Ca3aEbzaf.Eaa#P#M..#5ab#2.samagafa##3.s#3aFaEab#P.Qaba.#7.C.vbaa3..........#P.C.Ca0.C.F............................agaiafa#.E.B#6.#............aCaHac#R.qac..aFbvbvahaa.r.Qah....aFaEab#4#R#2#KaHaLaFak#O#Padacad#1#P.q#PaGaLaL#Z#R#O#Y...............................#............awaAaq#L....................awawaq#W#M......ao...##Lax..............bTbS....................................................................................................................................................",
".v.NaQ.P#8.H.P.CbYbpbnaEaf#3.Q.rae.....D.ranah..#6.D.E#3aEahae#4.sam#Lah.F.Fbaa2am............#7#7.E.Eb5..............................#9a##2.B#6b5..............#Zac#R.q#4.q..aDbzaD#4#4.r#2......abab#4.r.Db4#SadaCaa#P.qah..aaaa#P.r#2bwaIaI#Z#R#O.qaB............................................awax#V#J....................ayaKaq#V#J...................#auap#L.....2......................................................................................................................................................",
".u.Na..H.C.F.Pa1arbtb3ai#9.D.D.raCay#V#M........bobs#5#9.EbS#2.Q#2aD#V..#5.D#2am..................#7.#...................................D.B#9bn...................q#Oaa#Q#O..adabab#4#P.Q#6aCab.r..#2.r.sbw.taCac#R#P#Pam..aGbt#P.raaan....#Z#Y#O.qaM........axaq#M................................ao#V#JaM....................awaxaq#K#J..................ayaxap#T#TbXbR......................................................................................................................................................",
".CaS.D.E.C.C.Paq#Ubzbnaf#5.B.DaiaMaz#M#M......b1brbsaga#.C#9......#U.........#................................................aGaI#Y.q........adak................aCaBaa.q#1....#4#2#2.r#6aFaDak.r#4....#N#KaGaHaBak.q......aCaHaLaa#P.q......#P.qae........ayawaq#V#L........awawaq#L................atao.#..................awaMaxao#N#W.aavavap#L.#ataoauaAaAao#T#TaSb6......................................................................................................................................................",
"babZ.E.E.FaQalac#Oafafa#.D.Dam.#aq#W.t#0..bS.2.2a3am#9.F.Ca0..............................................bnbzaNa#.E......bzbzaf#3#Y.q....aHaCaCaa.r.#bzaFaj#2..aGaGaCac#P#R......#2.ragaDaFac#4#Paa....aFadaLbuad#R.r......adadac#1.s#2....................ayaKaq#T#L........aAaAaq#L#W............auauat#V#L..............awawaAax#W#J#WauaMaxaoauauauap#Tatap#V#Jaq.3........................................................................................................................................................",
"bs#3.E.Ea.albYac#P#R#6.D.Eal....#M#Jas.3.2#fbSb6#7a#.P.CbTaf........................................aHaCaBbybvag#3.B......bvbpaf#5.B#O....aHbvaBak#O#Rb3aJaj#2.DaGb3aB#Y#P#P......aCaCac#Pad#4.r#2ah..aHbpadaCaB#1#P.ravap....aa#R#P#PaF....................axaq#V#Jauavap#LawaGaA#W#L#T............ayaKap#T#L............awaMaxaq#W#M#Jaqavaxat#VauaMaxao#T#T#V#L#VbRbS........................................................................................................................................................",
"#3.E.B#7b7bsaL#Y.q#R..#3an......bS.3.2bRb1b6b6b6ai.B.Cal.D..........................................buaCbzbtbsaFaDab#2..bzbvbpaEaDaj#5..aCaLaLac#R.raabtbp#5.D.DaHaHaC#R.q#1.saHaGaGaCad#P.q.s#PaM....aLaHaaaaak#P#PbYaKat#L....#R#4........................aq#V#MavaKauap#L#Vaqaq#U#Jas..........ataxav#V#L#T............away#U#W#T#JaM..apap#V#Lauaxat#V#L#V..#Wb8.3..........................................................................................................................................................",
".D.B#3am..aCacbna2aga##3..b6bS.2.2bRb6b6b8........#5.E.BbY..........................aGaI#Z#O......aBaHaCbzaiaHaFaDaj#2.sahaibzbzaEah#5.D#5adac#4.q#Paeah#5#2.QafaB#Z#1#O.qan.raHaHbvaDaa#P.r#5.r#4....adaa#P#P#P.racavaw#V#J..................................ayaqavawav#V#L#W#W#U.t#0............axaqaq#M#LbY............axaq#V#L#Maqar....#T#J#Latapao#T#Lax....b6.2..........................................................................................................................................................",
".B.Eb#a0..#Ybpbpa2aga#.D.D.2bRbRb6b6b6...............E#6..............bna2aga#.E....buaI#X.q......aIaIbpbrahbtb3ahab#2.r..ajbtb4aJaj#3.Q.Eak#R.r#Pbv..#5#2#2am..aDab#4#OaJ.r#5aIaCaFaDaa.r.q.D#2aF......#2.saM#V....aoao#Las................................ayaGaratapao#L#Jax..................ayaKazaq#MaA........at#V....#T#M#JaA#Xavap..........#V#L#Las.....c.2b6.........................................................................................................................................................."
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,470 @@
#include <H5PartRandomSampleAttributes.h>
#include <DataNode.h>
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::H5PartRandomSampleAttributes
//
// Purpose:
// Constructor for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
H5PartRandomSampleAttributes::H5PartRandomSampleAttributes() : AttributeSubject("f")
{
factor = 1;
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::H5PartRandomSampleAttributes
//
// Purpose:
// Copy constructor for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
H5PartRandomSampleAttributes::H5PartRandomSampleAttributes(const H5PartRandomSampleAttributes &obj) : AttributeSubject("f")
{
factor = obj.factor;
SelectAll();
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::~H5PartRandomSampleAttributes
//
// Purpose:
// Destructor for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
H5PartRandomSampleAttributes::~H5PartRandomSampleAttributes()
{
// nothing here
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::operator =
//
// Purpose:
// Assignment operator for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
H5PartRandomSampleAttributes&
H5PartRandomSampleAttributes::operator = (const H5PartRandomSampleAttributes &obj)
{
if (this == &obj) return *this;
factor = obj.factor;
SelectAll();
return *this;
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::operator ==
//
// Purpose:
// Comparison operator == for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
H5PartRandomSampleAttributes::operator == (const H5PartRandomSampleAttributes &obj) const
{
// Create the return value
return ((factor == obj.factor));
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::operator !=
//
// Purpose:
// Comparison operator != for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
H5PartRandomSampleAttributes::operator != (const H5PartRandomSampleAttributes &obj) const
{
return !(this->operator == (obj));
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::TypeName
//
// Purpose:
// Type name method for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
const std::string
H5PartRandomSampleAttributes::TypeName() const
{
return "H5PartRandomSampleAttributes";
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::CopyAttributes
//
// Purpose:
// CopyAttributes method for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
H5PartRandomSampleAttributes::CopyAttributes(const AttributeGroup *atts)
{
if(TypeName() != atts->TypeName())
return false;
// Call assignment operator.
const H5PartRandomSampleAttributes *tmp = (const H5PartRandomSampleAttributes *)atts;
*this = *tmp;
return true;
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::CreateCompatible
//
// Purpose:
// CreateCompatible method for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeSubject *
H5PartRandomSampleAttributes::CreateCompatible(const std::string &tname) const
{
AttributeSubject *retval = 0;
if(TypeName() == tname)
retval = new H5PartRandomSampleAttributes(*this);
// Other cases could go here too.
return retval;
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::NewInstance
//
// Purpose:
// NewInstance method for the H5PartRandomSampleAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeSubject *
H5PartRandomSampleAttributes::NewInstance(bool copy) const
{
AttributeSubject *retval = 0;
if(copy)
retval = new H5PartRandomSampleAttributes(*this);
else
retval = new H5PartRandomSampleAttributes;
return retval;
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::SelectAll
//
// Purpose:
// Selects all attributes.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
H5PartRandomSampleAttributes::SelectAll()
{
Select(0, (void *)&factor);
}
///////////////////////////////////////////////////////////////////////////////
// Persistence methods
///////////////////////////////////////////////////////////////////////////////
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::CreateNode
//
// Purpose:
// This method creates a DataNode representation of the object so it can be saved to a config file.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
H5PartRandomSampleAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool forceAdd)
{
if(parentNode == 0)
return false;
H5PartRandomSampleAttributes defaultObject;
bool addToParent = false;
// Create a node for H5PartRandomSampleAttributes.
DataNode *node = new DataNode("H5PartRandomSampleAttributes");
if(completeSave || !FieldsEqual(0, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("factor", factor));
}
// Add the node to the parent node.
if(addToParent || forceAdd)
parentNode->AddNode(node);
else
delete node;
return (addToParent || forceAdd);
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::SetFromNode
//
// Purpose:
// This method sets attributes in this object from values in a DataNode representation of the object.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
void
H5PartRandomSampleAttributes::SetFromNode(DataNode *parentNode)
{
int i;
if(parentNode == 0)
return;
DataNode *searchNode = parentNode->GetNode("H5PartRandomSampleAttributes");
if(searchNode == 0)
return;
DataNode *node;
if((node = searchNode->GetNode("factor")) != 0)
SetFactor(node->AsFloat());
}
///////////////////////////////////////////////////////////////////////////////
// Set property methods
///////////////////////////////////////////////////////////////////////////////
void
H5PartRandomSampleAttributes::SetFactor(float factor_)
{
factor = factor_;
Select(0, (void *)&factor);
}
///////////////////////////////////////////////////////////////////////////////
// Get property methods
///////////////////////////////////////////////////////////////////////////////
float
H5PartRandomSampleAttributes::GetFactor() const
{
return factor;
}
///////////////////////////////////////////////////////////////////////////////
// Keyframing methods
///////////////////////////////////////////////////////////////////////////////
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::GetFieldName
//
// Purpose:
// This method returns the name of a field given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
std::string
H5PartRandomSampleAttributes::GetFieldName(int index) const
{
switch (index)
{
case 0: return "factor";
default: return "invalid index";
}
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::GetFieldType
//
// Purpose:
// This method returns the type of a field given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
AttributeGroup::FieldType
H5PartRandomSampleAttributes::GetFieldType(int index) const
{
switch (index)
{
case 0: return FieldType_float;
default: return FieldType_unknown;
}
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::GetFieldTypeName
//
// Purpose:
// This method returns the name of a field type given its index.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
std::string
H5PartRandomSampleAttributes::GetFieldTypeName(int index) const
{
switch (index)
{
case 0: return "float";
default: return "invalid index";
}
}
// ****************************************************************************
// Method: H5PartRandomSampleAttributes::FieldsEqual
//
// Purpose:
// This method compares two fields and return true if they are equal.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
bool
H5PartRandomSampleAttributes::FieldsEqual(int index_, const AttributeGroup *rhs) const
{
const H5PartRandomSampleAttributes &obj = *((const H5PartRandomSampleAttributes*)rhs);
bool retval = false;
switch (index_)
{
case 0:
{ // new scope
retval = (factor == obj.factor);
}
break;
default: retval = false;
}
return retval;
}
///////////////////////////////////////////////////////////////////////////////
// User-defined methods.
///////////////////////////////////////////////////////////////////////////////
@@ -0,0 +1,60 @@
#ifndef H5PARTRANDOMSAMPLEATTRIBUTES_H
#define H5PARTRANDOMSAMPLEATTRIBUTES_H
#include <AttributeSubject.h>
// ****************************************************************************
// Class: H5PartRandomSampleAttributes
//
// Purpose:
// Randomly reduce an H5Part point mesh
//
// Notes: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// Modifications:
//
// ****************************************************************************
class H5PartRandomSampleAttributes : public AttributeSubject
{
public:
H5PartRandomSampleAttributes();
H5PartRandomSampleAttributes(const H5PartRandomSampleAttributes &obj);
virtual ~H5PartRandomSampleAttributes();
virtual H5PartRandomSampleAttributes& operator = (const H5PartRandomSampleAttributes &obj);
virtual bool operator == (const H5PartRandomSampleAttributes &obj) const;
virtual bool operator != (const H5PartRandomSampleAttributes &obj) const;
virtual const std::string TypeName() const;
virtual bool CopyAttributes(const AttributeGroup *);
virtual AttributeSubject *CreateCompatible(const std::string &) const;
virtual AttributeSubject *NewInstance(bool) const;
// Property selection methods
virtual void SelectAll();
// Property setting methods
void SetFactor(float factor_);
// Property getting methods
float GetFactor() const;
// Persistence methods
virtual bool CreateNode(DataNode *node, bool completeSave, bool forceAdd);
virtual void SetFromNode(DataNode *node);
// Keyframing methods
virtual std::string GetFieldName(int index) const;
virtual AttributeGroup::FieldType GetFieldType(int index) const;
virtual std::string GetFieldTypeName(int index) const;
virtual bool FieldsEqual(int index, const AttributeGroup *rhs) const;
private:
float factor;
};
#endif
@@ -0,0 +1,76 @@
package llnl.visit.operators;
import llnl.visit.AttributeSubject;
import llnl.visit.CommunicationBuffer;
import llnl.visit.Plugin;
// ****************************************************************************
// Class: H5PartRandomSampleAttributes
//
// Purpose:
// Randomly reduce an H5Part point mesh
//
// Notes: Autogenerated by xml2java.
//
// Programmer: xml2java
// Creation: Thu Mar 16 10:26:56 PDT 2006
//
// Modifications:
//
// ****************************************************************************
public class H5PartRandomSampleAttributes extends AttributeSubject implements Plugin
{
public H5PartRandomSampleAttributes()
{
super(1);
factor = 1f;
}
public H5PartRandomSampleAttributes(H5PartRandomSampleAttributes obj)
{
super(1);
factor = obj.factor;
SelectAll();
}
public boolean equals(H5PartRandomSampleAttributes obj)
{
// Create the return value
return ((factor == obj.factor));
}
public String GetName() { return "H5PartRandomSample"; }
public String GetVersion() { return "1.0"; }
// Property setting methods
public void SetFactor(float factor_)
{
factor = factor_;
Select(0);
}
// Property getting methods
public float GetFactor() { return factor; }
// Write and read methods.
public void WriteAtts(CommunicationBuffer buf)
{
if(WriteSelect(0, buf))
buf.WriteFloat(factor);
}
public void ReadAtts(int n, CommunicationBuffer buf)
{
buf.ReadByte();
SetFactor(buf.ReadFloat());
}
// Attributes
private float factor;
}
@@ -0,0 +1,47 @@
// ************************************************************************* //
// File: H5PartRandomSampleCommonPluginInfo.C
// ************************************************************************* //
#include <H5PartRandomSamplePluginInfo.h>
#include <H5PartRandomSampleAttributes.h>
// ****************************************************************************
// Method: H5PartRandomSampleCommonPluginInfo::AllocAttributes
//
// Purpose:
// Return a pointer to a newly allocated attribute subject.
//
// Returns: A pointer to the newly allocated attribute subject.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// ****************************************************************************
AttributeSubject *
H5PartRandomSampleCommonPluginInfo::AllocAttributes()
{
return new H5PartRandomSampleAttributes;
}
// ****************************************************************************
// Method: H5PartRandomSampleCommonPluginInfo::CopyAttributes
//
// Purpose:
// Copy a H5PartRandomSample attribute subject.
//
// Arguments:
// to The destination attribute subject.
// from The source attribute subject.
//
// Programmer: cristina -- generated by xml2info
// Creation: Thu Mar 16 10:26:55 PDT 2006
//
// ****************************************************************************
void
H5PartRandomSampleCommonPluginInfo::CopyAttributes(AttributeSubject *to,
AttributeSubject *from)
{
*((H5PartRandomSampleAttributes *) to) = *((H5PartRandomSampleAttributes *) from);
}

Some files were not shown because too many files have changed in this diff Show More