• Fluent动网格【7】:网格节点运动


    在动网格中,对于那些既包含了运动也包含了变形的区域,可以通过UDF来指定区域中每一个节点的位置。这给了用户最大的自由度来指定网格的运动。在其他的动网格技术中(如重叠网格)则很难做到这一点。定义网格节点的位置是通过UDF宏DEFINE_GRID_MOTION来实现的。

    步骤

    可以通过以下步骤来指定既包含刚体运动又包含变形的区域:

    • Zone Names列表项中选择运动区域

    • 选择TypeUser-Defined

    • Motion Attributes中,选择UDF函数。此时的UDF用的是DEFINE_GRID_MOTION宏。

    宏的描述

    DEFINE_GRID_MOTION ( name , d , dt , time , dtime)

    参数:

    name:自定义宏的名称,symbol name。

    d:指向区域的指针,Domain *d。

    dt:指向存储动网格属性的结构体指针,Dynamic_Thread *dt。

    time:当前时间,real time。

    dtime:时间步长。

    宏中包含了5个参数:name,d,dt,time,dtime。其中name为用户自定义,而d,dt,time以及dtim均由Fluent传入。

    示例文件

    以下示例宏文件表达了一个简支梁的弯曲。

    /**********************************************
       node motion based on simple beam deflection
       equation compiled UDF
    *********************************************/
    #include "udf.h"
     
    DEFINE_GRID_MOTION(beam,domain,dt,time,dtime)
    {
        Thread *tf = DT_THREAD(dt);
        face_t f;
        Node *v;
        real NV_VEC(omega), NV_VEC(axis), NV_VEC(dx);
        real NV_VEC(origin), NV_VEC(rvec);
        real sign;
        int n;
        /* set deforming flag on adjacent cell zone */
        SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
        sign = -5.0 * sin (26.178 * time);
        Message ("time = %f, omega = %f
    ", time, sign);
        NV_S(omega, =, 0.0);
        NV_D(axis, =, 0.0, 1.0, 0.0);
        NV_D(origin, =, 0.0, 0.0, 0.152);
        begin_f_loop(f,tf)
        {
           f_node_loop(f,tf,n)
           {
            v = F_NODE(f,tf,n);
            /* update node if x position is greater than 0.02   
            and that the current node has not been previously
            visited when looping through previous faces */
            if (NODE_X(v) > 0.020 && NODE_POS_NEED_UPDATE (v))
            {
             /* indicate that node position has been update
             so that it’s not updated more than once */
             NODE_POS_UPDATED(v);
             omega[1] = sign * pow (NODE_X(v)/0.230, 0.5);
             NV_VV(rvec, =, NODE_COORD(v), -, origin);
             NV_CROSS(dx, omega, rvec);
             NV_S(dx, *=, dtime);
             NV_V(NODE_COORD(v), +=, dx);
            }
         }
      }
      end_f_loop(f,tf);
    }
    

    下次会演示这个宏的效果。


    更多关于CFD内容,可微信扫描下方二维码关注微信公众号。

  • 相关阅读:
    【SQL】DBCC(zz)
    Temporary Tables and Table Variables
    SQL特殊字符处理zz
    更改 Office 解决方案的安装路径
    SQL优化
    zzSQL Server性能优化
    SQL Server2005 表分区三步曲(zz)
    zz精妙SQL
    Deal with an annoying Message in Excel
    SQL技巧总结
  • 原文地址:https://www.cnblogs.com/LSCAX/p/7011267.html
Copyright © 2020-2023  润新知