24小时热门版块排行榜    

查看: 1455  |  回复: 6

butter_L

新虫 (小有名气)

[求助] UDF新手,解释没有问题,计算第一步开始报错 已有1人参与

UDF新手。自己在做固液两相流对管内壁的磨损的模拟。用的fluent,写了一小段UDF想试一试,Interpreted没有没有错误,hook之后,开始计算第一步就出现错误

Error:
C:\PROGRA~1\ANSYSI~1\v145\fluent\fluent14.5.0\win64\3ddp\fl1450s.exe received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: #f

按照网上说的,UDM已经分配了,初始化之前导入UDF或者初始化之后导入UDF,将已经计算几步之后的数据导入、再导入UDF,这些方法都已经尝试过,仍然报错。

这是我的UDF和case,大神帮忙看下,不胜感激!
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : fluent1.rar
  • 2019-09-20 16:24:21, 9.57 M

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

butter_L

新虫 (小有名气)

#include "udf.h"
#include "math.h"
#include "metric.h"
#include "mem.h"
DEFINE_ADJUST(www,d)
{
        real w;
    int n;
    real densic=3200;
    real c;
    real alpha;
    real A[ND_ND];
    real vel[3];
    real velm;
    real Am;
    real co;
    real velx;
    real vely;
    real velz;
    real qm;
    Thread *tf;
    face_t f;
    c=sqrt(3*480*1000000/densic);
    thread_loop_f(tf,d)
    {
            begin_f_loop(f,tf)
            {
                real denmix=1300;
                velx=F_U(f,tf);
            vely=F_V(f,tf);
            velz=F_W(f,tf);
            vel[1]=velx;
            vel[2]=vely;
            vel[3]=velz;
            qm=velx*denmix*3.1416*0.0045*0.0045;
            F_AREA(A,f,tf); /*面法线向量*/
                velm=NV_MAG(vel);
                Am=NV_MAG(A);
                co=NV_DOT(vel,A)/(velm+0.1)/(Am+0.1); /*面法线向量与速度向量夹角的余弦值*/
                alpha=asin(co)*180/3.1416; /*速度向量与面的夹角度数*/
                w=7/3.1416*qm/denmix*pow((velm/c),2.5)*sin(2*alpha)*sin(alpha); /*单位时间切削量m3*/
                F_UDMI(f,tf,0)=w; /*计算结果储存到0文件*/
            }
            end_f_loop(f,tf)
    }
}
2楼2019-09-20 16:27:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xingfuww

专家顾问 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
NV_MAG 貌似只能用来计算 内部传递的矢量,你试试自己把求模 用平方开根号来写出来。尽量别用它自带的函数。免得出错
3楼2019-09-20 18:05:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xingfuww

专家顾问 (正式写手)

【答案】应助回帖

引用回帖:
2楼: Originally posted by butter_L at 2019-09-20 16:27:12
#include "udf.h"
#include "math.h"
#include "metric.h"
#include "mem.h"
DEFINE_ADJUST(www,d)
{
        real w;
    int n;
     ...

还有 UDMI 函数需要初始化的,用DEFINE_ON_DEMAND来初始化一下。
4楼2019-09-20 18:13:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xingfuww

专家顾问 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
butter_L: 金币+20, ★★★很有帮助 2019-09-21 14:18:33
我已经简单测试了,你的udmi不需要初始化也可以,因为你第一步没调用到,你的UDMI 设置返回值为0 的时候是没问题的,程序能跑。说明你的计算公式有问题,如前面的回复,自己把计算方程写进去就好,别用自带的函数,免得出错。
还有你的UDMI 有没有启用啊,在user-defined 里面 memory 里面 number of user defined memory locations 把0 改成1.
5楼2019-09-20 18:24:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xingfuww

专家顾问 (正式写手)

我看你是遍历面 f? 改成遍历cell 试试。我这边试了用cell 可以,
6楼2019-09-20 18:44:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

butter_L

新虫 (小有名气)

引用回帖:
5楼: Originally posted by xingfuww at 2019-09-20 18:24:38
我已经简单测试了,你的udmi不需要初始化也可以,因为你第一步没调用到,你的UDMI 设置返回值为0 的时候是没问题的,程序能跑。说明你的计算公式有问题,如前面的回复,自己把计算方程写进去就好,别用自带的函数, ...

好的,感谢!我试一下
7楼2019-09-21 08:25:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 butter_L 的主题更新
信息提示
请填处理意见