🥥Python流体动力学共形映射库埃特式流
Python | 流体动力学 | 共形映射 | 库埃特式流 | 纳维-斯托克斯方程 | Matplotlib | seaborn | Numpy
流体动力学简述
在物理学和工程学中,流体动力学是流体力学的一个分支学科,它描述了流体——液体和气体的流动。 它有几个子学科,包括空气动力学(研究空气和其他运动中的气体)和流体动力学(研究运动中的液体)。 流体动力学具有广泛的应用,包括计算飞机上的力和力矩、确定通过管道的石油质量流量、预测天气模式、了解星际空间中的星云和模拟裂变武器爆炸。
流体动力学提供了一个系统结构——它是这些实践学科的基础——它包含从流量测量得出的经验和半经验定律,并用于解决实际问题。 流体动力学问题的解决方案通常涉及计算流体的各种特性,例如流速、压力、密度和温度,作为空间和时间的函数。
共形映射简述
在数学中,共形映射是一种局部保留角度但不一定保留长度的函数。
共形映射,也称为保角映射、保角变换或双全纯映射,是一种保留局部角度的变换 $w=f^{\prime}(z)$。 解析函数在其具有非零导数的任何点上都是共形的。 相反,具有连续偏导数的复变量的任何保形映射都是解析的。 保形映射在复杂分析以及物理和工程的许多领域中极为重要。
上面的第一张图说明了规则网格的几种保形变换。 在上面的第二幅图中,常数的轮廓与变换后的对应轮廓一起显示。
保形映射对于解决工程和物理学中的问题非常宝贵,这些问题可以用复杂变量的函数来表示,但呈现出不方便的几何形状。通过选择适当的映射,分析人员可以将不方便的几何图形转换为更方便的几何图形。例如,人们可能希望计算电场 $E(z)$,它是由位于相隔一定角度的两个导电平面的角附近的点电荷产生的(其中 $z$ 是复坐标2空间中的一点)。这个问题本身很难以封闭的形式解决。然而,通过使用一个非常简单的保角映射,不方便的角度被映射到精确的 $\pi$ 弧度之一,这意味着两个平面的角被转换为一条直线。在这个新领域中,问题(计算位于导电壁附近的点电荷所施加的电场)很容易解决。
库埃特式流简述
在流体动力学中,库埃特流是粘性流体在两个表面之间的空间中的流动,其中一个表面相对于另一个表面切向移动。 表面的相对运动对流体施加剪切应力并引起流动。 根据术语的定义,在流动方向上也可能存在施加的压力梯度。
库埃特配置模拟了某些实际问题,例如地球的地幔和大气,并在轻载径向轴承中流动。它还用于粘度测定并证明可逆性的近似值。
Python库埃特式流分析方式
代码片段:
summand = sym.exp(-n*beta)*sym.coth(beta)*sym.sinh(n*(eta-alpha))
summand = summand - sym.exp(-n*alpha)*sym.coth(alpha)*sym.sinh(n*(eta-beta))
summand = (sym.cos(n*xi)/(sym.sinh(n*(beta-alpha))))*summand
Psi_ = sym.Sum((-1)**n*summand, (n, 1, m))
gamma_ = (M_*sym.coth(alpha_.subs(M, M_))).subs(F, F_)
gamma_ = float(gamma_.subs(R2, R2_).subs(R1, R1_).subs(b, abs(shift)))
eta_ = (M**2 - 2*M*(y+gamma) + x**2 + (y+gamma)**2)
eta_ = (M**2 + 2*M*(y+gamma) + x**2 + (y+gamma)**2)/eta_
eta_ = sym.ln(eta_)/2
xi_ = -sym.atan2(2*M*x, (M**2 - x**2 - (y+gamma)**2))
alphaNum = alpha_.subs(M, M_).subs(F, F_).subs(R2, R2_).subs(R1, R1_)
alphaNum = float(alphaNum.subs(b, abs(shift)))
betaNum = beta_.subs(M, M_).subs(F, F_).subs(R2, R2_).subs(R1, R1_)
betaNum = float(betaNum.subs(b, abs(shift)))
cNum = M_.subs(F, F_).subs(R2, R2_).subs(R1, R1_)
cNum = float(cNum.subs(b, abs(shift)))
velW = u.subs(A, A_).subs(B, B_).subs(Psi, Psi_)
velW = velW.subs(alpha, alpha_).subs(beta, beta_)
velW = velW.subs(M, M_).subs(F, F_)
velW = velW.subs(R2, R2_).subs(R1, R1_).subs(b, abs(shift))
velW = velW.subs(gamma, gamma_).subs(u_R, u_R_).subs(mu, mu_)
velW = velW.subs(l, l_).subs(dp, 10**5*dp_)
uwNum = sym.lambdify((xi, eta), velW.subs(m, 100))
# Geometry creation and plotting
Xi = np.linspace(-np.pi, np.pi, 200)
Eta = np.linspace(alphaNum, betaNum, 200)
Xi, Eta = np.meshgrid(Xi, Eta)
fig, ax = plt.subplots(figsize=(9, 9))
plt.pcolor(Xi, Eta, uwNum(Xi, Eta), cmap='rainbow')
# Velocity in z-plane eccentric annulus in $x$ and $y$
velZ = u.subs(A, A_).subs(B, B_).subs(Psi, Psi_)
velZ = velZ.subs(eta, eta_).subs(xi, xi_)
velZ = velZ.subs(alpha, alpha_).subs(beta, beta_)
velZ = velZ.subs(M, M_).subs(F, F_)
velZ = velZ.subs(R2, R2_).subs(R1, R1_).subs(b, abs(shift))
velZ = velZ.subs(gamma, gamma_).subs(u_R, u_R_).subs(mu, mu_)
velZ = velZ.subs(l, l_).subs(dp, 10**5*dp_)
源代码
Last updated