Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8a553aee0c | |||
| 34ff957938 |
+113
@@ -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
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
Executable
+133
@@ -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
|
||||
@@ -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
|
||||
Executable
+59
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
|
||||
Executable
+46
@@ -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
|
||||
|
||||
+1469
File diff suppressed because it is too large
Load Diff
Executable
+44
@@ -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
|
||||
+1563
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
EXTRA_DIST = \
|
||||
Doxyfile doxyfooter
|
||||
@@ -0,0 +1,2 @@
|
||||
</BODY>
|
||||
</HTML>
|
||||
Executable
+323
@@ -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:
|
||||
@@ -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
@@ -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:
|
||||
Executable
+52
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
|
||||
Executable
+581
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef __H5BLOCKPRIVATE_H
|
||||
#define __H5BLOCKPRIVATE_H
|
||||
|
||||
#define H5BLOCK_GROUPNAME_BLOCK "Block"
|
||||
|
||||
#endif
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
|
||||
Executable
+825
@@ -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 );
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Executable
+12
@@ -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
|
||||
Executable
+36
@@ -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");
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
#PBS -l size=16
|
||||
#PBS -j oe
|
||||
|
||||
cd /scratch/agsell/H5Part/test
|
||||
yod -np 16 ./H5BlockParTestScalarField -w -g
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
Executable
+111
@@ -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
|
||||
|
||||
|
||||
Executable
+119
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Executable
+120
@@ -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
|
||||
Executable
+147
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
#####################################################################################################################
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user