def decompose(n, p):
p_primes = primes(p)[::-1]
procs = np.array([1,1,1])
n_tmp = np.copy(n)
for fac in p_primes:
while (np.any(n_tmp > 0)):
cpmax = np.argmax(n_tmp)
cmax = np.amax(n_tmp)
if (cmax % fac == 0):
n_tmp[cpmax] /= fac
procs[cpmax] *= fac
break
else:
n_tmp[cpmax] = -n_tmp[cpmax]
if np.all(n_tmp < 0):
print "!! decomposition does not work out... ", fac, n_tmp
sys.exit()
n_tmp = np.abs(n_tmp)
print " - decomposition: resulting proc decomposition ", procs, " local mesh size ", n_tmp
return procs[0], procs[1], procs[2]
评论列表
文章目录