许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  Fluent小学生学习笔记(一): udf——DEFINE_SDOF_PROPERTIES入门

Fluent小学生学习笔记(一): udf——DEFINE_SDOF_PROPERTIES入门

阅读数 5
点赞 0
article_banner

写在前言,此文章本意用于学习过程中的自我回顾及参考记录,本文章内容主要来源于ANSYS FLUENT 官方帮助文档,网络资料及部分使用过程中自己的理解。由于鄙人涉世未深,学历低下,资质愚钝,内容若有不对之处,请大家批评指正。

6dof模型用于指定物体被动运动,DEFINE_SDOF_PROPERTIES可为求解器指定对象的六自由度属性 。包括质量及惯性张量 ,以及外力和力矩的性质。

DEFINE_SDOF_PROPERTIES (name, properties, dt, time, dtime)

变量名称 解释
symbol name udf名称
real *properties 定义指向六自由度属性数组的指针(该udf使用中没用过不太理解)
Dynamic_Thread *dt 定义指向用户规定的“用于存储动网格属性 的”数据结构的指针(该udf使用中没用过不太理解)
real time 当前时间
real dtime 时间步
返回值

DEFINE_SDOF_PROPERTIES有四个参数:name、properties、dt和dtime。用户可以指定udf名称,属性、dt和dtime是由ANSYS Fluent求解器传递给UDF 的变量。用户可以为传递给求解器的属性数组指针指定如下所示的任意6dof特性值:

SDOF_MASS /* 质量 kg */

SDOF_IXX, /* 转动惯量 kgm2 */

SDOF_IYY, /* 转动惯量 kg m2 */

SDOF_IZZ, /*转动惯量 kg m2 */

SDOF_IXY, /* 惯性积kg m2 */

SDOF_IXZ, /* 惯性积kg m2 */

SDOF_IYZ, /* 惯性积kg m2 */

SDOF_LOAD_LOCAL, /* boolean */ 不清楚干啥的,欢迎解答

SDOF_LOAD_F_X, /*外力N */

SDOF_LOAD_F_Y, /* 外力 N*/

SDOF_LOAD_F_Z, /* 外力N */

SDOF_LOAD_M_X, /* 外力矩N M */

SDOF_LOAD_M_Y, /* 外力矩N M*/

SDOF_LOAD_M_Z, /* 外力矩N M*/

SDOF_ZERO_TRANS_X, /* 约束X方向平移 */

SDOF_ZERO_TRANS_Y, /* 约束Y方向平移 */

SDOF_ZERO_TRANS_Z, /* 约束Z方向平移 */

SDOF_ZERO_ROT_X, /* 约束绕X轴转动 */

SDOF_ZERO_ROT_Y, /* 约束绕Y轴转动*/

SDOF_ZERO_ROT_Z, /* 约束绕Z轴转动 */

SDOF_SYMMETRY_X, /* 对称模型对称面法向向量*/没用过,理解不透

SDOF_SYMMETRY_Y, /* 对称模型对称面法向向量*/

SDOF_SYMMETRY_Z, /* 对称模型对称面法向向量 */

例:

#include "udf.h"

DEFINE_SDOF_PROPERTIES(delta_missile, prop, dt, time, dtime)
 /* 指定6dof特性 */
{
   prop[SDOF_MASS]       = 907.185;
   prop[SDOF_IXX]        = 27.116;
   prop[SDOF_IYY]        = 488.094;
   prop[SDOF_IZZ]        = 488.094;


   {
     register real dfront = fabs (DT_CG (dt)[2] - (0.179832*DT_THETA (dt)[1]));
     register real dback  = fabs (DT_CG (dt)[2] + (0.329184*DT_THETA (dt)[1]));
/*定义实值dfront、dback,fabs函数取DT_CG重心z做表的绝对值,后面的DT_THETA(dt)[1]我认为是取得刚体y轴的方向矢量,但
如如此理解的话,0.179832*DT_THETA(dt)[1]应如何理解?翻阅了很多资料,都没有得到清楚的解释,此处暂放。如果有懂的大牛,欢迎讲解*/

     if (dfront <= 0.100584)
       {
         prop[SDOF_LOAD_F_Z] = 10676.0;
         prop[SDOF_LOAD_M_Y] = -1920.0;
       }

     if (dback <= 0.100584)
       {
         prop[SDOF_LOAD_F_Z] += 42703.0;
         prop[SDOF_LOAD_M_Y] += 14057.0;
       }
   /*判断语句,指定的dfront和dback达到设定条件后,即施加外力、力矩 */
   }

   printf ("\ndelta_missile: updated 6DOF properties"); /*输出6dof运动轨迹 */
}

tips:1.6dof特性可通过udf指定,较新版本中也可通过gui界面指定,但gui界面指定灵活性较差。

2.6dof特性只能通过udf或gui界面中的一种指定,二者不可兼容。

3.6dof模型只需制定初始位置的刚体重心,刚体速度,刚体方位角,刚体角速度等,开始计算后刚体重心和方位角数据会由软件中自动追踪并更新。


讨论:1.一般情况下,6dof模型所设置重心为真实重心,刚体运动将绕该点进行,此时惯性张量一般只存在于Ixx、Iyy及Izz方向,其他似乎均为零。简单回顾相关力学课程内容,认为也应如此。

2.特殊运动,如6dof下的单摆运动,旋转中心与重心并不重合。该情况下,凭借臆测,未经证实,我认为有两种处理方法,简述如下:

1)该方法由网上案例教程在半睡半醒状态下推理并胡乱理解得到。在6dof gui设置页面中,重心位置指定为所期望的单摆旋转中心。此时,重心≠真实的重心。但转动惯量仍可按照真实重心计算得到的转动惯量定义,但需通过UDF应用CG_DISTANCE宏指定重心与旋转中心距离,并结合Gui界面中刚体方位角参数,以及转轴偏心带来的额外重力矩,由Fluent重新求解转动情况。网上案例及所用udf如下:

#include "udf.h"

#define CG_DISTANCE 0.5

DEFINE_SDOF_PROPERTIES(flap, prop, dt, time, dtime)
{
	prop[SDOF_MASS] = 828.47;
	prop[SDOF_IZZ]  = 310.5;
  prop[SDOF_IXX]  = 306.36;
  prop[SDOF_IYY]  = 4.1328;
  prop[SDOF_IXY]  = 0.0;
  prop[SDOF_IYZ]  = 0.0;
  prop[SDOF_IXZ]  = 0.0;
	prop[SDOF_ZERO_TRANS_X] = TRUE; 
	prop[SDOF_ZERO_TRANS_Y] = TRUE;
	prop[SDOF_ZERO_TRANS_Z] = TRUE;
	prop[SDOF_ZERO_ROT_X]   = TRUE;
	prop[SDOF_ZERO_ROT_Y]   = TRUE;
	prop[SDOF_ZERO_ROT_Z]   = FALSE;
	prop[SDOF_LOAD_M_Z] = -9.81 * 0.5 * sin(DT_THETA(dt)[2]) * 828.47;
}

2)第二种方案是我自己的理解,这种情况下,可以通过建模软件直接将重心指定在期望的旋转中心上,得到一组新的惯性张量用于6dof特性定义。然后,仍在Gui界面中设定所期望的旋转中心为重心,并指定初始的刚体方位等参数。但无需在udf中通过 CG_DISTANCE指定重心和旋转中心的距离,且无需并添加由于旋转偏心产生的额外的重力矩问题。

随笔写此,日后领悟加深后再行补充修改。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空