首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gekko和CoolProp

Gekko和CoolProp
EN

Stack Overflow用户
提问于 2020-07-10 11:06:17
回答 1查看 157关注 0票数 2

我使用GEKKO和CoolProp来模拟热系统。当试图在模型方程中使用CoolProp函数(如下面所示的等熵展开所示)时,我得到了一个关于变量类型的错误消息:“必须是实数,而不是GKVariable”。有人能帮我解决这个问题吗?

代码语言:javascript
复制
from gekko import GEKKO
import CoolProp.CoolProp as CP 
#
p1 = 2e5
T1 = 300.0 + 273.15
p2 = 1e5
eta = 0.80
fluid = 'H2O'
#
h1 = CP.PropsSI('H','T',T1,'P',p1,fluid)
s1 = CP.PropsSI('S','T',T1,'P',p1,fluid)
#
m = GEKKO()
h2 = m.Var()
h2s = m.Var()
T2 = m.Var()
#
m.Equation(eta * (h1 - h2) - (h1 - h2s) == 0)
m.Equation(h2s - CP.PropsSI('H','S',s1,'P',p2,fluid) == 0)
m.Equation(h2 - CP.PropsSI('H','T',T2,'P',p2,fluid) == 0)
#
m.options.IMODE = 1  #Steady state
m.options.SOLVER = 3 # solver (IPOPT) 
m.solve(disp=False)
#
print(T2.value[0])

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-14 00:51:01

Gekko需要有CoolProp方程来执行自动微分。如果它没有等式,那么您可以使用cspline (三次样条文档)。

代码语言:javascript
复制
from gekko import GEKKO
import CoolProp.CoolProp as CP 
import numpy as np
#
p1 = 2e5
T1 = 300.0 + 273.15
p2 = 1e5
eta = 0.80
fluid = 'H2O'
# constants
h1 = CP.PropsSI('H','T',T1,'P',p1,fluid)
s1 = CP.PropsSI('S','T',T1,'P',p1,fluid)
c2 = CP.PropsSI('H','S',s1,'P',p2,fluid)
# gekko model
m = GEKKO(remote=False)
h2 = m.Var()
h2s = m.Var()
T2 = m.Var()
# build cubic spline
n = 100
T = np.linspace(373,1000,100)
h = [CP.PropsSI('H','T',Ti,'P',p1,fluid) for Ti in T]
m.cspline(T2,h2,T,h)
#
m.Equation(eta * (h1 - h2) - (h1 - h2s) == 0)
m.Equation(h2s - c2 == 0)
#
m.options.IMODE = 1  #Steady state
m.options.SOLVER = 3 # solver (IPOPT) 
m.solve(disp=False)
#
print(T2.value[0])

这就产生了解决办法:

代码语言:javascript
复制
T2 = 468.52459939
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62832981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档