近日学习模型时遇到了几个算子,把学习日记记录在此处。原表达式为:withsol(‘cpsol1’,solid.cp1.sigmatmp6,setval(loadcase,6))
withsol的使用
在网络上查找了一圈,没找到太多描述,官网的描述为“访问任意解的算子, withsol 是算子 with 和 at 的更通用形式,可以用来在模型中访问任意解,既可以在求解过程中使用,也可以用于后处理。”
在researchgate上看到了一则帖子(https://www.researchgate.net/post/How_to_use_withsol_in_COMSOL)
提问者想要使用withsol算子来调用解1里的变量用于解2中的计算withsol(‘sol1’,solid.eXX),但是软件确报错。
回答者所提到的geometry是否相同,如果所用几何发生变化那么将无法使用。
这里的应用比较简单,格式也简单,即withsol是用于调取某一个解的变量值的。使用方式为:withsol(‘解标签’, 变量名)
再看看help文档中给出的几个例子
(1)withsol(‘sol1’,expr) ,刚刚说过了的那种,跳过;
(2)**某一时间步值调用。**若使用瞬态求解器, withsol(‘sol1’,expr) 调用的是最后一个时间步的变量值。如果想要调用任意时间步,则可以写成 withsol(‘sol1’,expr,setval(t,0.5)) 或者 withsol(‘sol1’,expr,setind(t,3)) ,一个用的是setval,表示使用时间0.5是插值函数获得的,而setind调用的则是存储时间步3。
(3)特征值求解, withsol(‘sol1’,expr) 默认计算第一特征值。其它特征值调用可用withsol(‘sol1’,expr,setind(lambda,2)) 评估第二特征值。
(4)参数化扫描步调用。对参数p进行参数化扫描, withsol(‘sol1’, expr) 调用的是最后一个扫描步. 对特定扫描步调用则可以使用表达式。withsol(‘sol1’,expr,setval(p,4)) 或withsol(‘sol1’,expr,setind(p,2)) 。
(5)载荷组调用。withsol(‘sol2’,truss.Sn,setval(loadcase,1)).当当当,找到了最初我想要知道的那个表达式的解读
setind与setval
其实到这里也基本知道了这两个算子干啥的,不过还是要看看官方定义
官方解释为:setind和setval可被用于指定参数索引。对于多个参数(例如p和q)的参数扫描,setval和setind可以以任意组合方式用于两个参数-例如,withsol(‘sol1’, expr, setind(p, 2, q, 3)) 或withsol(‘sol1’, expr, setind(p, 2), setvar(q, 5))
setind中可以使用负索引,此时从尾算起。例如,在与时间有关的求解器中,withsol(‘sol1’, expr, setind(t, -2)) 表示提取倒数第二个时间步。
第一个索引和最后一个索引的替代表示法是setind(p, ‘first’) 和setind(p, ‘last’)。