PREP       = rm -f pan* *trail mpi-spin-init.c
MS         = $(PREP) ; ms -notest -nocancel -noprobe \
             -crmax=1000 -crhash=1000 # -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

jacobi_n5: $(PREREQ)
	$(MS) -np=5 -req=20 -buf=0 -DN=10 -DMAXIT=3 jacobi.prom \
          -DA_SEQ_SIZE=144 -DB_SEQ_SIZE=100 -DA_PAR_SIZE=48 -DB_PAR_SIZE=20
	$(MSCC) -DVECTORSZ=3000
	($(EXECUTE)) > jacobi_n5.out 2>jacobi_n5.err

jacobi_n6: $(PREREQ)
	$(MS) -np=6 -req=24 -buf=0 -DN=14 -DMAXIT=3 jacobi.prom \
          -DA_SEQ_SIZE=256 -DB_SEQ_SIZE=196 -DA_PAR_SIZE=80 -DB_PAR_SIZE=42
	$(MSCC) -DVECTORSZ=5000
	($(EXECUTE)) > jacobi_n6.out 2>jacobi_n6.err

# This one is very big, perhaps too big...
jacobi_n7: $(PREREQ)
	$(MS) -np=7 -req=28 -buf=0 -DN=16 -DMAXIT=3 jacobi.prom \
          -DA_SEQ_SIZE=324 -DB_SEQ_SIZE=256 -DA_PAR_SIZE=90 -DB_PAR_SIZE=48
	$(MSCC) -DVECTORSZ=7000
	($(EXECUTE)) > jacobi_n7.out 2>jacobi_n7.err


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) -m22) > 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 *~
