Andrew Moa Blog Site

使用VSCode调试STAR-CCM+宏

前面讲过STAR-CCM+宏文件的录制和编写,宏文件的本质就是java文件,因此可以用java编程的方法来对它进行开发和调试。如果涉及到复杂的业务场景,需要增加额外的功能,程序本身比较复杂,很难等到整个程序编写完成后再对它进行测试,免不了要在开发过程中进行调试。官方文档采用的开发工具是古早版本的NetBeans,很多功能已经发生变化,加之官方文档描述过于简略,大多数人阅读完后对于STAR-CCM+的调试过程还是一头雾水。VSCode 作为新兴IDE的佼佼者,不仅可以通过拓展支持java编程,还可以通过copilot 拓展集成强大的AI编程能力,本文便采用VSCode演示一下STAR-CCM+宏文件的调试过程。

1. VSCode配置

首先要在VSCode中安装支持java的拓展,至少要安装下面几个:

  1. Language Support for Java(TM) by Red Hat
  2. Debugger for Java
  3. Project Manager for Java

也可以直接安装这个拓展包,一次性把所有需要用到的java拓展都装齐了:Extension Pack for Java

下载一个JDK并安装,如果不想下载JDK的话,也可以在STAR-CCM+安装路径中找到安装包附带的JDK,把它添加到环境变量中。

53d9d7c07aca055269657c5ccf18a81f.png

2. 建立java项目

在VSCode命令面板(Ctrl+Shift+P)中输入Java: Create Java Project,创建一个新的java项目。

56a3e9ec89aa1f165d0bbf43818f8843.png

项目类型选择No build tools

e3fe06a5c9f45db8e2bb95dd2229afb3.png

阅读时长1分钟
Andrew Moa

STAR-CCM+宏文件录制和编写

STAR-CCM+宏本质上就是一个java文件,语法和普通的java没有什么区别。使用宏可以帮助我们简化处理过程,尤其是一些重复的流程性的操作。通过编写宏文件完成一些流程操作可以极大地解放人力资源,甚至可以在求解过程中完成某些特定的操作。

1. 录制宏

STAR-CCM+宏本质就是分析过程中的各种操作命令的集合,与其从头开始讲解复杂繁琐的java语法+API,不如直接从工程问题上手。

STAR-CCM+宏操作的入口在左上角工具栏里,从左到右依次是“播放宏”、“开始录制”、“暂停录制”和“停止录制”按钮,相关操作选项也可以在“文件”菜单中找到。

8eb213bb22b885f81c06dcdb3eedd943.png

点击“开始录制”会弹出对话框,提示宏的保存位置。如果过程中用到一些场景化的图形操作,可以勾选上“包括图形命令”;但一般情况下不建议勾选,尤其是涉及到超算提交的场合。

07127786a188bff13345a15a58d3e7e4.png

接下来就可以在输出窗口中看到录制java过程的代码,此时可以正常地执行分析操作,STAR-CCM+会把相关操作转换成对应的java代码,并显示在输出窗口中。

51fce847b53231bf3cda774399192e37.png

当分析操作完成后点击“停止录制”,可以在输出窗口中看到完整的java代码,同时该代码也被保存到java文件中。

下面是录制的宏代码示例,作用是将原有网格清除并重新划分体网格。

// Simcenter STAR-CCM+ macro: reGenerateMesh.java
// Written by Simcenter STAR-CCM+ 19.06.009
// 上面两行注释是录制时生成的,记录保存宏的文件名、STAR-CCM+版本信息
package macro;

import java.util.*;

import star.common.*;
import star.meshing.*;

// 类名和文件名要一致
public class reGenerateMesh extends StarMacro {

  //这个函数是整个宏的入口	
  public void execute() {
    execute0();
  }

  //这个函数执行网格清除和划分操作
  private void execute0() {

    Simulation simulation_0 = 
      getActiveSimulation();

    MeshPipelineController meshPipelineController_0 = 
      simulation_0.get(MeshPipelineController.class);

	//清除原来的网格
    meshPipelineController_0.clearGeneratedMeshes();

	//生成体网格
    meshPipelineController_0.generateVolumeMesh();
  }
}

具体代码的作用可以查看STAR-CCM+的帮助文件,不过大部分的API的命名都比较直观,根据其命名也能推测出来。

3f50c712cf6d83b26df0cd1ea4f56c30.png

阅读时长2分钟
Andrew Moa

PowerShell编写STAR-CCM+自动排队计算脚本

以前用STAR-CCM+在Windows工作站做计算的时候(没钱,公司舍不得上超算……),有时候一晚上要提交十几二十个计算任务(瞎卷ㄟ( ▔, ▔ )ㄏ),当然不可能十几个任务全都一起跑(机器遭不住),也不可能全程盯着它跑一个个手动提交(人遭不住)。几年前用PowerShell编写了这个简易的排队计算的模板,在这里分享给大家。

$title = "STAR-CCM+ 19.06.009-r8"	# 窗口标题,怎么填随你喜欢
$host.ui.RawUI.WindowTitle = $title

$STARCCM_PATH = "D:\XXX\Siemens\19.06.009-R8\STAR-CCM+19.06.009-R8\star\lib\win64\clang17.0vc14.2-r8\lib"	# 填写本机STAR-CCM+的安装绝对路径
$env:path += ";$STARCCM_PATH"
$run_dir = $pwd
$thread_number = 32	# 填写本机的CPU核心数

$Array = Get-ChildItem -Path $run_dir -Name "*.sim"
$n = 0

foreach($item in $Array)
{
    $n += 1
    $sub_dir = $n.ToString() + "_" + $item.Substring(0,$item.Length-4)
    mkdir $sub_dir
    mv $item $sub_dir
    cd $sub_dir
    $host.ui.RawUI.WindowTitle = $title + " - " + $item + " - " + $n + "/" + $Array.Count
    $log = $item + ".log"
    starccm+ $item -batch run -np $thread_number -mpi ms | tee $log
    cd $run_dir
}

把以上命令行以文本格式保存为.ps1脚本文件,和要提交计算的.sim文件放到同一个文件夹,然后通过终端运行这个脚本。会自动统计排队任务数,将计算的.sim文件转移至新建子文件夹,同时生成.log日志文件,也可以在输出窗口中监控运行情况。计算完成后关闭终端即可。

美中不足的是,不支持宏文件,也不支持临时增加或插入算例。

各位可以针对自己的情况,做一些针对性的调整。

如果碰到输出窗口和日志文件中有乱码的情况,多半是你的PowerShell不支持UTF-8所导致。参考以下方法1,在PowerShell窗口中输入:

# 配置文件一般位于:C:\Users\用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
# 如果没有就新建一个
notepad $PROFILE # 编辑配置文件

在配置文件中增加以下内容,保存退出:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
阅读时长1分钟
Andrew Moa