本文描述在STAR CCM+中实现计算过程中判断监测物理量的值,并在监测值达到目标时停止计算。
前面提到在 Fluent 中监测物理量,并在物理量达到设定条件时终止计算的一些方法。STAR CCM+中也可以实现相同的操作。
还是用相同的案例来描述此过程。如图所示的几何模型,直径20 mm,长度200 mm。左侧壁面温度500 K,其他壁面为绝热。初始温度为300 K,考虑瞬态热传导,当物体内部中心点处温度为420 K时停止计算。
注:这里选择能量方程时要小心,建议选择使用Coupled Solid Energy。若选择使用Segregated Solid Energy,需要足够多的内迭代次数,否则计算出来的结果和Coupled Solid Energy及Fluent计算的结果相差巨大。利用Coupled Solid Energy或Fluent进行计算得到1.8 s时监测点达到420K,但Segregated Solid Energy在内迭代次数设置为40 时,得到的结果为2.25 s才能达到420 K。当内迭代次数减少时,Segregated Solid Energy方法计算结果显示需要的时间更多,如使用默认内迭代次数5时,需要9.9 s,显然是错误的。而Coupled Solid Energy在内迭代次数为5 时,依然能够计算得到1.8 s时刻监测点达到420。 ”
注:这里监测的是点的数据,因此Maximum与Minimum的值是一样的,随便选择哪一个都可以。 ”
利用Simulation Operations控制仿真过程。基本思路为:判断监测值与目标值的差距,以此来判断是继续迭代计算还是终止计算。
注:此方法并未成功,尚不清楚问题出在哪里。 ”
但似乎没起作用,计算并没有在监测值达到420时终止计算。
事实上Simulation Operations是做了正确判断的,但目前不知道什么原因,其并没有执行Ture分支下的终止计算指令。更换表达式将Ture和False调换也没有用。
上面的方法不奏效,那就用java脚本进行控制,这个更简单。两个工作:
脚本可以限录制,然后进行改造,改造完毕后的代码如下图所示。代码文件保存为control.java
。
注意:在读入此文件之前,需要将中文注释清除掉,否则会因为无法识别而报错。 ”
// control.java// Written by Simcenter STAR-CCM+ 18.04.008package macro;import java.util.*;import star.common.*;import star.base.report.*;public class control extends StarMacro { public void execute() { execute0(); } private void execute0() { Simulation simulation_0 =getActiveSimulation(); Solution solution_0 =simulation_0.getSolution(); solution_0.initializeSolution(); while(true){//获取report的值。这里report的名称为Maximum 1,与软件中定义的名称保持一致 MaxReport maxReport_0 = ((MaxReport) simulation_0.getReportManager().getReport("Maximum 1")); double maxTemp = maxReport_0.getReportMonitorValue();//将获取的监测值与目标值进行比较if(maxTemp <= 420){//若监测值小于420,则迭代计算simulation_0.getSimulationIterator().step(1);}else{//超过420则终止迭代计算simulation_0.getSimulationIterator().stop(); simulation_0.println("Reach target value, stop iteration!");//break用于跳出循环,非常重要break;}} }}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删