fluent如何模拟零升迎角

中超04
fluent如何模拟零升迎角
导读:笔者于两星期之前开始接触FLUENT,在此之前一直以为FLUENT就是一求解器,只要参数设置得当,就可以得出比其他小型算法更加逼真的结果。故将重点放到了其英文界面上,在网上买的教程,看到(风吹树摆)的简单流固耦合分析案例,就以为自己瞬间掌握

笔者于两星期之前开始接触FLUENT,在此之前一直以为FLUENT就是一求解器,只要参数设置得当,就可以得出比其他小型算法更加逼真的结果。故将重点放到了其英文界面上,在网上买的教程,看到(风吹树摆)的简单流固耦合分析案例,就以为自己瞬间掌握了FLUENT的技巧。

不过,通过两个星期的接触,发现自己所掌握的不过是普通的模型而已,如若真的涉及到空气动力学那可就难了。

目前就这两个星期的学习结果进行汇总:

简化模型

模型的简化至关重要,关系到网格划分和求解时间,进一步影响了计算的精度。笔者认为要根据自己实际经验进行简化,举个例子:如果一个不懂得飞行器设计的人给他一飞机模型,他可能会把机翼简化成一平板。当然这是玩笑话,对于笔者而言,目前接触到的都是无人机,机身轮廓大体都差不多,因此笔者认为有必要将机身进行简化,但机身和机翼的连接处还是比较重要的要适当保留。可是简化的不能太过了,要适当的增加一些外挂件的迎风面积,因为无人机实际飞行时干扰和寄生阻力,笔者可不敢保证他能算的那么准。

求解器的选择

目前对这一方面笔者懂得还不是很多,就先记几点。

根据物体的速度和尺寸特征什么的计算好雷诺数,判断流经其的气流是紊流还是层流。空气粘性必须进行考虑。看过一本书上写的,因为忽略了空气粘性力的存在,计算结果与实际相差8%左右。还有就是来流迎角问题,FLUENT中将来流迎角问题转化成速度矢量,意思就是将被动转化为主动,这一点不难理解。不过之前好几次出现阻力为负值的情况,百度后他们说是因为力的矢量设置错误,可以自己画个矢量三角形想想就明白了。

网格划分

之前,笔者一直在用workbench自带的划分器去划分,你们可以想象,对于简单物体这也就罢了,可对于无人机而言,笔者因为网格问题出现过残差值发散,导致升阻力系数随着迭代步数变化正负转变,数值增大了万倍以上,可想而知啊。目前笔者在学习icem(越学越觉得自己无知这句话是对的),希望不久后笔者可以随心所欲的画网格。

求解时间

关于求解花费时间,其实并不是越长越精确,因为大家都知道收敛和发散,一些计算到了一定的误差值就已经可以使用了,只要观察其收敛就可以了,还有些结果随着求解时间的增长而不精确,这是由于计算机精度问题导致的。

5流场体积

这点笔者也是深有体会,刚开始流场的体积大致就是所要计算物体尺寸的10倍上下。但通过看书后发现流场区域的大小也影响着求解的精度。你可以想想,一架787在空中飞的时候周围多大体积的气流随它而产生变化呢,因此在计算机NB的情况下尽量越大越好,网格可以随着尺寸由密变疏。

这周笔者学习了一周的icem划分网格,终于可以为翼型画质量较好的边界层网格了。不过还是有一个小问题,那就是翼型前缘网格映射不太理想,以及将网格文件导入fluent总是失败。(后来发现原因竟是翼型前缘与线没有关联造成)

Icem划分网格的 *** 确实有些抽象,映射、拓扑这些都没有接触过。不过现在差不多搞懂了,对于三维实体而言就是block代表着一定区域的网格分布状况。

文件保存:

笔者划分网格时没有好的保存习惯,若计算机崩溃,你在划分网格式有一定几率崩溃,所以一定要养成这个习惯,这也会使下一次分析时更加快捷了。

网格质量:

好的网格质量意味着本次的分析结果可信度高(毕竟是模拟分析,误差肯定会有的),要对自己划分的网格进行标准检查。

网格数量控制

经过两个星期断断续续的揣摩,笔者终于可以画出简单机翼的边界层网格了。不过发现了又一个问题,就是网格节点的分布状况。一般来说边界层网格靠E#¥%¥%函数所控制,首先确定整个目标线条上的节点数量,之后确定边界层增长率,接着确定最小节点尺寸。而非相关部位一般由B#¥%¥%函数所控制,表示平均分配的意思。

在绘制一款分析模型的网格时,首先应该确定网格需要控制在多少左右,这个由电脑配置所决定,由于笔者不是土豪所以一般将网格节点控制在50万以下。接着确定是否需要边界层网格,需要多少层。因为这一部分网格不容易计算出来。接着利用加减乘除确定网格节点分布。

四面体网格

笔者在不久接触了四面体网格的绘制,源于之前看到的关于无人机气动分析的论文,里面的同学就使用四面体网格,5层的边界层厚度。今天经过计算后发现,网格质量较不易控制,生成速度慢。但都不用转换就可以直接导入fluent中。

关于fluent计算有迎角模型结果失真

这段时间一直尝试着用fluent去求解来流迎角问题,可结果一直与无迎角差别不大,完全没有可信性。目前分析与这几个因素有关:

网格质量

边界层层数

求解器设置出错(是它)

飞机模型的求解模型选择

目前所有关于网格的问题终于告一段落了,学习fluent已经两个多月了。其中复习了{空气与气体动力学引论},看了很多关于fluent、icem入门的书籍。现在已经可以绘制一定难度的飞机网格了,不过在求解模型选择上又出问题了。

由于教程讲的都是亚音速工况的飞机气动计算,他们都是选择压力稳式求解器,spalart-allmaras方程湍流模型,远场压力进口。而笔者之前用的是k-Epslion方程湍流模型,速度进口压力出口。

之一阶段总结

笔者接触icem fluent有快4个月了,到目前为止终于可以解决低雷诺数无人机气动分析,以及一些简单的后处理了。可笔者总觉得不应该花这么久的时间的。现将无人机气动分析大纲列下:

注意:每步做完更好留有备份

简化模型

列出可靠算理(须有风洞数值对比)并与其具有相似性。

验证算理,其中进行网格无关性验证、Y+计算实验、算例升阻力矩系数、某一截面处压力分布对照,允许有一定范围内的误差。

取以上经验,进行网格相关性,Y+迭代尝试,划分网格(若几何简单划分结构网格,若复杂则非结构网格),并算出之一层网格尺寸,根据硬件配置尽量将网格数量控制在某一临界值之内。

开始进行网格划分,计算域一般最少10倍于特征长度,不可压缩可以进口与模型稍微近一些。

检查网格质量222标准尽量大于02,角度尽量大于18度。有必要对网格进行光顺。

一般采用spalart-allmaras湍流方程,理想粘性气体,松弛因子尝试过之后进行调整。

目前连续方程不太收敛,但如果升阻力系数收敛,可以认为结果具有一定可信性。

后处理,与实际经验进行对比。导入ansys后处理软件,提取所需参数。(之一阶段终结)

Icem使用技巧汇总

这段时间笔者任务较多,因此接触到的模型只有一些简单轮廓的模型,但笔者从中发现,要想高效率的画网格,有时应该动动脑筋(感觉好像废话一样)。一般情况下不要墨守成规,比如一个内部奇异的水管,不奇异的地方完全可以用网格拉伸生成,奇异的地方再去划分块,会简单不少。

目前正在试算一飞翼模型,笔者先用结构网格绘制,经过多次调整,当网格数量保持在200w左右时,网格质量大于035可以说是挺不错的。但笔者在求解过程中发现其收敛困难。当尝试一通宵求解后,确定收敛步数大约4000步。分析可能是一下原因:

网格数量超过计算机负载,导致求解过程缓慢。

此模型为包含机身,本来流动就比较复杂。

相邻网格之间体积差距过大。

壁面网格节点分配不合理。

以上原因,一时半会还无法进行验证,因此笔者有尝试绘制非结构外场网格,控制网格数量(本身相同网格数下,非结构求解慢些)。

fluent官方实例demo在浏览器中下载。fluent官方实例demo在浏览器是拥有官方认证的下载源。Fluent官方版是一款优秀的流体仿真软件。Fluent最新版的动网格技术处于绝对领先地位,并且包含专门针对多体分离问题的六自由度模型,以及针对发动机的两维半动网格模型。

Fluent UDF中经常用到thread类型的指针,一般可以通过如下函数来获取。

Lookup_Thread(Domaindomain, int id)

其中id是边界面的ID或者cell区域的ID,如下图中outlet边界的ID是2。

遗憾的是,网格载入Fluent后,其ID都是无法事先确定的。很多朋友只有在UDF源码开头用如下代码根据事后查到的ID手动定义,每次网格一变化又得重新在源码里面修改,重新编译,十分影响通用性。

#define OUTLET_ID 2 //每次不同网格需要根据情况修改后重新编译

Domain domain=Get_Domain(1); //非多相流或多相流混合物的domain永远是1

Threadtf=Lookup_Thread(domain, OUTLET_ID);

有没有一种办法能够一次性源码编译达到适应于所有网格呢?答案当然是肯定的,你可以通过zone名字来获取其ID号,然后画网格的时候只要取相同名字即可。实现该功能的函数源代码如下(插件VC++ UDF Studio 2022R1学术版上编译通过)

#include "udfh"

#include "SuperUdfExtensionh" //VC++ UDF Studio自带的扩展库头文件,具体参考该软件中的编程手册

#pragma comment(lib, "SuperUdfExtensionlib") //VC++ UDF Studio自带的扩展库的lib文件

int GetZoneIdByName(CString zoneName) //适用于所有Fluent版本

{

int returnID=-1;

Domaindomain=Get_Domain(1);

CString strCurrentFluentVersion;

strCurrentFluentVersionFormat("%d%d", RampantReleaseMajor, RampantReleaseMinor);//格式化当前Fluent版本为字符串形式

double fCurrentFluentVersion = atof(strCurrentFluentVersionGetBuffer()); //当前Fluent版本转为double类型

if(fCurrentFluentVersion<=192) // 对于Fluent63-192,只能调用VC++ UDF Studio扩展库

{

SuperUdf_Initialize(AfxGetInstanceHandle()); //调用VC++ UDF Studio扩展库中任何函数之前必须调用此初始化函数,具体参考该软件中的编程手册

#if !RP_NODE

returnID=SuperUdf_GetZoneIdByName(zoneNameGetBuffer()); //调用VC++ UDF Studio扩展库中的SuperUdf_GetZoneIdByName函数,具体参考该软件中的编程手册

#endif

host_to_node_int_1(returnID);

}

else // 对于Fluent version >=193,有直接UDF函数可以实现

{

Threadtf;

thread_loop_f(tf, domain) //对所有面的thread进行循环查找

{

if(0==zoneNameCompareNoCase(THREAD_NAME(tf))) //对比名字是否相同

{

returnID=THREAD_ID(tf);

break;

}

}

if(-1==returnID) //如果面的thread中无法找到匹配名字

{

Threadtc;

thread_loop_c(tc, domain) //对所有网格的thread进行循环查找

{

if(0==zoneNameCompareNoCase(THREAD_NAME(tc))) //对比名字是否相同

{

returnID=THREAD_ID(tc);

break;

}

}

}

}

return returnID;

}

DEFINE_EXECUTE_ON_LOADING(get_id, libudf)

{

int theID=GetZoneIdByName("inlet"); //根据边界名字获取其ID,如果返回-1表示找不到

Message("the zone id of inlet is %d\n",theID);

}

以上源代码实现了通过zone名字来获取其ID号的功能。对于Fluent193或更高版本,可以利用THREAD_NAME与需要的名字进行对比,匹配情况下用THREAD_ID获得其ID。但对于Fluent192或更低版本, THREAD_NAME不起作用(可能Fluent的bug),我们只能依赖于插件VC++ UDF Studio中的拓展库函数SuperUdf_GetZoneIdByName来实现。是时候抛弃傻傻的#define ID了。

点击阅读全文

打开CSDN,阅读体验更佳

参与评论 请先 登录 后发表或查看评论

最新发布 FLUENT UDF 入门级代码及解释

FLUENT UDF 入门级代码及解释

继续访问

fluent udf手册_FLUENT并行UDF案例

正文共:2618字9图 预计阅读时间:7分钟1 前言当计算网格数量巨大时,如果还用串行计算的话,可以把人耗死。此时用并行计算可以显著节省时间,笔者在实际应用中深有体会。同样一个案例(网格数量约200万),串行计算大约10秒钟迭代一次,而改用25核并行计算,约2秒钟迭代一次。其实在我看来,模拟计算一定程度上比的就是计算机性能。特别当遇到网格数量巨大,且物理模型复杂的计

继续访问

Fluent Meshing04:计算域提取

1导入几何模型 2创建网格尺寸 右键选择模型树节点Model,点击弹出菜单下Sizing → Scoped…弹出尺寸设置对话框 弹出对话框中如下图所示设置参数,点击Create按钮创建全局面尺寸分布 弹出对话框中如下图所示设置参数,点击Create按钮创建全局线尺寸分布 点击按钮Compute计算尺寸分布,待计算完毕后关闭对话框 3重构网

继续访问

获取宏定义_ANSYS Fluent:关于 UDF 的数据类型和相关的宏

在写 Fluent UDF 的过程中,我们经常会看到大量的诸如 d,c,f,t 这种变量,以及 domain,cell_t,face_t 等声明。如果自定义 UDF 的需求较高,我们就需要弄明白这些东西的含义。数据类型首先看一下 Fluent 的网格构成。在“ANSYS Fluent UDF Manual”中写道,A mesh is broken up into control volumes,

继续访问

Fluent的UDF官方案例(含代码)

8个官方给定的案例(含代码):多孔介质、壁温、粘度、UDS、流化床、非均匀流动、沉降、动网格。121页内容,提供代码供参考,简单易学

halcon算子翻译——get_domain

名称 get_domain - 获取图像的域(ROI)。 用法 get_domain(Image : Domain : : ) 描述 算子get_domain将所有输入图像的定义域作为区域返回。 并行 ●  支持计算设备上的对象。 ●  多线程类型:可重入(与非独占算子并行运行)。●  多线程范围:全局(可以从任何线程调用)。●  在元组级别自动并行化处理。 参数 Image

继续访问

圆柱绕流UDF-parallel主动运动

# include "udfh" //主动运动 static real pretime=00; static real timestep; static real y1=00; static real prev1=00; static int surface_thread_id1=4; static real m1=7286; static real c1=2644723; static real k1=6000; static real p=999729; static real s=

继续访问

ansys fluent udf manual 下载_笔记使用UDF进行Fluent并行计算时主机与节点之间的数据传递

导言:在使用Fluent进行大规模并行计算时,难免会遇到主机与节点之间的需要数据传输的情况。Fluent在UDF使用手册中虽然提供了关于并行计算中的数据传输宏的定义与格式表述,但并没有给出相应的示例与详解。此外,在各平台也难以找到较为明晰的用法解释。本文将对Fluent应用UDF进行并行计算时的数据传输方式以及传输宏的使用 *** 进行详解。1 Fluent 的并行计算架构简介图1 Fluent 并

继续访问

Fluent UDF中判断壁面热边界类型

我们知道Fluent中壁面可以有不同的换热边界类型,比如给定热流量的类型,给定温度的类型,给定对流条件的类型等等。 UDF中有时候需要根据类型的不同来进行不同的处理。那么在Fluent UDF中该如何判断一个壁面是什么类型的热边界呢?这里为大家解密几个未写入UDF帮助手册的宏。 宏 作用 HEAT_FLUX_WALL(Threadtf) 判断是否是给定热流量的边界 TEMPERATURE_

继续访问

UDF学习记录

一、数据结构 Cell thread对应zone Face thread对应边界 Example变量名可以随意定义,变量名不能重复 二、几何宏、循环宏 几何宏 原则:宏(c,t)t指的是cell thread, 宏(f,t)t指的是face thread A[ND_ND] 图形是三维ND_ND=3,二维ND_ND=2 F_AREA(A,f,t) 求面法向量,加上NV_MAG(A)算面的面积 循环宏 Thread_loop_c必须和begin_c_loop一起使用

继续访问

条件include_FLUENT边界条件的引用

正文共:2248字4图 预计阅读时间:6分钟1 前言 太阳能热水器在很多太阳能资源丰富的地区相当常见,笔者老家楼顶就有一台太阳能热水器。在一些大型建筑中,可能是多台设备串并联在一起。对于串联的模块,一台热水器的出口接到另一台的入口。假设不

继续访问

Fluent UDF中使用智能动态数组

Fluent UDF中使用智能动态数组 Fluent UDF中要使用动态数组在传统编译 *** 中只能使用纯C语言中的malloc函数。此函数无法自动释放内存,必须手动调用free函数来释放,否则就会造成内存泄漏问题。 要想使用智能动态释放的数组,就必须将UDF语法拓展到C++语言,调用C++内置的智能动态数组vector支持。这里我们借助VC++ UDF Studio的插件来实现对智能动态数组的调用。例如下面例子实现将入口面的压力和温度存入动态数组,然后再将存储的压力值赋值给出口。 #include "u

继续访问

Fluent UDF中沿指定方向获取邻接网格

有朋友在VC++UDF Studio插件群里问Fluent UDF有没有宏可以沿着指定方向搜索到下一个邻接的网格?答案是No,没有现成的宏可以实现这个目的,但是我们可以写一个函数来手动实现。这个思路如下:对于当前的网格,我们可以利用c_face_loop宏配合C_FACE及C_FACE_THREAD宏,对当前网格的所有face进行循环,例如下图中的当前网格循环会有0,1,2,3四个face。然后我们再利用F_C0分别取这四个face的c0,将c0与当前网格比较,如果c0就是当前网格,那么邻接网格就是c1,反

继续访问

udf在服务器上显示语法错误,UDF代码错误在哪里啊? - 仿真模拟 - 小木虫 - 学术 科研 互动社区

用组分输运模型模拟一个三维圆柱内的组分输运问题,圆柱壁面对组分有吸收。圆柱等分为两段,前一段标为huxi ,后一段标为xiu。由于壁面对组分的吸收缘故,必然使圆柱内从前往后浓度依次降低。从而下面的代码应该huxi2 与xiu2的值不同才是,但我得到的结果是huxi2与xiu2的值完全一样,奇了怪了,#include "udfh"#define Dm 69e-5DEFINE_ON_DEMAND(

继续访问

msh,fluent格式

# 10:Nodes (10 (zone-id first-index last-index type ND)) 12Cells (12 (zone-id first-index last-index type element-type)) 13Faces (13 (zone-id first-index last-index type element-type) (n0 n1 n2 cr cl)) type: element-type: 当element-type

继续访问

热门推荐 Log4j2研究之lookup

一个称得上优秀的框架,必备的要素之一可以通过某种约定的格式读取到所运行环境中的配置信息。本文中我们就来感受下log4j2实现此项功能时的精妙设计。

继续访问

get_domain_ip

#!/bin/bash if[$#-lt1];then echo$0needaparameter exit0 fi ADDR=$1 TMPSTR=`ping${ADDR}-c1|sed'1{s/([]∗[]∗)56/\1/;q}'` #TMPSTR=`ping${ADDR}-c

继续访问

Fluent UDF 获取组分传输模型中的摩尔分数或分压力

很多朋友在开发Fluent模型中需要用UDF获取组分传输模型中的某气体组分的摩尔分数(或体积分数)或者分压力,但是UDF自带的只有获取质量分数的宏C_YI(c,t),需要自己写额外的代码去转换,有一定难度。已经不止一次看到论坛或者我们UDF编译调试插件群里的朋友问起这个问题,这里做个标准教程记录下来,希望对大家有用。 总体来说,有两种 *** ,一种是利用内置的函数来转换,另外一种就是自己写代码转换,这里逐一介绍。 1 利用内置函数转换 内置转换 *** 参考了Fluent官方解决方案,稍微作了一些修改,并加了

继续访问

Linux功耗管理(17)_Linux PM domain framework(1)_概述和使用流程

1 前言 在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如: 1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。 2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。