24小时热门版块排行榜    

查看: 3444  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[文学芳草园] 伙伴们,祝我生日快乐吧 +15 myrtle 2026-03-10 24/1200 2026-03-15 21:16 by 苏州_逗号
[考研] 中科大材料与化工319求调剂 +3 孟鑫材料 2026-03-14 3/150 2026-03-14 20:10 by ms629
[考研] 材料与化工 323 英一+数二+物化,一志愿:哈工大 本人本科双一流 +4 自由的_飞翔 2026-03-13 5/250 2026-03-14 19:39 by hmn_wj
[考研] 265求调剂 +4 威化饼07 2026-03-12 4/200 2026-03-14 17:23 by userper
[考研] 一志愿哈工大材料324分求调剂 +5 闫旭东 2026-03-14 5/250 2026-03-14 14:53 by 木瓜膏
[考研] 材料专硕288分求调剂 一志愿211 +4 在家想你 2026-03-11 4/200 2026-03-13 22:49 by JourneyLucky
[考研] 材料与化工304求B区调剂 +5 邱gl 2026-03-11 6/300 2026-03-13 22:37 by JourneyLucky
[考研] 26调剂/材料/英一数二/总分289/已过A区线 +6 步川酷紫123 2026-03-13 6/300 2026-03-13 21:59 by 星空星月
[考研] 285化工学硕求调剂(081700) +6 柴郡猫_ 2026-03-12 6/300 2026-03-13 20:46 by hmn_wj
[考研] 301求调剂 +6 Liyouyumairs 2026-03-11 6/300 2026-03-13 20:11 by JourneyLucky
[考研] 0856化学工程280分求调剂 +4 shenzxsn 2026-03-11 4/200 2026-03-13 11:55 by ymwdoctor
[考研] 289求调剂 +3 李政莹 2026-03-12 3/150 2026-03-13 11:02 by 求调剂zz
[考研] 268求调剂 +4 好运连绵不绝 2026-03-12 4/200 2026-03-13 10:45 by hyswxzs
[考研] 一志愿华中师范071000,325求调剂 +5 RuitingC 2026-03-12 5/250 2026-03-13 10:43 by hyswxzs
[考研] 274求调剂0856材料化工 +12 z2839474511 2026-03-11 13/650 2026-03-13 10:39 by peike
[考研] 一志愿河海大学085900土木水利专硕279求调剂不挑专业 +4 SunWwWwWw 2026-03-10 8/400 2026-03-13 02:23 by SunWwWwWw
[考研] 纺织、生物、化学、材料相关专业招生了 +4 耶耶业 2026-03-09 7/350 2026-03-12 19:05 by Equinoxhua
[考研] 化工0817调剂 +8 灿若星晨 2026-03-10 8/400 2026-03-10 22:44 by 星空星月
[考研] 0856材料与化工353分求调剂 +11 NIFFFfff 2026-03-09 11/550 2026-03-10 18:36 by suyuanhai
[考研] 0703化学调剂 +3 三dd. 2026-03-10 3/150 2026-03-10 15:45 by peike
信息提示
请填处理意见