|
Hi all,
Since I've been working on xmds now for about a month, I thought it about time
I sent out an update to let everyone know what I've done (if only to justify
my existence ;-) ).
- autoconf script
I've implemented the use of the GNU suite of build tools so that one
needs to do the standard "./configure; make" dance to build xmds. This
has made the Configure script and the Makefile (within the xmds/source
directory) obsolete. I'm not 100% happy (yet) with the scripts mainly
because they look a bit ugly (a side-effect of me being on the autoconf
learning curve when I wrote the scripts), so expect the scripts to improve
with time. In the current implementation there are some arguments one can
pass to ./configure:
--with-fftw-path -> the path to your fftw installation, if not in
/usr or /usr/local
--with-user (no args) -> to install xmds into $HOME/bin
--with-mpi-libs -> the path to any extra mpi libraries necessary for
when the script is checking to see if mpi works properly. At the
moment the script assumes to a certain degree that you are using
the lam implementation of mpi, so this is on the todo list to make
more general.
The autoconf script also checks for icc (the Intel C compiler) and uses
that to compile the xmds output C++ code (unfortunately, the xmds C++ code
doesn't compile with icc, but only with gcc, haven't worked out exactly
why yet, but xmds will build with gcc and then use icc if present).
- xmds now builds properly on LinuxPPC
The problem was to do with different implementations of the gcc compiler.
Integers in C++ are either signed or unsigned, and if not specified, then
the compiler decides to use one or the other. So, what happened was on
LinuxPPC the compiler chose unsigned, but on LinuxX86 the compiler chose
signed, which was what was meant. The problem only affected parsing of
the xml code and this bug has now been fixed.
- flag
xmds now recognises the boolean element in the
section of the xmds script. Again, I'm not 100% happy with the
implementation as it stands, but I got it going, and the implementation
will change in time, in a manner transparent to users. Basically I've
done a bit of a quick hack and reused some existing code which contains
a lot of redundancy, so expect the binary output to be more efficient in
terms of hard drive space in the future. Btw, ascii output is the default
output option at this stage.
- flag
xmds now recognises the boolean element in the
section of the xmds script. This seems to work quite nicely at this
stage. The code will check to see if you have a $HOME/.xmds/wisdom
directory and store the wisdom files in there, using the machine name
as the basis for the wisdom filename. If you don't have a
$HOME/.xmds/wisdom directory then it uses the current directory instead.
I have also added a bit of informative information output at the beginning
of the simulation so the user knows what is happening (previously, when
fftw was doing its thing the terminal just sits there and stares back at
you, begging the question: Is it working??).
- flag
xmds now recognises the boolean element in the
section of the xmds script. This is specifically for use with the
element. The default behaviour is for to be
"yes", but if you choose "no" then the binary output will be single.
- flag
xmds now recognises the boolean element in the
section of the xmds script. This flag puts timing code into the C++ code
just before the simulation runs (and after fftw starts up) and prints
the simulation time in seconds at the end of the code (before fftw shuts
down).
- loadxsil.m Matlab 5 script
I've written a matlab 5 function (I could have used ML6, and its XML
parsing stuff, however, more people can use the function) to read the
data in from the .xsil output file and dump the variables (as named in the
xmds script) into the namespace of the matlab script calling loadxsil().
The function is called with one argument, that being a string of the name
of the .xsil file. For example: loadxsil('atomlaser.xsil')
- doxygen api documentation generation
I've started documenting the xmds code using the Qt scheme outlined in the
program doxygen. Doxygen parses the C++ code and special comment blocks
and produces documentation and graphs of how functions, classes etc are
related to each other. This information is output as html and LaTeX, and
can be output as rtf and xml if required. Doxygen does a really good job!
The current api documentation is in xmds/api, but I haven't committed this
to cvs yet, and I may not, as it simply needs to be included when one does
a "make dist", to package the code for distribution.
- examples are built at build time
Currently the examples in the xmds/examples directory are built when one
performs "make" after doing a ./configure. I don't like this behaviour,
and will try to get ./configure to let me go "make examples" from the
xmds/ directory. I will try to get this fixed up at some point, however,
I thought everyone should know that this is what make is "supposed" to do
at this stage.
Right! I think that's about it atm. I hope the changes are up to scratch,
and what people want. If anyone wants anything else done, then just email to
the relevant list and I'll add it to the todo list. Also, let me know if
anything doesn't work on your system, and of any bugs I may have inadvertedly
added in trying to add features.
Happy xmds-ing!
Later
Paul
|