使用SOL操作员的示例


用Sol操作员允许您从当前模型中的任何求解器序列中提取解决方案,并在其他研究中或在后处理过程中使用。

比较两项研究之间的结果

让我们考虑一个简单的热示例。左侧温度为20ºC的正方形的稳态模拟。我们在模型中进行了两项研究。右侧温度为100ºC(研究1),温度为200ºC(研究2)。为了评估两项研究之间的温度差,我们可以使用用Sol操作员。

的基本形式用Sol操作员是:使用SOL('tag',expr), 在哪里'标签'是我们要从中提取溶液的求解器序列的标签,并且Expr是我们要评估的表达。为了能够看到标签,请确保标签模型树节点文本菜单模型构建器窗户。每个节点的标签出现在节点名称之后的卷曲括号{}中。

模型树节点文本菜单的屏幕截图,并选择了名称和标签选项。
模型树节点文本菜单,带有姓名标签启用了选项。

查看温度之间的区别研究2研究1,我们为研究2数据集创建一个图,并使用表达式t-withsol('sol1',t)

模型树的屏幕截图,突出显示了解决方案1和表面1节点,并突出显示了带有asol表达式的表面设置窗口。 模型树的屏幕截图,突出显示了解决方案1和表面1节点,并突出显示了带有asol表达式的表面设置窗口。 表达式用于A的操作员表面图节点,该节点定义了第二个研究的溶液与第一个研究溶液之间的温度差。

在此表达式中,变量t外面用Sol操作员取自研究2(带标签'sol2'),而用Sol操作员从研究1,有标签'sol1'。所得图显示了整个域之间的温度差,在两项研究中温度相同的末端的差为0。

左侧的表面设置窗口和图形窗口的屏幕截图,右侧有温度图。 左侧的表面设置窗口和图形窗口的屏幕截图,右侧有温度图。
其中一个设置表面绘图节点,其中操作员和使用,以及在图形窗户。

比较同一研究中两个参数值之间的结果

在同一研究中的两个参数之间或瞬时研究中的两次参数之间也可以比较结果。如果我们在示例中不使用两项研究,而是仅使用一项在右侧具有参数化温度的研究,那么我们可以同样找到两个温度之间的差异。但是,我们需要使用扩展的版本用Sol运算符不仅要从我们要从哪种解决方案中提取结果,还要指定哪个参数值。这次,操作员看起来像这样:

使用SOL('tag',expr,setval(par,value))

这里,'标签', 和Expr与以前相同。什么是新的setval(par,value)。运营商setval是一个常用的操作员用Sol指定哪个值参数par应该有。

左侧的模型树的屏幕截图,选择了解决方案和表面节点,右侧的表面设置窗口,表达式突出显示,并包括withsol和setVal运算符。 左侧的模型树的屏幕截图,选择了解决方案和表面节点,右侧的表面设置窗口,表达式突出显示,并包括withsol和setVal运算符。 设置其中一个的窗口表面情节节点,其中用Solsetval运算符用于表达式。解决方案研究3包含在表达中,并突出显示模型构建器窗户。


这里,t是从我们情节的设置中获取的,所以研究3和200ºC的参数值。这用Sol操作员拾取变量的值t来自同一研究(带有标签'sol3'),但是当参数温度是100ºC。这是通过设置参数的值来完成的温度到'100 [degc]'setval操作员。该图给出了与上面图相同的结果。

请注意,虽然可以通过扩展的使用来实现用Sol上面概述的操作员,还有其他更有效的选项。在比较同一解决方案内的结果时,使用表达式的AT运算符在(并使用操作员使用表达式和( ,expr)优先。由于它们不需要将解决方案从一个解决方案/XMESH映射到另一种解决方案,而只需从同一解决方案中的另一个位置读取,因此可以预期该方法更快。此外,涉及的语法被简化了,因为您不需要知道解决方案标签,也不需要使用setval操作员。

将一项研究的结果作为另一个研究的输入

在模型中路堤坝中的斜率稳定性, 这原位计算孔隙压力和重力的应力,该研究的结果用作安全系数计算的初始应力。这原位使用用Sol操作员。

模型树和设置窗口的屏幕截图,用于初始应力和应变特征。 模型树和设置窗口的屏幕截图,用于初始应力和应变特征。 设置窗口初始应力和应变功能,其中用Sol使用操作员。

还可以使用setindsetval运营商作为其他参数用Sol操作员。这些操作员与时间有关的求解器,特征值求解器,频率扫描或辅助扫描在一个或多个参数上的结果。

setind运算符索引索引到时域解决方案,或特征值列表的索引,或将索引索引到频率或任何其他参数中。正索引从开始开始,从列表的末尾开始。

例如,在使用时间域解决方案时:

使用Sol('Sol1',Expr,setInd(t,1))将返回第一个时间步长。或者,使用使用Sol('Sol1',Expr,setInd(t,'first'))

使用Sol('Sol1',Expr,setInd(t,2))将返回第二个时间段。

用Sol('Sol1',Expr,setInd(t,-2))将返回二次持续时间段。

使用Sol('Sol1',Expr,setInd(t,-1))将返回最后一个时间步长。或者,使用使用Sol('Sol1',Expr,setInd(t,'last'))

对于特征值解决方案,索引变量为兰姆达,对于频率,频率变量为弗雷克

setval相反,操作员以用户指定的值提取解决方案,并在存储的时间域解决方案之间进行插值。例如:

使用Sol('Sol1',Expr,SetVal(t,0.5))将在0.5秒的时间返回溶液。如果在此时间步中没有存储的数据,则将解决方案从最近存储的时间段插值。如果将时间衍生物存储在下面的屏幕截图中,则这种插值将使时间衍生物的使用情况使用时间依赖性求解器。如果有时间衍生物,则使用HERMITE插值,否则使用线性插值。如果指定了时间范围之外的值,则使用最近的时间步(第一个或最后)。

与时间相关的求解器的设置窗口。设置窗口的“输出部分”进行扩展,以显示可用的选项。
时间依赖性求解器设置,默认选项是存储时间导数。

当与特征值解决方案结合使用时,SetVal运算符将返回在实际特征值的公差范围内的溶液。例如:
Withsol('sol1',expr,setval(lambda,-100i))即使特征值实际上为-100.01i,也会返回解决方案。

当与频率扫描或辅助扫描一起使用时,必须指定频率或参数的确切数值。如果扫描多个频率和/或参数,则可以将多个参数传递给setVal以及setInd,以使语法更加紧凑。例如:
Withsol('sol1',expr,setval(freq,60,param,5))等同于Withsol('sol1',expr,setVal(freq,60),setval(param,5))

使用SOLSOL操作员的使用更高级

以更高级使用的示例用Sol操作员,请参阅模型支架 - 一般周期性动态分析。您可以在以下文件中的应用程序库中的结构力学模块的教程中找到它:

  • bracket_general_periodic.mph
  • models.sme.bracket_general_periodic.pdf

在该模型中,用Sol操作员用于从一项研究中提取频率的载荷,并将其用作第二项研究中相应频率的输入。


提交有关此页面的反馈或联系支持