Log of /trunk

When "werror" is set to True, scons build will complains about compilation failure of some boost "multi-array" test case. This causes recently unit-tests failures. So I set "werror" back to False before someone who has the knowledge fixes the problem.

Add Boomer AMG as a new preconditioner
Can be used by .setPreconditioner(SolverOptions.BOOMERAMG)
and the following parallel coarsening method can be
used together with Boomer AMG preconditioner:
.setCoarsening(SolverOptions.CIJP_FIXED_RANDOM_COARSENING)
.setCoarsening(SolverOptions.CIJP_COARSENING)
.setCoarsening(SolverOptions.FALGOUT_COARSENING)
.setCoarsening(SolverOptions.PMIS_COARSENING)
.setCoarsening(SolverOptions.HMIS_COARSENING)
Note that Boomer AMG is only available when MPI is enabled.

Two modifications to OpenMP versioned AMG:
(1) in RungeStueben Search:
* use a smaller panel to reduce the searching time for an unkown with
the largest lambda value;
* fix the mistakes made in this function (Two places where set S is
expected, not set S^T).
(2) while construct the coarse level matrix A_C:
A_C = P^T (A P) where A is the fine level matrix and P is the
interpolation operator. Since we've already had the tranpose of P
when we process "A_temp = A P", the performance of matrix product
can be improved when we use P^T for the calculation of A_temp.

Added/modified AMG tests:
- "self.failUnless(...)" became "self.assertTrue(...)"
because fail* is soon to be deprecated,
- fixed logical error in self.assertTrue argument,
- added another test, 'testSquare'.
Added some print statements to AMG.c in verbose mode to
identify which of the stopping conditions were fulfilled.
Changed default AMG parameters for 'setNumPreSweeps' and
'setNumPostSweeps' to 1 (huge speed improvment).
P.S Beware of bugs in the above code; I have only proved
it correct, not tried it... Jokes!

Fixed the quad mask in a very specific case and changed saveVTK to write a
specific value for unused nodes instead of the first one which breaks unit
tests depending on the number of ranks used.
Still need to rebaseline some VTK files so the tests pass.

I've added better credits for dev team.
There is a new page just before the contents page with current dev team
and a more detailed list in the user guide appendix.
Please check this and let me know if you think there are errors or
omissions.
Also fixed a typo.
Removed reference to python style files we no longer use from the
license file.

Fixed building with boost < 1.40 by
- removing the saveVTK method from dudley's MeshAdapter completely
(no point introducing it now when we are trying to get rid of it soon)
- adding a helper function to weipa's python layer which can be called from C++
with older boost versions.

escript now supports out-of-tree builds.
All build and test files are now created under a user-definable build_dir
directory.
This also fixes issue 291.
Removed most svn:ignore props since they are no longer required.

-Do not compare mesh variables (like owner, color etc) in the saveVTK tests
since they depend on the number of ranks.
-Fixed a problem where ranks without data samples can't know whether a
reduced mesh is to be used or not.

Phew!
-escript, finley, and dudley now uses weipa's saveVTK implementation
-moved tests from finley to weipa accordingly; dudley still to do
-rebaselined all test files
-fixed a few issues in weipa.saveVTK, e.g. saving metadata without schema
-added a deprecation warning to esys.escript.util.saveVTK
-todo: change doco, tests and other places to use weipa.saveVTK

Fix the launcher so that it can give an environment even if buildvars is not present.
Environment now includes scons for standalone builds.
Fixes and cleanup for the install documentation.
scons TEMPLATES updated to define the optionfile version by default.
...mumble
finley no longer imports escript into the default namespace
...

Work on user's guide up to section 3.2 (exclusive), including some text on
new DataManager class.
Also reworked a couple of images.
This should be the last commit of the guide before changes to the latex class.

Corrections to user guide sections 1.5 and 1.6.
Converted backgrounds of the very complex stokes flow eps files by raster
images leaving the vectors untouched so the change is barely visible but
makes loading the PDF page some orders of magnitude faster.

This should keep scons happy on systems without pdflatex issuing a warning
to the user. Also updated all other doc sconscript files to use a global
release_dir prefix so we can easily move the files somewhere else if req'd.

Added checkpoint frequency setting to DataManager so that visualisation files
can be created independent of restart files. Also removed the overhead of
creating an EscriptDataset instance for the restart-only case.

Prepared weipa to use Silo's HDF5 driver & compression which performs better
than the default PDB. Code is disabled though because NetCDF 4 is currently
interfering (Unidata has been contacted). Added a note about this.

-New VisIt simulation control interface in weipa (uses VisIt's simv2)
-Rewrote restarts.py to be a more generic data manager for restarts and exports
-Removed weipa python file since the functionality is now handled by restarts.py

The MPI and sequational GAUSS_SEIDEL have been merged.
The couring and main diagonal pointer is now manged by the patternm which means that they are calculated once only even if the preconditioner is deleted.

Fix latex markup in pdf title.
It turns out \pdfinfo must come after \maketitle if you don't want the
latex version of the title.
This behaviour does not happen in evince 2.22.2 (standard in lenny) but does
happen in more recent versions.

Updated various nan checks to consider the windows _isnan
The default compiler flags have changed as well.
+ intel will now take -std=c99 instead of -ansi
+ gcc has -ansi removed which means it defaults to gnu99
We could have set gcc to -std=c99 as well but that gives a
warning on g++ which gets converted into an error by our
pedantic warning.
Rationale:
We need something more than ansi to get proper nan handling.
- We currently don't have any code which does not comply with ansi
but the nan checks don't work.
Impact:
If we want our code to still be able to compile on older compilers
(at reduced functionality) we need to be careful not to introduce other
c99-isms.
If we don't care, then it's time for some celebratory // comments.

Move definition of build_platform on t.poulet suggestion.
Redefine the IS_NAN macro to replace versions commented as
'This does not work'
If you are not compiling with a c99 compliant compiler you will not
recognise nulls but this seems to be the best we can do right now
without checking for explicit bit patterns.

There is now a mechanism to pass a C function into escript and invoke it on each datapoint with:
applyBinaryCFunction
Warning in order to use this function your escript must be compiled with
scons ... iknowwhatimdoing=yes
---------------------
Because this code relies on casts that the C standard does not allow some code has been moved into Dodgy{.h .cpp}
Scons files have been modified to treat these files specially [Warnings are not errors for these files.]

Reincarnation of the escriptreader as a more flexible escriptexport library:
- can be initialised with instances of escript::Data and Finley_Mesh
- is now MPI aware at the EscriptDataset level including Silo writer
- now uses boost shared pointers
The lib is currently only used by the escriptconvert tool but this is going to
change...

bin/escript:
- bail out early if buildvars is not around
- quote variables to avoid syntax errors
- some work towards POSIX compliance (s/==/=/ in string comparisons)
- escript -V was still spitting out 'pre2.0' -> changed to pre4.0
- fixed minor typos

process C_TensorBinaryOperation at the level of a whole sample rather than
each datapoint when an Expanded data is operating with a Constant data. This
could improve the efficiency of the non-lazy version escipt.

inf, sup and Lsup now correctly handle +-infinity.
They also will return NaN if any part of their input is NaN.
This will break unit tests since it exposes the hidden bug (#447 in mantis)
This code relies on the ability to test for NaNs.
To do this it makes use of macros and functions from C99.
If you do not have a C99 compiler, then you will probably get the old behaviour.
That is, you won't know when you have NaNs.
Also did minor tweak to saveDataCSV doco.

Added getInfLocator and getSupLocator to pdetools.
This means if you want to use them, you will need to import them.
These methods return a locator to a point with the smallest/largest value.
Added resolve() and delay() to utils.
Now you can do things like:
d=delay(v)
..
..
z=resolve(d+1)

Merging changes from the lapack branch.
The inverse() operation has been moved into c++. [No lazy support for this operation yet.]
Optional Lapack support has been added for matrices larger than 3x3.
service0 is set to use mkl_lapack.

Taipan and DataVector use size_type (currently long) internally to talk
about sizes.
[A lot more work needs to be done on this].
Exceptions now give nicer messages and output the problematic numbers.
Some minor doco errors fixed.
escript.util.mkDir
Now checks to see if the pathname already exists as a non-directory.
On suggestion from slanger it now calls makedirs.

minval and maxval are now lazy operations (they weren't before).
Whether or not Lsup, sup and inf resolve their arguments before computing answers is controlled by the escriptParam 'RESOLVE_COLLECTIVE'.
Note: integrate() still forces a resolve.
Added some unit tests for operations which weren't tested before.
Added deepcopy implementations for lazy operations which got missed somehow.

Added calls to MPI_Abort to the pythonMPI wrappers.
Now if an uncaught exception is raised on any of the nodes, the whole world should be brought down. I've tested this on a barrier and it works.
One consequence of this is that you should not call sys.exit(2) but we don't recommend using sys.exit anyway.

Added a bunch of valgrind supressions. Hopefully this will make it more useful.
Asking for an offset on a DataConstant containing no samples no longer fails under debug builds.
I've disabled the sample and dataPoint bounds checks since they don't make sense on DataConstant.

Renamed the main cookbook tex file to match our convention.
Replaced doc/cookbook/figures/heatrefraction002contqu.pdf with
a version which is actually pdf. However it needs to be regnerated since
it it sideways.
The examples have had their copyright notices fixed (dates were too early).
sb2.py has been removed since it uses pyvisi.
scons will now build the cookbook as parts of a docs build.
Also in reposnse to :
scons cookbook_pdf

Fix bug in maxGlobalDataPoint and minGlobalDataPoint.
They now give the correct answers and the datapoint ids returned are globally
correct.
Removed some #defines from before COW
Removed hasNoSamples() - I don't trust myself to use that properly let alone anybody else.

ecording some changes related to Anthony's cookbook.
These tests still do not run.
test_heatref.py is the current problem.
Current problems include:
undefined symbols
a dependence on X somehow.
I've already addressed the matplotlib X thing somewhere else.
Find and apply.

A bunch of changes related to saveDataCSV.
[Not completed or unit tested yet]
Added saveDataCSV to util.py
AbstractDomain (and MeshAdapter) have a commonFunctionSpace method to
take a group of FunctionSpaces and return something they can all be interpolated to.
Added pointToStream() in DataTypes to help print points.
added actsConstant() to data - required because DataConstant doesn't store samples the same way other Data do.

Added getMPIWorldSum function to the esys.escript module.
This function takes an integer from each member of the MPIWorld.
This will hopefully address mantis issue 359
Added unit tests for most of the c++ free functions in the module.

Compute nodes will now read the correct options file and use the correct compiler.
I have added env_export to the service0 options file.
Use this if there are variables from the calling environment which need to be passed through scons. (In this case the INTEL_LICENSE_FILE variable).
There are still some issues with icpc linking.

Updated install guide to include the correct version of python.
Updated Mac build instructions not to use numarray or frameworks.
Removed (commented out) references to MacPorts in the Mac instructions.
- These need to be updated and Artak isn't here.
Removed (commented out) references to windows in the install guide.
CSIRO won't have a windows release ready yet.

Updated builddeb script to include the architecture in the package filename.
(the architecture is also written into the control file).
Modified dependencies to not include VTK.
Added python-matplotlib as a "Recomends" dependency.
This means we can build 64bit debs now.

Split test_util_spatial_functions.py into three python files (it had three classes in it).
This reduces memory required to compile down to about 600Mb each as opposed to >1Gb.
This should not affect the tests performed.

Experimental per node cache for lazy evaluation is now available via the
LAZY_NODE_STORAGE #define
It's a bit slower and larger for small problems but a bit faster and
smaller for large (drucker prager) problems.

Modified wrapper script to correctly point at numpy in standalone builds.
Updated build from source doco for linux to take numpy into account.
Also removed backticks in favour of $() - it should be the same but latex won't eat them

FileWriter added: this class takes care of writing data which are global in MPI to a file. It is recommended to use this class rather then the build in open as it takes care of the case of many processors.

Week 6 I think?? Started work on 2d wave solution, want to change from verlet according to lutz. Have semi finished heat diffusion but is ready for review and further modification in the future. Added new sections to first chapter, may or may not be needed but added as a reminder anyway.

bin/escript is now under version control.
The wrapper template is no longer used.
Extraneous output doc removed from scons during build.
note: finleypython is no longer built (it was deprecated anyway).

End Week 5:
Renamed *.tex files to more logical, changed to chapter format as HEAT_DIFFUSION.tex
Editted and Reviewed text portion and some python scripts for heat diffusion.
Looking to push for finalisation on heat diffusion in the next couple of week to begin next modelling problem/Chapter.

size_t may be 64 bits which is incompatible to MPI_INT. This problem is fixed by inserting a cast in Mesh_read.c.
Moreover a fix has been added making sure that gmsh and triangle are executed on one processor only.

This was the troublemaker for test failures on both MAC and Debian. I think numarry has a bug in memory managment. So we removed some numarray.array related lines in _givapp function and tests pass again.

Debian/ubuntu package now includes the user guide and the python doco (but not the c++) as well as the examples.tar.gz.
A file called buildvars is now written to the lib directory.
It contains some configuration things I can easily get in python.
Feel free to add additional ones.

Modified script template to explcitly require bash (because of the
bash-ism I'm using).
Wrapper script also sets up environment for standalone builds if the
STANDALONE variable is set.
utest.sh will now be generated with executable bit set.

The escript wrapper now determines ESCRIPT_ROOT based on the position of the
script rather than the value inserted at compile time.
This is one step towards making binary releases less tied to a known location.
SConstruct now keeps escript root at the front of LD_LIBRARY_PATH and PYTHONPATH
The wrapper script now accepts a -e arguement.
This doesn't actually run anything but outputs a set of exports which one can
eval to give you the same environment as the wrapper.

Added instructions on how to install debian package to the install guide.
Wrapper script generation now produces two scripts (escript and finleypython).
The two are identical - eventually we will remove finleypython.
Modified the wrapper script so it will print a message and start the python interpreter if you don't specify a script.

Disabling default use of OpenMP in SConstruct.
I have set the option in service0_options so savanna should build as before.
If you are expecting OpenMP by default on any other machine please adjust your options files accordingly.

Added scripts and such for building debian packages against Debian/Lenny.
Some things like the man page and the package description need some work but the packages produced appear to work.
If people are going to produce .debs please read read the packaging/lenny/README_developers_this_means_you
file.

Modified the escript python module.
If the escriptExitProfiling environment variable is set, then the
contents of the status file from /proc will be copied to memescript.pid
This means we can log fun things like peak memory usage.
This only works on linux systems recent enough to have the status file.

Misc fixes:
Added some svn:ignore properties for output files that were cluttering things up.
Lazy fixes:
Fixed shape calculations for TRACE and TRANSPOSE for rank>2.
Adjusted unit test accordingly.
As a Temporary change to DataC.cpp to test for lazy data in DataC's expanded check.
This is wrong but would only affect people using lazy data.
The proper fix will come when the numarray removal code moves over from the branch.
Made tensor product AUTOLAZY capable.
Fixed some bugs resolving tensor products (incorrect offsets in buffers).
Macro'd some stray couts.
- It appears that AUTOLAZY now passes all unit tests.
- It will not be _really_ safe for general use until I can add COW.
- (Everything's better with COW)

Implemented new utility function saveESD() which takes care of dumping the
given data objects with their domain and creates an ESD file containing the
required information. This obsoletes the necessity to use esdcreate for single
timestep datasets.

saveVTK: Reviewed and changed parts of this function due to several issues.
Confirmed that it's still working using finley/test/python/generate_dumps.py
(manually inserted saveVTK) with and without MPI on 1 and 4 processors.
Changes include:
- removed unnecessary USE_VTK check - we are not using any VTK functions
- fixed writing of Rec9 & Hex27 connectivity data in MPI mode
- fixed some cases where the file was not closed and memory was not freed
- replaced many instances of fprintf by fputs (simple strings)
- some minor optimizations by moving or initializing variables and combining
if-clauses
- got rid of ~300 lines of code and switched to consistent indentation making
the file a bit better readable

Starting from the recent reversion:
1. Leave __del__ alone.
2. mkstemp() actually opens the file it creates, only to be opened again in getMeshHandler(), so add an os.close() straight after the mkstemp()'s
3. in getMeshHandler(), close the script file immediately when finished with it instead of doing something non-local in __del__.
Untested on 'nix's at this point. Commit is for testing purposes.

saveVTK: Close the file even if error is set upon completion. Note that
in some places the function still returns without proper clean up but
this won't be fixed until the rewrite to avoid more mess in the code.

Addressing mantis issue #221.
Interpolation.. and probeInterpolation.. now "work" for the NullDomain.
Work means throw a descriptive exception if you try to move into or out
of the NullDomain.
The bad_cast exception related to this has been fixed.

Added checks in C_GeneralTensorProduct (Data:: and Delayed forms) as
well as the DataAbstract Constructor to prevent Objects with Rank>4
being created.
Moved the relevant #define into systemdep.
Removed some comments.

Fixed a warning in cpp unit tests under dodebug
Pointed the url for python doco at shake200 rather than iservo.
Added support for trace and transpose to LazyData.
Fixed bug in trace to initialise running totals.

escript/Data: Another fix for parallel var initialization. Also, the (error) return value of MPI_Gather was not used. I applied the same 'hack' as in other places in the file, namely declaring the variable beforehand but still ignoring the return value :-/

Two changes.
1. Move blocktimer from escript to esysUtils.
2. Make it possible to link to paso as a DLL or .so.
Should have no effect on 'nix's
In respect of 1., blocktimer had begun to spring up everywhere, so
for the moment I thought it best to move it to the only other library that
pops up all over the place.
In respect of 2., paso needed to be a DLL in order to use the windows intelc /fast
option, which does aggressive multi-file optimisations. Even in its current form, it either
vectorises or parallelises hundreds more loops in the esys system than appear in the pragmas.
In achieving 2. I have not been too delicate in adding
PASO_DLL_API
declarations to the .h files in paso/src. Only toward the end of the process of
the conversion, when the number of linker errors dropped below 20, say, did I choosy about what
functions in a header I declared PASO_DLL_API. As a result, there are likely to be many routines
declared as external functions symbols that are in fact internal to the paso DLL.
Why is this an issue? It prevents the intelc compiler from getting aggressive on the paso module.
With pain there is sometimes gain. At least all the DLL rules in windows give good
(non-microsoft) compiler writers a chance to really shine.
So, if you should see a PASO_DLL_API on a function in a paso header file,
and think to yourself, "that function is only called in paso, why export it?", then feel free to
delete the PASO_DLL_API export declaration.
Here's hoping for no breakage.....

I may get into trouble for this.
boost-python 1.34 does have a docstring_options class,
but does not have a 3 argument constructor for
it. So the test has been modified to
#if ((BOOST_VERSION/100)%1000 > 34) || (BOOST_VERSION/100000 >1)
If you wish to make things more delicate, one can define a 2 argument construction
of docopt just for 1.34 (with an #elif). Probably not worth the effort frankly.
Hope that this has not broken anything for anyone else. The SVN logs suggest this is a
little fragile.....
Also, please be aware that much of our chemistry interface code, that we wish to use with
escript, makes extensive use of boost python.
Having two different boost versions mucking with the python interpreter sounds
like a really bad idea, I'm sure you'll agree.
The problem is that it is not a simple task for us to build new versions of boost-python
on all our platforms. Consequently, it would be nice to be informed when you guys
intend to upgrade a support library of this nature so that we can plan and allocate
resources to keep up.
Cheers.

Added (as comment for the moment) very aggressive intelc optimisation.
Also add options (as comments) to compile esysUtis and paso as DLL's so
I can eventually use the /fast option on the intelc compiler.

I have found that windows intelc /Qiop option,
which performs multi-file loop parallisation and vectorisation,
taking account of all the information in a single .obj file that it generates,
will get it's second phase link action right if it is linking
to DLL's rather than statically linking. This and other SConscripts
have been modified to take account of the options that select a static
or dynamic library.

Remove the "const from the alpha argument of
Paso_SystemMatrix_MatrixVector_CSR_OFFSET0()
in order to match it's declaration.
This is C, and the double is passed by value, so alpha is
by nature const. This is C code, not C++. The const keyword has no place in C.

Ensure ESCRIPT_EXPORTS is defined only while compiling escript on windows.
A similar comment applies to FINLEY_EXPORTS.
SConstruct:
Fixed a comment.
reformatted the Export() call, and added IS_WINDOWS_PLATFORM to the exports.

I have changed the default scons options for gcc to be much more picky about warnings.
By default warnings will be treated as errors; so a program with warnings won't compile.
If you need to turn this off, usewarnings=no will work.
The previous usepedantic oprtion is no longer turned on by default.
This should have no effect on any of the other compilers.
If anyone wants to jump in and supply sensible values for the fatalwarnings variable for their favourite compiler go ahead.

Grew tired of having to edit SConstruct every time I changed from
MSVC to intelc. Added the tools_names option to allow control of tools
in the Environment call from the options file. This only applies to
the windows branch at present.

Added a private operator= to Taipan to prevent people from copying trying to copy instances.
Not that we have any of that.... but if someone ever tries, we'll be ready for them.
I have come to the conclusion that -Weffc++ is not usable for us. Its output is too noisy complaining about classes which we do not control.

Changes to avoid compiler warnings
Finley files now pass -Wall on gcc 4.3.2
saveVTK.c: replaced printf(string) with printf("%s", string)
MeshAdapterFactory.cpp: moved a few lines to avoid possible use of uninitialized vars
MeshAdapter.cpp: initialized ncdims in mesh dump
There is still a warning from a boost include file

A cleanup of some of the problems I found doing a Wall compile.
Removed some commented out lines.
Swapped some member initialisers.
Removed virtual qualifiers from some methods in FunctionSpace.
Fixed some unused or (possibly) uninitialised variables.

Created a mid-sized test suite 'scalable_tests' as an alternative to 'all_tests'.
These run on small-ish systems and also on all 512 cores of Savanna.
Most features are covered, but it's better to use 'all_tests'.

This is a fake commit, to note that
Finley_IndexList_insertIndex is being called from paso's Pattern.c.
I was under the impresssion that this was a violation of the module rule forbidding
paso from calling Finley code. I have not fixed this, since I am not the
best person to formulate the workaround. My immediate suggestion would be to move the
functionality into paso, and call it from Finley. However, I'm sure there is a better way.

Create Pattern_coupling.h as there were too many modules that implicitly defined these
functions. This checkin is to test the minimum number of files this change allows me to
include to get Pattern_coupling.c to compile correctly on the Altix.

Finished wrapper script by setting PATH.
The wrapper script reproduces the environment of the person who built
the software + values specified in his hostname_options.py file. A
user can run a python script without setting any environment variables
or loading any SGI modules.

Mesh_read.c - remove a debug printout introduced by me (oops).
Pattern_coupling.c - remove declaration of naib where it was not used, and remove naib frpm
omp pragmas where it was not declared, and not used.
Apparently cognac.ivec.org did not like this??

I did a lot of rationalising of the indentation, which looks like an alarming number of changes. I just got sick of my editor getting confused about what the indent was in this function as opposed to the last one I was working on.
The real mods. are trivial, arising from the fact that 'nix'es will write 1e-05 (say), while winblows will write 1e-005. This causes string comparisons that check the mesh file generation to fail. This, combined with the more pedantic behaviour of unlink() made pycad very fragile on windows. All fixed now.
Test on the 'nixes tonight.
May I ask for a hold off on the branch merge, Joel, till I get this stable on all platforms, and deal with the usual unused vars. that pop up from all the ifdefs?

This now passes on windows. The main issue was that __del__ was being called when there was no open script or mesh file??? Could not fathom why, but added an extra test in __del__ to make sure the files were actually open before closing & unlinking. It may be better to deal with the opening, writing, closing, os.system call, and final unlinking of the script file in getMeshHandler(). That way all manipulations are local, and only the mesh file need be handled in a remote piece of code like __del__.
Not tested on Altix or linux yet.... get to that tonight.

Modified Data::toString() so it doesn't throw on DataEmpty.
Added setEscriptParamInt and getEscriptParamInt as free functions.
At the moment all they do is allow you to set the param TOO_MANY_LINES.
This is used to determine when printing a Data object will show you the
points and when it will print a summary.
I've set the default value back to 80 lines.
If you need to see more lines use (in python):
setEscriptParamInt("TOO_MANY_LINES",80000)

convection.py checkpointing uses mkdir/rmdir, and under MPI there
was a race condition.
mkdir needs to be run on only one CPU and then a barrier to prevent
working processors from using the directory before it exists.
Added methods domain.MPIBarrier and domain.onMasterProcessor() to
implement this technique.
A more general solution might be possible in the future.

New method for unit testing to compare two saveVTK files.
Can detect same-ness even if the nodes are re-ordered.
To do: issue with contact elements in that identical
nodes confuses test for node re-ordering.

Repair to saveVTK similar to revision 1677 (there we got the number of offsets correct
and in this revision we got the number of types correct).
In case of MPI > 1 do not run saveDX tests since saveDX is not MPI parallel.

Removed some commented out lines.
Modified DataExpanded to not throw when creating objects with zero
samples.
Modified toString() to report "(data contains no samples)" rather than
printing a blank line.
Modified DataExpanded::dump() and load so that they do not attempt so
save/load the ids and data fields if the data object contains no
samples.

The new MPI parallel ReadMesh is now the default after having passed
all tests both with and without MPI.
If you have been using ReadMesh you should notice no difference.
If you were using ReadMeshMPI then change to ReadMesh.

All about making DataEmpty instances throw.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exposed getDim from AbstractDomain to python to fix bug.
Added isEmpty member to DataAbstract to allow it to throw is queries are
made about a DataEmpty instance.
Added exceptions to DataAbstract, DataEmpty and Data to prevent calls
being made against DataEmpty objects.
The following still work as expected on DataEmpty instances
copy, getDomain, getFunctionSpace, isEmpty, isExpanded, isProtected,
isTagged, setprotection.
You can also call interpolate, however it should throw if you try to
change FunctionSpaces.

Added canTag methods to FunctionSpace and AbstractDomain (and its
offspring).
This checks to see if the domain supports tags for the given type of
function space.
Constructors for DataTagged now throw exceptions if you attempt to make
a DataTagged with a FunctionSpace which does not support tags.
To allow the default constructor to work, NullDomain has a single
functioncode which "supports" tagging.
Fixed a bug in DataTagged::toString and DataTypes::pointToString.
Added FunctionSpace::getListOfTagsSTL.
algorithm(DataTagged, BinaryFunction) in DataAlgorithm now only
processes tags known to be in use.
This fixes mantis issue #0000186.
Added comment to Data.h intro warning about holding references if the
underlying DataAbstract changes.
_python_ unit tests have been updated to test TaggedData with invalid
FunctionSpaces and to give the correct answers to Lsup etc.

Added Data::copySelf() [Note: this is exposed as copy() in python].
This method returns a pointer to a deep copy of the target.
There are c++ tests but no python tests for this yet.
All DataAbstracts now have a deepCopy() which simplifies the
implementation of the compy methods.

I know this ia a no no, but it was necessary to get scons run_tests, going on my debian box,
even with usepedanitc off.
My g++ version is 4.3.1, that may explain the different behavour.
#include'd cstdlib. This checkin is to see if this hurts the other ports.

Near line 288 of SConstruct.
Fixed the HAVE_GETHOSTNAME environment variable setting.
The the test had a "not" that should not be there,
and the wrong env was being Append()'ed.
On linux, this resulted in HAVE_GETHOSTNAME not being -D'ed.
the strcpy at line 78 of
escript/src/Utils.cpp
was flagged by gcc as an error because
strcpy is not declared on the compilation branch
that compiles if HAVE_GETHOSTNAME is not set.
I have not fixed this.
Also, the hostname buffer is only 64 char long.
Why limit the length of the hostname,
admitting buffer overflow, in a .cpp file?
Why use strcpy in C++?

Added new test suite run_inputOutput.py to systematically test I/O.
Can determine if two domains are same with Fourier analysis.
Added new method getNumDataPointsGlobal to return number of DPs of a distributed mesh.
Reading of tags in ReadMeshMPI failed occasionally, should be more robust now.

Test suite fails due to missing arg in call to Finley_Mesh_createMappings.
Added NULL arg, but still need to find proper fix as loadMesh does not work.
Adjusted SConstruct to delete pythonMPI if not compiled for MPI.

This fixes a problem which is typically arising when using reduced order
with MPI and a "small" number of elements per processor. In this case it
can happen that the couple matrix is not using all entries sent to the
processor. The old implementations assumed that the indices will cover
the entire input. This assumption has been removed.

This fixes a bug in the callculation of communication tables in
particular for the data to be send away. The problem was that the
previously used method based on the idea to use the elements stored on a
processor to decide what to send away is not suitable for the reduced
DOF. Now each processor sends a list of the DOFs it is expecting to its
naighbours.

Fixed nightly tests for savanna (no longer running in PBS cause can't
compile on compute node).
Modified domain.print_mesh_info() to tell how many elements are owned by
a node and how many are in the overlap.
Instrumented the preconditioner step.

comments for rev 1700.
Ran through spell checker for tutorial chapters.
Added in a tutorial chapter introducing the level set method with the Rayleigh-Taylor instability problem. Need to add python code at a later date for level set class.
Started to write up a chapter on model classes, e.g. StokesProblemCartesian, LevelSet, DurckerPrager, and TemperatureCartesian etc.

A problem with VTK writer and MPI is fixed: Apparently MPI_file_open does not "delete" the file which has the effect that
if less date are written into the file as the file contained when opened bits of the previous containt remains in the file. This problem is fixed
by deleting the file if it exists before open it with MPI. The additional function Paso_existFile needed to be added as there is no standart C
function to test the exists of a file.

Install() on Mac OS was naming shared libs file.dylib...not OK for our
libraries for python calling C++ (escriptcpp.so and finleycpp.so).
This is because python's dlopen() calls only look for .so files.

Make operator=() on exception non-virtual. Should silence the Altix compiler.
However, if an exception is cast to another parent type, and
operator=() is called when the exception so cast is an l-value in the assignment,
an "incomplete" assignment will occur, copying only the parent class members of the
l-value in the assignmnet.

linux_gcc_eg_options.py:
remove the std99 option, it is no longer needed as the code compiles without
C 1999 extension (need for these extensions elinminated in windows port).
Turn on all warnings except unknown pragmas. Should catch a lot of stuff.
SConstruct:
Impassioned plea
system_dep.h:
Add the standard incantation for dealing with const declarations
in C code called from C and C++
blocktimer:
Get the calling interface right for C code called from C and C++
and use __const as defined in system_dep.h
(Should be re-factored into compiler_dep.h file).
MeshAdapterFactory.cpp:
Since we have (effectively) no control over netCDF policy,
cast const char *'s to char *'s

Turn on netcdf in windows build. No new errors generated.... remarkable.
The correctly configured netCDF source and windows build config.
that matches enthought python25/vtk/PmdPyRT for windows, can be
obtained from
https://cgsrv1.arrc.csiro.au/subversion/swframeutils/thirdParty/netcdf/trunk
username & password needed. If you have access to our twiki, no new username is required,
but authorisation to read the repository will be required.

Merge in /branches/windows_from_1456_trunk_1620_merged_in branch.
You will find a preserved pre-merge trunk in tags under tags/trunk_at_1625.
That will be useful for diffing & checking on my stupidity.
Here is a list of the conflicts and their resolution at this
point in time.
=================================================================================
(LLWS == looks like white space).
finley/src/Assemble_addToSystemMatrix.c - resolve to branch - unused var. may be wrong.....
finley/src/CPPAdapter/SystemMatrixAdapter.cpp - resolve to branch - LLWS
finley/src/CPPAdapter/MeshAdapter.cpp - resolve to branch - LLWS
paso/src/PCG.c - resolve to branch - unused var fixes.
paso/src/SolverFCT.c - resolve to branch - LLWS
paso/src/FGMRES.c - resolve to branch - LLWS
paso/src/Common.h - resolve to trunk version. It's omp.h's include... not sure it's needed,
but for the sake of saftey.....
paso/src/Functions.c - resolve to branch version, indentation/tab removal and return error
on bad unimplemented Paso_FunctionCall.
paso/src/SolverFCT_solve.c - resolve to branch version, unused vars
paso/src/SparseMatrix_MatrixVector.c - resolve to branch version, unused vars.
escript/src/Utils.cpp - resloved to branch, needs WinSock2.h
escript/src/DataExpanded.cpp - resolved to branch version - LLWS
escript/src/DataFactory.cpp - resolve to branch version
=================================================================================
This currently passes tests on linux (debian), but is not checked on windows or Altix yet.
This checkin is to make a trunk I can check out for windows to do tests on it.
Known outstanding problem is in the operator=() method of exceptions
causing warning messages on the intel compilers.
May the God of doughnuts have mercy on my soul.

Merge of branches/windows_from_1431_trunk.
Revamp of the exception system.
Fix unused vars and signed/unsigned comparisons.
defined a macro THROW(ARG) in the system_dep.h's to
deal with the expectations of declarations on different architectures.
Details in the logs of branches/windows_from_1431_trunk.
pre-merge snapshot of the trunk in tags/trunk_at_1452

This trunk now compiles and links under windows.
It passes the FunctionSpace.__str__() test 50000 times on windows.
It fails scons run_tests and scons_py_tests as it always did, but I have an idea why.
Please remember to add the appropriate dll linkage info to declarations that are to be visible outside a .so or .dll. Terry (BTW, PGH here) spent a lot of hacks clearing out blocktimer from the rest of the code when these 5 or 6 lines would have done the trick.

inserted sys.exit(1) into the tests so scons can detect the failure of the test.
A similar statement has been removed from an earlier as it produces problems on 64bit Linux. Previously exit(0) was called in case of success but now this is not done in order to avoid a fatal end of the program. in the case of an error in the test there could be a fatal error so but I guess that this not really a problem.
PS: the fact that signal 0 was returned even for the case of an error lead to the illusion that all tests have been completed successfully.

Completed mesh.dump(file) and mesh=LoadMesh(file) by adding TagMap and
implementing MPI parallelism.
Now allocating ElementFile for ContactElements even if there are none.
Removed file Mesh_dump.c since dump/loadMesh are in CPPAdapter/MeshAdapter*.cpp.

Modified scons target release_src to include lib/ and include/ since
their presence is required for a build. Modified
mydomain.print_mesh_info(True) to include more useful info about a
distributed domain. Added mypde.getOperator().print_matrix_info(True)
to tell about a distributed matrix.

The MPI branch is hereby closed. All future work should be in trunk.
Previously in revision 1295 I merged the latest changes to trunk into trunk-mpi-branch.
In this revision I copied all files from trunk-mpi-branch over the corresponding
trunk files. I did not use 'svn merge', it was a copy.

Prepend various shareable library locations to PATH rather than appending.
Add (empty) include directory to the repository.
Impact of adding lib, include and esys dirs to repository.
You will need to move these aside in any checked out tree before doing an update.

Add the esys and lib directories to the repository.
Remove the IS_WINDOWS_PLATFORM from the SConscripts, and
do the logic once in SConstruct.
SConstruct now includes example options files if the hostname_options file is not present.
This needs some more work for the altix.
The tests now depend upon the build target. This is important it seems, as there appears to be the
possibility of calling linking different libraries
against incompatible versions of sub-libraries.
This addressed most of the exceptions we were getting on windows.
All the useNetCDF logic is now done by SConstruct.
Made the init_target part of the build alias so that __ini__.py is created on a fresh checkout.
py_tests mostly pass on windows, only need to track down the exception in run_tests.

build is the default target, and will build a local installation in the source tree.
A new install target will do a build and install in the system directories. The system dierctories are set up for altix/linux systems with a prefix of '/usr'

Reduce the number of IS_WINDOWS_PLATFORM references in SConstruct.
Change path to boost etc in windows_mscv71_options.py
Some of these changes are present in windows_mscv71_options.py, more changes needed once I get the mscv71 build going properly.

- Fixed some minor bugs.
- Added a new feature called 'MapOnScalarClipWithRotation' that clips a two-dimensional data with a scalar value and subsequently rotating it to create a three-dimensional effect.
- Corresponding examples, test cases and documentation of the new module have also been added.

Made some changes to the Carpet module. When 3D data is used, a cut will be performed using a plane before deformation occurs on the plane. However, if 2D data is used a cut will NOT be performed and deformation will instead occur immediately.
Pyvisi distinguishes 2D from 3D data by retrieving the length of the z-axis. A 2D data will have a z-axis length of zero while a 3D data will have a z-axis length of non-zero. There are exceptions to these rules where some 2D data may have a non-zero z-axis length. However, such exceptions are not taken into account at this stage.

Made some changes to the Carpet module. When 3D data is used, a cut will be performed using a plane before deformation occurs on the plane. However, if 2D data is used a cut will NOT be performed and deformation will instead occur immediately.
Pyvisi distinguishes 2D from 3D data by retrieving the length of the z-axis. A 2D data will have a z-axis length of zero while a 3D data will have a z-axis length of non-zero. There are exceptions to these rules where some 2D data may have a non-zero z-axis length. However, such exceptions are not taken into account at this stage.

- Fixed a minor bug in the Velocity module.
- Added the Rectangle module which enables rectangles to be created.
- Added corresponding examples and test cases for the Rectangle.
- Updated the guide and necessary epydocs.

- Fixed a minor bug in the Camera module.
- Added some extra capability to the Movie module.
- The Camera module now has the capability to perform parallel projection by calling the 'parallelProjectionOn' method.
- The Camera at this stage is only capable of zooming towards the rendered object using 'dolly'. However, it appears that 'dolly' cannot be used to perform zooming out.

A movie can now be generated within the python script itself by creating an instace of 'Movie'. The 'Movie' instance will in turn execute the 'ppmtompeg' command. The corresponding tests and examples have also been added.

A Scalar Bar can now be displayed by creating an instance of a 'Legend'. The Scalar Bar can either show the scalar data range or vector data range. Corresponding examples and tests have also been added.

Added new methods for integration of Tri's and Tet's For Order 2 and 3.
NB: There is a conflict in the testing of the getNormal() function. On consultation with Lutz, we have concluded this is an issue with the test rather than the new methods.

Some changes to make things run on windows. There is still a problem with netcdf an long file names on windows but there is the suspicion that this is a bigger problem related to boost (compiler options). In fact runs with large numbers of iteration/time steps tend to create seg faults.

* some of the sys.exit calls removed.
* some modifications on the test (and more work needs to be done, use test/python/run_carpet.py as an example) to get them going with scons
-> things seems to run on windows XP.

Changes needed for windows. This still does not work on and has not run on linux and the altix.
There are a few changes in names in the scons script, in particular _libs is used rather than _lib and _libs is always a list. By default on windows MSVC is used. The location of python is at C:\Program Files\python<version>, boost at C:\Program Files\boost and netcdf at C:\Program Files\netcdf.

As the LinearPDE uses coefficients as reduced even if they are handed
over as full the projector runs into a problem when reduced and full
arguments are used in the same projector. Now the projector resets the
coefficients befor starting the projection.

The problem regarding the increasing use of memory when Map is instantiated is partially fixed. Some problems still persists when the Map instance invoke methods.
Therefore, the run_map.py auto test have been disabled for the time being.

The modification fixes a problem with the garbage collection in python.
The problem seems that a default value of a method argument is seen as
being dependend on the the instance of the class. This produces a
circular dependence and can stop the garbage collection to delete the
object. The situation becomes in particulary bad if the class provides a
__del__ method as it is not clear where to break the circle.
We need to revisit all python classes in escript & Co to remove this
possible problem.

Fixed the problem related to the use of point and cell data. Both point and cell data should now be able to work properly together. i.e. plotting a velocity field using 'vector point data' but coloring the arrows using 'scalar cell data'.

Updated more epydocs and the user guide. At this stage, a DataCollector should only be used to read either point data or cell data but not both. If both point and cell data are read using the same DataCollector, the object rendered may be incorrect.

Teo problems in the TagMap class fixed:
1) keyword argument map has been renamed to mapping (as map is a python keyword)
2) self.__mapping is now a copy of the argument in __init__. Otherwise the default
value for mapping is changed if self.__mapping is altered.

In VC++ boost has problems with numarray arguments from python. This
fixes that problem by taking python::object arguments from the python
level and converting it into python::numeric::array on the C++ level.
This hasn't been tested with VC++ yet.
Moreover the two Data methods dealing with big numarrays as argument and
return value have been removed.

Added explicit destructors to all Exception classes.
Fixed an ifdef in TestCase.cpp
Made the conditional definition of M_PI in LocalOps.h
depend only on M_PI being undefined.
Replace dynamically dimensioned arrays in DataFactory & DataTagged with malloc.
sort() method of list does not take a named argument
(despite the manual's claims to the contary).

Updated the drivers. Setting the active scalar/vector/tensor is now done in the DataCollector. i.e.
dc = DataCollector(...)
dc.setFileName(...)
dc.setActiveScalar(...)
The use of setActiveScalar / setActiveVector / setActiveTensor have to be done after the setFileName.

Corrected some minor bugs. However, another bug was discover in relation to specifying the active scalar/vector/tensor. At this stage it appears that with one XML Reader, only one active scalar can be specified. If more than one is specified with only one XML reader, the rendered objects maybe incorrect. However, more test on this problem is required/

The set/getRefVal functions of Data objects have been removed (mainly to avoid later problems with MPI).
Moreover, a faster access to the reference id of samples has been introduced. I don't think that anybody will
profit form this at this stage but it will allow a faster dump of data objects.

escript data objects can now be saved to netCDF files, see http://www.unidata.ucar.edu/software/netcdf/.
Currently only constant data are implemented with expanded and tagged data to follow.
There are two new functions to dump a data object
s=Data(...)
s.dump(<filename>)
and to recover it
s=load(<filename>, domain)
Notice that the function space of s is recovered but domain is still need.
dump and load will replace archive and extract.
The installation needs now the netCDF installed.

the FinleyReade accepts now gmsh files (use format="gmsh")
and
Simulations are accepting Models only. Moreover, there is a test now
if a all Models targeted by a model in the simulation or a subsimulation
are included in simulation or a subsimulation.

I have done some clarification on functions that allow to access individual data point values in a Data object.
The term "data point number" is always local on a MPI process and referes to the value (data_point_in_sample, sample)
as a single identifyer (data_point_in_sample + sample * number_data_points_per_sample). a "global data point number"
referes to a tuple of a processour id and local data point number.
The function convertToNumArrayFromSampleNo has been removed now and convertToNumArrayFromDPNo renamed to getValueOfDataPoint.
There are two new functions:
getNumberOfDataPoints
setValueOfDataPoint
This allows you to do things like:
in=Data(..)
out=Data(..)
for i in xrange(in.getNumberOfDataPoints())
in_loc=in.getValueOfDataPoint(i)
out_loc=< some operations on in_loc>
out.setValueOfDataPoint(i,out_loc)
Also mindp is renamed to minGlobalDataPoint and there is a new function getValueOfGlobalDataPoint. While in MPI the functions getNumberOfDataPoints and getValueOfDataPoint are working locally on each process (so the code above is executed in parallel).
the latter allows getting a single value across all processors.

fixes on ESySXML to get runmodel going.
* object ids are now local for read and write of XML
* ParameterSets are now written with class name
* ParameterSets linked by other ParameterSets (previously only Models) are written now
* list are now lists of str (rather than bools), lists with bool, int or float are mapped to numarray
* numarray are writen with generic types Bool, Int, Float (portability!)

modellib.WriteVTK has been rewritten. Instead of only three data objects scalar,
vector, tensor it takes now up to 20 data objects data0 ... data19 and writes it into a
single VTK file. There is also the possibilty to define individiual name tags name0,..., name19.
If no name is given the corresponding attribute name of the Link target is used.
This simplifies the usage and increases efficiency.

DataSources added to modelframe/EsysXML, and tests to run_xml.py. Currently does not actually handle data
sources,
just references. Functionality is in progress.
EsysXML format (URI can be a local file reference, or a remote reference such as an ftp site, fileformat
is currently any string descriptor, such as finleyMesh or gmtdata):
<Parameter type="DataSource">
<Name>
uritest
</Name>
<Value>
<DataSource>
<URI>
somelocalfile.txt
</URI>
<FileFormat>
text
</FileFormat>
</DataSource>
</Value>
</Parameter>

Added serial execution build options for running on the altix. In doing so, a
minor bug in SConstruct was found and fixed. The correct libraries still need
to be sorted after consulting Lutz and/or Ken.

Some modifications to the binary operations +,-,*/, pow.
The code is a bit simpler now and more efficient has there is
no reseising required now. the resizing method has been removed as
it is very, very inefficient. Even serial code should be faster now.
It is now forbidden to do an inplace update of scalar data object with an object
of rank >0 as this is very slow (and does not make much sense).

Tensor products for Data objects are now computed by a C++ method
C_GeneralTensorProduct, which calls C function matrix_matrix_product
to do the actual calculation.
Can perform product with either input transposed in place, meaning
without first computing the transpose in a separate step.

changes to escript/py_src/pdetools.py and /escript/src/Data.h/.cpp to
make the Locator work in MPI. escript::Data::mindp now returns a 3 tuple,
with the MPI rank of the process on which the minimum value occurs
included. escript::Data::convertToNumArrayFromDPNo also takes the ProcNo
to perform the MPI reduction.
This had to be implemented in both the MPI and non-MPI versions to allow
the necesary changes to the Python code in pdetools.py. In the non-MPI
version ProcNo is set to 0. This works for the explicit scripts tested
thus far, however if it causes problems in your scripts contact Ben or
Lutz, or revert the three files (pdetools.py, Data.h and Data.cpp) to
the previous version.

coordinates, element size and normals returned by corresponding
FunctionSpace mesthods are now protected against updates. So
+=, -=, *=, /=, setTaggedValue, fillFromNumArray will through an
excpetion.
The FunctionSpace class does nut buffer the oordinates, element size and
normals yet.

Large number of changes to Finley for meshing in MPI.
- optimisation and neatening up of rectcanglular mesh generation code
- first and second order 1D, 2D and 3D rectangular meshes are now
available in finley and escript using MPI.
- reduced meshes now generated in MPI, and interpolation to and from
reduced data types now supported.

+ Removed nelix_kb_options.py since I no longer have that notebook and as a result it isn't a maintained example of a win32 configuration. coleto_kb_options.py is my new notebooks configuration. Note that this particular set of compilation options target the Core Duo processor (and family relations) and as such won't work on other x86 platforms that don't have the same feature set. See the Intel compiler guide for details on how to target other processors.

+ Updated compilation options for Cognac to squeeze out a bit more performance
+ Now compiles using the Intel Math headers (mathimf.h) rather than plain math.h on both Win32 and Linux platforms when using the Intel compiler. Gives a small boost to performance on Altix and is essential on Windows

Modified nightly testing:
Tests run as batch job via cron
You can choose to run run_tests or all_tests via command-line argument
They use 2 CPUs for run_tests and 4 CPUs for all_tests
Log files from tests are saved in /raid3/ksteube/AutoTests/Logs

The test for the contact normal has been modified to take in cosideration the fact that the normal is unique up to the factor +/-1.
Now the test checks the kllength of the normal for 1 and the angle to the reference normal.

- added directory pythonMPI to the source tree. this directory contains
the c++ wrapper that is used to run python scripts in parallel for the
MPI version of escript/finley
- updated the SConstruct and ./scons/ess_options.py for conditional MPI
compilation. To compile the MPI version on ESS uncomment the #define
PASO_MPI in ./paso/src/Paso.h and add the command line option
useMPI=yes when running scons.
- fixed a compile time error in the MPI build in
finley/src/CPPAdapter/MeshAdapterFactory.cpp

Changes relating to the MPI version of escript
The standard OpenMP version of escript is unchanged
- updated data types (Finley_Mesh, Finley_NodeFile, etc) to store meshes
over multiple MPI processes.
- added CommBuffer code in Paso for communication of Data associated
with distributed meshes
- updates in Finley and Escript to support distributed data and operations
on distributed data (such as interpolation).
- construction of RHS in MPI, so that simple explicit schemes (such as
/docs/examples/wave.py without IO and the Locator) can run in MPI.
- updated mesh generation for first order line, rectangle and brick
meshes and second order line meshes in MPI.
- small changes to trunk/SConstruct and trunk/scons/ess_options.py to
build the MPI version, these changes are turned off by default.

+ Added {inc,py,lib}install paths so that when escript builds on ac it installs the build into /home/escript/escript-<put a revision number here>. That way you can just copy this directory into /opt of wherever for someone to install into ac.

+ Options to build on APAC NF ac machine modified to use /home/escript build area. escript builds using its own version of boost and python2.4.3 (and scons for that matter) in this directory rather than using the APAC NF installations. This eases APAC's module management where different groups want slightly different configurations for various modules.

Major rewrite: now submits a PBS job to run tests on one CPU. Log
files from run are saved in /raid3/ksteube/AutoTests. Runs short
version run_tests or long version all_tests based on value of
command-line argument.

A few changes in the build mechanism and the file structure so scons can build release tar files:
* paso/src/Solver has been moved to paso/src
* all test_.py are now run_.py files and are assumed to be passing python tests. they can run by
scons py_tests and are part of the release test set
* escript/py_src/test_ are moved to escript/test/python and are installed in to the build directory
(rather then the PYTHONPATH).
* all py files in test/python which don't start with run_ or test_ are now 'local_py_tests'. they are installed i
by not run automatically.
* CppUnitTest is now treated as a escript module (against previous decisions).
* scons realse builds nor tar/zip files with relvant source code (src and tests in seperate files)
the python tests don't pass yet due to path problems.

+ Fixed incorrect target path in SConstruct file
+ cognac now links with g++ compiled boost rather than intelc compiled boost due to compilation errors with intel c. (Finley will still compile and work with intel c though) - this is the same configuration as the access altix

+ Modified the env (environment) creation for the ia64 platform to include PATH so it no longer complains about not being able to locate the intel compiler. This is related to the previous fix for windows. Seems it is a scons intelc.py bug.

+ Minor modification to how the ENV external environment is initialised. Originally this was done as part of the env = Environment( ENV = ...) construction. Unfortunately this doesn't work properly on windows as it clobbers the path edits performed by the tools = 'intelc'. The end result is icl is not found. Now the env is initialised without the ENV = and they are added in after construction.
I suspect this is a bug in scons itself on the windows platform.

+ NEW BUILD SYSTEM
This commit contains the new build system with cross-platform support.
Most things work are before though you can have more control.
ENVIRONMENT settings have changed:
+ You no longer require LD_LIBRARY_PATH or PYTHONPATH to point to the
esysroot for building and testing performed via scons
+ ACcESS altix users: It is recommended you change your modules to load
the latest intel compiler and other libraries required by boost to match
the setup in svn (you can override). The correct modules are as follows
module load intel_cc.9.0.026
export
MODULEPATH=${MODULEPATH}:/data/raid2/toolspp4/modulefiles/gcc-3.3.6
module load boost/1.33.0/python-2.4.1
module load python/2.4.1
module load numarray/1.3.3