634. Compiling EQ3/6 on Debian

EQ3/6, a program for calculation of geochemical equilibrium in aqueous systems and which can be downloaded here, has a spectacularly unhelpful Install.txt file.

Sadly, we do not provide specific instructions on how to compile and link
the software to build the executables. You have to figure that out yourself
for your specific platform. It will require some number of steps. Also, we
do not provide makefiles. It is not necessary to use make files, although
some people like them. If all this seems to exceed your knowledge and capacity,
seek the assistance of a qualified Linux or Unix maven who knows how to do
these things on your platform.


Here I describe how I went about to compile it.


1. Download EQ36_80a_linux.zip from https://www-gs.llnl.gov/about/energy-security/geochemistry


2. Extract it. Move the EQ3_6v8.0a folder to ~
You can put it wherever you want, but then need to edit eq36cfg, and you'll have to deal with csh not handling long paths that well. It's just easier to give up and put EQ3_6v8.0a under $HOME


3. Time to extract further, compile and set up
cd ~/EQ3_6v8.0a
ls *.tar |xargs -I {} tar xvf {}
find -name "*.gz"|xargs -I {} gunzip {}

Time to look at what we have. There are .f files in
xcon6/src
eq3nr/src
eqlib/src
eqlibu/src
eq6/src
xcon3/src
eqpt/src
eqlibg/src

A lot of these are subroutines. We'll compile all files as modules and make static libraries
cd eqlibg/src
gfortran -c *.f
ar cr eqlibg.a *.o
cd ../../eqlibu/src
gfortran -c *.f
ar cr eqlibu.a *.o
cd ../../eqlib/src
gfortran -c *.f
ar cr eqlib.a *.o

cd ../../eqpt/src
sh makelinks
gfortran *.f *.a -o eqpt
cp eqpt ../../bin/
cd ../../xcon3/src
sh makelinks
gfortran *.f *.a -o xcon3
cp xcon3 ../../bin/
cd ../../xcon6/src
sh makelinks
gfortran *.f *.a -o xcon6
cp xcon6 ../../bin/
cd ../../eq3nr/src
sh makelinks
gfortran *.f *.a -o eq3nr
cp eq3nr ../../bin/
cd ../../eq6/src
sh makelinks
gfortran *.f *.a -o eq6

You'll get

eq6.f:16.9:

use mod6pt
1
Fatal Error: Can't open module file 'mod6pt.mod' for reading at (1): No such file or directory
eqcalc.f:77.9:

use mod6pt
1
Fatal Error: Can't open module file 'mod6pt.mod' for reading at (1): No such file or directory
eqphas.f:129.9:

use mod6pt
1
Fatal Error: Can't open module file 'mod6pt.mod' for reading at (1): No such file or directory
eqshel.f:146.9:

use mod6pt
1
Fatal Error: Can't open module file 'mod6pt.mod' for reading at (1): No such file or directory
exivar.f:121.9:

use mod6pt
1
Fatal Error: Can't open module file 'mod6pt.mod' for reading at (1): No such file or directory


Don't despair, just run again:

gfortran *.f *.a -o eq6
cp eq6 ../../bin/

You should now have a bin/ that looks like

eq3nr eq6 eqpt readme.txt runeq3 runeq6 runeqpt xcif3 xcif6 xcon3 xcon6

cd ~/EQ3_6v8.0a
cat eq36cfg >> ~/.cshrc
cd scripts/
ln -s runeq36 runeq3
ln -s runeq36 runeq6
sudo mkdir /usr/tmp
sudo chmod ugo+rw /usr/tmp
cd ../db/
csh ../scripts/runeqpt all

------------------------------------
All done


4. Test
cd ~/EQ3_6v8.0a/3tlib_fmt
csh ../scripts/runeq36 fmt ../db/data0 c4pgwbN2.3i

[..]
Done. Optimization ended outside requested limits.


Starting hybrid Newton-Raphson iteration.

Done. Hybrid Newton-Raphson iteration converged in 56 iterations.


* Warning - (EQ3NR/eq3nr) The calculated TDS of 3.44395E+05 mg/L
differs from the input file value of 3.54016E+05 mg/L
by more than 1%.
The calculated value will be used in
subsequent calculations.

The pickup file has been written.

No further input found.


Start time = 13:57:15 21Mar2017
End time = 13:57:15 21Mar2017

Run time = 0.586E-01 seconds

Normal exit
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG
------------------------------------

The following output files were written:

c4pgwbN2.3o
c4pgwbN2.3p

------------------------------------

The following input files were run without generating
any EQ3NR error messages:

c4pgwbN2.3i

------------------------------------
All done


The question here is whether the error is indicative of a serious issue with the compiled software.

I reran as
csh ../scripts/runeq3 fmt c4pgwbN2.3i |tee c4pgwbN2.3o

and compared
diff c4pgwbN2.3o Outputs/c4pgwbN2.3o

18c18
< Run 14:12:44 21Mar2017
---
> Run 13:18:06 07Sep2011
870,871c870,871
< -0.0000 per cent of the total charge
< -0.0000 per cent of the mean charge
---
> 0.0000 per cent of the total charge
> 0.0000 per cent of the mean charge
1235,1236c1235,1236
< Start time = 14:12:44 21Mar2017
< End time = 14:12:44 21Mar2017
---
> Start time = 13:18:06 07Sep2011
> End time = 13:18:06 07Sep2011
1238c1238
< Run time = 0.586E-01 seconds
---
> Run time = 0.781E-01 seconds


The results are the same.We're good.

Everything put together as a script:

mkdir ~/tmp
cd ~/tmp
wget http://www-gs.llnl.gov/content/assets/docs/energy/EQ36_80a_Linux.zip
unzip EQ36_80a_Linux.zip
cd Linux
mv EQ3_6v8.0a ~/
rm -rf Linux
cd ~/EQ3_6v8.0a
ls *.tar |xargs -I {} tar xvf {}
find -name "*.gz"|xargs -I {} gunzip {}
cd eqlibg/src
gfortran -c *.f
ar cr eqlibg.a *.o
cd ../../eqlibu/src
gfortran -c *.f
ar cr eqlibu.a *.o
cd ../../eqlib/src
gfortran -c *.f
ar cr eqlib.a *.o

cd ../../eqpt/src
sh makelinks
gfortran *.f *.a -o eqpt
cp eqpt ../../bin/
cd ../../xcon3/src
sh makelinks
gfortran *.f *.a -o xcon3
cp xcon3 ../../bin/
cd ../../xcon6/src
sh makelinks
gfortran *.f *.a -o xcon6
cp xcon6 ../../bin/
cd ../../eq3nr/src
sh makelinks
gfortran *.f *.a -o eq3nr
cp eq3nr ../../bin/
cd ../../eq6/src
sh makelinks
gfortran *.f *.a -o eq6
gfortran *.f *.a -o eq6
cp eq6 ../../bin/

cd ~/EQ3_6v8.0a

cat eq36cfg >> ~/.cshrc

cd scripts/
ln -s runeq36 runeq3
ln -s runeq36 runeq6

sudo mkdir /usr/tmp
sudo chmod ugo+rw /usr/tmp

cd ../db/
csh ../scripts/runeqpt all

Previous
Next Post »