首页/文章/ 详情

Fluent UDF 任意物理量梯度计算

11月前浏览5606

一 前言:

使用Fluent UDF进行二次开发时,常常需用到物理量的梯度、二阶导数等,而这些在Fluent中并未直接提供,因此需要用户自己计算。本文在UDF中采用最小二乘法,从基础物理量出发,完成物理量的梯度计算。


下图 给出了UDF计算结果与Fluent直接计算结果的对比结果,算例基于三维溃堤算例。UDF计算结果与Fluent计算结果分布趋势与数值基本一致,细微差异可能在于Fluent使用了一些重构或者限制器。

image.png

图 1 Fluent结果与UDF结果对比


二 UDF源代码

以下为源代码(可以在线查看,也可以下载源代码),基于该代码,用户不用再通过UDS的方式,间接获取所需梯度。


/* ******************************************************************

* 文件名称: 3D_Gradient.c    

* 内容摘要:

*         对任意存储于网格中心的物理量计算梯度,兼容二维或三维模型

* 其它说明: 

*       1,采用最小二乘法计算控制体梯度

*       2,采用克莱默法则计算解线性方程组

*       3,测试结果与Fluent的结果存在微小差异,请谨慎使用

 ******************************************************************** */

#include"udf.h"

#include"metric.h"


#define Cell_Len 30

/* 对于网格单元(cell)的每个侧面

*    假定有3个变量记录三个方向距离差值,1个记录距离平方根,

*    1个记录物理量差值,采用(3+1+1)*n的结构记录数据,

*    其中n表征网格单元面数量

*/


DEFINE_ON_DEMAND(My_gradient)

{

  Domain *d;

  Thread *t,*t0,*t1;

  cell_t  c, c0, c1;

  real x0[ND_ND],x1[ND_ND];

  double A[ND_ND][ND_ND],B[ND_ND];

  double temp=0.0,tempx=0.0,tempy=0.0,tempz=0.0;

  real Coef[Cell_Len]={0.0};        

  face_t f;

  int n,i,j;

  

  d = Get_Domain(1);

  thread_loop_c(t,d)

  {

    begin_c_loop(c,t)

    {

    for(i=0;i<Cell_Len;i++)

    {

Coef[i]=0.0;  

    }

   

    c_face_loop(c, t, n)                             

    { 

    f = C_FACE(c,t,n);

            t1= C_FACE_THREAD(c,t,n);

    if(THREAD_TYPE(t1)==THREAD_F_INTERIOR)

下面的内容为付费内容,购买后解锁。

内容简介:Fluent UDF 任意物理量梯度计算

FluentUDF二次开发理论控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-01-25
最近编辑:11月前
王心安
博士 | 高级工程师 王心安
获赞 41粉丝 15文章 7课程 0
点赞
收藏
作者推荐

付费答疑
暂无成交
¥100/小时
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈