#   Copyright (C) 1999-2006 David J. Wales
#   This file is part of OPTIM.
#
#   OPTIM is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   OPTIM is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
OBJS = potential.o key.o commons.o modtwoend.o modhess.o modneb.o modamber9.o grouprotation.o\
modunres.o modguess.o modmec.o syminf.o vecck.o zwk.o \
getparams.o adm.o amb_natinterns.o capsid.o axdiff.o axpairs.o aziz.o c60diff.o c60p.o beig.o bfgsts.o \
guesspath.o \
charmmBildc.o chiralhyd.o dtrap.o dumpit.o dumpp.o eig.o eigensort.o emie.o escp.o etrap.o fetchz.o geopt.o gmetry.o hessout.o \
ions.o JM.o keywords.o h2o.o latmin.o ljdiff.o ljpdiff.o mdiff.o mied.o miel.o mlatmin.o \
morse.o rotd.o mpdiff.o msdiff.o mslatmin.o oldneb.o pertable.o shifth.o dprand.o \
rotcon.o rotm.o scdiff.o scl.o secdiag.o siaz.o sortc.o sortxyz.o symmetry.o tcheck.o vdump.o \
efol.o utils.o ljpbin.o ljpshift.o SW.o ctest.o double.o Clatmin.o input.o cpmdlatmin.o ljpkob.o glj_yukawa.o \
changep.o twoend.o dzugutov.o Zetterling.o rad.o odesd.o g2special.o PV.o PachecoC60.o xmylbfgs.o \
mylbfgs.o 2Dfunc.o OPTIM.o path.o connect.o mindist.o repelsp.o TIPmodes.o caardiff.o mycpu_time.o \
g46merdiff.o p46merdiff.o MB.o c10.o ectrap.o dctrap.o welch.o tosifumi.o tight.o dftb.o \
fd.o ljms.o meccano.o porfuncs.o modcharmm.o modmxatms.o rigidfuncs.o tip.o \
msevb_common.o msevb_interfaces.o checkedtrig.o msevb.o fmsevb.o drvmsevb.o cleanmemory.o Natb.o \
header.o wc.o binaryio.o BLN.o morph.o newmindist.o thomson.o Gthomson.o ellipticintegral.o minpermdist.o minperm.o inertia.o \
greatcirc.o SBM.o cubspl.o specialfuncts.o gsdata.o cubsplstring.o dqag.o internals_wrapper.o minpermrb.o \
intcommons.o intcoords.o SiO2.o stock.o bhinterp.o Z2faster.o p4diff.o Gupta.o BGupta.o myorient.o hybridmin.o \
bbrsdm.o projh.o bisect.o dbpg.o dbptd.o dmblpy.o lwotpbox.o lwotpgh.o gb.o gbbox.o gbd.o rbperm.o rigidb.o msstock.o silane.o \
newcapsid.o newtip.o pahagh.o pap.o ptstst.o pyg.o rbinertia.o stockghaa.o gay-berne.o growstring.o ambnatintern_extras.o \
amhglobals.o Ackland_wrapper.o Ackland_metals.o DF1.o bulkmindist.o SD.o finite_differences.o minpermdistrbcom.o ttm3f.o \
make_conpot.o qtip4pf.o qspcfw.o intlbfgs.o congrad.o intlbfgslj.o intgradlj.o H2O.pjt2.o VRTMCY5f.o multisitepy.o\
EYtrap.o patchyd.o asaoos.o lopermdist.o dummy_userpot.o visnormodes.o paircolour.o aadistance.o Energy_1d_APBC.o \
Energy_1d_PBC.o Energy_2d_PBC_INVT.o Energy_2d_APBC.o Energy_2d_PBC.o Energy_3d_APBC.o Energy_3d_PBC.o genrigid.o  rotations.o \
vec3.o aaorient.o nimetpot.o phi4model.o nihEAM6pot.o nih2leps.o Energy_4d_APBC.o Energy_4d_PBC.o morse_bulk.o qorder_lj.o \
GLJ.o scdiff_periodic.o example1Dpotential.o mcpath.o collagen_order.o Energy_1d_PBC_INVT.o RPH.o twist.o mcpath2.o watermethane.o


# Set up preprocessing for .F files
 CPP = /lib/cpp
 CPFLAGS = -traditional -P
# 

GENF90FILES = porfuncs.f90 header.f90

QUIPINTERFACE = optim_quip_wrapper.o

CHDUM = chdummy.o
UNDUM = unresdummy.o
AMDUM = amberdummy.o
AMHDUM = amhdummy.o
JBDUM = libjbdummy.a
QUIPDUM = optim_quipdummy.o
DLFDUM = dlfdummy.o

VPATH = NEB:CONNECT:AMH:.
LDFLAGS = -L.

#### libraries
LIBS = -lnn  -lnc libmyblas.a libmylapack.a  libmyblas.a  libmyblas.a -lnc 
LIBS2 = -lnn -lnc -lnc 
# LIBS = -lmylapack -lmyblas -L/usr/local/lib
# LIBS = -lnn -lnc -lATLASf77blas -lATLAScblas -lATLASatlas -lATLASlapack

#QUIP library files
QUIPLIBS = libfullquip.a

#### sf344> AMBER 9 / NAB interface
AMB9DUM = amber9dummy.o
AMB9SRC = ../../AMBER/src/sander
NABSRC = ../../NAB/src
#### end AMBER 9

#
#### AMBER
EXTRASAMBER = amber.o modamber.o modamber2.o
# EXTRASAMH = amhglobals.o
EXTRASAMH = 
#### end AMBER
#

ifeq (${CTYPE},C31)
##### CHARMM 31
EXTRAS = myblas.o mylapack.o
CHOBJS31 = $(LIBDIRCH)/help.o $(LIBDIRCH)/iniall.o $(LIBDIRCH)/miscom.o $(LIBDIRCH)/usersb.o
CHLIBS31 = $(LIBDIRCH)/adumb.a \
$(LIBDIRCH)/flucq.a $(LIBDIRCH)/cadint.a $(LIBDIRCH)/cheq.a $(LIBDIRCH)/cff.a $(LIBDIRCH)/correl.a $(LIBDIRCH)/dimb.a \
$(LIBDIRCH)/emap.a $(LIBDIRCH)/dynamc.a $(LIBDIRCH)/energy.a $(LIBDIRCH)/gamint.a $(LIBDIRCH)/gukint.a \
$(LIBDIRCH)/gener.a $(LIBDIRCH)/image.a $(LIBDIRCH)/io.a $(LIBDIRCH)/machdep.a $(LIBDIRCH)/manip.a $(LIBDIRCH)/mbond.a \
$(LIBDIRCH)/mc.a $(LIBDIRCH)/minmiz.a $(LIBDIRCH)/misc.a $(LIBDIRCH)/mmff.a $(LIBDIRCH)/molvib.a $(LIBDIRCH)/nbonds.a \
$(LIBDIRCH)/pert.a $(LIBDIRCH)/quantum.a $(LIBDIRCH)/rxncor.a $(LIBDIRCH)/shapes.a $(LIBDIRCH)/solvation.a \
$(LIBDIRCH)/util.a $(LIBDIRCH)/vibran.a libcharmm.a 
##### end CHARMM 31


else ifeq (${CTYPE},C36)
##### CHARMM 36
EXTRAS = myblas.o mylapack.o
CHOBJS36 =$(LIBDIRCH)/help.o $(LIBDIRCH)/iniall.o $(LIBDIRCH)/miscom.o $(LIBDIRCH)/usersb.o 
#CHOBJS36 = $(LIBDIRCH)/../../build/gnu/build/gnu/*.o 

CHLIBS36 = $(LIBDIRCH)/ltm.a $(LIBDIRCH)/adumb.a $(LIBDIRCH)/flucq.a $(LIBDIRCH)/cadint.a \
$(LIBDIRCH)/cff.a $(LIBDIRCH)/correl.a $(LIBDIRCH)/csa.a $(LIBDIRCH)/dimb.a \
$(LIBDIRCH)/dynamc.a $(LIBDIRCH)/emap.a $(LIBDIRCH)/energy.a $(LIBDIRCH)/gamint.a \
$(LIBDIRCH)/gukint.a $(LIBDIRCH)/gener.a $(LIBDIRCH)/image.a $(LIBDIRCH)/io.a \
$(LIBDIRCH)/machdep.a $(LIBDIRCH)/manip.a $(LIBDIRCH)/mbond.a $(LIBDIRCH)/mc.a \
$(LIBDIRCH)/minmiz.a $(LIBDIRCH)/misc.a $(LIBDIRCH)/mmff.a $(LIBDIRCH)/mndint.a \
$(LIBDIRCH)/mscale.a $(LIBDIRCH)/molvib.a $(LIBDIRCH)/nbonds.a $(LIBDIRCH)/pert.a \
$(LIBDIRCH)/quantum.a $(LIBDIRCH)/rxncor.a $(LIBDIRCH)/shapes.a $(LIBDIRCH)/solvation.a \
$(LIBDIRCH)/stringm.a $(LIBDIRCH)/util.a $(LIBDIRCH)/vibran.a $(LIBDIRCH)/zerom.a -Lmpi libcharmm.a
 
##### END CHARMM 36
else

##### CHARMM 35
EXTRAS = myblas.o mylapack.o
CHOBJS35 = $(LIBDIRCH)/help.o $(LIBDIRCH)/iniall.o $(LIBDIRCH)/miscom.o $(LIBDIRCH)/usersb.o

ifeq (${QMTYPE},DFTB)
# CHARMM 35 SCC-DFTB 
CHLIBS35 = $(LIBDIRCH)/adumb.a \
$(LIBDIRCH)/flucq.a $(LIBDIRCH)/cadint.a $(LIBDIRCH)/cheq.a $(LIBDIRCH)/cff.a $(LIBDIRCH)/correl.a $(LIBDIRCH)/dimb.a \
$(LIBDIRCH)/emap.a $(LIBDIRCH)/dynamc.a $(LIBDIRCH)/energy.a $(LIBDIRCH)/gamint.a $(LIBDIRCH)/gukint.a \
$(LIBDIRCH)/gener.a $(LIBDIRCH)/image.a $(LIBDIRCH)/io.a $(LIBDIRCH)/machdep.a $(LIBDIRCH)/manip.a $(LIBDIRCH)/mbond.a \
$(LIBDIRCH)/mc.a $(LIBDIRCH)/minmiz.a $(LIBDIRCH)/misc.a $(LIBDIRCH)/mmff.a $(LIBDIRCH)/molvib.a $(LIBDIRCH)/nbonds.a \
$(LIBDIRCH)/pert.a $(LIBDIRCH)/quantum.a $(LIBDIRCH)/rxncor.a $(LIBDIRCH)/shapes.a $(LIBDIRCH)/solvation.a \
$(LIBDIRCH)/util.a $(LIBDIRCH)/vibran.a ${LIBDIRCH}/sccdftb.a $(LIBDIRCH)/sccdftbint.a libcharmm.a
else
CHLIBS35 = $(LIBDIRCH)/adumb.a \
$(LIBDIRCH)/flucq.a $(LIBDIRCH)/cadint.a $(LIBDIRCH)/cheq.a $(LIBDIRCH)/cff.a $(LIBDIRCH)/correl.a $(LIBDIRCH)/dimb.a \
$(LIBDIRCH)/emap.a $(LIBDIRCH)/dynamc.a $(LIBDIRCH)/energy.a $(LIBDIRCH)/gamint.a $(LIBDIRCH)/gukint.a \
$(LIBDIRCH)/gener.a $(LIBDIRCH)/image.a $(LIBDIRCH)/io.a $(LIBDIRCH)/machdep.a $(LIBDIRCH)/manip.a $(LIBDIRCH)/mbond.a \
$(LIBDIRCH)/mc.a $(LIBDIRCH)/minmiz.a $(LIBDIRCH)/misc.a $(LIBDIRCH)/mmff.a $(LIBDIRCH)/molvib.a $(LIBDIRCH)/nbonds.a \
$(LIBDIRCH)/pert.a $(LIBDIRCH)/quantum.a $(LIBDIRCH)/rxncor.a $(LIBDIRCH)/shapes.a $(LIBDIRCH)/solvation.a \
$(LIBDIRCH)/util.a $(LIBDIRCH)/vibran.a libcharmm.a
endif
##### end CHARMM 35
endif

###### UNRES
SRC = /export/home/wales/unres/src
EXTRASUNRES=$(SRC)/unres_subroutine.o $(SRC)/arcos.o $(SRC)/cartprint.o $(SRC)/chainbuild.o \
$(SRC)/convert.o $(SRC)/initialize_p.o $(SRC)/matmult.o $(SRC)/readrtns_p.o \
$(SRC)/parmread.o $(SRC)/gen_rand_conf.o $(SRC)/printmat.o $(SRC)/map.o \
$(SRC)/pinorm.o $(SRC)/randgens.o $(SRC)/rescode.o $(SRC)/intcor.o $(SRC)/timing.o \
$(SRC)/misc.o $(SRC)/cartder.o $(SRC)/checkder_p.o $(SRC)/energy_p.o $(SRC)/gradient_p.o \
$(SRC)/minimize_p.o $(SRC)/sumsld.o $(SRC)/cored.o $(SRC)/rmdd.o $(SRC)/geomout.o \
$(SRC)/readpdb.o $(SRC)/regularize.o $(SRC)/thread.o $(SRC)/fitsq.o $(SRC)/mcm.o \
$(SRC)/mc.o $(SRC)/bond_move.o $(SRC)/refsys.o $(SRC)/check_sc_distr.o \
$(SRC)/contact.o $(SRC)/djacob.o $(SRC)/entmcm.o $(SRC)/compare_s1.o \
UNRESinterface/intbfgsts.o UNRESinterface/intbeig.o UNRESinterface/intxmylbfgs.o UNRESinterface/intsecdiag.o \
UNRESinterface/unresoptim.o UNRESinterface/unresdump.o UNRESinterface/unrestransform.o UNRESinterface/unressetdihe.o \
UNRESinterface/unrestwist.o UNRESinterface/unresconnectsections.o UNRESinterface/unresguessts.o \
UNRESinterface/unrescalcdihe.o UNRESinterface/unresnebguessts.o UNRESinterface/unguesspath.o UNRESinterface/unmeccano.o
##### end UNRES

###############################################################################################
# Add the OPTIM version number to OPTIM.f so it is printed in the output
DEFS=
DEFS+=-DSVNVERSION="`./version.sh`"
###################################### RULES AND TARGETS ######################################
.SUFFIXES: 
.SUFFIXES: .o .f .F .f90

.F.f:
	$(CPP) $(CPFLAGS) $(DEFS) $< > $@

.f90.o:
	$(FC) $(FFLAGS) ${SEARCH_PATH} -c $<
.f.o:
	$(FC) $(FFLAGS) ${SEARCH_PATH} -c $<

default:
	./build.csh help
${optim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(CHDUM) $(UNDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM)
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${optim} $(EXTRAS) $(OBJS) $(CHDUM) $(UNDUM)  $(AMHDUM) $(AMDUM) $(AMB9DUM) $(JBDUM) $(QUIPDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS) $(LIBS)
	rm -f libmyblas.a    libmylapack.a

ifeq (${CTYPE},C31)
${coptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(UNDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM) libcharmm.a 
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${coptim} ${CHOBJS31} $(EXTRAS) $(UNDUM) $(AMDUM) $(AMHDUM) $(AMB9DUM) $(OBJS) $(JBDUM) $(QUIPDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS) $(CHLIBS31) ${CHLIBS31} ${CHLIBS31} 
	rm libmyblas.a    libmylapack.a

else ifeq (${CTYPE},C36)
${coptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(UNDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM) libcharmm.a
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${coptim} ${CHOBJS36} $(EXTRAS) $(UNDUM) $(AMDUM) $(AMHDUM) $(AMB9DUM) $(QUIPDUM) $(DLFDUM) $(OBJS) $(JBDUM) \
	$(LDFLAGS) $(LIBS) $(CHLIBS36) ${CHLIBS36} ${CHLIBS36}
	rm libmyblas.a    libmylapack.a

else
${coptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(UNDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM) libcharmm.a 
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${coptim} ${CHOBJS35} $(EXTRAS) $(UNDUM) $(AMDUM) $(AMHDUM) $(AMB9DUM) $(QUIPDUM) $(DLFDUM) $(OBJS) $(JBDUM) \
	$(LDFLAGS) $(LIBS) $(CHLIBS35) ${CHLIBS35} ${CHLIBS35} 
	rm libmyblas.a    libmylapack.a
endif

${unoptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(EXTRASUNRES) $(CHDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM)
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${unoptim} $(EXTRAS) $(EXTRASUNRES) $(CHDUM) $(AMDUM) $(AMHDUM) $(AMB9DUM) $(QUIPDUM) $(OBJS) $(JBDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS)
	rm libmyblas.a    libmylapack.a

${amoptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(EXTRASAMBER) $(CHDUM) $(UNDUM) $(QUIPDUM) $(DLFDUM)
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${amoptim} $(EXTRAS) $(EXTRASAMBER) $(CHDUM) $(UNDUM) $(AMHDUM) $(AMB9DUM) $(QUIPDUM) $(OBJS) $(JBDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS)
	rm libmyblas.a    libmylapack.a

${dlfoptim}: $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(AMDUM) $(CHDUM) $(UNDUM) $(QUIPDUM) libdlfwrapper.a 
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${dlfoptim} $(EXTRAS) $(AMDUM) $(CHDUM) $(UNDUM) $(AMHDUM) $(AMB9DUM) $(QUIPDUM) $(OBJS) $(JBDUM) \
	$(LDFLAGS) $(LIBS) libdlfwrapper.a 
	rm libmyblas.a    libmylapack.a

${amb9optim}: $(AMHDUM) $(EXTRAS) $(JBDUM) $(OBJS) $(CHDUM) $(AMDUM) $(UNDUM) $(QUIPDUM) $(DLFDUM) libamber.a libnab.a 
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${amb9optim} $(CHDUM) $(UNDUM) $(AMHDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM) $(OBJS) $(JBDUM) $(EXTRAS) \
	$(LDFLAGS) $(LIBS) libamber.a libnab.a $(LIBS)
#	rm -f libmyblas.a    libmylapack.a modamber9.o modamber9.mod

${quipoptim}: $(QUIPLIBS) $(AMB9DUM) $(AMHDUM) $(JBDUM) $(OBJS) $(EXTRAS) $(CHDUM) $(AMDUM) $(UNDUM) $(QUIPINTERFACE) $(DLFDUM)
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${quipoptim} $(EXTRAS) $(OBJS) $(AMB9DUM) $(CHDUM) $(UNDUM) $(AMHDUM) $(AMDUM) $(JBDUM) $(QUIPINTERFACE) $(LDFLAGS) $(LIBS2) $(LDFLAGS) $(QUIPLIBS) $(DLFDUM) -static -llapack -lopenblas
 
${amhoptim}: $(AMB9DUM) $(JBDUM) $(OBJS) $(EXTRAS) $(AMHEXTRAS) $(CHDUM) $(AMDUM) $(UNDUM) $(QUIPDUM) $(DLFDUM) libamh.a 
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${amhoptim} $(EXTRAS)  $(OBJS) $(AMHEXTRAS) $(CHDUM) $(UNDUM) $(AMDUM) $(AMB9DUM) $(JBDUM) $(QUIPDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS)  $(LIBS) libamh.a
	rm libmyblas.a    libmylapack.a 

${jboptim}: $(AMB9DUM) $(AMHDUM) libbowman.a $(OBJS) $(EXTRAS) $(CHDUM) $(UNDUM) $(AMDUM) $(QUIPDUM) $(DLFDUM)
	$(FC) $(FFLAGS) ${SEARCH_PATH} -o ${jboptim} $(EXTRAS) $(OBJS) $(CHDUM) $(UNDUM)  $(AMHDUM) $(AMDUM) $(AMB9DUM) $(QUIPDUM) $(DLFDUM) \
	$(LDFLAGS) $(LIBS) libbowman.a Bowman/libs/libpes.a Bowman/libs/libpesd.a
	rm -f libmyblas.a    libmylapack.a

timing:
	rm -f $(OPROG) 
	$(FC) $(FFLAGS) -p $(LDFLAGS) -o $(OPROG) $(OBJS) $(EXTRAS) $(LIBS)
	rm libmyblas.a    libmylapack.a

clean:
	rm -f $(OBJS) *.mod $(EXTRAS) *.lst *.o pref.dat prefx.msg FOR021.DAT ${GENF90FILES} *.log lastargs lib*
	rm -f libbowman.a libjbdummy.a
	if test -d ../../BLAS ;  then cd ../../BLAS ; make clean ; fi
	if test -d ../../LAPACK ;  then cd ../../LAPACK ; make clean ; fi
	if test -d DLFWrapper ; then cd DLFWrapper ; make clean ; fi
	if test -d NEB ;  then cd NEB ; make clean ; fi
	if test -d CONNECT ;  then cd CONNECT ; make clean ; fi
	if test -d CHARMM ;  then cd CHARMM ; make clean ; fi
	if test -d CHARMMinterface ;  then cd CHARMMinterface ; make clean ; fi
	if test -d AMH ;  then cd AMH ; make clean ; fi
	if test -d $(AMB9SRC) ; then cd $(AMB9SRC) ; make clean ; fi
	if test -d $(NABSRC) ; then cd $(NABSRC) ; make clean ; fi
	if test -d Bowman ; then cd Bowman ; make clean ; fi
	if test -d Bowman/fake ; then cd Bowman/fake/ ; make clean ; fi
	if test -d ../../QUIP ; then cd ../../QUIP ; export QUIP_ARCH=linux_x86_64_ifort_icc ; make clean ; fi
cleanexe:
	rm -r ../bin/*

cleanall:
	make clean
	make cleanexe
cleanamber:
	rm -f libmyblas.a libmylapack.a modamber9.o modamber9.mod
porfuncs.f90: porfuncs.csh
	./porfuncs.csh ${SWITCH} > porfuncs.f90
header.f90: header.csh
	./header.csh > header.f90

# SAT: no agressive optimizations for selected files to cut down on compile time
keywords.o: keywords.f
	${FC} ${NOOPT} ${SEARCH_PATH} -c keywords.f

# DJW 18/8/12 these routines give internal errors for the latest nagfor 5.3 compiler, unless
#             the optimisation level is turned down to O1
# dbpg.o: dbpg.f90
# 	${FC} ${NOOPT2} ${SEARCH_PATH} -c dbpg.f90
# msstock.o: msstock.f90
# 	 ${FC} ${NOOPT2} ${SEARCH_PATH} -c msstock.f90
# pahagh.o: pahagh.f90
# 	 ${FC} ${NOOPT2} ${SEARCH_PATH} -c pahagh.f90

libamber.a:
	cd $(AMB9SRC); make FC="${FC}" FFLAGS="${FFLAGS}" FREEFORMAT_FLAG="${FREEFORMAT_FLAG}" EXTRA_FLAGS="${EXTRA_FLAGS}" SRCDIR="$(CURDIR)"
libnab.a:
	cd $(NABSRC)/../ucpp-1.3/; make install; cd $(NABSRC)/../byacc/; make install; cd $(NABSRC); make install NABHOME="$(CURDIR)/../../NAB" LIBDIR="$(CURDIR)/../../NAB/lib";cp $(CURDIR)/../../NAB/lib/libnab.a $(CURDIR)/libnab.a
libnn.a: SAT-Ghost
	cd NEB; make FC="${FC}" FFLAGS="${FFLAGS} ${SEARCH_PATH}"
libamh.a: SAT-Ghost
	cd AMH; make FC="${FC}" FFLAGS="${FFLAGS} ${SEARCH_PATH}" 
libnc.a: SAT-Ghost
	cd CONNECT; make FC="${FC}" FFLAGS="${FFLAGS} ${SEARCH_PATH}"
libmyblas.a: SAT-Ghost
	cd ../../BLAS; make double FC="${FC}" FFLAGS="${FFLAGS}" BLAS_EXCLUDE_LIST="${BLAS_EXCLUDE_LIST}";\
	cp libmyblas.a ../OPTIM/source
libmylapack.a: SAT-Ghost
	cd ../../LAPACK; make selection FC="${FC}" FFLAGS="${FFLAGS}" NOOPT="${NOOPT}";\
	cp libmylapack.a ../OPTIM/source


libdlfwrapper.a:
	cd DLFWrapper; make FC="${FC}" FFLAGS="${FFLAGS} ${SEARCH_PATH}"
	ar rv libdlfwrapper.a DLFWrapper/${FC}/objects/*.o



libfullquip.a:
	cd ../../QUIP; export QUIP_ARCH=linux_x86_64_ifort_icc; make all
	mkdir ../../QUIP/QUIPOBJS
	cd ../../QUIP; find . -name "*.o" -exec cp {} QUIPOBJS/ ";"
	ar rv libfullquip.a ../../QUIP/QUIPOBJS/*.o
	rm -r ../../QUIP/QUIPOBJS

libcharmm.a: SAT-Ghost
	cd CHARMMinterface; make FC="${FC}" FFLAGS="${FFLAGS} ${SEARCH_PATH} -I${PREFDIR}" PREFLX="${PREFLX}" PREFDIR="${PREFDIR}" \
	CTYPE="${CTYPE}" FCMDIR=${FCMDIR} CHSRC="${CHSRC}" SRCCH="${SRCCH}"

libbowman.a:
	cd Bowman; make
libjbdummy.a:
	cd Bowman/fake; make FC="${FC}" FFLAGS="${FFLAGS}"
SAT-Ghost:

###################################### DEPENDENCIES ######################################
${optim} ${coptim} ${unoptim} ${amoptim} ${amb9optim} ${amhoptim} ${jboptim} ${dlfoptim}: libnn.a libnc.a libmyblas.a libmylapack.a
${amb9optim}: libamber.a modamber9.o
${quipoptim}: libfullquip.a libnn.a libnc.a
${dlfoptim}: libdlfwrapper.a key.o commons.o
# libamh.a: altpot_interfaces.o  amh_interfaces.o  globals_alt.o amhglobals.o
libamh.a: amhglobals.o
libnn.a: modcharmm.o key.o commons.o modunres.o porfuncs.o modmec.o modguess.o efol.o growstring.o gsdata.o intcommons.o intcoords.o amhglobals.o genrigid.o
libnc.a: libnn.a key.o syminf.o modhess.o amhglobals.o
libamber.a: commons.o modamber9.o grouprotation.o
libcharmm.a: key.o commons.o modtwoend.o modneb.o modhess.o modcharmm.o modmxatms.o intcommons.o

2Dfunc.o:      commons.o modhess.o
Ackland_wrapper.o:      key.o
Ackland_metals.o:      ackland_sma.h ackland_mishin_cu.h ackland_mendelev_fe.h key.o
BLN.o:      key.o modhess.o
Clatmin.o:      commons.o
DF1.o:      key.o modhess.o
SBM.o:      key.o
JM.o:      modhess.o porfuncs.o
MB.o:      modhess.o commons.o
PV.o:      commons.o key.o
PachecoC60.o:      modhess.o
SW.o:      key.o modhess.o
SiO2.o:      porfuncs.o modhess.o
TIPmodes.o:      modhess.o
Zetterling.o:      porfuncs.o modhess.o key.o
adm.o:      porfuncs.o commons.o key.o
amber.o:      commons.o modamber.o modamber2.o modhess.o key.o
axdiff.o:      modhess.o
aziz.o:      modhess.o
beig.o:      commons.o key.o modneb.o modtwoend.o porfuncs.o
bfgsts.f:      commons.o key.o vecck.o zwk.o modcharmm.o modhess.o porfuncs.o modtwoend.o 
c10.o:        modhess.o
c60diff.o:      modhess.o
c60p.o:      modhess.o
caardiff.o:      modhess.o
capsid.o:      modhess.o
changep.o:      commons.o key.o modtwoend.o modneb.o porfuncs.o
charmmBildc.o:      modamber9.o commons.o key.o
connect.o:      commons.o key.o modtwoend.o modneb.o modcharmm.o modunres.o porfuncs.o porfuncs.o syminf.o modhess.o modcharmm.o modunres.o porfuncs.o porfuncs.o porfuncs.o modneb.o key_neb.o libnn.a modcharmm.o modunres.o efol.o porfuncs.o modcharmm.o modamber9.o 

cpmdlatmin.o:      key.o porfuncs.o
ctest.o:      modhess.o
dctrap.o:      key.o modhess.o
dftb.o:      key.o modhess.o
diis.o:      key.o gdiis.o
# dimer.o:       modhess.o commons.o 
double.o:      modhess.o
dtrap.o:      modhess.o
dumpit.o:      commons.o key.o
dumpp.o:      commons.o key.o  modcharmm.o porfuncs.o
dzugutov.o:      modhess.o
ectrap.o:      key.o
escp.o:      modhess.o
fd.o:      modhess.o key.o
fetchz.o:      commons.o key.o modtwoend.o syminf.o modneb.o modcharmm.o modamber9.o modunres.o libnc.a modguess.o modmec.o porfuncs.o msevb_common.o binaryio.o amhglobals.o gsdata.o
g2special.o:      modhess.o key.o porfuncs.o
g46merdiff.o:        modhess.o
genrigid.o: commons.o rotations.o vec3.o modneb.o  modtwoend.o
geopt.o:      commons.o key.o modtwoend.o modhess.o modcharmm.o porfuncs.o binaryio.o efol.o modneb.o amhglobals.o internals_wrapper.o 
getparams.o:      commons.o porfuncs.o header.o key.o modamber9.o
gmetry.o:      key.o commons.o
greatcirc.o:      commons.o key.o modtwoend.o modhess.o zwk.o modunres.o modcharmm.o porfuncs.o
h2o.o:      modhess.o
hessout.o:      modhess.o
hybridmin.o:      commons.o key.o vecck.o zwk.o modcharmm.o modhess.o porfuncs.o
inertia.o:      commons.o key.o 
input.o:      porfuncs.o
intbeig.o:      commons.o key.o modneb.o modtwoend.o
intbfgsts.o:      commons.o key.o vecck.o zwk.o modunres.o modhess.o
bfgsts.o:      commons.o key.o  vecck.o zwk.o modcharmm.o modhess.o modtwoend.o porfuncs.o
intsecdiag.o:      commons.o key.o
intxmylbfgs.o:      commons.o key.o modtwoend.o
ions.o:      modhess.o
keywords.o:      commons.o key.o modmec.o modtwoend.o modamber9.o modneb.o modmxatms.o modcharmm.o modunres.o key_neb.o libnc.a modguess.o porfuncs.o gay-berne.o msevb_common.o wc.o binaryio.o gsdata.o cubsplstring.o intcommons.o amhglobals.o BGupta.o modhess.o
ljdiff.o:      modhess.o
ljms.o:      modhess.o
ljpbin.o:      key.o modhess.o
ljpdiff.o:      key.o modhess.o
ljpkob.o:      key.o modhess.o
ljpshift.o:      key.o modhess.o
mdiff.o:      modhess.o
mied.o:      modhess.o
mindist.o:      key.o porfuncs.o
morph.o:      commons.o key.o zwk.o modtwoend.o modcharmm.o porfuncs.o
morse.o:      modhess.o
morse_bulk.o:      modhess.o
mpdiff.o:      modhess.o key.o
msdiff.o:      modhess.o
mylbfgs.o:      commons.o key.o modtwoend.o modhess.o zwk.o modunres.o modcharmm.o modamber9.o porfuncs.o specialfuncts.o internals_wrapper.o
myorient.o:      key.o
odesd.o:      commons.o key.o modhess.o porfuncs.o
oldneb.o:      commons.o modtwoend.o modneb.o key.o modhess.o porfuncs.o commons.o modcharmm.o
optim_quip_wrapper.o: commons.o
p46merdiff.o:        modhess.o
p4diff.o:      modhess.o
path.o:      commons.o key.o syminf.o modcharmm.o modunres.o modhess.o efol.o porfuncs.o amhglobals.o
pertable.o:      commons.o key.o
potential.o:      commons.o key.o modhess.o modcharmm.o porfuncs.o modamber9.o commons.o modhess.o
projh.o:      modhess.o
rad.o:      commons.o key.o
rbinertia.o: commons.o key.o
repelsp.o:      commons.o key.o
rotd.o:      modhess.o
rotations.o:   commons.o vec3.o
scdiff.o:      modhess.o
scdiff_periodic.o:      modhess.o
secdiag.o:      commons.o key.o modcharmm.o porfuncs.o
shifth.o:      key.o modhess.o
sortxyz.o:      commons.o
stock.o:      key.o modhess.o commons.o vecck.o modhess.o
symmetry.o:      commons.o key.o syminf.o
tcheck.o:      commons.o
thomson.o:      modhess.o commons.o key.o 
Gthomson.o:      modhess.o commons.o key.o 
tight.o:      key.o modhess.o
tip.o:      commons.o key.o modhess.o
tosifumi.o:      porfuncs.o modhess.o
twoend.o:      porfuncs.o commons.o key.o modtwoend.o zwk.o modcharmm.o modhess.o
unrescalcdihe.f:      commons.o modunres.o commons.o modunres.o modunres.o commons.o
unresconnectsections.o:      commons.o modunres.o commons.o key.o modtwoend.o modunres.o commons.o modtwoend.o modunres.o
unresdummy.o:      commons.o
unresdump.o:      commons.o
unresguessts.o:      commons.o key.o modtwoend.o modunres.o commons.o modtwoend.o modunres.o
unresnebguessts.o:      commons.o key.o modunres.o key_neb.o commons.o modunres.o
unresoptim.o:      commons.o modunres.o commons.o modunres.o commons.o modunres.o commons.o modunres.o
unressetdihe.o:      modunres.o
unrestransform.o:      modunres.o commons.o modhess.o modunres.o modunres.o
unrestwist.o:      commons.o modunres.o commons.o modunres.o commons.o modunres.o
utils.o:      commons.o
vdump.o:      key.o modhess.o porfuncs.o commons.o 
welch.o:      porfuncs.o modhess.o
xmylbfgs.o:      commons.o key.o modtwoend.o porfuncs.o
amb_natinterns.o:      commons.o modamber9.o intcommons.o 
ambnatintern_extras.o:      modamber9.o intcommons.o modmxatms.o specialfuncts.o commons.o key.o 
bbrsdm.o:      commons.o key.o modcharmm.o
bhinterp.o: key.o modcharmm.o modamber9.o porfuncs.o commons.o efol.o specialfuncts.o
binaryio.o:          key.o commons.o porfuncs.o commons.o
bisect.o: key.o modcharmm.o modamber9.o porfuncs.o commons.o
checkedtrig.o:         msevb_common.o
chiralhyd.o:      commons.o modamber9.o intcommons.o commons.o modamber9.o key.o 
cleanmemory.o:  msevb_common.o
cubsplstring.o:  gsdata.o
dbpg.o:      modhess.o commons.o key.o commons.o 
dbptd.o:     modhess.o commons.o key.o commons.o 
dmblpy.o:    modhess.o commons.o key.o commons.o 
drvmsevb.o:	commons.o msevb_common.o msevb_interfaces.o msevb_interfaces.o modhess.o
efol.o:      commons.o key.o syminf.o modhess.o zwk.o porfuncs.o modcharmm.o
fmsevb.o:	commons.o msevb_common.o msevb_interfaces.o
gay-berne.o: key.o commons.o commons.o modhess.o
gb.o:      modhess.o key.o
gbbox.o:      modhess.o commons.o key.o
gbd.o:      modhess.o key.o
growstring.o:  commons.o key.o cubsplstring.o gsdata.o specialfuncts.o intcommons.o intcoords.o porfuncs.o
gsdata.o:  commons.o intcommons.o key.o
guesspath.o: key.o modcharmm.o modguess.o modunres.o porfuncs.o
intcommons.o:  modamber9.o
intcoords.o:  modcharmm.o commons.o intcommons.o key.o specialfuncts.o modamber9.o porfuncs.o
lwotpbox.o: modhess.o commons.o key.o 
lwotpgh.o: modhess.o commons.o key.o 
meccano.o: commons.o porfuncs.o key.o modneb.o modtwoend.o modmec.o key_neb.o commons.o modunres.o modcharmm.o 
meccano.o: key.o
minpermdist.o: key.o modcharmm.o modamber9.o intcommons.o intcoords.o 
lopermdist.o: key.o modcharmm.o
minpermrb.o: key.o modcharmm.o intcommons.o commons.o 
msevb.o:     commons.o msevb_common.o msevb_interfaces.o
msevb_interfaces.o:       msevb_common.o
msstock.o:     modhess.o commons.o key.o
mycpu_time.o: porfuncs.o key.o
multisitepy.o: key.o commons.o modhess.o
newcapsid.o:      commons.o 
newmindist.o: commons.o key.o
newtip.o:      commons.o key.o modhess.o
# nimetpot.o: commons.o key.o modhess.o
pahagh.o: modhess.o commons.o key.o
pap.o: modhess.o commons.o key.o
ptstst.o: modhess.o commons.o key.o
silane.o: modhess.o commons.o key.o
patchyd.o: modhess.o commons.o
asaoos.o: modhess.o commons.o
pyg.o:    modhess.o commons.o key.o
rbperm.o: commons.o key.o
minpermdistrbcom.o: commons.o key.o
rigidb.o: key.o modhess.o commons.o 
specialfuncts.o:    commons.o
stockghaa.o: modhess.o commons.o key.o 
unguesspath.o: key.o modcharmm.o modguess.o modunres.o porfuncs.o
unmeccano.o: commons.o key.o modneb.o modunres.o modmec.o key_neb.o commons.o modtwoend.o zwk.o modcharmm.o modneb.o modmec.o porfuncs.o modhess.o
OPTIM.f: OPTIM.F
OPTIM.o: commons.o key.o modtwoend.o modhess.o vecck.o zwk.o modcharmm.o modunres.o libnn.a libnc.a modguess.o modmec.o porfuncs.o charutils.o intcommons.o intcoords.o 
bulkmindist.o:  key.o
fetchz.o: SD.o 
#potential.o: SD.o finite_differences.o libbowman.a
potential.o: SD.o finite_differences.o ttm3f.o VRTMCY5f.o H2O.pjt2.o genrigid.o
make_conpot.o: key.o commons.o
grouprotation.o: commons.o
intlbfgs.o: key.o porfuncs.o commons.o intcommons.o amhglobals.o efol.o libnn.a libnc.a
intlbfgslj.o: key.o porfuncs.o commons.o intcommons.o efol.o modcharmm.o
congrad.o: key.o commons.o 
intgradlj.o: key.o commons.o 
EYtrap.o: key.o
GLJ.o: key.o
internals_wrapper.o: commons.o
BGupta.o: modhess.o commons.o
glj_yukawa.o: modhess.o commons.o
example1Dpotential.o : modhess.o commons.o
Energy_1d_APBC.o:      modhess.o
Energy_1d_PBC.o: modhess.o
Energy_1d_PBC_INVT.o: modhess.o
Energy_2d_PBC_INVT.o: modhess.o
Energy_2d_APBC.o: modhess.o
Energy_2d_PBC.o: modhess.o
Energy_3d_APBC.o: modhess.o
Energy_3d_PBC.o: modhess.o
Energy_4d_APBC.o: modhess.o
Energy_4d_PBC.o: modhess.o
aaorient.o: modhess.o commons.o key.o
nimetpot.o: modhess.o commons.o key.o
phi4model.o:  modhess.o commons.o key.o
nih2leps.o: modhess.o commons.o key.o
nihEAM6pot.o: commons.o key.o modhess.o
qorder_lj.o: commons.o
mcpath.o: key.o commons.o porfuncs.o
mcpath2.o: key.o commons.o porfuncs.o
RPH.o: key.o commons.o porfuncs.o modcharmm.o modhess.o genrigid.o
collagen_order.o: commons.o key.o
twist.o: key.o
