There are ways to make input files easier to set up without having to
invoke XML or any other preprocessing method.
I handle Fortran input using a Fortran 90 routine to parse the input
and a case construct (usually nested) to switch on the keywords and
set the appropriate values. Using this method, Craig's input file
would look something like this:
smearing type jacobi coefficient 0.25 iterations 16
Note Types are jacobi, fuzz, pab or radialpab
lattice x 16 y 16 z 16
time length 1 (must divide tmax-tmin+1)
source x 0 y 0 z 0
gauge
name D52C202K3550U016440
path /ework3/c1/mcneile/spectrum/gauge_config/
precision 4
byte-swap no
end
clover coefficient 2.02
timeslice first 0 last 0
propagators
no 1
name L
length 32
path /ework3/c1/mcneile/spectrum/propagators/
precision 4
end
sources
path /ework3/c1/mcneile/spectrum/gauge_config/
precision 4
byte-swap no
end
input byte-swap no
radii fuzz 2 GIF bohr 2.3
end
This is pretty much self documenting and requires no pre-processing.
The Note and the stuff in parentheses is ignored by the input routine.
The order of the data items is usually unimportant, though the program
has to verify that it has all the information it needs. This approach
requires a bit more effort on the part of the programmer, but it's a
lot easier for the user. The input parsing routine and other
associated routines are available at
ftp://fandango.ch.cam.ac.uk/pub/input.f90
At 13:40 on 5 January, Craig McNeile wrote:
> I am interested in using XML (but not interested enough to
> attend the expensive conference in London).
> (One reference for XML is http://www.w3schools.com/xml/)
>
> I am interested in XML for two reasons:
>
> 1) to simplify input files
> One of the input files to one of our Fortran codes
> that runs on a Cray-T3e looks like
>
> 1 : smearing type - 0=jacobi, 1=fuzz, 2=pab, 3=radialpab
> 0.25 : Smearing coefficient 0.1355_S
> 16 : No. of smear iterations
> 16 : Lattice size in X direction
> 16 : Lattice size in Y direction
> 16 : Lattice size in Z direction
> 1 : Time length of a batch; must divide
> tmax-tmin+1
> 0 : x-pos of source
> 0 : y-pos of source
> 0 : z-pos of source
> 'D52C202K3550U016440' : Gauge name
> 2.02 : Clover coefficient
> 0 : First timeslice to be smeared
> 0 : Last timeslice to be smeared
> 32 : Prop length in time
> 1 : No. of props
> '/ework3/c1/mcneile/spectrum/propagators/' : Prop path
> 4 : Input prop precision
> 0 : Byte swap input props?
> '/ework3/c1/mcneile/spectrum/propagators/' : Where the
> sources are sent
> 4 : Source precision
> 0 : Byte swap sources?
> '/ework3/c1/mcneile/spectrum/gauge_config/' : Gauge path
> 4 : Input gauge precision
> 0 : Byte swap gauge?
> L : Prop name
> 2 : Fuzz radius
> 2.3 : GIF bohr radius
>
> Everything after the : is stripped out before the input is
> entered into the application code. The above file is our
> "user interface" to our code. It is not always very
> easy to set the parameters for a run with out looking
> at the source code. Using a standard XML format
> "might" make inputing control parameters to our codes
> much easier. (There may be 4 or 5 people who
> need to use the code, none of whom wrote the program).
--
Anthony Stone http://fandango.ch.cam.ac.uk/
University Chemical Laboratory, Email: [log in to unmask]
Lensfield Road, Phone: +44 1223 336375
Cambridge CB2 1EW Fax: +44 1223 336362
|