#
# This is the main makefile for the serial version of LATTE
#
.SUFFIXES: .fortran90 .f90

include makefile.h

MODPREPROCS = myprecision.o

MYMODULES = constants_mod.f90 setuparray.f90 coulombarray.f90 \
diagarray.f90 fermicommon.f90 gsparray.f90 mdarray.f90 neblistarray.f90 \
pbcarray.f90 ppotarray.f90 purearray.f90 relaxcommon.f90 restartarray.f90 \
sparseind.f90 spinarray.f90 virialarray.f90 xboarray.f90 

SUBPREPROCS = assessocc.o bodirect.o diagmyh.o entropy.o fermiexpans.o \
initsparsesp2.o solvematcg.o solvematlapack.o sp2T.o sp2fermi.o \
sp2fermi_init.o sp2pure.o spinrhodirect.o

MYSUBS = addqdep.f90 allocatecoulomb.f90 allocatediag.f90 \
allocatenebarrays.f90 allocatenonzero.f90 allocatexbo.f90 allocatepure.f90 \
atomcharge.f90 avetemp.f90 bldnewH.f90 bldspinH.f90 \
buildsparselist.f90 coulomb_ewald.f90 coulomb_oldskool.f90 coulomb_rspace.f90 \
coultailcoef.f90 deallocateall.f90 deallocatecoulomb.f90 deallocatediag.f90 \
deallocatenebarrays.f90 deallocatenonzero.f90 deallocatexbo.f90 \
deallocatepure.f90 dgsp.f90 fermiallocate.f90 fermideallocate.f90  \
fermiexpanssparse.f90 FindMolecules.f90 gershgorin.f90 getbndfil.f90 \
getcoule.f90 getdeltaq.f90 getdeltaspin.f90 gethdim.f90 getke.f90 \
getmaxf.f90 getmdf.f90 getpressure.f90 getspinE.f90 getspinE_zero.f90 \
gradH.f90 gsp.f90 ifrestart.f90 initcoulomb.f90 initfermisparse.f90 \
initialv.f90 initshockcomp.f90 latte.f90 msrelax.f90 neblists.f90 noelec.f90 \
nvtrescale.f90 panic.f90 pbc.f90 plot_gsp.f90 plot_ppot.f90 ppot_hybrid.f90 \
pptailcoef.f90 printsparse.f90 propchempot_xbo.f90 propspins_xbo.f90 \
qconsistency.f90 readcontrols.f90 readcr.f90 readmdcontroller.f90 \
readppot.f90 readrestart.f90  readtb.f90 resetprodhd.f90 rhozero.f90 \
shockcomp.f90 solvematcgsparse.f90 sparsesp2pure.f90  stdescent.f90 \
summary.f90 tailcoef.f90 tbmd.f90 toteng.f90 velverlet.f90 wrtcfgs.f90 \
wrtdump.f90 wrtrestart.f90 xbo.f90

XMYMODULES = 		$(MYMODULES:.f90=.o)

XMYSUBS = 		$(MYSUBS:.f90=.o)

FSUBPREPROCS = 		$(SUBPREPROCS:.o=.f90)
FMODPREPROCS = 		$(MODPREPROCS:.o=.f90)

SUFFIX = .f90

ifeq ($(GPUOPT), OFF)

latte:	$(MODPREPROCS) $(XMYMODULES) $(SUBPREPROCS) $(XMYSUBS) 
		$(FCL) -o ../LATTE_$(PRECISION) $(LINKFLAG) $(MODPREPROCS) $(XMYMODULES) $(SUBPREPROCS) $(XMYSUBS) $(LIB) 
		rm *.o *.mod $(FSUBPREPROCS) $(FMODPREPROCS)
endif

ifeq ($(GPUOPT), ON)

latte:	$(MODPREPROCS) $(XMYMODULES) $(SUBPREPROCS) $(XMYSUBS) 
		$(FCL) -o ../LATTEGPU_$(PRECISION) $(GPU_LINKFLAG) $(MODPREPROCS) $(XMYMODULES) $(SUBPREPROCS) $(XMYSUBS) $(LIB) $(GPU_LIB)
		rm *.o *.mod $(FSUBPREPROCS) $(FMODPREPROCS)

endif

$(MODPREPROCS):
			$(CPP)
			$(FC) $(FFLAGS) -c $*$(SUFFIX)

$(SUBPREPROCS):
			$(CPP)
			$(FC) $(FFLAGS) -c $*$(SUFFIX)

$(XMYMODULES): 		$(MYMODULES)
			$(FC) $(FFLAGS) -c $(MYMODULES)

$(XMYSUBS): 		$(MYSUBS)
			$(FC) $(FFLAGS) -c $(MYSUBS)

clean: 
			rm *.o *.mod $(FSUBPREPROCS) $(FMODPREPROCS) 
