X=40
Y=30
Z=20
P = zeros((X,Y, Z),"float64")
Ux = zeros((X+1,Y, Z),"float64")
Uy = zeros((X,Y+1, Z),"float64")
Uz = zeros((X,Y, Z+1),"float64")
などとして,連続の式,壁面境界の粒子速度更新,運動方程式は
Ux[1:X,:, :]=Ux[1:X,:, :]-dt/Ro/dx*(P[1:X,:, :]-P[:X-1,:, :])
Uy[:,1:Y, :]=Uy[:,1:Y, :]-dt/Ro/dy*(P[:,1:Y, :]-P[:,:Y-1, :])
Uz[:, :, 1:Z]=Uy[:, :1:Z]-dt/Ro/dz*(P[:, :, 1:Z]-P[:, :, Z-1])
Ux[0,:, :]=P[0,:, :]/-Z
Ux[-1,:, :]=P[-1,:, :]/Z
Uy[:,0, :]=P[:,0, :]/-Z
Uy[:,-1, :]=P[:,-1, :]/Z
Uz[:, :,0]=P[:, :,0]/-Z
Uz[:, :,-1]=P[:, :,-1]/Z
P[:X,:Y,:Z] = P[:X,:Y,:Z]-K*dt/dx*(Ux[1:X+1,:]-Ux[:X,:,:]) \
-K*dt/dy*(Uy[:,1:Y+1, :]-Uy[:,:Y,:])\
-K*dt/dz*(Uz[:,1,:,Z+1]-Uy[:,:,:Z])
などとすればよいでしょう。動作確認はしていません。
3次元になると安定条件が厳しくなります。CFL数(クーラン数)をもとめて,適切な時間ステップで計算してあげてください。