24小时热门版块排行榜    

查看: 3932  |  回复: 9

huanghuang36

铜虫 (小有名气)

[求助] UDF 改为并行计算

我的UDF 在单机下能正常使用,但是并行不是需要改一下语句嘛,本人愚钝,照着教程改了改但是一直不对,希望高人能帮忙指点一下,不胜感激啊
如下是我的UDF:主要使用的就是CG_MOTION


#include
#include "udf.h"
#include "math.h"
real r_movefluid;
DEFINE_CG_MOTION(moveface, dt, cg_vel, cg_omega, time, dtime)
{
        Thread *t;
    face_t f;
        real x0,y0,r;
    real v0;
        real v;
    real omega=M_PI;
        real theta=omega*time;
    real x[ND_ND];
        t = DT_THREAD(dt);
    begin_f_loop(f,t)
        {
                F_CENTROID(x,f,t);
                x0=x[0];
                y0=x[1];
                r=sqrt(pow(x0,2)+pow(y0,2));
        }
    end_f_loop(f,t)
        v0=omega*r;
        r_movefluid=r;
   if (time>=0 && time<=M_PI/(180*omega))
           v=0;
   else if (time<=8*M_PI/(180*omega))
           v=12.96*(theta-(M_PI/180))*omega/(7*pow(M_PI,2));
   else if (time<=10*M_PI/(180*omega))
           v=0.072*omega/M_PI;
   else if (time<=29*M_PI/(180*omega))
           v=(0.072*omega/M_PI)-12.96*(theta-M_PI/18)*omega/(19*M_PI*M_PI);
   else if (time<=31*M_PI/(180*omega))
           v=0;

        cg_vel[0]=v*cos(theta)-v0*sin(theta);
        cg_vel[1]=v*sin(theta)+v0*cos(theta);
        cg_vel[2]=0;
        cg_omega[0]=0;
        cg_omega[1]=0;
        cg_omega[2]=omega;
}
DEFINE_CG_MOTION(rotate, dt, cg_vel, cg_omega, time, dtime)
{
        real omega=M_PI;
        cg_omega[2]=omega;
}
DEFINE_CG_MOTION(movefluid, dt, cg_vel, cg_omega, time, dtime)
{
    real v0;
        real v;
    real omega=M_PI;
        real theta=omega*time;
        v0=omega*r_movefluid;
   if (time>=0 && time<=M_PI/(180*omega))
           v=0;
   else if (time<=8*M_PI/(180*omega))
           v=12.96*(theta-(M_PI/180))*omega/(7*pow(M_PI,2));
   else if (time<=10*M_PI/(180*omega))
           v=0.072*omega/M_PI;
   else if (time<=29*M_PI/(180*omega))
           v=(0.072*omega/M_PI)-12.96*(theta-M_PI/18)*omega/(19*M_PI*M_PI);
   else if (time<=31*M_PI/(180*omega))
           v=0;

        cg_vel[0]=v*cos(theta)-v0*sin(theta);
        cg_vel[1]=v*sin(theta)+v0*cos(theta);
        cg_vel[2]=0;
        cg_omega[0]=0;
        cg_omega[1]=0;
        cg_omega[2]=omega;
}

刚注册的,目前只有两个金币,呵呵,不好意思啊~~
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mr.Silence

新虫 (初入文坛)


感谢参与,应助指数 +1
xiegangmai: 金币-1, 应助指数-1, 谢谢参与,非应助请勿选择“应助回帖” 2012-10-10 21:19:51
同求并行计算的方法。我也在学习UDF,希望楼主不吝赐教。
2楼2012-10-09 11:17:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huanghuang36

铜虫 (小有名气)

呵呵,目前我也不是很会啊,共同学习
3楼2012-10-10 10:02:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunbird04

银虫 (小有名气)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+1, 谢谢应助 2012-10-10 21:20:01
huanghuang36: 金币+2, ★★★很有帮助, 谢谢你的帮助哦~~ 2012-10-16 09:34:24
在每段程序 最前头加上 #if !RP_HOST   最末尾加上#endif   即可

» 本帖已获得的红花(最新10朵)

4楼2012-10-10 18:14:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huanghuang36

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by sunbird04 at 2012-10-10 18:14:27
在每段程序 最前头加上 #if !RP_HOST   最末尾加上#endif   即可

太感谢你的回答了,我已经照你说的改了程序,还有我想问一下,那个计算节点(也就是处理器)数量的设置是不是和我的子域的数量有关啊,我看书上说子域的数量应该是计算节点的整数倍,是要这么设是吧~~
5楼2012-10-10 21:40:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huanghuang36

铜虫 (小有名气)

送鲜花一朵
引用回帖:
4楼: Originally posted by sunbird04 at 2012-10-10 18:14:27
在每段程序 最前头加上 #if !RP_HOST   最末尾加上#endif   即可

而且我并行运算的时候,它不是把一个模型分成几块分别给每个处理器进行计算嘛,但是它的分割很不规则啊,不是按我子域的形状分的,我运算的时候在分割的边界会有微度的变形产生,最后导致负体积,运算错误,这是怎么回事??呵呵,求指点~~!~~~~~
6楼2012-10-11 09:45:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunbird04

银虫 (小有名气)

引用回帖:
6楼: Originally posted by huanghuang36 at 2012-10-11 09:45:41
而且我并行运算的时候,它不是把一个模型分成几块分别给每个处理器进行计算嘛,但是它的分割很不规则啊,不是按我子域的形状分的,我运算的时候在分割的边界会有微度的变形产生,最后导致负体积,运算错误,这是怎 ...

这个,我没做过动网格。。。所以不能给你具体得回答。
Fluent 并行时会自动划分区域,当然你也可以自己手动划分区域: 打开Fluet Parallel>Auto Partition 然后选择你所想要的划分方法(或者你选择Partition, 完全自己手动划分区域),然后读取case文件。
7楼2012-10-17 17:18:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watcher007

新虫 (正式写手)


xiegangmai: 金币+1, 鼓励讨论交流 2012-10-21 17:24:27
楼主,看了你的UDF,感觉我们做的东西很像,有机会可以进一步交流一下。我曾经用在Fluent并行运算,选择使用自动分区,一般感觉是按照控制体进行简单的划分,例如长方体的控制体,可能就是分成两半,或四分之一,另外在并行使一般核数都是选偶数的。
8楼2012-10-17 18:54:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (著名写手)

Suhas V. Patankar

本帖仅楼主可见
9楼2013-07-13 18:54:30
已阅   申请仿真EPI   回复此楼   编辑   查看我的主页

会飞的猪ss

银虫 (小有名气)

引用回帖:
4楼: Originally posted by sunbird04 at 2012-10-10 18:14:27
在每段程序 最前头加上 #if !RP_HOST   最末尾加上#endif   即可

试了这个办法,我的UDF是一个源项,添加了你所说的语句之后,警告需要一个返回值,但是我明明写了返回值,机器却说需要一个返回值。有人指点说是因为语句的非正常使用导致函数体为空。请问,这个问题怎么解决???
多使点劲,猪也能飞起来。。。
10楼2014-07-23 11:32:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 huanghuang36 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 今天放榜吗? +12 布布和一二 2026-08-19 12/600 2026-08-19 13:45 by gloomy6159
[基金申请] filecode,4个jtjc了 +8 ziyangfang 2026-08-19 9/450 2026-08-19 13:08 by blacksandy
[基金申请] 今天基金会出结果吗?20260819 +8 kkkl_v 2026-08-19 8/400 2026-08-19 12:34 by Vivilian
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 时间戳变了,能看出什么问题? +10 基诺咪客 2026-08-17 14/700 2026-08-19 10:34 by 基诺咪客
[基金申请] 什么时候开奖? +6 CrisMessi 2026-08-18 6/300 2026-08-19 08:06 by Equinoxhua
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +4 Tide man 2026-08-12 5/250 2026-08-19 07:41 by 201120518022
[基金申请] 重要消息,中午系统在维护 +10 yuleib84 2026-08-18 11/550 2026-08-19 07:30 by 羽毛枫f
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +3 瞬息宇宙 2026-08-15 3/150 2026-08-18 21:40 by xiaohuixin
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[论文投稿] 投稿咨询 +4 wwm09 2026-08-17 6/300 2026-08-18 15:36 by wwm09
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +13 Ldrop2023 2026-08-13 16/800 2026-08-18 12:25 by 淀粉搬运工
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
信息提示
请填处理意见