# Makefile for MPI-Spin model of Example 2.15 from
# "MPI: The Complete Reference, vol. 1", 2nd ed.

# We are using model checking with symbolic execution
# to establish the equivalence between sequential and 
# parallel version of Jacobi iteration.

# Author:       Dr. Stephen Siegel <siegel@cis.udel.edu>
# Modified By:  Pujan Kafle <kafle@cis.udel.edu>
# Last modified: 30-jul-2007

PREP       = rm -f pan* *trail mpi-spin-init.c
MS         = $(PREP) ; ms -notest -nocancel -noprobe \
             -crmax=100 -crhash=100 -DVERBOSE
MSCC       = mscc -DCOLLAPSE -DSAFETY
PREREQ     = jacobi_sendrecv.prom 
EXECUTE    = (time ./pan -n)

# A_SEQ_SIZE == (N+2)*(N+2)
# B_SEQ_SIZE == N*N
# A_PAR_SIZE == (N+2)*(N/NPROCS + (N%NPROCS==0 -> 2 : 3))
# B_PAR_SIZE == N*(N/NPROCS + (N%NPROCS==0 -> 0 : 1))

all: jacobi_p0_0 \
     jacobi_p0_1 \
     jacobi_p0_2 \
     jacobi_p0_3 \
     jacobi_p0_4 \
     jacobi_p0_5

jacobi_p0_0: $(PREREQ)
	$(MS) -np=2 -block -chansize=2 -dl -DN=3 -DMAXIT=3 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=25 -DB_SEQ_SIZE=9 -DA_PAR_SIZE=20 -DB_PAR_SIZE=6
	$(MSCC)
	$(EXECUTE) > jacobi_p0_0.out 2>jacobi_p0_0.err

jacobi_p0_1: $(PREREQ)
	$(MS) -np=2 -buf=2 -req=3 -dl -DN=3 -DMAXIT=1 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=25 -DB_SEQ_SIZE=9 -DA_PAR_SIZE=20 -DB_PAR_SIZE=6
	$(MSCC)
	$(EXECUTE) > jacobi_p0_1.out 2>jacobi_p0_1.err

jacobi_p0_2: $(PREREQ)
	$(MS) -np=4 -block -chansize=0 -DN=8 -DMAXIT=1 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=100 -DB_SEQ_SIZE=64 -DA_PAR_SIZE=40 -DB_PAR_SIZE=16
	$(MSCC) -DVECTORSZ=2048
	$(EXECUTE) > jacobi_p0_2.out 2>jacobi_p0_2.err

jacobi_p0_3: $(PREREQ)
	$(MS) -np=3 -block -chansize=2 -dl -DN=7 -DMAXIT=2 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=81 -DB_SEQ_SIZE=49 -DA_PAR_SIZE=45 -DB_PAR_SIZE=21
	$(MSCC) -DVECTORSZ=4096
	$(EXECUTE) > jacobi_p0_3.out 2>jacobi_p0_3.err

jacobi_p0_4: $(PREREQ)
	$(MS) -np=4 -buf=2 -req=7 -dl -DN=11 -DMAXIT=2 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=169 -DB_SEQ_SIZE=121 -DA_PAR_SIZE=65  -DB_PAR_SIZE=33
	$(MSCC) -DVECTORSZ=4096
	$(EXECUTE) > jacobi_p0_4.out 2>jacobi_p0_4.err

jacobi_p0_5: $(PREREQ)
	$(MS) -np=4 -block -chansize=2 -dl -DN=10 -DMAXIT=3 jacobi_sendrecv.prom \
          -DA_SEQ_SIZE=144 -DB_SEQ_SIZE=100 -DA_PAR_SIZE=60  -DB_PAR_SIZE=30
	$(MSCC) -DVECTORSZ=4096
	$(EXECUTE) > jacobi_p0_5.out 2>jacobi_p0_5.err

clean:
	-rm -f pan* *.trail *.out mpi-spin-init.c trail*.txt *.err *~
