#!/bin/sh # echo '*******************************************************************************' echo '* it2make it2make it2make it2make it2make it2make it2make it2make' echo '*******************************************************************************' echo '*' echo '* Usage: it2make [add-library] [options] eos' echo '*' echo '* Generates iTOUGH2 executable for specific EOS module on most Unix systems.' echo '* Set array dimensions in file maxsize.inc before running it2make.' echo '* Do not interrupt it2make using ctrl-c.' echo '* May need to customize Makefile before using it2make.' echo '* Special libraries may not be available with iTOUGH2 distribution.' echo '* You may compile iTOUGH2 directly using the Makefile.' echo '*' echo '* Options:' echo '* eos identifier of equation-of-state module (e.g., 3, 7r)' echo '* -d, -debug compile in debug mode' echo '* -p, -pvm add PVM package for embarrassingly parallel execution of TOUGH2 forward runs' echo '* -g, -gslib add Geostatistical Software Library (GSLIB)' echo '* -l, -lhs add Latin Hypercube Sampling routines' echo '* -gp, -geophysics add geophysical postprocessing routines' echo '* -react, -TOUGHREACT add reactive geochemical transport (TOUGHREACT)' echo '* -de, -evolution add differential evolution algorithm' echo '*' echo '* V6.0, S. Finsterle, Lawrence Berkeley National Laboratory, 6/15/2007' # # Initialize environment variables # PVM=no GSLIB=no LHS=no GEOPHYSICS=no EVOLUTION=no REACT=no DEBUG=no HOSTNAME=`hostname` EXEDIR="../Executable" LIN=' ' LPVM=' ' IPVM=' ' EXO=o CHANGED=0 CHANGEDSTUBS=0 SPECIAL=it2stubs.o SOLVER='t2cg22.o t2solv.o' echon=`/bin/echo -n | grep -c n` # # Look for options # while test $# -gt 1 do case $1 in -d) DEBUG=yes ; shift;; -debug) DEBUG=yes ; shift;; -p) PVM=yes ; shift;; -pvm) PVM=yes ; shift;; -g) GSLIB=yes ; shift;; -gslib) GSLIB=yes ; shift;; -l) LHS=yes ; shift;; -lhs) LHS=yes ; shift;; -gp) GEOPHYSICS=yes; shift;; -geophysics) GEOPHYSICS=yes; shift;; -de) EVOLUTION=yes; shift;; -evolution) EVOLUTION=yes; shift;; -react) REACT=yes; shift;; -TOUGHREACT) REACT=yes; shift;; -*) echo "$1: unknown option '$1'."; echo "Valid options:"; echo; echo "-d, -debug : Compiles in debug mode"; echo "-p, -pvm : Add PVM package for embarrassingly parallel execution of TOUGH2 forward runs"; echo "-g, -gslib : Add Geostatistical Software Library (GSLIB)"; echo "-l, -lhs : Add Latin Hypercube Sampling routines"; echo "-gp, -geophysics : Add geophysical postprocessing routines"; echo; echo "-de, -evolution : Add differential evolution algorithms"; echo; echo "-react, -TOUGHREACT : Add differential evolution algorithms"; echo; exit 1 ;; *) echo " "; echo "ERROR: Check command usage"; echo " "; exit 1 ;; esac done if [ $# -eq 1 ] then EOS=$1 else case $echon in 0) /bin/echo -n '* Which EOS module should be linked to iTOUGH2? ' ;; *) /bin/echo '* Which EOS module should be linked to iTOUGH2? \c' ;; esac read EOS echo '*' fi # # Identify compiler # cat << eof > compilertest.f write(*,*) 'just a compiler test' end eof if `f77 -c compilertest.f >/dev/null 2>&1` then FOR='f77' ; elif `pgf77 -c compilertest.f >/dev/null 2>&1` then FOR='pgf77'; elif `pgf90 -c compilertest.f >/dev/null 2>&1` then FOR='pgf90'; elif `ifort -c compilertest.f >/dev/null 2>&1` then FOR='ifort' ; elif `ifc -c compilertest.f >/dev/null 2>&1` then FOR='ifc'; elif `g77 -c compilertest.f >/dev/null 2>&1` then FOR='g77'; else echo '* No FORTRAN compiler found' case $echon in 0) /bin/echo -n '* Provide name of FORTRAN compiler: ' ;; *) /bin/echo '* Provide name of FORTRAN compiler: \c' ;; esac read FOR COO='-c' echo '*' if (! $FOR >/dev/null 2>&1) then echo '* ERROR: No FORTRAN compiler found.' echo '* Install FORTRAN compiler.' echo '* ERROR: No iTOUGH2 executable created.' echo '*******************************************************************************' exit 101 ; fi ; fi ; # # Identify platform and set the variables FOR, COM, COO and LIN accordingly # if `uname|grep -i sun >/dev/null` ; # # SUN workstation then COM=sun ; # add appropriate optimization here COO='-c -fast -O3' ; COO='-c' ; elif `uname|grep -i aix >/dev/null` ; # # IBM workstation then COM=ibm ; COO='-c -O2' ; elif `uname|grep -i osf >/dev/null` ; # # DEC ALPHA workstation then COM=dec ; COO='-c -fpe1' ; elif `uname|grep -i irix >/dev/null` ; # # SGI workstation then COM=sgi ; COO='-c -O2' ; elif `uname|grep -i linux >/dev/null` ; # # LINUX then COM=linux ; if `ifort -c compilertest.f >/dev/null 2>&1` then FOR='ifort' ; if test $DEBUG = yes then COO='-c -g -ip -pc80 -prefetch -tpp7 -rcd -i_dynamic' ; else COO='-c -O3 -ip -pc80 -prefetch -tpp7 -rcd -i_dynamic' ; fi LIN='' ; elif `pgf90 -c compilertest.f >/dev/null 2>&1` then FOR='pgf90' ; if test $DEBUG = yes then COO='-c -g' ; else COO='-c -fast' ; fi LIN='' ; elif `pgf77 -c compilertest.f >/dev/null 2>&1` then FOR='pgf77' ; if test $DEBUG = yes then COO='-c -g' ; else COO='-c -fast' ; fi LIN='' ; elif `ifc -c compilertest.f >/dev/null 2>&1` then FOR='ifc' ; if test $DEBUG = yes then COO='-c -g -cm -w'; else COO='-c -O2 -cm -w'; fi LIN='-lPEPCF90' ; elif `g77 -c compilertest.f >/dev/null 2>&1` then FOR='g77' ; if test $DEBUG = yes then COO='-c -g' ; else COO='-c -O2' ; fi else FOR='f77' ; if test $DEBUG = yes then COO='-c -g' ; else COO='-c -O2' ; fi fi ; else echo '* Unix platform '`uname` not supported by it2make. echo '* Please send e-mail to SAFinsterle@lbl.gov.' echo '* ERROR: No iTOUGH2 executable created.' echo '*******************************************************************************' exit 102 fi ; # # Check whether special libraries are requested and customize it2stubs.f # if [ "$PVM" = yes ] || [ "$LHS" = yes ] || [ "$GSLIB" = yes ] || \ [ "$GEOPHYSICS" = yes ] || [ "$EVOLUTION" = yes ] then CHANGEDSTUBS=1 cp it2stubs.f it2stubs.ori fi # if test $PVM = yes then SPECIAL=$SPECIAL" it2pvm.o" echo "* Rename PVM-related subroutines in it2stubs.f" # provide PVM libraries here IPVM=' ' LPVM=' ' IPVM=' -I$(PVM_ROOT)/include' LPVM=' -L$(PVM_ROOT)/lib/$(PVM_ARCH) -lfpvm3 -lpvm3 -lnsl -lsocket -lthread' LPVM=' -L$(PVM_ROOT)/lib/$(PVM_ARCH) -lfpvm3 -lpvm3' # cp it2stubs.f it2stubs.tmp cat it2stubs.tmp | sed 's/ SUBROUTINE PVMINPUT.*(/ SUBROUTINE PVMINPUTx(/' \ | sed 's/ SUBROUTINE PVMINIT.*$/ SUBROUTINE PVMINITx/' \ | sed 's/ SUBROUTINE PVMEXIT.*$/ SUBROUTINE PVMEXITx/' \ | sed 's/ SUBROUTINE PVMSENPAR.*(/ SUBROUTINE PVMSENPARx (/' \ | sed 's/ SUBROUTINE PVMRCVPAR.*(/ SUBROUTINE PVMRCVPARx (/' \ | sed 's/ SUBROUTINE PVMSENRES.*(/ SUBROUTINE PVMSENRESx (/' \ | sed 's/ SUBROUTINE PVMRCVRES.*(/ SUBROUTINE PVMRCVRESx (/' \ > it2stubs.f fi # if test $LHS = yes then SPECIAL=$SPECIAL" it2lhs.o" echo "* Rename LHS-related subroutines in it2stubs.f" cp it2stubs.f it2stubs.tmp cat it2stubs.tmp | sed 's/ SUBROUTINE LATINHYPERCUBE.*(/ SUBROUTINE LATINHYPERCUBEx (/' \ | sed 's/ SUBROUTINE LHS_UNIFORM.*(/ SUBROUTINE LHS_UNIFORMx (/' \ | sed 's/ SUBROUTINE LHS_GAUSSIAN.*(/ SUBROUTINE LHS_GAUSSIANx (/ ' \ > it2stubs.f fi # if test $GSLIB = yes then SPECIAL=$SPECIAL" it2gslib.o" echo "* Rename GSLIB-related subroutines in it2stubs.f" cp it2stubs.f it2stubs.tmp cat it2stubs.tmp | sed 's/ SUBROUTINE INGSLIB.*/ SUBROUTINE INGSLIBx/' \ | sed 's/ SUBROUTINE MAPGSLIB.*(/ SUBROUTINE MAPGSLIBx (/' \ | sed 's/ SUBROUTINE SISIM.*$/ SUBROUTINE SISIMx/' \ | sed 's/ SUBROUTINE SGSIMM.*$/ SUBROUTINE SGSIMMx/' \ | sed 's/ SUBROUTINE KTB3D.*$/ SUBROUTINE KTB3Dx/' \ | sed 's/ SUBROUTINE UPDATEPP.*(/ SUBROUTINE UPDATEPPx (/' \ > it2stubs.f fi # if test $GEOPHYSICS = yes then SPECIAL=$SPECIAL" it2geophysics.o" echo "* Rename geophysics-related subroutines in it2stubs.f" cp it2stubs.f it2stubs.tmp cat it2stubs.tmp | sed 's/ SUBROUTINE READGEOPHYSICS.*/ SUBROUTINE READGEOPHYSICSx/' \ | sed 's/ SUBROUTINE RUNGEOPHYSICALMODEL.*$/ SUBROUTINE RUNGEOPHYSICALMODELx/' \ | sed 's/ SUBROUTINE PETROPHYSICALMODEL.*$/ SUBROUTINE PETROPHYSICALMODELx/' \ > it2stubs.f fi # if test $EVOLUTION = yes then SPECIAL=$SPECIAL" it2de.o" echo "* Rename DE-related subroutines in it2stubs.f" cp it2stubs.f it2stubs.tmp cat it2stubs.tmp | sed 's/ SUBROUTINE INEVOLUTION.*(/ SUBROUTINE INEVOLUTIONx (/' \ | sed 's/ SUBROUTINE it2DE.*$/ SUBROUTINE it2DEx/' \ > it2stubs.f fi # # Rename duplicate suroutines # if [ "$EOS" = 9 ] || [ "$EOS" = 7r ] || \ [ "$EOS" = 10 ] || [ "$EOS" = 15 ] || \ [ "$EOS" = 16 ] || [ "$EOS" = 3nn ] || \ [ "$EOS" = 9ecm ] || [ "$EOS" = 9nt ] then echo "* Rename subroutine MULTI in t2f.f" mv t2f.f t2f.ori cat t2f.ori | sed 's/ SUBROUTINE MULTI.*$/ SUBROUTINE MULTIx/' > t2f.f if [ -f t2f.o ] then /bin/rm t2f.o fi CHANGED=1 fi if [ "$EOS" = 10 ] then mv it2main.f it2main.ori echo "* Rename subroutines PCAP and RELP in t2f.f" cat t2f.f | sed 's/ SUBROUTINE PCAP.*(/ SUBROUTINE PCAPx(/' \ | sed 's/ CALL PCAP.*(/ CALL PCAPx(/' \ | sed 's/ SUBROUTINE RELP.*(/ SUBROUTINE RELPx(/' > t2f.f cat it2main.ori| sed 's/ CALL PCAP.*(/ CALL PCAPx(/' > it2main.f CHANGED=3 fi if [ "$EOS" = 14 ] || [ "$EOS" = 6 ] || [ "$EOS" = 19 ] then echo "* Rename subroutine QU in t2f.f" mv t2f.f t2f.ori cat t2f.ori | sed 's/ SUBROUTINE QU.*$/ SUBROUTINE QUx/' > t2f.f CHANGED=1 fi if [ "$EOS" = 15 ] then echo "* Rename subroutine LINEQ in t2cg22.f" mv t2cg22.f t2cg22.ori cat t2cg22.ori| sed 's/ SUBROUTINE LINEQ$/ SUBROUTINE LINEQx/' > t2cg22.f CHANGED=2 fi if [ "$EOS" = 9nt ] then SOLVER='t2cg1.o' ; echo "* Rename subroutine CALLTOUG in it2main.f" mv it2main.f it2main.ori cat it2main.ori| sed 's/ SUBROUTINE CALLTOUG$/ SUBROUTINE CALLTOUGx/' > it2main.f echo "* Rename subroutine LINEQ in t2cg1.f" mv t2cg1.f t2cg1.ori cat t2cg1.ori| sed 's/ SUBROUTINE LINEQ$/ SUBROUTINE LINEQx/' > t2cg1.f CHANGED=4 fi # echo '*' echo "* Trying to make itough2_$EOS.$HOSTNAME using `pwd`/Makefile" echo '*' # if test $REACT = yes then OBJTFX='TFx_ChemModules.o TFx_ChemBatch.o TFx_ChemCoupler.o TFx_ChemFlowInteract.o TFx_ChemInit.o TFx_ChemAllocate.o TFx_ChemNewton.o TFx_ChemRead.o TFx_ChemTrans.o TFx_ChemWrite.o' OBJINV='it2mainr.o it2inputr.o it2xxxx.o it2user.o mdep$(COM).o' OBJDIR='$(SOLVER) eos$(EOS).o t2fr.o meshm.o' else OBJTFX=' ' OBJINV='it2main.o it2input.o it2xxxx.o it2user.o mdep$(COM).o' OBJDIR='$(SOLVER) eos$(EOS).o t2f.o meshm.o' fi # # Export the variables... # export EOS COM EXO COO LIN FOR SPECIAL IPVM LPVM OBJTFX OBJINV OBJDIR # # Create the executable. -e enables overriding the makefile definitions # by those of the environment variables exported above # echo "*" echo "* System parameters identified..." echo "* Unix platform : $COM" echo "* Compiler name : $FOR" echo "* Compiler options: $COO" echo "* Linker options : $LIN" echo "* Libraries : $SPECIAL" echo "*" # if [ -f $EXEDIR/itough2_$EOS.$HOSTNAME ] then rm $EXEDIR/itough2_$EOS.$HOSTNAME fi # # Call Makefile, overwriting exported environment variables # make -e # # Restore changed files # # Restore it2stubs.f if [ $CHANGEDSTUBS -ge 1 ] then mv it2stubs.ori it2stubs.f /bin/rm it2stubs.o fi # if [ $CHANGED -ge 1 ] then mv t2f.ori t2f.f /bin/rm t2f.o fi # # Restore t2cg22.f if [ $CHANGED -eq 2 ] then mv t2cg22.ori t2cg22.f /bin/rm t2cg22.o fi # # Restore it2main.f if [ $CHANGED -ge 3 ] then mv it2main.ori it2main.f /bin/rm it2main.o fi # # Restore t2cg1.f if [ $CHANGED -eq 4 ] then mv t2cg1.ori t2cg1.f /bin/rm t2cg1.o fi echo "*******************************************************************************" # if [ -f $EXEDIR/itough2_$EOS.$HOSTNAME ] then if [ `ls -l $EXEDIR/itough2_$EOS.$HOSTNAME | grep -c x` -eq "1" ] then echo "* Successfully created iTOUGH2 executable itough2_$EOS.$HOSTNAME." fi else echo "* ERROR: Compilation failed." fi rm compilertest.* >/dev/null 2>&1 echo "*******************************************************************************" echo '* it2make completed' echo '*******************************************************************************'