[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
towards feff8.2 release
Dear developers,
We need to make several changes before feff8.2 can be released to general
feff users. We would greatly appreciate both comments and help on
any of the items, proposed below.
A. Changes needed for feff8.20x5
clean up I/O structure of the code and add comments for developers.
Proposed structure:
1) RDINP will read feff.inp and write separate module.inp files and
a separate geom.dat (ATOM card data).
Each module reads geom.dat, one module.inp and several previous_module.bin
files and writes single current_module.bin.
Thus each module will be independent and only have it's own input and output.
This also implies that we will get rid of all the IOR routines.
IOR is not needed since each module.inp will have just a few variables,
which are organized as in feff.inp, but in some fixed format:
CARD value1 value2 ..
We understand that this is not a perfect solution for I/O structure, and
would therefore appreciate some comments. Various I/O standards are being
discussed for toolkit implementations, so we will probably change this structure
sooner or later away from the current module.inp and/or module.bin in the future.
2) Pass more variables (header lines, repetitive input data) through module.bin
files. For example, the variable nph (number of different potentials) is set in
the POT module, and passed to XSPH through pot.bin. From XSPH to FMS it will
be passed through phase.bin, and so on until needed.
3) Add README files in each directory of feff82/src/
with basic information on the purpose of subroutines (program) in that directory.
4) Each main subroutine(program) will have a generic structure; e.g.,
subroutine genfmt
c program genfmt
c Description of the purpose.
c INPUT files
c OUTPUT files
read module.inp
read geom.dat (if needed)
call genfmt(variable list)
c Description of the variable list and comments for code developers
B. Changes for feff8.20x6
Implement new FMS algorithms:
1) Implement efficient memory matrix inversion algorithm
with recursion and Broyden methods for FMS
2) Make a card for swithching between various FMS
algorithms (the analog of the undocumented FMSTUNE card).
3) Add MULTIPOLES card (code can already calculate elec.dip.,
elec. quad. and mag.dip. transitions)
C. Release version of a monolithic feff8.20 code
1) The advantages of modular code - the code needs less memory,
but there is big disadvantage: it needs run scripts for
every possible machine (=>portability problem). Also we found our
UNIX scripts unsatisfactory, since it is currently too primitive,
and several times John and I were running code which was not in the
right directory, and wondering e.g. I just fixed the bug, why does it show
up again? Our UNIX script also disabled the CFAVERAGE card, which is
used by several researchers (e.g. Farrel Lytle, Steve Wasserman)
Also the 8.1 document would need fewer changes for release,
as well as simpler installation instructions.
Thus we want to make possible building a monolithic version of 8.2 (like 8.1)
i.e. use feff8.1 feff.f main program
program feff
call ffread(nabs)
call ffmod1
call ffmod2
do 900 iabs = 1, nabs
c sort atoms for 'configuration average' according to absorber
call ffsort (iabs)
call ffmod3
call ffmod4
call ffmod5
call ffmod6 (iabs)
900 continue
call wlog (' Feff done. Have a nice day.')
stop
end
Ideally, the change from modular to monolithic code can be handled
with a Makefile: e.g. 'Make mono' could, for example,
concatenate all .f files in all directories, but would also need some
script to read monolithic code and comment out lines program ffmod?
and uncomment line below: e.g.
c subroutine ffmod6 ( iabs)
Neither John nor I knows how to write such automatic scripts well. We would
therefore like to have some help with that. Lacking that, we will have to be content
with less automatic versions. However, it will be advantageous for all
developers to have it automated.
2) run test-suite on various platforms (e.g., SGI, LINUX gnu, pgf77, compaq,
AIX, HP, and WIN-NT; sequential and MPI versions when possible.)
These tests can/should be semi-automated, at least on unix boxes.
3) update Feff8 document
We estimate approximately 1 month for every version (8.20x5, 8.20x6, 8.20),
but this can be off by a factor of 2.
D) Modular code and dynamic memory allocation will be goals for future versions.
We have had interesting discussions on a 'toolkit' approach to modular coding for
high performance computers with Stocks group (from ORNL) during the March meeting.
The multiple scattering codes are good prototypes for this, and it appears that the
FMS codes in FEFF8 and Stocks LSMS codes can be constructed from rather similar
toolkit modules. Of course, real advantages would come from the use of LSMS tools
in feff and vice versa.
Stocks group has a number of excellent computer scientists, so FEFF will likely
be able to benefit from their expertise, and vice versa. It will be important to
consider and test various I/O standards for this work. For example, it could be
useful to enable compatibility with XML format in the future.
Sincerely,
Alex Ankudinov
Research Assistant Professor
Lead FEFF8 Developer