很多朋友在开发Fluent模型中需要用UDF获取组分传输模型中的某气体组分的摩尔分数(或体积分数)或者分压力,但是UDF自带的只有获取质量分数的宏C_YI(c,t),需要自己写额外的代码去转换,有一定难度。已经不止一次看到论坛或者我们UDF编译调试插件群里的朋友问起这个问题,这里做个标准教程记录下来,希望对大家有用。

总体来说,有两种方法,一种是利用内置的函数来转换,另外一种就是自己写代码转换,这里逐一介绍。

1. 利用内置函数转换

内置转换方法参考了Fluent官方解决方案,稍微作了一些修改,并加了一些注释(利用VC++ UDF Studio插件编译通过)。

//利用VC++ UDF Studio插件编译通过
#include "udf.h"
#define CO2_INDEX 2   //假设你想获取CO2的摩尔分数,且CO2的序号为2,case不同可能有所不同
#define ZONE_ID 4     // 4是要汇报的区域ID,case不同可能有所不同DEFINE_EXECUTE_AT_END(report_CO2_Pressure)
{   cell_t c;Domain*domain= Get_Domain(1);  //获取计算域指针Material *mix_mat = mixture_material(domain); //获取气体混合物材料属性  Thread*tc=Lookup_Thread(domain, ZONE_ID);begin_c_loop(c,tc){int i = -1;  //循环的组分序号Material *spe_mat = NULL;   //定义组分材料属性real all_mass_fracts[MAX_SPE_EQNS];  //需要用户自己填充的各气体组分质量分数的数组real all_mole_fracts[MAX_SPE_EQNS];  //内置函数转换得到各气体组分摩尔分数的数组,待填充   mixture_species_loop(mix_mat, spe_mat, i)  //对混合物内所有组分循环{all_mass_fracts[i] = C_YI(c,tc,i);  //将各个组分的质量分数填充进数组}Mole_Fraction(mix_mat, all_mass_fracts, all_mole_fracts);  //调用自带函数由质量分数转为摩尔分数//填充到all_mole_fracts数组real co2_mole_fract= all_mole_fracts[CO2_INDEX];  //根据CO2序号获取摩尔分数real Pressure_CO2=C_P(c,tc)*co2_mole_fract;  //获取CO2分压力Message0("c=%d, CO2 partial pressure=%g\n", c, Pressure_CO2);}end_c_loop(c,tc);
}

有的朋友可能会问,那组分的序号该怎么确定呢?这需要打开组分面板,然后查看各个组分的排列,排第一个的序号是0,后面依次加1,CO2数下来就是2。当然高级一些,也可以用UDF程序自动实现,但这属于另外的话题,这里不啰嗦了。做学术研究,大家手动数一下,编译之前在源代码改一下也不麻烦。

2. 自己写代码转换

第一种方法虽然方便,但会分配两个元素个数为MAX_SPE_EQNS(fluent中大小为50)的数组,而实际组分数量一般也就十个以下,多少会浪费一些内存空间,对于我这种有强迫症的人还是觉得不爽,于是就自己动手写代码转换。

//利用VC++ UDF Studio插件编译通过
#include "udf.h"
#define CO2_INDEX 2   //假设你想获取CO2的摩尔分数,且CO2的序号为2,case不同可能有所不同
#define ZONE_ID 4     // 4是要汇报的区域ID,case不同可能有所不同DEFINE_EXECUTE_AT_END(report_CO2_Pressure)
{   cell_t c;Domain*domain= Get_Domain(1);  //获取计算域指针Material *mix_mat = mixture_material(domain); //获取气体混合物材料属性  Thread*tc=Lookup_Thread(domain, ZONE_ID);begin_c_loop(c,tc){int i;real Mw_CO2; //CO2的分子量real total_mole=0;Material *spe_mat = NULL;   //定义组分材料属性mixture_species_loop(mix_mat, spe_mat,i)  //对混合物内所有组分循环{real Mwi=MATERIAL_PROP(spe_mat,PROP_mwi);   //混合物中组分的分子量,循环中可变if(i==CO2_INDEX) Mw_CO2=Mwi;  // 获取CO2的分子量total_mole += C_YI(c,tc,i)/Mwi;   // 所有组分求和}real co2_mole_fract=(C_YI(c,tc,CO2_INDEX)/Mw_CO2)/total_mole;  //直接用质量分数转摩尔分数公式转换real Pressure_CO2=C_P(c,tc)*co2_mole_fract;  //获取CO2分压力Message0("c=%d, CO2 partial pressure=%g\n", c, Pressure_CO2);}end_c_loop(c,tc);
}

好了,这下世界终于清净了。哈哈,开个玩笑!

上述就是获取气体摩尔分数(体积分数)或分压力的两种方法。

附上我的case中的运行结果

Fluent UDF 获取组分传输模型中的摩尔分数或分压力相关推荐

  1. Fluent UDF中根据zone的名字获取ID

    Fluent UDF中根据zone的名字获取ID Fluent UDF中经常用到thread*类型的指针,一般可以通过如下函数来获取. Lookup_Thread(Domain*domain, int ...

  2. Fluent UDF中调用变量的梯度及其注意点

    Fluent UDF中有时候需要调用变量的梯度,例如温度梯度,压力梯度,VOF梯度等等,一般是在C_T,C_P,C_VOF后面加上"_G"来获取,例如C_T_G,C_VOF_G.看 ...

  3. Fluent UDF 根据给定点坐标获取cell

    很多朋友在开发Fluent模型中需要根据点的坐标来查找对应的cell.总体来说,有两种方法,一种是利用内置的函数来查找,另外一种就是自己写代码查找,这里逐一介绍. 1. 利用内置函数查找 Fluent ...

  4. AI Earth 深度学习模型替换数值天气预报模型中的参数化方案-大气辐射传输方案

    1.背景 太阳辐射和热辐射是大气和海洋运动的最根本的驱动力.大气辐射传输过程实际上已经可以通过一种叫做LBLRTM的辐射模型精确计算,但是LBLRTM模型同时也最为耗时.因此,有各种各样的辐射传输参数 ...

  5. R语言构建xgboost模型:指定特征交互方式、单调性约束的特征、获取模型中的最终特征交互形式(interaction and monotonicity constraints)

    R语言构建xgboost模型:指定特征交互方式.单调性约束的特征.获取模型中的最终特征交互形式(interaction and monotonicity constraints) 目录

  6. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)

    thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...

  7. tensorflow 如何获取模型中想要的张量

    当我们想要改造或者利用某一预训练模型来完成一些其它任务时,一个常用且必备的操作是从指定模型中获取到我们感兴趣的张量(tensor). 例如我想使用一个已经训练好的CNN模型中间的某一层的结果作为特征向 ...

  8. 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...

    本文实例讲述了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法.分享给大家供大家参考,具体如下: HTTP请求中,如果是get请求,那么 ...

  9. 实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...

    我正在尝试从Model计算的Solver中获取Real值.但是,即使我将pp.decimal设置为true(在SMT2文件中和使用Global.setParameter),只有在打印模型本身时才会遵循 ...

最新文章

  1. entity framework 使用Mysql配置文件
  2. hikvision v2.3控件网页demo_昆山UI网页设计师专业培训班 UI设计好就业吗?
  3. font HTML语言,HTML font 标签
  4. idea中drl文件_得分DRL:在OptaPlanner中更快,更轻松
  5. 微博html天涯吴奇隆刘诗诗,吴奇隆深夜微博晒爱心,为刘诗诗庆生,网友:撒了一大把狗粮...
  6. PHP双码率视频云转码服务系统源码 m3u8切片秒切
  7. activiti报错ProcessEngines.getDefaultProcessEngine()为null
  8. AnyChat视频直播系统全面分析
  9. git强行覆盖master分支
  10. 利用Xcode建立PhoneGap应用程序环境
  11. c语言程序最简单例子,简单C语言程序的例子
  12. 【C语言新手】EasyX图形库使用
  13. excel 置信区间 计算_正态分布置信区间Excel计算公式.ppt
  14. 3.4 SQL--多表查询分组排序
  15. NoSQLBooster操作Mongodb的基本使用。
  16. RN 入门(二)—基础知识
  17. gentoo linux软件安装,Gentoo Linux 快速安装方法安装
  18. word、ppt文档比较
  19. 如何自己制作装机工具装系统,硬装系统
  20. 操作系统 -- 内存管理(分配与回收)

热门文章

  1. JAVA异常记录(ORA-56900:pivot|unpivot 操作内不支持绑定变量)
  2. MarketsandMarkets:2018年全球太阳能背板市场需求将超17亿美元
  3. DICTATOR第三周栈与队列作业
  4. windows10系统服务器失败怎么办,Win10系统启动Apache服务器一直失败怎么办
  5. 淘宝标题可以改吗 淘宝标题优化技巧方法有哪些
  6. 涂鸦Zigbee SDK开发系列教程——4.烧录授权
  7. 《咏猪》 猪,猪,猪,头大脖子粗。 以前十来块,现在三十五。
  8. html table表格设置滚动条
  9. WSUS管理控制台打开报错
  10. Bug[2] TCP先连接一个错误IP,再次连接会出现连接不上并且报 ALREADY OPENED的提示