def combine_global(grid,x):
""" return the global x array living on 'grid' """
comm = MPI.COMM_WORLD
nh = grid.nh
nv = grid.nv
mv = grid.mv
N = nv*mv
np = grid.np0
mp = grid.mp0
n= grid.n
m= grid.m
di,dj=n,m
di,dj=nv+2,mv+2
nv0 = di*np
mv0 = dj*mp
sizes = ones(np*mp)*N
offsets=arange(np*mp).reshape((mp,np)).ravel()*N
buff_loc=x.ravel().copy()
buff_loc[grid.msk.ravel()==0]=NaN
buff_glo=zeros(N*np*mp)
comm.Allgatherv(buff_loc,[buff_glo,sizes,offsets,MPI.DOUBLE])
I,J=meshgrid(arange(nv),arange(mv))
xglo = zeros((mv0,nv0))
for j in range(mp):
for i in range(np):
k=i+j*np
xglo[J+j*dj,I+i*di]=buff_glo[k*N:(k+1)*N].reshape((mv,nv))
return xglo
#----------------------------------------
# to check how the matrix looks like on the various grids
# interesting!
评论列表
文章目录