首页/文章/ 详情

STAR CCM+|监测值达到目标时终止计算

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
1年前浏览3364

本文描述在STAR CCM+中实现计算过程中判断监测物理量的值,并在监测值达到目标时停止计算。

前面提到在 Fluent 中监测物理量,并在物理量达到设定条件时终止计算的一些方法。STAR CCM+中也可以实现相同的操作。

还是用相同的案例来描述此过程。如图所示的几何模型,直径20 mm,长度200 mm。左侧壁面温度500 K,其他壁面为绝热。初始温度为300 K,考虑瞬态热传导,当物体内部中心点处温度为420 K时停止计算。

  • 启动STAR CCM+,新建Simulation
  • 利用菜单File → Import → Import Volume Mesh…加载网格文件cylinder.msh

1 选择物理模型

  • 右键选择模型树节点Continua > Physics 1,点击弹出菜单项Select Models...打开模型选择对话框
  • 如下图所示选择物理模型
 

注:这里选择能量方程时要小心,建议选择使用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。

2 修改材料属性

  • 双击模型树节点Continua > Physics 1 > Models > Solid > AI,打开材料属性设置对话框,如下图所示设置材料参数

3 指定边界条件

  • 双击节点Regions > Boundaries > HOTWALL,如下图所示设置其温度为500 K ,其他边界保持默认设置

4 设置监测点

  • 右键选择模型树节点Derived Parts,点击弹出菜单项New → Probe → Point打开设置对话框
  • 如下图所示设置监测点坐标

5 设置监测点

  • 右键选择模型树节点Reports,点击弹出菜单项New → User → Maximum创建新节点
 

注:这里监测的是点的数据,因此Maximum与Minimum的值是一样的,随便选择哪一个都可以。

  • 如下图所示设置新节点Maximum 1的参数
  • 右键选择模型树节点Maximum 1,点击弹出菜单项Create Monitor and Plot from Report创建监测值显示

6 求解参数

  • 选中模型树节点Solvers > Implicit Unsteady,指定参数Time Step0.05 s
  • 选中模型树节点Stopping Criteria > Maximum Physical Time,如下图所示指定参数Maximum Physical Time4.5 s

7 设置仿真操作

利用Simulation Operations控制仿真过程。基本思路为:判断监测值与目标值的差距,以此来判断是继续迭代计算还是终止计算。

 

注:此方法并未成功,尚不清楚问题出在哪里。

  • 右键选择模型树节点Tools > Simulation Operations,点击弹出菜单项 New 创建新节点
  • 如下图所示,右键选择模型树节点Operations, 点击弹出菜单项New → Conditions创建判断条件
  • 选中节点Condition,如下图所示设置判断表达式
  • 右键选择节点True,点击弹出菜单项New → Stop Simulation Operations。表示当Condition满足时(报告值>420),终止仿真计算。
  • 右键选择节点False,点击弹出菜单项New → Solve Physics
  • 选中节点Solve Physics,如下图所示设置参数Simulation ObjectsPhysics 1
  • 右键选择模型树节点Simulation Operations 1,点击菜单项Play/Resume Simulation Operations执行计算

但似乎没起作用,计算并没有在监测值达到420时终止计算。

事实上Simulation Operations是做了正确判断的,但目前不知道什么原因,其并没有执行Ture分支下的终止计算指令。更换表达式将Ture和False调换也没有用。

8 利用脚本控制流程

上面的方法不奏效,那就用java脚本进行控制,这个更简单。

两个工作:

  1. 获取监测值
  2. 判断监测值,并停止计算

脚本可以限录制,然后进行改造,改造完毕后的代码如下图所示。代码文件保存为control.java

 

注意:在读入此文件之前,需要将中文注释清除掉,否则会因为无法识别而报错。

// control.java
// Written by Simcenter STAR-CCM+ 18.04.008
package 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;
}
}
 }
}
  • 点击菜单项File → Macro → Play Macro...,打开文件选择对话框
  • 选择并打开脚本文件control.java
  • 运行结果如下图所示
  • 计算在1.8 s时刻自动终止,此时监测点的温度值为420.7122 K


(完)


来源:CFD之道

附件

免费链接.txt
Fluent材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-10-17
最近编辑:1年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2559粉丝 11235文章 732课程 27
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈