我试图计算二维流的流函数,给定x和y速度分量。我使用流函数的定义:
我按照建议的here尝试了这个方法,它基本上建议你整合一行v组件,在所有地方集成u组件,并将它们相加(如果我理解正确的话)。在
这是我的代码:
from scipy import integrate
import numpy
# make some data
y=numpy.linspace(0,10,40)
x=numpy.linspace(0,10,50)
X,Y=numpy.meshgrid(x,y)
# a velocity field that is non-divergent
u=3*Y**2-3*X**2
v=6*X*Y
# integrate
intx=integrate.cumtrapz(v,X,axis=1,initial=0)[0]
inty=integrate.cumtrapz(u,Y,axis=0,initial=0)
psi1=-intx+inty
intx2=integrate.cumtrapz(v,X,axis=1,initial=0)
inty2=integrate.cumtrapz(u,Y,axis=0,initial=0)[:,0][:,None]
psi2=-intx2+inty2
psi=(psi1+psi2)/2.
u2=numpy.gradient(psi,axis=0)
v2=-numpy.gradient(psi,axis=1)
dx=numpy.gradient(X,axis=1)
dy=numpy.gradient(Y,axis=0)
u2=u2/dy
v2=v2/dx
我的问题是重新计算的v2
和{u2
和{
回答自己:
我想这可能会变得更复杂,但这里是一个尝试,来解决一个流函数+一个速度势,目的是最小化输入
u
,v
与重构的输入之间的差异。在(匆忙上传,会回来重新格式化公式)。在
其他注意事项:
由于卷积使用的是一个极小的核(2x2),一种特殊形式的卷积可能比
fftconvolve
快,参见比较here,和{a2}。在当网格不均匀时(例如高斯网格上的风数据),将不得不处理不均匀的网格大小。我想出了一个脚本,它使用netcdf格式(通过CDAT模块)计算风数据,请参见here。欢迎反馈。在
相关问题 更多 >
编程相关推荐