【问题标题】:Gekko and CoolPropGekko 和 CoolProp
【发布时间】:2020-07-10 11:06:17
【问题描述】:

我正在使用 GEKKO 和 CoolProp 进行热系统仿真。当尝试在模型方程中使用 CoolProp 的函数时(如下所示的等熵展开),我收到关于变量类型的错误消息: “必须是实数,而不是 GKVariable”。 有人可以帮我解决这个问题吗?

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])

提前致谢。

【问题讨论】:

    标签: implicit gekko


    【解决方案1】:

    Gekko 需要有 CoolProp 方程来执行自动微分。如果它没有公式,那么您可以使用cspline (cubic spline documentation)。

    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])
    

    这产生了解决方案:

    T2 = 468.52459939
    

    【讨论】:

    • 赫登仁教授,非常感谢。这样就解决了问题。最好的问候。
    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多