User Code是用户自己用编译语言(例如C,C++或Fortran)编写的函数,用来和Simcenter STAR-CCM+动态链接,实现标准界面无法完成的一些需求(比如自定义边界,自定义初始化等)。

下面我们通过将入口边界设置为层流充分发展边界这样一个简单的例子来介绍其使用方法

模型如下:

物性参数:

密度:1kg/m³

粘度:2×10-3N·s/㎡

管道层流入口充分发展满足下面的关系:

其中:

Um表示入口的平均速度

r0表示管径

User Code的编写步骤如下:

①新建一个头文件,命名为uclib.h,内容如下:

注:上面头文件的名称和格式都是固定的,照着写就行了,不要去改动

②编写User Code的源码,新建一个.c或者.cpp文件都可以,这里我们新建一个demo.cpp文件,内容如下:

说明:

上面的源码主要分为三个部分

这部分是头文件,不用多说,注意uclib.h这个头文件必须要包含,其他的都是c语言或者c++的头文件了

这部分User Code自定义函数的主体部分,格式是固定的,其格式为:

Name表示函数名,名称可以随便,只要符合c或者c++的命名规则即可。

对于返回值是标量(比如温度、压力和合速度)的时候result就写为

Real *result

这里可以将result理解为一个数组

注:数组和指针不能直接划等号。

对于返回值是矢量(比如速度的三个分量)的时候result就写为

Real (*result)[3]

这里可以将result理解为一个二维数组,(*result)[0]、(*result)[1]、(*result)[2]分别是一个一维数组,存储不同的量,比如速度三个分量就分别放在三个一维数组当中。

第二个参数size是前面result的维数,对应的单元(面单元,体单元)的数量,比如以本例来说,入口面有4263个面单元,那么这里的size就等于4263,那么这里的Real *result就相当于Real result[4263]。

而args...表示不定参数,表示后面跟的参数可能不止一个,类似printf,下图将固定格式和对应例子结合说明一下。

本例中args表示一个参数,当然后面还可以有更多的参数,比如Simcenter STAR-CCM+ 2019.2 User Guide当中就的

就跟着两个参数

args声明参数的方法和对应方式参考下表

这么声明的方法,基本上和上面的result参数理解类似,比如本例我们需要获取入口面单元的坐标信息,因为前面有size参数,在本例中这个size参数等于4263,那么这里的

CoordReal (*centroid)[3]

就相当于

CoordReal centroid[4263][3]

4263表示单元数目,后面的3表示x,y,z的索引,那么centroid[0][0]就表示第一个单元的x坐标,centroid[0][1]就表示第一个单元的y坐标,centroid[0][2]就表示第一个单元的z坐标,所以centroid[xxx][0]就表示第xxx个单元的x坐标,centroid[xxx][1]就表示第xxx个单元的y坐标,centroid[xxx][2]就表示第xxx个单元的z坐标,其他类似的理解。

当然用户自定义函数不止一个,有多少个就写多少即可

最后一部分见上图是注册用户自定义的函数,格式是固定的,格式如下:

每个用户自定义函数都需要注册,每个用户自定义函数传入的不定参数也需要注册

注册用户的自定义函数的函数格式为

ucfunc(void *func, char *type, char *name);

其中:

func是用户自定义函数的函数名,比如本例中我们的函数名为ParabolicVelocity,

type必须是

"BoundaryProfile"、

"RegionProfile"、

"ScalarFieldFunction"、

"VectorFieldFunction"

这四种当中的一种,比如本例中我们是设置边界条件,故选择BoundaryProfile

name则表示为在STAR-CCM+中模型树的Tools->User Code->libuser.dll显示名称和调用时选取的名称,比如本例中我们设置的是边界条件,那么在模型树和边界条件设置的名称就应该是这里的name,见下图

注意一下有多少个用户自定义函数就需要写多少个这样的变量注册用户自定义函数的函数

注册用户自定义函数传入的不定参数的函数格式为

ucarg(void *func, char *type, char *variable, int size);

其中:

func参数含义与上面ucfunc函数中func参数的含义是一致

type参数必须是

"Cell"、

"Face"、

"Vertex"、

这三种当中的一种,Cell表示获取体单元的属性,Face表示获取面单元的属性,Vertex表示获取点的属性。

比如本例中我们是设置边界条件,故选择Face

variable参数必须是STAR-CCM+中可用的变量,比如温度(Temperature)、矩心(Centroid)等等

最后一个参数size的写法是固定的,但是注意一下这里的size和前面用户自定义函数传入的那个size参数是不一样的,这里的size需要传入变量数组的一个元素所需的字节数,采用sizeof来计算,比如本例中sizeof(CoordReal[3]),其他的类似sizeof(Real)、sizeof(int[2])等等,注意一下用户自定义函数当中的不定参数传入了多少个参数就需要写多少个这样的变量注册函数,比如本例不定参数只传入了1个参数,所以我们就需要注册1个。

总结一下上面注册函数的内容,由于本例当中我们只编写了1个用户自定义函数,不定参数只传入了1个参数,所以们写为下面的形式

如果多个用户自定函数和不定参数传入多个参数的情况就参照Simcenter STAR-CCM+ 2019.2 User Guide当中的写法

接下来就是编译User Code

首先我们找到UserFunctions.lib

我的路径为:

然后我们再找到vcvarsall.bat

由于我安装了两个版本的vs,所以会有两个vcvarsall.bat文件,我们vs2013的路径

我们以管理员权限启动cmd

输入下面的命令

上面命令汇总一下:

"D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64

cl /MD /EHsc /DDOUBLE_PRECISION /D_WINDOWS -c *.cpp

link -dll /out:libuser.dll *.obj "D:\Program Files\Siemens\14.04.011-R8\STAR-CCM+14.04.011-R8\star\lib\win64\intel18.3vc14-r8\lib\UserFunctions.lib"

启动STAR-CCM+,新建一个项目,展开模型树的Tools,找到User Code,然后加载User Code。

其余的设置没什么难点

在边界中使用User Code

计算残差

计算完成后速度分布云图

入口速度分布

从上面的结果可以看出User Code的设置满足我们的需求

star ccm java api_STAR-CCM+二次开发——User Code相关推荐

  1. star ccm java api_Star CCM+使用Java宏实现批处理.doc

    StarCCM使用Java宏实现批处理 Star?CCM+使用Java宏实现批处理 ?????? Star ccm+是流体分析的一款神器,便捷人性化的图形用户界面讨人喜欢,窃以为这款神器有以下优势: ...

  2. java ug二次开发_使用Java进行UG二次开发:简单的例子(上) | 学步园

    最近因为要进行TeamCenter二次开发(胖客户端定制),所有要开始研究Java了.因此突发奇想为什么不能使用Java进行二次开发呢?现在对UG进行的开发以C/C++应用为主.大多数使用的是原来的U ...

  3. Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件

    一.目的 因学习需要,使用Java进行Arcgis二次开发.当前对arcgis进行二次开发使用的语言基本是C#,使用Java对Arcgis进行二次开发的很少.于是使用java在idea上进行Arcgi ...

  4. 基于Java的Arcgis二次开发所需材料

    使用ArcObjects for Java进行Arcgis10.2二次开发,可能需要的材料: 1.32位的Jdk 我使用的是jdk1.8.0_131_32 可以去官网下载,我把自己用的上传了,有需要可 ...

  5. 基于Java的Zabbix二次开发-----Zabbix的Api接口实例

    博主之前的文章配置好了Zabbix环境,正常启动Zabbix服务端,并成功监控客户端服务器的情况,如有疑问,下方传送门: centos7下安装Zabbix服务端 Windows下安装Zabbix客户端 ...

  6. java gsm短信发送_GSM java短信二次开发出现问题

    看看是否下面这个问题导致只能发送1条,第2条就提示端口被占用 前些天在弄短信猫时出现一种情况,即只能发送一条信息,再次发送时就报端口占用错误.我用的是官方提供的代码 如下: public void d ...

  7. 企业工程项目管理系统源码-专注项目数字化管理-Java工程管理-二次开发

    工程项目各模块及其功能点清单 一.系统管理     1.数据字典:实现对数据字典标签的增删改查操作     2.编码管理:实现对系统编码的增删改查操作     3.用户管理:管理和查看用户角色     ...

  8. flexpaper java 例子_Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子...

    4. Flexpaper简单使用 通过上面三章的内容,大家对Flexpaper.SWFTools应该有大概的了解了,SWF文件也已经生成了,我们开始进入Flexpaper的使用的介绍. 本章中只演示F ...

  9. 基于ARCGIS二次开发可视化开发环境搭建(JAVA)

    这两天为了搭建这么一个基于java的ArcGIS二次开发环境可着实花了一番心血.在网上搜索各种资料,大部分都是基于C#的,关于JAVA的很少,而且很杂乱,没有一个完整的.详细的.适合新手的这么一个教程 ...

  10. 基于Java的微信公众号二次开发视频教程

    课程目录 微信二次开发基础部分.avi 01-18 Java微信二次开发微信验证.wmv 01-19 Java微信二次开发智能机器人.wmv 03-04-java微信二次开发公开课-微信公众号平台.w ...

最新文章

  1. React——Flow代码静态检查
  2. Express.js 中的 Sessions 如何工作?(译)
  3. 第13章 C#中的多线程
  4. 树状数组的相关知识 及 求逆序对的运用
  5. 肾有多好人就有多年轻 男女通用的补肾秘方
  6. java 注册页面正则式_Java使用正则表达式对注册页面进行验证功能实现
  7. python中unstack_Python pandas.DataFrame.unstack函数方法的使用
  8. 设计模式系列之「工厂方法模式」
  9. 加载mySQL数据到内存_【测试验证】数据库加载到内存占用大小
  10. GEE学习总结(3)——矢量面外接矩形和外包络面绘制与矢量数据导出
  11. boot客户管理系统源码_开源 SpringBoot+vueJs 前后端管理系统模版
  12. 微信小程序云开发教程-微信小程序的API入门-常用API
  13. 换个角度认识大数据(上)——何为元数据
  14. google crx Hoxx 下载
  15. element时间组件在苹果回显无效果
  16. APP视频播放异常,非APP层导致异常基础排查
  17. php面试题狼兔,面试题总结 - 疯狂的兔子的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. android显示通知图标大全,Android推送通知:图标未显示在通知中,而是显示白色方块...
  19. eHIDS 一款基于eBPF的HIDS开源工具
  20. ArcBlock 创始人冒志鸿应邀在猎豹移动演讲

热门文章

  1. 你想象不到,3D打印技术在国外高超声速技术领域达到什么程度了
  2. 干货分享-----网站客服系统添加方法
  3. 一代经典:Xiuno(修罗程序)黯然离场......
  4. zynq平台,PS 与 PL共享内存的方法
  5. Gitee 下载与安装
  6. win2008r2 惠普g160鼠标_惠普电脑装win7键盘鼠标不能用解决方法全集(支持8/9/10代cpu usb)...
  7. 学成在线 第9天 讲义-课程预览 Eureka Feign 五
  8. 苹果推送服务(APNs)中文文档
  9. BitMap 设置图片大小
  10. 长江大学c语言期末考试题0,长江大学C语言期末考试试卷