#
# I used the Numerical Recipes routines fourn, nrutil and rlft3
# converted to double precision. These are not essential to the 
# basic PMTA routines. 

DEBUG= 
PROF= -O2

default: serial

# To do 2D periodic replication, use -DSURFACE
#
#serial: 
#	-make mta "CC=gcc -O2 -DSERIAL -DSURFACE"
#

serial: 
	-make mta "CC=gcc -O -DSERIAL"

waves:
	-make wavesf.x "CC=cc -DSERIAL -DSURFACE"

wavesf.x: wavesf.o PMTAmultipole_setup.o PMTAcell_setup.o PMTAfile.o \
PMTAparticle.o PMTAmultipole.o PMTAlocal.o PMTAforce2.o PMTAparallel.o \
PMTAanalysis.o PMTApfma.o PMTAcoulomb.o PMTAfft.o PMTAbalance.o \
PMTAinteract.o percoef.o wavlibf.o nrutil.o rlft3.o fourn.o
	$(CC) $(DEBUG) $(PROF) -o wavesf.x wavesf.o PMTAmultipole_setup.o \
PMTAcell_setup.o PMTAfile.o PMTAparticle.o PMTAmultipole.o PMTAlocal.o \
PMTAforce2.o PMTAparallel.o PMTAanalysis.o PMTApfma.o PMTAcoulomb.o \
PMTAfft.o PMTAbalance.o PMTAinteract.o percoef.o wavlibf.o \
nrutil.o rlft3.o fourn.o -lm

PMTAmain.o: PMTAmain.c PMTAlib.h
	$(CC) -c $(DEBUG) $(PROF) PMTAmain.c

PMTAmultipole_setup.o: PMTAmultipole_setup.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAmultipole_setup.c

PMTAcell_setup.o: PMTAcell_setup.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAcell_setup.c

PMTAfile.o: PMTAfile.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAfile.c

PMTAparticle.o: PMTAparticle.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAparticle.c

PMTAmultipole.o: PMTAmultipole.c PMTA.h PMTAlegendre.h PMTAfft.h
	$(CC) -c $(DEBUG) $(PROF) PMTAmultipole.c

PMTAlocal.o: PMTAlocal.c PMTA.h PMTAlegendre.h
	$(CC) -c $(DEBUG) $(PROF) PMTAlocal.c

PMTAforce.o: PMTAforce.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAforce.c

PMTAparallel.o: PMTAparallel.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAparallel.c

PMTAanalysis.o: PMTAanalysis.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAanalysis.c

PMTApfma.o: PMTApfma.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTApfma.c

PMTAcoulomb.o: PMTAcoulomb.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAcoulomb.c

PMTAfft.o: PMTAfft.c PMTA.h PMTAlegendre.h PMTAfft.h
	$(CC) -c $(DEBUG) $(PROF) PMTAfft.c

PMTAbalance.o: PMTAbalance.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAbalance.c

PMTAinteract.o: PMTAinteract.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAinteract.c

dmain.o: dmain.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) dmain.c

dmain1.o: dmain1.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) dmain1.c

dmain2.o: dmain2.c PMTAlib.h
	$(CC) -c $(DEBUG) $(PROF) dmain2.c

dmain3.o: dmain3.c PMTAlib.h
	$(CC) -c $(DEBUG) $(PROF) dmain3.c

percoef.o: percoef.c PMTA.h 
	$(CC) -c $(DEBUG) $(PROF) percoef.c

PMTAforce2.o: PMTAforce2.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) PMTAforce2.c

wavesf.o: wavesf.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) wavesf.c

wavlibf.o: wavlibf.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) wavlibf.c

wavest.o: wavest.c PMTA.h
	$(CC) -c $(DEBUG) $(PROF) wavest.c

clean:
	-rm pmta *.o 

remake:
	touch *.c *.h
	make default

listing:
	-tgrind -lc *.c *.h
