簡體   English   中英

用 Gekko 求解偏微分方程的問題 Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM