#
# I use the DEBUG variable to pass options to the compiler.
# waves*.x use the numerical recipes fft routines. 

DEBUG= -mp -OPT:fprop_limit=1600
PROF= 

default: serial

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

wavesb:
	-make wavesb.x "CC=cc -O2 -DSERIAL -DSURFACE"

wavesi:
	-make wavesi.x "CC=cc -O2 -DSERIAL -DSURFACE"

wavesc:
	-make wavesfc.x "CC=cc -O2 -DSERIAL -DSURFACE"

wavesbc:
	-make wavesbc.x "CC=cc -O2 -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

wavesb.x: wavesb.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 wavlibb.o nrutil.o rlft3.o fourn.o
	$(CC) $(DEBUG) $(PROF) -o wavesb.x wavesb.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 wavlibb.o \
nrutil.o rlft3.o fourn.o -lm

wavesfc.x: wavesfc.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 wavesfc.x wavesfc.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

wavesbc.x: wavesbc.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 wavlibb.o nrutil.o rlft3.o fourn.o
	$(CC) $(DEBUG) $(PROF) -o wavesbc.x wavesbc.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 wavlibb.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

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

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

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

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

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

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

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

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

clean:
	-rm pmta *.o 

remake:
	touch *.c *.h
	make default

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