UDF访问Scheme定义的变量

今天主要记录一下UDF与外界进行数据交换时用到的方法。之前一段时间一直尝试利用C语言写代码,主要思路是:打开外部文本文件,然后读取其中的数据为UDF中的变量赋值,但是在尝试的过程中发现每当FLUENT程序执行到打开文件时,只要文件里面有数据不为空,程序就会停止计算,会一直卡住,并且有时候还会出现报错信息:“Theflprocesscouldnotbestarted”。

鉴于此,接下来使用另一种方法:scheme发送命令来定义变量,然后UDF程序通过“RP_Get_Real("variable-name")”来获取定义变量值的大小。

定义Scheme变量

可以在fluent中利用Scheme命令定义变量,这个变量可以存储在fluent中,并且也可以通过UDF进行访问。这个功能非常有用,比如当你需要改变UDF代码中某一个参数的大小,这个时候不必每次通过GUI的方式对UDF重新编译,完全可以利用这个功能来实现。

定义scheme变量,可以在fluentconsole中使用下面命令:

(rp-var-definek_vel0.real#f)

而且,利用这一期介绍的内容,同样也可以通过python命令来执行上述命令:

scheme.execScheme("(rp-var-definek_vel0.real#f)")

访问Scheme变量

如果按照上述方式定义变量“k_vel”之后,可以通过下述命令在fluent查看这个变量的大小:

(%rpgetvark_vel)

执行结果如下所示:

更改Scheme变量

当然,如果想更改某一个scheme变量的值,可以使用下述命令:

(rpsetvark_vel0.)

执行结果如下:

UDF中访问Scheme变量

在定义新的变量之后(利用TUI命令或者python命令),可以在UDF中访问这个变量,然后传递给求解器。这是需要用到“RP”宏,这个宏专门用于在UDF中访问Scheme变量。主要命令如下:

RP_Get_Real("variable-name")#Returnsthedoublevalueofvariable-nameRP_Get_Integer("variable-name")#Returnstheintegervalueofvariable-nameRP_Get_String("variable-name")#Returnsthechar*valueofvariable-nameRP_Get_Bollen("variable-name")#ReturnstheBollenvalueofvariable-name

例如可以在UDF程序中写入下面这条语句,就能将Scheme变量加载到程序之中;

k_vel_gains=RP_Get_Real("k_vel")完整的Python与Fluent联合仿真设置Scheme变量的代码如下:

fromfluent_corbaimportAAS_CORBAfromfluent_corbaimportCORBA#读取“aaS_FluentId.txt”中的IOR(InteroperableObjectReference可互操作对象引用),#以此来创建FLuent会话(session)连接。aasFilePath=aaS_FluentId.txtiorString=open(aasFilePath).read()orb=CORBA.ORB_init()fluent_session=orb.string_to_object(iorString)scheme=fluent_session.getSchemeControllerInstance()#定义scheme变量利用TUI命令scheme.execScheme("(rp-var-definek_vel0.real#f)")#访问scheme变量k_vel=scheme.execSchemeToString("(%rpgetvark_vel)")#更改scheme变量scheme.execScheme("(rpsetvark_vel0.)")预览时标签不可点收录于话题#个上一篇下一篇



转载请注明地址:http://www.sanbaicaoasb.com/sctx/8360.html
  • 上一篇文章:
  • 下一篇文章:
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章