Java编写⼀个cfd画图软件_starccm+⼆次开发与java技术
(1)
STARCCM+的⼆次开发可以采⽤向导式开发和宏命令开发等。 STARCCM+提供了整套的API及丰富的java库,即可以开发算法,也可以开发⽤户界⾯。使⽤STARCCM+向导开发包可以开发各种专⽤cfd应⽤系统,定制CFD分析流程,建⽴⾃⼰的CFD分析界⾯。在启动STARCCM+客户端界⾯后,可以加载定制的向导,按照指定的流程完成CFD仿真,其中包括:⼏何建模、⽹格划分、物理模型定义、初始条件与边界条件设置、后处理及报告定义、递交计算等完整仿真分析过程。 基于Java的STARCCM+宏命令⽅式的⼆次开发。通过宏录制,对录制的宏进⾏编辑形成最终的java命令流,通过STARCCM+客户端GUI或BATCH执⾏经过编辑的java宏,实现希望的功能,从⽽完成很多重复性⼯作,或执⾏定制的CFD分析流程。 两种开发模式都可以采⽤⽂本编辑器书写或编辑完成,然⽽有多种⼯具开发效率更⾼,⽐如java集成开发环境NetBeans。
1.STARCCM+宏⽂件的构成
Star-ccm+宏⽂件是⼀个java⽂件,后缀为*.java。⽤⽂本编辑器打开⼀个宏⽂件⾸先看到的以下⼏⾏:
// STAR-CCM+ macro: xxxx.java
/
/上⾯⼀⾏是注释⾏,说明这个⽂件是⼀个STARCCM+宏,⽂件名为xxxx.java,同时这个宏的主类名称也应该是xxxx。
package macro; //这⼀⾏说明这个宏⽂件的类属于macro源包
import java.util.*; //import⾏开头的⾏是这个宏⽂件需要的引⼊库。
import starmon.*;
import *;
import star.vis.*;
引⼊命令之后,你会看到⼀⾏:
public class xxxx extends StarMacro {
STAR-CCM+录制的宏是继承⾃StarMacro基类的完全特定的java类,这个类的声明中各部分的含义:
public:这个关键词告诉Java编译器,这个类没有访问限制。
class:这个关键词告诉Java,xxxx是⼀个类;
xxxx:是这个宏⽂件中主类的名称,它应该与这个宏⽂件的主名相同(.java后缀前的部分,⽽且是区分⼤⼩写的);
extends:也是⼀个关键词,说明这个词签名的类继承⾃这个词后⾯的类,即xxxx继承⾃StarMacro,也就是说StarMacro是xxxx的基类; (继承基类所有公共的、受保护的⽅法);
{:“{”、“}”花括号是java中的分隔符,也可以是某种功能的开始与结束标记,⽐如for循环内容、if语句的内容、函数或⽅法定义等。前⾯这个语句之后的{代表这个花括号之后的内容是⽤来定义xxxx类的,直到下⼀个匹配的“}”结束。在Starccm+的java宏⽂件中,这个主类的结束应该在最后⼀个“}”处。
主类xxxx包含⼀个调⽤⽅法ececute。所有的宏都必须包含这个⽅法,这是STARCCM+运⾏这个宏需要调⽤的⽅法:
public void execute() { //主⽅法定义开始,java宏执⾏的内容放在这匹配的{中;
public:这个关键字这个⽅法的调⽤不受限制;
void:说明这个⽅法没有返回值;
execute():这个是这个⽅法的名称,参数列表放在()中,以“,”分隔。在这个⽅法中没有参数列表,保留()之间没有内容。
{:表⽰⽅法定义开始,⾄下⼀个匹配的}结束; 在这个execute主⽅法中定义所需功能,调⽤其它公有、私有⽅法完成宏⽂件需要执⾏的功能。如:public void execute() {
try {
Simulation theSim =getActiveSimulation();
DataReader reader =new DataReader();
List listCases =FlowDetails();
DataWriter writer =new DataWriter(folder + "/");
SimRunner runner = new SimRunner(theSim);
PostProcessor postP = new PostProcessor(theSim);
for (SimData sD : listCases) {
theSim.println("Inside the loop. Running case with angle " + sD.getAngle());
runner.runCase(sD, 5);
writer.writeDataLine(sD);
postP.saveVelMagScene(folder + "/velMag" + sD.getAngle() + ".png");
postP.saveResidualPlot(folder + "/residuals" + sD.getAngle() + ".png");
postP.saveStreamlinesScene(folder + "/strlines" + sD.getAngle() + ".sce");
theSim.saveState(folder + "/train" + sD.getAngle() + ".sim");
}
}
catch (Exception e) { // 调试,创建⼀个窗⼝显⽰错误信息
JOptionPane.showMessageDialog(null, e.toString());
}
}
2. 设计java宏
利⽤宏进⾏Starccm+的⼆次开发,就是设计并实现⼀个java宏。设计java宏时最好按照以下步骤进⾏:
java可以开发什么软件定义这个宏要实现的⽬标:⽤⼀两句话说清楚,你需要⽤这个宏做什么?
编制设计这个宏的简单计划:清楚了这个宏要实现的⽬标之后就可以开始指定⼀个简单的计划。⾸先写下必要的步骤,例如通过宏设定速度为5m/s,并开始运⾏仿真;利⽤给定的⼀组参数,利⽤宏按照指定的⽅法绘制出草图,在按照指定的⽅法,⽣成实体⼏何......。这些步骤是计划的基础。接下来扩展这个计划,使其包含其它进程:⽐如从数据⽂件中提取数据、对某个重复动作执⾏循环操作、打开⼀个⾯板等。以简单⽅式写下这个计划。
计划在这个宏中需要录制哪些动作或操作:弄清楚需要录制什么,在录制的时候尽量减少不必要的操作,这样让产⽣的java代码更⼲净,⽆⽤代码更少,便于鉴别所需要的语句。另外需要考虑需要额外录制的内容,以提⾼智能化效果,⽐如后处理、参数化、仿真的保存、数据的导出等。
然后录制宏:录制需要的功能时,需要考虑清楚那些操作必须录制在内,那些则不需要考虑,这取决
于你将录制的java语句放在你最终的宏⽂件的那个位置。例如需要录制会草图的操作过程,你可以只录制绘制过程,也可从进⼊草图环境开始录制。如果最终java宏⽂件中你要放置录制代码的位置表⽰操作已经处于草图绘制环境中,你则只需要录制绘制过程,否则则需要从进⼊绘制环境开始录制,直到退出绘制环境结束。
检查你所录制的宏,出你所需要的java语句:到所录制的命令中关于图形转动、平移等屏幕操作的⽆⽤语句,删除它们!到重复操作的部分分析⼀下是否可以使⽤循环来完成它们。提取录制⽂件中有⽤输⼊的参数,是否归类?是否可以⽤⽂件来输⼊?......
确定宏的结构:可以采⽤很多种不同⽅法书写最终需要的宏⽂件,可以写得和要执⾏的⼈物⼀样复杂。你要执⾏的任务可能具有⼀定逻辑,很多任务具有相同共性或相似性,你可以将它们提炼出来(作为⼀类),并为提炼出的类指定所需要的访问⽅法等,⽐如创建、赋值、值获取等等。当然这种提炼的⽬的是:使所编写的宏更简洁明了,逻辑更强,更加模块化,具有重复使⽤等特点,当然你要为此花费⼀些时间。总之,这个⼯作不是必须的。
写出最后成型的java宏⽂件
3. Java宏⽂件中常⽤的的关键字或基本概念
Starccm+的宏⽂件是⼀个java宏命令组合。前⾯讲过,这个宏⽂件本⾝定义了⼀个与主⽂件名相同的主类,⽽这个主类继承⾃StarMacro 基类。在这个主类中还可以嵌套⾃⼰定义的,上⾯提炼出来的完成特定功能的⼦类。因此,主类中可以嵌套⼦类。
嵌套⽅法:就是在主类内部定义这个⼦类。格式:
class 外层类 {
...
...
...
class 嵌套的类 {
...
}
}成员变量:每个类中可以定义若⼲变量,属于这个类的变量就是成员变量,即:这个类的私有变量。
⽅法:属于⼀个类,实现特定功能的⼦程序叫做这个类的⽅法。
对象:类的具体实例就是这个类的⼀个对象,例如⽔果是⼀个类,苹果,梨就分别是这个类的两个对象。
实例变量:包含在对象中的变量为实例变量。
实例⽅法:包含在⼀个对象中的⽅法。例如採摘⽔果是⽔果收取的⽅法之⼀,摘桃⼦的⽅法和摘板栗的⽅法是不同的,是两种⽅法,它们是两个不同对象的⽅法,属于是两⽅法。
构造函数:构造函数通常⽤于创建⼀个新的对象。默认情况下它会为实例变量分配内存,并初始化实例变量。每个类应⾄少有⼀个构造函数,如果你没有在这个类的定义中书写构造函数,系统就会默认提供⼀个默认的构造函数。在下⾯这个例⼦中,构造函数实现了⽤输⼊参数为实例变量赋值:public class MyClass { //定义⼀个公有类
private int m_num1; //定义两个私有整形变量,即这个类的成员变量
private int m_num2;
public MyClass(int param1, int param2) { //定义这个类的构造函数,这个构造函数具有两个输⼊参数
m_num1 = param1; //利⽤输⼊参数为两个成员变量赋值
m_num2 = param2;
}
}
//注意:成员变量是私有的;构造函数与类的名字相同;
//格式不同:定义前⾯没有关键字“class”,后⾯多⼀对括号“(”、“)”--即使不含参数也需要这对括号。实例化:因为⼀个对象是⼀个类的实例,因此根据⼀个类创建⼀个对象的过程叫做实例化。就是说要创建⼀个对象,你必须实例化⼀个相关的类。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论