// can do use2phase 0, 1 for method 2,3
// can do use2interval 1, 2 for method 2,3,4
// enough n_xcell to make method 4 entirely overlapping
// enough compress_bufsize so method 1 only allgather.
// strong scaling with 256 cells on 8K ncon = 1000
// weak scaling with 256 on all processor numbers ncon=1000
// strong with 64 on 8k ncon = 10000
// weak scaling with 64 on all processor numbers ncon=10000

done = 0
{load_file("init.hoc")}

// weak scaling
if (runs == 1) {
	seq = 0
	ncellpow = log(256*pc.nhost)/log(2)
	mkmodel(ncellpow, 1000)
	{use2phase = 0 doseries(1234)}
	{use2phase = 1 doseries(23)}
}
if (runs == 2) {
	seq = 6
	ncellpow = log(32*pc.nhost)/log(2)
	mkmodel(ncellpow, 10000)
	{use2phase = 0 doseries(1234)}
	{use2phase = 1 doseries(23)}
}
// strong scaling
if (runs == 3) {
    if (pc.nhost > 9000) {
	seq = 12
	ncellpow = log(256*8192)/log(2)
	mkmodel(ncellpow, 1000)
	{use2phase = 0 doseries(1234)}
	{use2phase = 1 doseries(23)}
    }
}
if (runs == 4) {
    if (pc.nhost > 9000) {
	seq = 18
	ncellpow = log(32*8192)/log(2)
	mkmodel(ncellpow, 10000)
	{use2phase = 0 doseries(1234)}
	{use2phase = 1 doseries(23)}
    }
}

// special cases
if (runs == 5) {
	seq = 24
	ncellpow = log(256*pc.nhost)/log(2)
	mkmodel(ncellpow, 1000)
	use2interval=0
	  use2phase=0 doseries(4)
	  use2phase=1 doseries(3)
	use2interval=-1
	mk_extra_cells(50) use2phase=0 doseries(4)
	mk_extra_cells(0)
	compress_bufsize=20 doseries(1)
	compress_bufsize=40 doseries(1)

	ncellpow = log(32*pc.nhost)/log(2)
	mkmodel(ncellpow, 10000)
	use2phase=1 n_dat=8 doseries(3)
}

// look at effect of bursting,  gid distribution, and connection pattern
if (runs == 6) {
	if (use2interval == -1) use2interval=0
	ncellpow = log(256*pc.nhost)/log(2)
	for giddist=0, 1 {
		for constyle=0, 1 {
			mkmodel(ncellpow, 1000)
			set_burst(0, 1)
			doseries(series)
			another()
			set_burst(ncellpow - 3, .2)
			another()
						
		}
	}
}

if (runs == 7) {
	nseq=9
	use2interval=0
	ncellpow = log(256*pc.nhost)/log(2)
	for giddist=1, 1 {
		for constyle=1, 1 {
			mkmodel(ncellpow, 1000)
			set_burst(0, 1)
			doseries(series)
			another()
			set_burst(ncellpow - 3, .2)
			another()
						
		}
	}
	use2interval=1
	for giddist=1, 1 {
		for constyle=0, 1 {
			mkmodel(ncellpow, 1000)
			set_burst(0, 1)
			doseries(series)
			another()
			set_burst(ncellpow - 3, .2)
			another()
						
		}
	}
}

// left overs to complete table
if (runs == 64) { // for 64K cores
	seq = 60
	ncellpow = log(256*8192)/log(2)	mkmodel(ncellpow, 1000)
	use2phase = 1 doseries(2)
	use2phase = 0  use2interval=0 doseries(4)
	ncellpow = log(32*8192)/log(2)	mkmodel(ncellpow, 10000)
	doseries(4)
}
if (runs == 32) { // for 32K cores
	seq = 60
	use2phase = 0  use2interval=0
	ncellpow = log(256*8192)/log(2)	mkmodel(ncellpow, 1000) doseries(4)
	ncellpow = log(32*8192)/log(2)	mkmodel(ncellpow, 10000) doseries(4)
	ncellpow = log(256*pc.nhost)/log(2) mkmodel(ncellpow, 1000) doseries(4)
	ncellpow = log(32*pc.nhost)/log(2) mkmodel(ncellpow, 10000) doseries(4)
}	

if (runs == 16) { // for 16K cores
	seq = 60
	use2phase = 0  use2interval=0
	ncellpow = log(32*8192)/log(2)	mkmodel(ncellpow, 10000) doseries(4)
	ncellpow = log(256*pc.nhost)/log(2) mkmodel(ncellpow, 1000) doseries(4)
	ncellpow = log(32*pc.nhost)/log(2) mkmodel(ncellpow, 10000) doseries(4)
	ncellpow = log(256*8192)/log(2)	mkmodel(ncellpow, 1000) doseries(3)
}	

if (runs == 8) { // for 8K cores
	seq = 60
	use2phase = 0  use2interval=0
	ncellpow = log(32*8192)/log(2)	mkmodel(ncellpow, 10000) doseries(4)
	ncellpow = log(256*pc.nhost)/log(2) mkmodel(ncellpow, 1000) doseries(4)
}	

finish()