【发布时间】:2018-03-14 08:20:51
【问题描述】:
在模拟一个相当复杂的稳态模型以模拟多回路制冷剂系统时,我收到了来自 Dymola 的以下警告消息。
以下变量是初始化问题的迭代变量: initChillerCircuit2.InitCycleArray[20]
但它们没有被赋予任何明确的起始值。将使用零。
我正在寻求正确语法方面的帮助来设置此变量的起始值,因为该值是从函数 (Init_ChillerCircuit) 返回到参数数组 (InitCycleArray) 中的。
final parameter Real InitCycleArray[:]=Init_ChillerCircuit(
vleInitRecord,
liquidSelector,
specifiedLiquidTIn,
specifiedLiquidTOut,
specifiedLiquidVdot,
liquidTInIsSpecified,
liquidTOutIsSpecified,
liquidVdotIsSpecified,
specifiedGasTIn,
estimatedGasVdot,
liquidHXEffectiveness,
gasHXEffectiveness,
subcoolerEffectiveness,
suctionPressureLoss,
suctionSuperheat,
dischargePressureLoss,
isentropicEfficiency,
specifiedCapacity,
isCooling);
如果可能的话,我不清楚如何设置数组中单个元素的起始值。我希望类似下面的行,但语法不正确。
final parameter Real InitCycleArray[:](start[20] = 1) = Init_ChillerCircuit(...);
我能想到的最好方法是为所有输出结果分配起始值,但这在我的场景中是有问题的。
final parameter Real InitCycleArray[:](start = {if i==20 then 1 else 0 for i in 1:33})=Init_ChillerCircuit(...);
上面的语法分配了所有的起始值,编译正常,但是为输出数组中的每个元素分配适当的起始值是困难的。
欢迎提出任何建议!
【问题讨论】:
-
如果 InitCycleArray[20] 的初始值可以在不过度约束您的方程系统的情况下固定,您可以使用“InitCycleArray[20] = initial_value”添加代码的“初始方程”部分/跨度>
-
不幸的是它无法修复。该值是迭代计算的结果,因此不能直接先验地知道,并用作时间 t=0 时非线性解的起始值。
-
你不能使用
final parameter Real InitCycleArray(start = Init_ChillerCircuit(…));我想这应该给你最好的起始值,因为它似乎是为此创建的函数。我仍然有点困惑,参数的起始值是迭代的一部分。
标签: modelica dymola openmodelica