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.h jacobi.prom jacobi_support.c
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))

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

all: small \
     jacobi_p0_6 \
     jacobi_p0_7 \
     jacobi_p0_8 \
     jacobi_p0_9

p0: jacobi_p0_0 \
    jacobi_p0_1 \
    jacobi_p0_2 \
    jacobi_p0_3 \
    jacobi_p0_4 \
    jacobi_p0_5 \
    jacobi_p0_6 \
    jacobi_p0_7 \
    jacobi_p0_8 \
    jacobi_p0_9

jacobi_p0_0: $(PREREQ)
	$(MS) -np=2 -req=8 -buf=0 -DN=2 -DMAXIT=1 jacobi.prom \
          -DA_SEQ_SIZE=16 -DB_SEQ_SIZE=4 -DA_PAR_SIZE=12 -DB_PAR_SIZE=2
	$(MSCC)
	$(EXECUTE) >jacobi_p0_0.out 2>jacobi_p0_0.err

jacobi_p0_1: $(PREREQ)
	$(MS) -np=2 -req=8 -buf=0 -DN=2 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=16 -DB_SEQ_SIZE=4 -DA_PAR_SIZE=12 -DB_PAR_SIZE=2
	$(MSCC)
	$(EXECUTE) >jacobi_p0_1.out 2>jacobi_p0_1.err

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

jacobi_p0_3: $(PREREQ)
	$(MS) -np=2 -req=8 -buf=0 -DN=3 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=25 -DB_SEQ_SIZE=9 -DA_PAR_SIZE=20 -DB_PAR_SIZE=6
	$(MSCC)
	$(EXECUTE) > jacobi_p0_3.out 2>jacobi_p0_3.err

jacobi_p0_4: $(PREREQ)
	$(MS) -np=2 -req=8 -buf=4 -DN=3 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=25 -DB_SEQ_SIZE=9 -DA_PAR_SIZE=20 -DB_PAR_SIZE=6
	$(MSCC)
	$(EXECUTE) > jacobi_p0_4.out 2>jacobi_p0_4.err

# the following one throws error: two isends simultaneously access
# same buffer for nprocs=2 this wasn't a problem because one of the
# two isends had destination MPI_PROC_NULL.

jacobi_p0_5: $(PREREQ)
	$(MS) -np=3 -req=12 -buf=0 -DN=3 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=25 -DB_SEQ_SIZE=9 -DA_PAR_SIZE=15 -DB_PAR_SIZE=3
	$(MSCC)
	$(EXECUTE) > jacobi_p0_5.out 2>jacobi_p0_5.err
	./pan -r > trail_p0_5.txt

jacobi_p0_6: $(PREREQ)
	$(MS) -np=3 -req=12 -buf=6 -DN=6 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=64 -DB_SEQ_SIZE=36 -DA_PAR_SIZE=32 -DB_PAR_SIZE=12
	$(MSCC)
	$(EXECUTE) > jacobi_p0_6.out 2>jacobi_p0_6.err

jacobi_p0_7: $(PREREQ)
	$(MS) -np=3 -req=12 -buf=6 -DN=7 -DMAXIT=2 jacobi.prom \
          -DA_SEQ_SIZE=81 -DB_SEQ_SIZE=49 -DA_PAR_SIZE=45 -DB_PAR_SIZE=21
	$(MSCC) -DVECTORSZ=2048
	$(EXECUTE) > jacobi_p0_7.out 2>jacobi_p0_7.err

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

jacobi_p0_9: $(PREREQ)
	$(MS) -np=4 -req=16 -buf=0 -DN=10 -DMAXIT=3 jacobi.prom \
          -DA_SEQ_SIZE=144 -DB_SEQ_SIZE=100 -DA_PAR_SIZE=60  -DB_PAR_SIZE=30
	$(MSCC) -DVECTORSZ=4096
	$(EXECUTE) > jacobi_p0_9.out 2>jacobi_p0_9.err

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