iterator pcitr() {local i1, i2, si
	// whole cell gids exist
	// after read_wholecell_info(prefix) is called and are in
	// gidvec
	for i1=0, gidvec.size-1 {
		i2 = gidvec.x[i1]
		$&1 = i1
		$&2 = i2
		iterator_statement
	}
}

proc read_wholecell_info() {local i, gid, icell, ncell, ihost, nhost \
  localobj s, f
	gidvec = new Vector()
	s = new String()
	sprint(s.s, "%s.%d.dat", $s1, pnm.nhost)
	f = new File()
	if (f.ropen(s.s) == 0) {
		execerror("could not open", s.s)
	}
	if (pc.id == 0) { printf("gids from %s\n", s.s) }
	f.scanvar() // skip msgid
	nhost = f.scanvar()
	for i=0, nhost - 1 {
		ihost = f.scanvar()
		if (ihost != pnm.myid) {
			f.gets(s.s)
			continue
		}
		ncell = f.scanvar()
		for icell = 0, ncell - 1 {
			f.scanvar() // skip the index
			gid = f.scanvar()
			f.scanvar() // skip the 0
			pc.set_gid2node(gid, pc.id)
			gidvec.append(gid)
		}
		break
	}
	f.close()
}