fluent udf 和udm 的使用问题,这个问题有点绕。
fluent udf中的一些问题:
本人需要用到源项 DEFINE_SOURCE(en_source, cell, t, dS, eqn) 这个函数,但是源项里面有数据需要通过龙格库塔方法来解微分方程组来计算,我就在udf中写了龙格库塔算法。用龙格库塔解微分方程组时候需要上一个时间步长计算出来的结果作为初值。 现在的问题是如何将上一个时间步长的udf中龙格库塔计算出的值带入到下一个时间步长的udf中去。 矛盾点是udf 只有一套,每次迭代都跑一遍,,,,,,,,,,,,,,,,,,,,,,,,, 我想过用udm 将上一个时间步长计算结果保存到udm中,然后在下一个时间步长的udf中再调用,可是我始终无法实现这个想法。
我不知道我这个想法靠不靠谱,或者说udm能不能实现这个功能。如果能实现的话,请大神给予指导。
总共就这一点金币全给上了,多谢了。 不知道我描述的清不清楚,有问题请留言给我我再细说。 返回小木虫查看更多
今日热帖
给你个思路,用uds加c_udsi_m1, 当然也有其他方法,自己慢慢试
能不能说的稍微详细点?
要实现调用上一时间步的计算结果,仅仅靠DEFINE_SOUCE宏不行,还得用到DEFINE_EXECUTE_AT_END宏,每个时间步计算结束后这个宏会运行一次。定义两个UDM,第一个UDM存储上个时间步的结果,第二个UDF存储当前时间步的计算结果,在DEFINE_EXECUTE_AT_END中进行计算,将值赋予UDM,再在DEFINE_SOUCE中将UDM作为源项。建议查查UDF MANUAL。
多谢回复,根据你的提示,我是这么想的,udm定义和初始化需要一个只运行一次的宏用 DEFINE_ON_DEMAND 或者 DEFINE _INIT 给udm1 和udm2 赋初值,然后第一个时间步长用初始值计算源项,源项用到DEFINE_SOUCE 时间步长计算结束用DEFINE_EXECUTE_AT_END 计算下一个步长所用的数据存在 udm2 同时再把udm2的值用一个中间变量传递给udm1 。 昨天试了下,写完的代码总是在C_UDMI 这个地方报错,编译不能通过
,
我的想法是 DEFINE_INIT 在开始时候执行一遍用来给udm初值,然后 define source 然后时间步结束,更新udm ,然后循环下去。这是我的代码,请帮我看下哪里有问题,我也在fluent 里打开了12个udm 。还是报错
首先在申请内存分配空间,有几个UDMI就申请几个,不然即使编译通过也会因为没有空间存储报错。
程序中d = Get_Domain(21); 如果仅仅是单相流动,正确的应该是d = Get_Domain(1)。