If statement If2/3在Gekko有限元法中的正交配置

If statement If2/3在Gekko有限元法中的正交配置,if-statement,pde,gekko,orthogonal,collocation,If Statement,Pde,Gekko,Orthogonal,Collocation,我目前正在使用Gekko库开发一个动态热传递模型。该模型由偏微分方程组组成。如APMonitor平台所示,空间上变化的微分已离散,而时间上的微分已通过有限元法上的正交配置进行数值求解 我有两个问题: 该模型仅在空间上最多3个离散点,时间上最多30个,节点数为3。而对于节点=4,节点不遵循函数值。是什么解释了这种行为 当使用任何if2/3时,该模型均未求解。对所有类型的溶解剂进行了测试,没有一种找到了解决方案。当m.if3被m.中间产物替换时,模型正常求解。此外,如果未指定节点数,则模型最多可求

我目前正在使用Gekko库开发一个动态热传递模型。该模型由偏微分方程组组成。如APMonitor平台所示,空间上变化的微分已离散,而时间上的微分已通过有限元法上的正交配置进行数值求解

我有两个问题:

  • 该模型仅在空间上最多3个离散点,时间上最多30个,节点数为3。而对于
    节点=4
    ,节点不遵循函数值。是什么解释了这种行为

  • 当使用任何if2/3时,该模型均未求解。对所有类型的溶解剂进行了测试,没有一种找到了解决方案。当m.if3被m.中间产物替换时,模型正常求解。此外,如果未指定节点数,则模型最多可求解n=20和nt=300个点。通过添加ifs和节点,可以解释性能下降的原因是什么?模型的表述或结构是否不正确

  • 可以做些什么来改进?模型需要在至少100个时间点和
    节点=3
    进行求解

    ***我还想知道如何在另一个if2/3中使用if2/3

    这是模型的主要部分:

    将numpy导入为np
    导入数据
    从func_H导入func_H
    从func_KW导入func_KW
    从func_den导入func_fg_cpv
    从func_PG导入func_PG
    从func_CPV导入func_cpv11、func_cpv21、func_cpv31、func_cpv41、func_cpv51、func_cpv6、func_cpv7、func_cpv8、func_cpv12、func_cpv22、func_cpv32、func_cpv42、func_cpv52
    从func_CPL导入func_cpl11、func_cpl12、func_cpl21、func_cpl22、func_cpl31、func_cpl32、func_cpl4、func_cpl5、func_cpl6、func_cpl71、func_cpl72、func_cpl8、func_cpl9
    从导入函数项中的函数项
    从func_DHW导入func_DHW
    将matplotlib.pyplot作为plt导入
    从gekko进口gekko
    m=GEKKO(远程=False)
    zf=0.17
    tf=768.24
    dz=zf/n
    n=3
    nt=10
    m、 时间=np.linspace(0,tf,nt)
    nd=3
    ####################################################################################################
    u=函数条件(data.tg,data.g,data.p1,data.yi[0],data.yi[1],data.yi[2],data.yi[3],data.yi[4],data.yi[5],data.yi[6],data.yi[7],n)
    tg=[m.Var(u[0][i]),对于范围(n)内的i]
    g=[m.Var(u[1][i])表示范围(n)内的i]
    pg=[m.Var(u[2][i])表示范围(n)内的i]
    tp=[m.Var(data.tp)表示范围(n)内的i]
    y1=[m.Var(u[3][i][0]),对于范围(n)内的i]
    y2=[m.Var(u[4][i][0]),对于范围(n)内的i]
    y3=[m.Var(u[5][i][0]),对于范围(n)内的i]
    y4=[m.Var(u[6][i][0]),对于范围(n)内的i]
    y5=[m.Var(u[7][i][0]),对于范围(n)内的i]
    y6=[m.Var(u[8][i][0]),对于范围(n)内的i]
    y7=[m.Var(u[9][i][0]),对于范围(n)内的i]
    y8=[m.Var(u[10][i][0]),对于范围(n)内的i]
    对于范围(n)中的i,y=[np.数组([y1[i],y2[i],y3[i],y4[i],y5[i],y6[i],y7[i],y8[i]])
    范围(n)内的i的yt=[np.转置(y[i])]
    x1=[m.Var(data.xi[0]),适用于范围(n)内的i]
    x2=[m.Var(data.xi[1])表示范围(n)内的i]
    x3=[m.Var(data.xi[2]),适用于范围(n)内的i]
    x4=[m.Var(data.xi[3])表示范围(n)内的i]
    x5=[m.Var(data.xi[4]),适用于范围(n)内的i]
    x6=[m.Var(data.xi[5]),适用于范围(n)内的i]
    x7=[m.Var(data.xi[6]),适用于范围(n)内的i]
    x8=[m.Var(data.xi[7]),适用于范围(n)内的i]
    x9=[m.Var(data.xi[8]),对于范围(n)内的i]
    对于范围(n)中的i,x=[np.数组([x1[i],x2[i],x3[i],x4[i],x5[i],x6[i],x7[i],x8[i],x9[i]])
    ####################################################################################################
    对于范围(n)内的i,rhog=[m.Intermediate((pg[i]*(data.mmg@y[i])/(data.r*tg[i]))
    kw=[m.中间值(func_-kw(g[i],tg[i],y[i],pg[i],rhog[i]),用于范围(n)内的i)]
    对于范围(n)内的i,weg=[m.Intermediate(m.exp(-3.5+(0.0549/tg[i]))
    wg=[m.Intermediate((pg[i]*data.mmg[3]*y4[i])/(data.r*tg[i]),用于范围(n)内的i)]
    rw_f=[m.mediate(kw[i]*data.a*(weg[i]-wg[i]),用于范围(n)内的i]
    rw_m=[m.中间值(rw_f[i]*1000/18.01528),适用于范围(n)内的i]
    dhw=[m.中间值(函数dhw(tg[i],tp[i]),用于范围(n)内的i]
    qcond=[m.中间值(rw_m[i]*dhw[i]),用于范围(n)内的i]
    ##热容
    cpv1=[m.if2(tg[i]-700,func_cpv11(tg[i]),func_cpv12(tg[i]),用于范围(n)内的i]
    cpv2=[m.if2(tg[i]-500,func_cpv21(tg[i]),func_cpv22(tg[i]),用于范围(n)内的i]
    cpv3=[m.if2(tg[i]-1200,func_cpv31(tg[i]),func_cpv32(tg[i]),用于范围(n)内的i]
    cpv4=[m.if2(tg[i]-1700,func_cpv41(tg[i]),func_cpv42(tg[i]),用于范围(n)内的i]
    cpv5=[m.if2(tg[i]-1300,func_cpv51(tg[i]),func_cpv52(tg[i]),用于范围(n)内的i]
    #cpv1=[m.中间(函数cpv11(tg[i]),用于范围(n)内的i]
    #cpv2=[m.中间值(函数cpv21(tg[i]),用于范围(n)内的i]
    #cpv3=[m.mediate(func_cpv31(tg[i])表示范围(n)内的i]
    #cpv4=[m.mediate(func_cpv41(tg[i])表示范围(n)内的i]
    #cpv5=[m.中间(函数cpv51(tg[i]),用于范围(n)内的i]
    cpv6=[m.中间(函数cpv6(tg[i]),用于范围(n)内的i]
    cpv7=[m.中间(函数cpv7(tg[i]),用于范围(n)内的i]
    cpv8=[m.中间(函数cpv8(tg[i]),用于范围(n)内的i]
    cpv=[[cpv1[i]、cpv2[i]、cpv3[i]、cpv4[i]、cpv5[i]、cpv6[i]、cpv7[i]、cpv8[i]]表示范围(n)内的i
    fg_cpv=[m.中间值(func_fg_cpv(g[i],cpv[i],y[i]),用于范围(n)内的i]
    对于范围(n)内的i,h=[m.中间(func_h(g[i],tg[i],y[i],cpv[i]))
    qconv=[m.中间((data.a*h[i]*(tg[i]-tp[i]),用于范围(n)内的i)]
    对于范围(n)内的i,p=[m.中间(func_pg(g[i],tg[i],y[i],rhog[i]))
    ##热容
    cpl1=[m.if2(tp[i]-950,func_cpl11(tp[i]),func_cpl12(tp[i]),用于范围(n)内的i]
    cpl2=[m.if2(tp[i]-900,func_cpl21(tp[i]),func_cpl22(tp[i]),用于范围(n)内的i]
    cpl3=[m.if2(tp[i]-847,func_cpl31(tp[i]),func_cpl32(tp[i]),用于范围(n)内的i]
    #cpl1=[m.Intermediate(func_cpl11(tp[i])表示范围(n)内的i]
    #cpl2=[m.Intermediate(func_cpl21(tp[i])表示范围(n)内的i]
    #cpl3=[m.Intermediate(func_cpl31(tp[i])表示范围(n)内的i]
    cpl4=[m.mediate(func_cpl4(tp[i]))表示r中的i
    
     Number of state variables:    510
     Number of total equations: -  402
     Number of slack variables: -  0
     ---------------------------------------
     Degrees of freedom       :    108
     
     ----------------------------------------------
     Dynamic Control with APOPT Solver
     ----------------------------------------------
     
     Iter    Objective  Convergence
        0  1.67459E+11  1.01245E+05
        1         +Inf  1.01245E+05
     No feasible solution
     
     ---------------------------------------------------
     Solver         :  APOPT (v1.0)
     Solution time  :  1.1939000000000002 sec
     Objective      :  108000.
     Unsuccessful with error code  0
     ---------------------------------------------------
     
     Creating file: infeasibilities.txt
     Use command apm_get(server,app,'infeasibilities.txt') to retrieve file
     @error: Solution Not Found
    
    m.open_folder()
    m.solve()