# Makefile for MI, MD and WP tests.
# These rules and drivers make use of the C Preprocessor
# (hence the .F rather than .f)

FC = gfortran
FFLAGS = -Wall -Wno-unused-dummy-argument -fimplicit-none -O2 -Wno-maybe-uninitialized -ffpe-trap=invalid,zero,overflow -ffpe-summary=none
EFFLAGS = -Wall -Wno-unused-dummy-argument -fimplicit-none -O2 -Wno-maybe-uninitialized -freal-8-real-16

bacol       = src/bacol.f
bacolref    = src/bacolref.f
bacoli      = src/bacoli.f
drv_mi      = src/drivers/driver-mi.F $(wildcard src/drivers/quadpack/*.f)
drv_md      = src/drivers/driver-md.F $(wildcard src/drivers/quadpack/*.f)
drv_wp      = src/drivers/driver-wp.F $(wildcard src/drivers/quadpack/*.f)
drv_ref     = src/drivers/driver-ref.F $(wildcard src/drivers/quadpack/*.f)
drv_aRCD    = src/drivers/driver-aRCD.F $(wildcard src/drivers/quadpack/*.f)
prb_b1      = src/models/burg1.f
prb_b2      = src/models/burg2.f
prb_rcd     = src/models/RCDsys.f
d1mach      = src/drivers/quadpack/d1mach_i1mach.f

MI  = B1 1B2 6B2 12B2 RCD B1-bac 1B2-bac 6B2-bac 12B2-bac RCD-bac
MD  = B1-t 1B2-t 6B2-t 12B2-t RCD-t B1-bac-t 1B2-bac-t 6B2-bac-t 12B2-bac-t RCD-bac-t
WP  = B1-wp B2-wp B1-bac-wp B2-bac-wp
REF = RCD-ref RCD-bac-ref aRCD-ref

mi: $(MI)
md: $(MD)
wp: $(WP)
ref: $(REF)

B1: $(bacoli) $(drv_mi) $(prb_b1)
	$(FC) -pg $(FFLAGS) -o $@ $^
1B2: $(bacoli) $(drv_mi) $(prb_b2)
	$(FC) -pg $(FFLAGS) -o $@ $^
RCD: $(bacoli) $(drv_mi) $(prb_rcd)
	$(FC) -pg $(FFLAGS) -DNPDE=4 -o $@ $^
6B2: $(bacoli) $(drv_mi) $(prb_b2) 
	$(FC) -pg $(FFLAGS) -DNPDE=6 -o $@ $^
12B2: $(bacoli) $(drv_mi) $(prb_b2)
	$(FC) -pg $(FFLAGS) -DNPDE=12 -o $@ $^

B1-bac: $(bacol) $(drv_mi) $(prb_b1)
	$(FC) -pg $(FFLAGS) -DBACOL -o $@ $^
1B2-bac: $(bacol) $(drv_mi) $(prb_b2)
	$(FC) -pg $(FFLAGS) -DBACOL -o $@ $^
RCD-bac: $(bacol) $(drv_mi) $(prb_rcd)
	$(FC) -pg $(FFLAGS) -DBACOL -DNPDE=4 -o $@ $^
6B2-bac: $(bacol) $(drv_mi) $(prb_b2)
	$(FC) -pg $(FFLAGS) -DBACOL -DNPDE=6 -o $@ $^
12B2-bac: $(bacol) $(drv_mi) $(prb_b2)
	$(FC) -pg $(FFLAGS) -DBACOL -DNPDE=12 -o $@ $^

B1-t: $(bacoli) $(drv_md) $(prb_b1)
	$(FC) $(FFLAGS) -o $@ $^
1B2-t: $(bacoli) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -o $@ $^
RCD-t: $(bacoli) $(drv_md) $(prb_rcd)
	$(FC) $(FFLAGS) -DNPDE=4 -o $@ $^
6B2-t: $(bacoli) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -DNPDE=6 -o $@ $^
12B2-t: $(bacoli) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -DNPDE=12 -o $@ $^

B1-bac-t: $(bacol) $(drv_md) $(prb_b1)
	$(FC) $(FFLAGS) -DBACOL -o $@ $^
1B2-bac-t: $(bacol) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -DBACOL -o $@ $^
RCD-bac-t: $(bacol) $(drv_md) $(prb_rcd)
	$(FC) $(FFLAGS) -DBACOL -DNPDE=4 -o $@ $^
6B2-bac-t: $(bacol) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -DBACOL -DNPDE=6 -o $@ $^
12B2-bac-t: $(bacol) $(drv_md) $(prb_b2)
	$(FC) $(FFLAGS) -DBACOL -DNPDE=12 -o $@ $^

B1-wp: $(bacoli) $(drv_wp) $(prb_b1)
	$(FC) $(FFLAGS) -o $@ $^
B2-wp: $(bacoli) $(drv_wp) $(prb_b2)
	$(FC) $(FFLAGS) -o $@ $^

B1-bac-wp: $(bacol) $(drv_wp) $(prb_b1)
	$(FC) $(FFLAGS) -DBACOL -o $@ $^
B2-bac-wp: $(bacol) $(drv_wp) $(prb_b2)
	$(FC) $(FFLAGS) -DBACOL -o $@ $^

RCD-ref: $(bacoli) $(drv_ref) $(prb_rcd)
	$(FC) $(FFLAGS) -DXA=0 -DXB=1 -DTOUT=1.0 -DNPDE=4 -DNINTMX=2000  -o $@ $^
RCD-bac-ref: $(bacol) $(drv_ref) $(prb_rcd)
	$(FC) $(FFLAGS) -DBACOL -DXA=0 -DXB=1 -DTOUT=1.0 -DNPDE=4 -DNINTMX=2000  -o $@ $^
aRCD-ref: $(bacolref) $(drv_aRCD) $(prb_rcd)
	$(FC) $(EFFLAGS) -DBACOL -DXA=0 -DXB=1 -DTOUT=1.0 -DNINTMX=2000  -o $@ $^

clean:
	$(RM) $(MI) $(MD) $(WP) $(SE) $(REF)

.PHONY: clean mi md wp se
