[英]Problem on solving Partial Differential Equations with Gekko Python
我在嘗試求解下面附帶的偏微分方程時得到了一個收斂解。
在我的代碼中,我想通過積分 2 pi r*v(r)*dr 來計算隨時間變化的體積流量。 我在代碼 m.GEKKO() 中使用 scipy.integrate.trapz 來解決這個問題。
我想要一張 Qgap 與時間的關系圖。 當我執行代碼時,我在解決方案中獲得了一個 Qgap 值。
請幫我。
所有的細節都可以通過 Sujuan Jiao 等人的這篇文章<<用剪切稀化流體對液壓阻尼器進行建模以進行阻尼機制分析>> 輕松找到。
速度分布由 r1 和 r1+delta 之間的空間中的 100 個點離散化,其中 BC 在 r1=u(活塞速度)處,在壁處為 0。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
amp=10e-2
freq=10
tf = 2/freq
omega=2*np.pi*freq
npt = 101
time = np.linspace(0,tf,npt)
xglob=amp*np.sin(omega*time)
uglob=amp*omega*np.cos(omega*time)
delta=0.007
npx=100
dx=np.float32(delta/npx)
r1=0.01
r2=0.004
xpos = np.linspace(r1,r1+delta,npx)
Ap=np.pi*(r1**2-r2**2)
rho=850
beta=5e8
L=0.06
l=0.01
pressf=12*amp*0.707*uglob\
*np.cos(2*np.pi*freq*time)/(delta**2)\
*630*(1+(0.05*(0.707*uglob/delta)**2))**(-0.23)
m = GEKKO()
def Q(r,v):
Q=(2*np.pi*r*np.transpose(np.array(v)))
return scipy.integrate.trapz(Q,r)
m.time = time
t=m.Param(m.time)
x=m.MV(ub=amp+1)
x.value=np.ones(npt)*xglob
u=m.MV(ub=10)
u.value=np.ones(npt)*uglob
pf=m.MV(lb=20)
pf.value=np.ones(npt)*pressf
u1=[m.Var(1) for i in range(npx)]
p1=m.Var(800000)
p2=m.Var(800000)
Qgap=Q(xpos,u1)
m.Equation(u1[0].dt()==-1*(p1-p2+pf)/l \
+ ((630 * (1+(0.05*((u-u1[0])/dx))**2)**(-0.23))/rho)\
*((u-2*u1[0]+u1[1])/(dx*dx)))
m.Equations([(u1[i].dt()==-1*(p1-p2+pf)/l \
+ ((630 * (1+(0.05*((u1[i+1]-u1[i-1])/(2*dx)))**2)**(-0.23))/rho)\
*((u1[i+1]-2*u1[i]+u1[i-1])/(dx*dx))) for i in range(1,npx-1)])
m.Equation(u1[-1].dt()==-1*(p1-p2+pf)/l \
+ (((630 * (1+(0.05*((u1[-1]-0)/dx))**2)**(-0.23)))/rho)\
*((u1[-2]-2*u1[-1]+0)/(dx*dx)))
m.Equation(p1.dt()==(beta/(Ap*(L-x)))*(-Qgap+Ap*u))
m.Equation(p2.dt()==(beta/(Ap*(L+x)))*(Qgap-Ap*u))
# simulation
m.options.IMODE = 4
m.options.solver=1
m.options.nodes=3
m.solve(disp=True)
雖然問題成功解決:
Iter Objective Convergence
50 6.52927E-21 1.43369E-03
Successful solution
---------------------------------------------------
Solver : APOPT (v1.0)
Solution time : 36.8693000000021 sec
Objective : 0.000000000000000E+000
Successful solution
---------------------------------------------------
它沒有使用 Gekko model 內部的scipy.integrate.trapz()
function。Gekko 構建了一個符號 model。請參閱gk0_model.apm
中的m.path
或使用m.open_folder()
打開運行文件夾。
在 gekko 中有一個m.integral()
function,但它是在時間上積分的。 您可能需要以 Gekko 方程形式寫出 配置方程或積分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.