MADRE_HOME = ../..
include $(MADRE_HOME)/local.mk
INC_DIR = $(MADRE_HOME)/include
HEADERS = $(INC_DIR)/madre.h ./integrator.h
COMPILE = $(COMPILER) -c -I$(INC_DIR)
LINK = $(LINKER)
MPE_LIBDIR = /local/scratch/tools/mpich/mpich2-install/lib
MPI_LIBS = -L$(MADRE_HOME)/lib -lmadre $(LIBRARIES) -L$(MPE_LIBDIR) -llmpe -lmpe
LIBS = -L$(MADRE_HOME)/lib -lmadre $(LIBRARIES)

all: line sin quad

integrator.o: Makefile $(HEADERS) integrator.c 
	$(COMPILE) -DINTEG_VERBOSE integrator.c

integratorExample.o: Makefile $(HEADERS) integratorExample.c
	$(COMPILE) integratorExample.c

line.o : Makefile line.c
	$(COMPILE) line.c

quad.o : Makefile quad.c
	$(COMPILE) quad.c

sin.o : Makefile sin.c
	$(COMPILE) sin.c

line: line.o integratorExample.o integrator.o madre
	$(LINK) -o line integratorExample.o integrator.o line.o $(LIBS)

quad: quad.o integratorExample.o integrator.o madre
	$(LINK) -o quad integratorExample.o integrator.o quad.o $(LIBS)

sin: sin.o integratorExample.o integrator.o madre
	$(LINK) -o sin integratorExample.o integrator.o sin.o -lm $(LIBS)

madre:
	cd $(MADRE_HOME); make

clean:
	rm -f *.o line quad sin out

check_clean:
	rm -f out

check_quick: sin
	$(SHORT_RUN) 10 ./sin cycleShiftBred

check: check_clean \
       check_cycleShiftBred \
       check_unitBred \
       check_unitCyclicBred \
       check_cyclicSchedulerBred \
       check_phaseBred

check_cycleShiftBred: \
        check_cycleShiftBred_line \
        check_cycleShiftBred_quad \
        check_cycleShiftBred_sin \

check_unitBred: \
        check_unitBred_line \
        check_unitBred_quad \
        check_unitBred_sin

check_unitCyclicBred: \
        check_unitCyclicBred_line \
        check_unitCyclicBred_quad \
        check_unitCyclicBred_sin

check_cyclicSchedulerBred: \
        check_cyclicSchedulerBred_line \
        check_cyclicSchedulerBred_quad \
        check_cyclicSchedulerBred_sin

check_phaseBred: \
        check_phaseBred_line \
        check_phaseBred_quad \
        check_phaseBred_sin


check_cycleShiftBred_line: line
	$(SHORT_RUN)  2 ./line cycleShiftBred >> out
	$(SHORT_RUN)  5 ./line cycleShiftBred >> out
	$(SHORT_RUN) 10 ./line cycleShiftBred >> out

check_cycleShiftBred_quad: quad
	$(SHORT_RUN)  2 ./quad cycleShiftBred >> out
	$(SHORT_RUN)  5 ./quad cycleShiftBred >> out
	$(SHORT_RUN) 10 ./quad cycleShiftBred >> out

check_cycleShiftBred_sin: sin
	$(SHORT_RUN)  2 ./sin cycleShiftBred >> out
	$(SHORT_RUN)  5 ./sin cycleShiftBred >> out
	$(SHORT_RUN) 10 ./sin cycleShiftBred >> out


check_unitBred_line: line
	$(SHORT_RUN)  2 ./line unitBred >> out
	$(SHORT_RUN)  5 ./line unitBred >> out
	$(SHORT_RUN) 10 ./line unitBred >> out

check_unitBred_quad: quad
	$(SHORT_RUN)  2 ./quad unitBred >> out
	$(SHORT_RUN)  5 ./quad unitBred >> out
	$(SHORT_RUN) 10 ./quad unitBred >> out

check_unitBred_sin: sin
	$(SHORT_RUN)  2 ./sin unitBred >> out
	$(SHORT_RUN)  5 ./sin unitBred >> out
	$(SHORT_RUN) 10 ./sin unitBred >> out


check_unitCyclicBred_line: line
	$(SHORT_RUN)  2 ./line unitCyclicBred >> out
	$(SHORT_RUN)  5 ./line unitCyclicBred >> out
	$(SHORT_RUN) 10 ./line unitCyclicBred >> out

check_unitCyclicBred_quad: quad
	$(SHORT_RUN)  2 ./quad unitCyclicBred >> out
	$(SHORT_RUN)  5 ./quad unitCyclicBred >> out
	$(SHORT_RUN) 10 ./quad unitCyclicBred >> out

check_unitCyclicBred_sin: sin
	$(SHORT_RUN)  2 ./sin unitCyclicBred >> out
	$(SHORT_RUN)  5 ./sin unitCyclicBred >> out
	$(SHORT_RUN) 10 ./sin unitCyclicBred >> out


check_cyclicSchedulerBred_line: line
	$(SHORT_RUN)  2 ./line cyclicSchedulerBred >> out
	$(SHORT_RUN)  5 ./line cyclicSchedulerBred >> out
	$(SHORT_RUN) 10 ./line cyclicSchedulerBred >> out

check_cyclicSchedulerBred_quad: quad
	$(SHORT_RUN)  2 ./quad cyclicSchedulerBred >> out
	$(SHORT_RUN)  5 ./quad cyclicSchedulerBred >> out
	$(SHORT_RUN) 10 ./quad cyclicSchedulerBred >> out

check_cyclicSchedulerBred_sin: sin
	$(SHORT_RUN)  2 ./sin cyclicSchedulerBred >> out
	$(SHORT_RUN)  5 ./sin cyclicSchedulerBred >> out
	$(SHORT_RUN) 10 ./sin cyclicSchedulerBred >> out


check_phaseBred_line: line
	$(SHORT_RUN)  2 ./line phaseBred >> out
	$(SHORT_RUN)  5 ./line phaseBred >> out
	$(SHORT_RUN) 10 ./line phaseBred >> out

check_phaseBred_quad: quad
	$(SHORT_RUN)  2 ./quad phaseBred >> out
	$(SHORT_RUN)  5 ./quad phaseBred >> out
	$(SHORT_RUN) 10 ./quad phaseBred >> out

check_phaseBred_sin: sin
	$(SHORT_RUN)  2 ./sin phaseBred >> out
	$(SHORT_RUN)  5 ./sin phaseBred >> out
	$(SHORT_RUN) 10 ./sin phaseBred >> out
