#==============================================================================#
# Makefile for skeleton model
# Written by Stephen F. Siegel and Samuel E. Moelius III
#==============================================================================#
#
# Targets:
#   n   - n processes, NO  boundary elements, NO  modifications
#   nB  - n processes, YES boundary elements, NO  modifications
#   no  - n processes, NO  boundary elements, YES modifications
#   nBo - n processes, YES boundary elements, YES modifications
#
# ``boundary elements'' is experimental feature not described in the PPoPP
# submission.
#
# ``modifications'' enables/disables some of the modifications described in
# Section 4 of the PPoPP submission.
#
# To build the examples used to constuct the ``Verification statistics'' table,
# build ``2m'', ``3m'', ``4m'', and ``5m'', or simply ``all'', as defined
# below.
#==============================================================================#

MS            = ms
MSCC          = mscc
PAN           = time ./pan

MS_FLAGS      = -v -dl -nocancel -buf=1
MSCC_FLAGS    = -v -DSAFETY -DCOLLAPSE
PAN_FLAGS     = -n -b

SRC           = skeleton.prom

MODIFICATIONS = -DUSE_MPI_ALLREDUCE \
                -DMASTER_USES_MPI_WAITANY \
                -DSLAVE_USES_ONE_MPI_WAIT \
                -DMASTER_USES_MPI_RECV_ANY_SOURCE

.PHONY: all 2 2m 2B 2Bm 3 3m 3B 3Bm 4 4m 4B 4Bm 5 5m 5B 5Bm clean

#==============================================================================#

# all : 2 2m 2B 2Bm 3 3m 3B 3Bm 4 4m 4B 4Bm 5 5m 5B 5Bm
all : 2m 3m 4m 5m

#==============================================================================#

2:  $(SRC)
	$(MS) $(MS_FLAGS) -np=2 -DNSLAVES=1 -req=4 -DB=0 \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

2m: $(SRC)
	$(MS) $(MS_FLAGS) -np=2 -DNSLAVES=1 -req=4 -DB=0 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

2B: $(SRC)
	$(MS) $(MS_FLAGS) -np=2 -DNSLAVES=1 -req=4 -DB=3 \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

2Bm: $(SRC)
	$(MS) $(MS_FLAGS) -np=2 -DNSLAVES=1 -req=4 -DB=3 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

#==============================================================================#

3:  $(SRC)
	$(MS) $(MS_FLAGS) -np=3 -DNSLAVES=2 -req=7 -DB=0 \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

3m: $(SRC)
	$(MS) $(MS_FLAGS) -np=3 -DNSLAVES=2 -req=7 -DB=0 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

3B: $(SRC)
	$(MS) $(MS_FLAGS) -np=3 -DNSLAVES=2 -req=7 -DB=5 \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

3Bm: $(SRC)
	$(MS) $(MS_FLAGS) -np=3 -DNSLAVES=2 -req=7 -DB=5 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

#==============================================================================#

4:  $(SRC)
	$(MS) $(MS_FLAGS) -np=4 -DNSLAVES=3 -req=10 -DB=0 \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m10000000

4m: $(SRC)
	$(MS) $(MS_FLAGS) -np=4 -DNSLAVES=3 -req=10 -DB=0 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

4B: $(SRC)
	$(MS) $(MS_FLAGS) -np=4 -DNSLAVES=3 -req=10 -DB=7 \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m10000000

4Bm: $(SRC)
	$(MS) $(MS_FLAGS) -np=4 -DNSLAVES=3 -req=10 -DB=7 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000

#==============================================================================#

5:  $(SRC)
	$(MS) $(MS_FLAGS) -np=5 -DNSLAVES=4 -req=13 -DB=0 \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000000

5m: $(SRC)
	$(MS) $(MS_FLAGS) -np=5 -DNSLAVES=4 -req=13 -DB=0 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000000

5B: $(SRC)
	$(MS) $(MS_FLAGS) -np=5 -DNSLAVES=4 -req=13 -DB=7 \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000000

5Bm: $(SRC)
	$(MS) $(MS_FLAGS) -np=5 -DNSLAVES=4 -req=13 -DB=7 \
		$(MODIFICATIONS) \
		-noprobe \
		$^
	$(MSCC) $(MSCC_FLAGS)
	$(PAN) $(PAN_FLAGS) -m1000000000

#==============================================================================#

clean:
	rm -f *.trail pan* mpi-spin-init.c

#==============================================================================#
