找回密码
 注册
Simdroid-非首页
查看: 2615|回复: 53

[学习资源] Fluent关于运动的UDF编写

[复制链接]
发表于 2008-2-4 23:34:29 | 显示全部楼层 |阅读模式 来自 安徽黄山
本UDF可以根据需要,添加更多的运动,支持多个运动,支持并行,支持信息自动保存,与大家共同研究。

# include "udf.h"

static real G = 9.80; /* 重力*/
static real valve_M = 0.1; /* 质量*/
static real valve_S = 0.0; /* 位移*/
static real valve_V = 0.0; /* 速度*/
static real valve_F = 0.0; /*受力*/
static int is_valve = 0; /* 判断物体是否运动的阀值*/

DEFINE_CG_MOTION(valve, dt, vel, omega, time, dtime)
{
#if !RP_HOST
    Thread *t;
    Domain *d;
    real dv, CG[ND_ND], force[3], moment[3];
    if (!Data_Valid_P ())
    {
        Message0("\n\nNo data->No mesh motion!!!\n\n");
        return;
    }
     
    /* 速度赋值 */
    NV_S (vel, =, 0.0);
    NV_S (omega, =, 0.0);
     
    /* 力的计算*/
    d = THREAD_DOMAIN (DT_THREAD ((Dynamic_Thread *)dt));
    t = DT_THREAD(dt);
    NV_S (CG, =, 0.0);
    Compute_Force_And_Moment (d, t, CG, force, moment, FALSE);

    /* 计算力的变化 */
    dv = dtime * (force[0] - G * valve_M) / valve_M;
    if(is_valve == 0 && dv >= 0.0)
    {
        is_valve = 1;
        Message0("\n\n============================== BEGIN VALVE MOTION INFO ==============================\n");
        Message0("\n VALVE BEGIN MOVE! \n");
        Message0("\n============================== END VALVE MOTION INFO ==============================\n");
    }
    if(is_valve == 0 && dv < 0.0) {
        dv = 0.0;
    }
    valve_V += dv;
    if(valve_S >= 0.010)
    {
        valve_V = 0.0;
    }
    valve_S += valve_V * dtime;

    /* 设置x方向速度*/
    vel[0] = valve_V;
    valve_F = force[0];

    Message0("\n\n============================== BEGIN VALVE MOTION INFO ==============================\n");
    Message0("\ntime=%.5e F(x)=%.4e S(x)=%.6e V(x)=%.6e move?=%d\n", time, force[0], valve_S, valve_V, is_valve);
    Message0("\n============================== END VALVE MOTION INFO ==============================\n");
#endif

    node_to_host_real_1(valve_S);
    node_to_host_real_1(valve_V);
    node_to_host_real_1(valve_F);
    node_to_host_int_1(is_valve);

    node_to_host_real(vel, ND_ND);
    node_to_host_real(omega, ND_ND);
}

/* 写数据函数*/
static void write_data(FILE *fp)
{
    fprintf(fp, "%e ", valve_V);
    fprintf(fp, "\n");
    fprintf(fp, "%e ", valve_S);
    fprintf(fp, "\n");
    fprintf(fp, "%e ", valve_F);
    fprintf(fp, "\n");
    fprintf(fp, "%d ", is_valve);
    fprintf(fp, "\n");

}

/* 读数据函数*/
static void read_data(FILE * fp)
{
    fscanf(fp, "%e", &valve_V);
    fscanf(fp, "%e", &valve_S);
    fscanf(fp, "%e", &valve_F);
    fscanf(fp, "%d", &is_valve);

    fscanf(fp, "%e", &ball_V);
    fscanf(fp, "%e", &ball_S);
    fscanf(fp, "%e", &ball_F);
    fscanf(fp, "%d", &is_ball);
}

DEFINE_RW_FILE(reader, fp)
{
    Message0("\n\n============================== BEGIN UDF INFOMATION ==============================\n");
    Message0("\nReading UDF data from data file...\n");

#if PARALLEL
#if RP_HOST
    read_data(fp);
#endif
#else
    read_data(fp);
#endif

    host_to_node_real_1(valve_V);
    host_to_node_real_1(valve_S);
    host_to_node_real_1(valve_F);
    host_to_node_int_1(is_valve);
     
    host_to_node_real_1(ball_V);
    host_to_node_real_1(ball_S);
    host_to_node_real_1(ball_F);
    host_to_node_int_1(is_ball);

    Message0("\n------------------------------ BEGIN VALVE MOTION INFO ------------------------------\n");
    Message0("\nS(x)=%.6e V(x)=%.6e F(x)=%.4e move?=%d\n", valve_S, valve_V, valve_F, is_valve);
    Message0("\n------------------------------ END VALVE MOTION INFO ------------------------------\n");
     
    Message0("\n------------------------------ BEGIN BALL MOTION INFO ------------------------------\n");
    Message0("\nS(x)=%.6e V(x)=%.6e F(x)=%.4e move?=%d\n", ball_S, ball_V, ball_F, is_ball);
    Message0("\n------------------------------- END BALL MOTION INFO -------------------------------\n");
    Message0("\n================================ END UDF INFOMATION ================================\n\n");
}

DEFINE_RW_FILE(writer, fp)
{
    Message0("\n\n============================== BEGIN UDF INFOMATION ==============================\n");
    Message0("\n\nWriting UDF data to data file...\n");

#if PARALLEL
#if RP_HOST
    write_data(fp);
#endif
#else
    write_data(fp);
#endif
    Message0("\n================================ END UDF INFOMATION ================================\n\n");
}

评分

2

查看全部评分

发表于 2008-11-24 19:08:44 | 显示全部楼层 来自 韩国
Simdroid开发平台
Fluent 公司给我的材料,才是你的材料的一部分而已,谢谢了,很不错的材料。
回复 0 不支持 1

使用道具 举报

发表于 2008-11-16 16:14:51 | 显示全部楼层 来自 江苏南京
谢谢LZ  
LZ能不能吧一些解释语句加上啊
小弟初学   有些不懂
回复 不支持

使用道具 举报

发表于 2008-11-16 20:31:28 | 显示全部楼层 来自 江苏镇江
顶起来
呵呵
回复 不支持

使用道具 举报

发表于 2008-11-25 09:42:59 | 显示全部楼层 来自 广东珠海
我也看不懂,能否注释一下啊?!
回复 不支持

使用道具 举报

发表于 2009-10-4 15:07:37 | 显示全部楼层 来自 黑龙江哈尔滨
感谢分享,有时间可以注释一下这个udf
回复 不支持

使用道具 举报

发表于 2009-10-11 21:46:51 | 显示全部楼层 来自 黑龙江哈尔滨
我只看过没注释的,谢谢楼主了
回复 不支持

使用道具 举报

发表于 2009-10-12 22:14:40 | 显示全部楼层 来自 上海
谢谢分享~~~~~~~~~·
回复 不支持

使用道具 举报

发表于 2009-11-9 15:17:42 | 显示全部楼层 来自 黑龙江大庆
4# oceanczs

你有压差作用一个物体的运动的UDF么
回复 不支持

使用道具 举报

发表于 2010-1-5 16:13:09 | 显示全部楼层 来自 黑龙江哈尔滨
涉及到了运动的方方面面,强帖,非常感谢
回复 不支持

使用道具 举报

发表于 2010-1-31 12:34:52 | 显示全部楼层 来自 山西太原
涉及到了运动的方方面面,强帖,非常感谢
回复 不支持

使用道具 举报

发表于 2010-2-22 22:23:16 | 显示全部楼层 来自 湖南长沙
谢谢分享 先MARK一下
回复 不支持

使用道具 举报

发表于 2010-2-23 08:01:59 | 显示全部楼层 来自 英国
你们怎么就那么强呢?
回复 不支持

使用道具 举报

发表于 2010-3-1 14:47:10 | 显示全部楼层 来自 北京海淀
谢谢楼主了
回复 不支持

使用道具 举报

发表于 2010-5-10 14:41:11 | 显示全部楼层 来自 安徽合肥
众里寻他千百度,蓦然回首,在此处,呵呵,谢谢楼主啊
回复 不支持

使用道具 举报

发表于 2010-5-11 22:37:52 | 显示全部楼层 来自 广西柳州
强悍 学习~
回复 不支持

使用道具 举报

发表于 2010-5-12 15:50:42 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢楼主!学习中
回复 不支持

使用道具 举报

发表于 2010-5-17 15:21:00 | 显示全部楼层 来自 江苏南京
谢谢楼主!学习中
回复 不支持

使用道具 举报

发表于 2010-11-9 20:34:06 | 显示全部楼层 来自 湖南长沙
无比强大。
回复 不支持

使用道具 举报

发表于 2010-11-10 00:04:59 | 显示全部楼层 来自 黑龙江哈尔滨
这个udf 功能还是比较全的
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-28 14:02 , Processed in 0.062346 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表