jjzjj

关于Fluent瞬态计算你必须掌握的3个技巧

北鲲云_beikun 2023-04-19 原文

Fluent具有丰富的物理模型、先进的数值方法和强大的前后处理功能,在航空航天、汽车设计、石油天然气和涡轮机设计等方面都有着广泛的应用。

在fluent计算前应先设置流域的各个边界面(例如压力出口、压力入口以及想要监测数据的面等等),这里以ANSYS的workbench界面做一个相关展示。本算例模型来源于航空航天领域的伺服阀前置级的部分射流流域(尺寸、形状做了相应简化)。

图1. Workbench的fluent运算界面

如图所示,第一个模块是流域的三维模型;第二个模块是用于流域网格划分的专业软件,是业内认为绘画结构网格的专业软件,结构化网格(六面体)有利于减少计算量,有利于模型的计算迭代收敛;第三个模块是fluent,紫色线代表着他们之间的文件连接关系。前处理主要包括模型的边界面定义以及网格绘制,本节主要讲解前处理的相关技巧。

右键Geometry打开模型,在DesignModeler设置压力入口和压力出口,其他面均为墙壁面(wall),如图2所示。在这一步,需要注意的是,不可以重复的定义一些面,否则你所定义的面的名称会在fluent里杂乱无章的显示以及生成许多无关的面。另外,在DesignModeler可以定义流体的属性(fliud默认是solid),不定义的话,在之后的fluent界面里可以重新定义。

图1. Workbench的fluent运算界面

接下来就是整个仿真中最关键的一步——网格绘制,为什么把它放在如此重要的位置?因为用于高级的、复杂的计算网格量十分庞大,每个网格点都对应着基本的物理方程,同时利用ICEM软件绘制的网格(分块绘制方法)具有网格数量少,求解精度高的特点。

图3.ICEM绘制的网格块形状以及质量

如图3所示,利用ICEM块绘制的方法,可以将网格质量提升至0.85以上,一般认为网格的雅各比矩阵值在0.3以上就可以进行有限元计算,雅各比矩阵值在0.5以上视为优质网格,本算例满足接下来的fluent瞬态仿真。

图4.fluent全局设置

因为本算例中的伺服阀前置级是高速射流,最高速度可达到几百米每秒,因此必然会产生气穴现象,气穴现象是由于液体的局部压力低于饱和蒸汽压从液态变为气态的过程,因此接下来根据伺服阀的射流状态选择湍流模型以及可能出现的气穴现象进行相应的设置,设置如图5所示。

图5.fluent混合相设置

在混合相中,选择相变模型以及主、次相的属性设置,相变的物理引擎选择空化,这里用的是Schnerr-Sauer的空化模型,该模型认为液、气混合物包含大量球形蒸汽泡,模型给出的空化半径有如下公式:

其中R为空泡半径,a为蒸汽体积分数,需要注意的是,在此模型中,是唯一需要确定的参数,有大量的研究表明其最佳取值在左右,对于多相流的详细设置如图6所示。

a) Mixture的主、次相设置

(b) 空化模型的相关设置图6.混合相设置

图6.混合相设置

为了进一步贴近航空伺服阀的真实工况,选择入口压力为10MPa,出口背压为0.1MPa。接下来选用合适的求解器,在SIMPLE算法中,为了求解方便简化了速度修正值方程,从而把速度的修正完全归结为压差项的直接作用。虽然不会影响收敛解,但是加重了修正值的负担,降低了速度场迭代收敛的速度。SIMPLEC在求解NS方程时,没有简化了速度修正值方程,不再需要对压力修正值进行欠松弛处理,加快了求解速度。SIMPLEC方法能够在网格扭曲度大的情况下依然具有良好的质量守恒效果,而且亚松弛迭代可以加快收敛速度。

本文通过连续性方程和动量方程得到的压力速度关系不停迭代直到达到质量守恒,进而求解速度场和压力场。梯度项采用Green-Gauss 单元法,压力项离散使用PRESTO!格式,该格式适用于四面体和六面体网格单元,并且在高漩涡流和多相流计算中能够达到较高的精度;动量项的离散采用二阶迎风格式,该格式能够有效的防止小尺度漩涡在计算过程中的耗散;气体体积分数项采用二阶迎风格式;同时由于LES方法(湍流模型,LES为大涡模拟模型)在一定程度上属于直接数值模拟,所以时间项离散选用二阶精度格式。相关设置如图7所示。

a)求解器设置

(b)求解器设置

图7.求解方法设置以及求解步数

需要注意的是,时间步长是瞬态计算中最重要的参数,瞬态计算的步骤通常比较多,我认为造成此现象有两个原因:时间步长小以及为了有足够的流动时间。时间步长的问题在网上已有公式可以大概估算:网格最小长度与这个方向的流体速度的比值。

就拿本例来说,网格x方向的长度为1e-3m,x方向流速为100m/s,则时间步长为1e-5s。而这个网格尺寸对应的流域尺寸对应的流体充满流域的时间经估算为1e-04s,因此你需要跑至少100个时间步,同时为了每个时间步长内的计算收敛,需要调整每个时间步长内的迭代步数,此case里调试后150步认为是合适的,运算至流体充满整个流域且到达稳定需要200×150=30000步,intel的至强系列处理器(10核)需要运行一天,普通的i9-9900K (10核)需要计算2天左右。而利用北鲲云超算128核仅需1个小时。

全部设置完成后,将文件另存为LES.cas文件。

打开北鲲云超算平台的控制台,打开fluent软件(需要有许可证哦!),将LES.cas文件上传至Desktop文件夹。然后连接远程电脑,提交作业。

北鲲云的可视化图形界面最高支持128核计算,非常方便,小白无需培训即可上手。本文所使用的ANSYS版本均为2020R1版本。

计算完成后,可以方便的在远程电脑处理文件,或者在控制台的界面对应的文件传输栏,下载你所需的文件,非常方便,最重要的一点是,CPU不运行时,不计费,这一点可以说是十分人性化了。

图8.北鲲云超算平台远程电脑端操作界面

图9.北鲲云超算平台文件传输界面

后处理可以在远程电脑端直接完成,也可下载到自己电脑处理。计算过程中,可以看到残差曲线如图10所示。可以看到每次迭代的残差下降三个数量级,可认为计算结果可靠。

图10.瞬态计算残差曲线

计算完成后,在你运行文件保存的文件夹里(此case计算结果存于Desktop文件夹中)选择文件下载到自己的电脑进行相应的处理。

LES(大涡模拟)模型的基本思想是使用空间滤波器将大尺度漩涡和小尺度漩涡分离,大尺度的涡直接求解,小尺度的涡用雷诺时均模型求解。适用于求解涡流较多的流场。求解结果为瞬态值。而我们大家平常用的标准k-e模型只能计算流体的平均运动,它适用于高雷诺数完全湍流的情况,在伺服阀前置级模型中的流域并非属于完全的湍流。

图11.两种模型的区别

引用北交大学者姚磊的研究结果,可以发现两种模型下对于涡的描述不同,LES可以很好的描述小尺度涡。

接下来可以分析此case的计算结果,瞬态分析的目的是获取流场的瞬态特性,如气穴局部时频数据、压力出口的流速脉动以及局部压力的脉动数据等等。接下来就以本case流场为例,分析此流场的瞬态特性。

计算得到都是.h5文件,需要用到对应版本的专业后处理软件Tecplot,将所有.h5文件导入Tecplot中,然后勾选云图按钮以及选择对应的变量,即可生成对应的时刻的云图,设置如图13所示。

生成的云图如图14所示,可以看到由于射流区域存在一定的拐角,导致在拐角附近的流速急速变化引起压力发生急剧变化,有些区域的压力低于饱和蒸汽压,则会产生气穴现象,有的区域气穴分数达到了0.9以上,这意味着局部压力很低。同时气穴伴随着周期性的变化,导致流场发生脉动。

图12.Tecplot的云图设置

图13.5e-4s时刻的气穴分布图

要想更清楚的观察流场气穴分布情况,可以将左侧操作栏的ISO-Surface勾选上,可以得到气穴的等值面图,如图14所示。

图14.5e-4s时刻的气穴等值面分布图

为了看清楚流场内部的流况,取YX平面,提取切片,设置如图16所示,可以得到相应的切片位置,我们接下来分流场的速度云图、压力云图以及气穴云图等数据。

图15.云图切片设置

如图16所示,这是伺服阀前置级射流流场的速度云图,可以看到,流场在10MPa的入口压力下可以产生高达百米每秒的流速,伺服阀前置级射流的目的是为了放大滑阀级的控制,起到前置级放大的效果,这里的流场做了简化,没有连接滑阀两端的接收腔。可以看到在射流区域,流速最高可以达到160m/s,在V型槽的上游有部分回流。

图16.流场速度云图

接下来更改云图的变量选项,选择压力,得到如下图所示切片压力分布图。

图17.压力分布云图

可以看到在冲击底部时压力升高,这是由于动能转化为压力能的结果,其中两侧有些许压力分布不均匀的情况,通过气穴云图可以更好的观察此现象,如图18所示为切片的气穴云图。

图18.气穴分布云图

可以看到在瞬态运动中,即使是完全对称的结构,产生的气穴现象都是不对称的,这是因为湍流的影响,湍流的不确定性带来了流动的规律性波动。

到了这里,有的同学可能要问,如果想提取出某点对应的某变量随时间变化的曲线该怎么做?这个问题很好解决,点击菜单栏里的tools,选择Probe to Create time series Plot 选择你想要的点,即可得到如图19所示的曲线。

图19.某点速度随时间变化

以上就是本教程的所有内容,涵盖了完整的一次fluent瞬态计算的全部过程,包括前处理,求解器设置,以及后处理等,而所有的操作均可以在北鲲云里完成,无需配备高性能计算机以及节省了安装繁琐的工具的时间,同时调研了多种超算平台,发现北鲲云的价格优势巨大,同等算例下耗费的同等时间下,其他平台的计算成本是北鲲云的1~4倍。

有关关于Fluent瞬态计算你必须掌握的3个技巧的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  4. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  5. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  6. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  7. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  8. ruby - 为什么必须明确指定 2 个参数才能 curry :> - 2

    考虑这个,它工作正常::>.to_proc.curry(2)[9][8]#=>true,because9>8然而,即使>是一个二元运算符,如果没有指定的元数,上面的代码将无法工作::>.to_proc.curry[9][8]#=>ArgumentError:wrongnumberofarguments(0for1)为什么两者不等价?注意:我特别想用提供的一个参数创建中间柯里化(Currying)函数,然后然后调用然后用第二个参数调用它。 最佳答案 curry必须知道传入的过程的数量,对吧?:-1来自arity的负值令人困惑,但基本上

  9. ruby-on-rails - 为什么用户必须输入 7 位数的 Twitter PIN 才能授予我的应用程序访问权限? - 2

    我正在为我的用户实现一些ruby​​onrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需

  10. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

随机推荐