计算流体力学过渡到编程的傻瓜入门教程
- 格式:doc
- 大小:174.00 KB
- 文档页数:11
计算流体力学常用数值方法简介李志印 熊小辉 吴家鸣(华南理工大学交通学院)关键词 计算流体力学 数值计算一 前 言任何流体运动的动力学特征都是由质量守恒、动量守恒和能量守恒定律所确定的,这些基本定律可以由流体流动的控制方程组来描述。
利用数值方法通过计算机求解描述流体运动的控制方程,揭示流体运动的物理规律,研究流体运动的时一空物理特征,这样的学科称为计算流体力学。
计算流体力学是一门由多领域交叉而形成的一门应用基础学科,它涉及流体力学理论、计算机技术、偏微分方程的数学理论、数值方法等学科。
一般认为计算流体力学是从20世纪60年代中后期逐步发展起来的,大致经历了四个发展阶段:无粘性线性、无粘性非线性、雷诺平均的N-S方程以及完全的N-S方程。
随着计算机技术、网络技术、计算方法和后处理技术的迅速发展,利用计算流体力学解决流动问题的能力越来越高,现在许多复杂的流动问题可以通过数值计算手段进行分析并给出相应的结果。
经过40年来的发展,计算流体力学己经成为一种有力的数值实验与设计手段,在许多工业领域如航天航空、汽车、船舶等部门解决了大量的工程设计实际问题,其中在航天航空领域所取得的成绩尤为显著。
现在人们已经可以利用计算流体力学方法来设计飞机的外形,确定其气动载荷,从而有效地提高了设计效率,减少了风洞试验次数,大大地降低了设计成本。
此外,计算流体力学也己经大量应用于大气、生态环境、车辆工程、船舶工程、传热以及工业中的化学反应等各个领域,显示了计算流体力学强大的生命力。
随着计算机技术的发展和所需要解决的工程问题的复杂性的增加,计算流体力学也己经发展成为以数值手段求解流体力学物理模型、分析其流动机理为主线,包括计算机技术、计算方法、网格技术和可视化后处理技术等多种技术的综合体。
目前计算流体力学主要向二个方向发展:一方面是研究流动非定常稳定性以及湍流流动机理,开展高精度、高分辩率的计算方法和并行算法等的流动机理与算法研究;另一方面是将计算流体力学直接应用于模拟各种实际流动,解决工业生产中的各种问题。
计算流体力学知识点计算流体力学这玩意儿,听起来是不是有点高大上,有点让人摸不着头脑?其实啊,它就藏在我们生活的方方面面,就像一个神秘的小伙伴,时不时地跳出来给我们一些惊喜或者挑战。
咱们先来说说啥是计算流体力学。
简单来讲,它就是一门专门研究流体流动的学问。
比如说,水流过河道、风吹过城市、汽车在空气中飞驰,这些都涉及到流体的流动。
那计算流体力学就是用数学和计算机的方法,来搞清楚这些流动是怎么回事,会产生啥影响。
我记得有一次,我去公园里散步。
那天风挺大的,湖边的柳枝被吹得左摇右摆。
我就突然想到,这风不就是一种流体嘛!它的速度、方向还有力量,都在不断地变化。
如果用计算流体力学的知识来分析,就能算出风在经过不同的障碍物时,速度会怎么降低,压力会怎么变化。
计算流体力学里有一个特别重要的概念,叫控制方程。
这就像是流体流动的“宪法”,规定了它们得怎么动。
比如说连续性方程,它说的是流入一个区域的流体质量,得等于流出这个区域的流体质量,就跟咱们过日子一样,收入和支出得平衡。
还有动量方程,它描述了流体的受力和运动之间的关系,就像你推一个箱子,用的力越大,箱子跑得就越快。
在实际应用中,计算流体力学可厉害了。
比如说在航空航天领域,设计飞机的外形就得靠它。
飞机在天上飞,周围的空气就是流体。
通过计算流体力学的模拟,可以知道怎么设计飞机的翅膀、机身,才能让飞机飞得更快、更稳,还能省油。
汽车行业也是一样,要让汽车的外形更符合空气动力学,减少风阻,提高速度和燃油效率,都得靠计算流体力学来帮忙。
还有能源领域,像火力发电厂的冷却塔,里面热气腾腾的水蒸气往外冒,怎么让这些水蒸气排放得更顺畅,提高发电效率,也得靠计算流体力学来优化设计。
在数值解法这一块,有限差分法、有限体积法和有限元法是常用的几招。
有限差分法就像是把流体流动的区域切成一个个小格子,然后在这些格子上算数值。
有限体积法呢,则是关注每个小体积里的物理量守恒。
有限元法就像是搭积木,把流动区域分成一个个小单元来计算。
计算流体力学编程教程第10节计算流体力学是一门关键的学科,它涉及的领域非常广泛,包括
空气动力学、水动力学等等。
在今天的工业和科技领域中,CFD模拟和计算已成为必要的工具。
因此,每一个计算机工程师或科学家都应该
掌握CFD编程。
首先,学习CFD编程需要了解流体力学的基础知识,如Navier-Stokes方程、数学方法等。
通过建立数学模型和边界条件,我们才能
开始编写CFD程序。
在这个过程中,需要采用合理的计算方法和算法,比如有限体积法(FVM)和有限元法(FEM)。
这些方法不仅可以提高
程序的精度和鲁棒性,还可以提高程序的运行效率,以便在合理的时
间内获得结果。
其次,正确使用CFD软件和相关工具非常重要。
需要掌握一些流
行的CFD软件,如OpenFOAM、Ansys Fluent等,这些软件提供了完整
的CFD模拟和计算环境,包括网格划分、边界条件设置、求解器选择等。
此外,还需要了解一些标准的网格文件格式,如STL、VRML等,
方便实现三维模型的导入和导出。
最后,与实践结合非常重要。
我们可以通过模拟实现真实环境的
数值计算,比如压力、流速等等,从而分析流体的行为和反应特性。
通过分析计算结果,我们可以改进和优化设计,提高产品性能。
总而言之,掌握CFD编程需要明确流体力学基础知识、选择合适的计算方法、正确使用软件和工具,并与实践相结合。
通过不断地学习和实践,我们可以成为真正的CFD编程专家。
ICEM_CFD基础入门教程操作界面中文ICEM_CFD是一款常用的计算流体力学(CFD)前处理软件,它可以用来进行几何建模、网格生成以及网格质量改进等操作。
本教程将介绍ICEM_CFD软件的基础入门操作界面,并详细说明其主要功能和使用方法。
1.工作窗口:-图层窗口:用于管理不同的几何元素和网格单元。
可以将几何模型和网格分别分配到不同的图层中,便于管理和操作。
2.工具栏:-文件操作:包括新建、打开、保存和导出等文件操作。
-网格操作:包括网格划分、网格改进、网格质量检查和网格参数设置等操作。
-显示选项:可以选择显示几何模型、网格和图层等,方便用户对模型进行观察和分析。
-操作模式:设置不同的操作模式,如选择模式、移动模式、旋转模式和缩放模式等,方便用户进行几何模型和网格的操作和调整。
3.属性窗口:-几何模型属性:可以设置几何模型的名称、颜色和透明度等属性。
-网格生成属性:可以设置网格单元类型、边界条件和网格参数等属性。
-网格质量属性:可以设置网格质量检查和改进的参数和标准。
-显示属性:可以设置几何模型和网格的显示方式、颜色和透明度等属性。
4.建模流程:在ICEM_CFD中,进行建模和网格生成的一般流程如下:-导入CAD几何模型:可以通过导入现有的CAD几何模型文件,如STEP、IGES或者CATIA等文件格式,或者直接在ICEM_CFD中手动创建几何模型。
-网格划分:在几何模型的基础上进行网格划分,可以使用不同的网格划分算法和参数设置,生成合适的网格。
-网格改进:对生成的网格进行质量检查和改进,可以使用网格质量检查工具来查看和修复网格质量问题,并采用网格平滑和网格形变等操作来改进网格质量。
-边界条件设置:在网格上设置边界条件,包括流动边界条件、壁面边界条件和入出口边界条件等。
- 导出网格:将生成的网格导出为适用于CFD计算的文件格式,如ANSYS Fluent、OpenFOAM等格式。
通过上述步骤,可以完成几何建模和网格生成的基本操作和流程。
计算流体力学入门第一章基本原理和方程1.计算流体力学的基本原理1.1为什么会有计算流体力学1.2计算流体力学是一种科研工具1.3计算流体力学是一种设计工具1.4计算流体力学的冲击-其它方面的应用1.4.1汽车和发动机方面的应用1.4.2工业制造领域的应用1.4.3土木工程中的应用1.4.4环境工程中的应用1.4.5海军体形中的应用(如潜艇)在第一部分,作为本书的出发点,首先介绍计算流体力学的一些基本原理和思想,同时也导出并讨论流体力学的基本控制方程组,这些方程组是计算流体力学的物理基础,在理解和应用计算流体力学的任何一方面之前,必须完全了解控制方程组的数学形式和各项的物理意义,所有这些就是第一部分的注意内容。
1.1 为什么有计算流体力学时间:21世纪早期。
地点:世界上任何地方的一个主要机场。
事件:一架光滑美丽的飞机沿着跑道飞奔,起飞,很快就从视野中消失。
几分钟之内,飞机加速到音速。
仍然在大气层内,飞机的超音速燃烧式喷气发动机将飞机推进到了26000ft/s-轨道速度-飞行器进入地球轨道的速度。
这是不是一个充满幻想的梦?这个梦还没有实现,这是一个星际运输工具的概念,从20世纪八十年代到九十年代,已经有几个国家已经开始这方面的研制工作。
特别的,图1.1显示的是一个艺术家为NASD设计的飞行器的图纸。
美国从八十年代中期开始就进行这项精深的研究。
对航空知识了解的人都知道,象这种飞行器,这样的推进力使飞机飞的更快更高的设想总有一天会实现。
但是,只有当CFD发展到了一定程度,能够高效准确可靠的计算通过飞行器和发动机周围的三维流场的时候,这个设想才能实现,不幸的是地球上的测量装置-风洞-还不存在这种超音速飞行的飞行体系。
我们的风洞还不能同时模拟星际飞行器在飞行中所遇到的高Ma和高的流场温度。
在21世纪,也不会出现这样的风洞,因此,CFD就是设计这种飞行器的主要手段。
为了设计这种飞行器和其它方面的原因,出现了CFD-本书的主要内容。
计算流体力学速成课
计算流体力学速成课程,是帮助学生快速掌握流体力学基本原理、基础概念及相关计算方法的学习课程。
课程主要内容包括:
一、流体力学标准
在本课程中,将介绍流体力学的基本概念,并阐述流体力学的基
本定义、基本方程及流体力学分析的研究方法。
包括集合无量纲和摩
擦的计算,揭示流体力学的物理形式、数学模型、复杂流动特征及其
应用。
二、计算流体力学基础
本课程将深入讲解流体力学中的三维速度场、密度场和压力场的
流体力学计算,以及流体力学计算中必不可少的方程,如热传导方程、平衡方程、拉格朗日方程等。
三、计算流体力学应用
本课程将着重介绍计算机辅助计算流体力学(CFD)技术,讲解该
技术的基本原理、技术特点以及应用领域,为学生提供完整的计算流
体力学实用技能。
四、实验技术
实验技术将让学生实践流体力学中的实验技术,学习如何使用流
体力学仪器进行实验测量、数据处理和模拟试验等。
总之,计算流体力学速成课程,旨在帮助学生快速系统掌握流体
力学的基本原理、基础概念及相关计算方法,以提高学生对流体力学
的理解和应用知识,为他们未来的专业学习和工作作好充分的准备。
计算流体力学Simple算法1.概述计算流体力学是研究流体运动的一门学科,它的应用范围非常广泛,涵盖了航空航天、能源、环境等多个领域。
Simple算法是计算流体力学中常用的一种简单算法,它可以用于求解流动问题的速度场和压力场。
本文将介绍Simple算法的基本原理、算法流程和应用。
2.基本原理Simple算法是一种基于有限体积法的迭代算法,用于求解流体力学中的Navier-Stokes方程。
它采用的是一个迭代求解压力修正方程和速度修正方程的过程,通过多次迭代,最终得到流体速度场和压力场的数值解。
3.算法流程Simple算法的具体流程如下:步骤一:初始化速度场和压力场,设定收敛准则和迭代次数。
步骤二:根据初始速度场和压力场,计算出流体的质量流率。
步骤三:求解压力修正方程,更新压力场。
步骤四:根据修正后的压力场,求解速度修正方程,更新速度场。
步骤五:检查收敛准则,若未满足则继续迭代,直到满足收敛准则为止。
步骤六:输出最终的速度场和压力场。
4.应用Simple算法适用于各种流动问题,如管道流动、湍流流动等。
它在工程实践中有着广泛的应用,可以用于设计飞机、汽车、船舶等流体力学性能优化的计算模拟。
Simple算法还可以用于求解自然界中的流体现象,如海洋环流、空气动力学等领域。
5.总结Simple算法作为计算流体力学中的一种简单且有效的算法,在工程和科学研究中有着重要的应用价值。
通过本文的介绍,读者可以对Simple算法有一个初步的了解,希望能对相关领域的研究和应用提供一定的参考和帮助。
下面是针对Simple算法的进一步扩展和讨论:6. Simple算法的优缺点Simple算法具有如下优点:- 算法简单易懂,易于实现和使用。
- 对于一些中小规模的流体力学问题,Simple算法的计算效率较高,能够快速求解。
- 由于Simple算法的收敛速度通常较快,对于某些较为简单的流动问题,可以在较少的迭代次数内得到满意的结果。
CFD理论过渡到编程的傻瓜入门教程(注:这是一篇不知道谁写的介绍一维无粘可压缩Euler方程,以及如何编程实现求解该方程的论文。
作者从最基本的概念出发,深入浅出的讲解了控制方程,有限体积格式,MSUCL方法,限制器,Roe格式等相关知识。
这篇论文我觉得有利于大家学习CFD编程的相关知识,所以推荐给大家。
文章的后面附有我写的程序(C语言),用于求解一维激波管问题,大家有兴趣可以看看(程序中加了注释说明)胡偶2011)借宝地写几个小短文,介绍CFD的一些实际的入门知识。
主要是因为这里支持Latex,写起来比较方便。
CFD,计算流体力学,是一个挺难的学科,涉及流体力学、数值分析和计算机算法,还有计算机图形学的一些知识。
尤其是有关偏微分方程数值分析的东西,不是那么容易入门。
大多数图书,片中数学原理而不重实际动手,因为作者都把读者当做已经掌握基础知识的科班学生了。
所以数学基础不那么好的读者往往看得很吃力,看了还不知道怎么实现。
本人当年虽说是学航天工程的,但是那时本科教育已经退步,基础的流体力学课被砍得只剩下一维气体动力学了,因此自学CFD的时候也是头晕眼花。
不知道怎么实现,也很难找到教学代码——那时候网络还不发达,只在教研室的故纸堆里搜罗到一些完全没有注释,编程风格也不好的冗长代码,硬着头皮分析。
后来网上淘到一些代码研读,结合书籍论文才慢慢入门。
可以说中间没有老师教,后来赌博士为了混学分上过CFD专门课程,不过那时候我已经都掌握课堂上那些了。
回想自己入门艰辛,不免有一个想法——写点通俗易懂的CFD入门短文给师弟师妹们。
本人不打算搞得很系统,而是希望能结合实际,阐明一些最基本的概念和手段,其中一些复杂的道理只是点到为止。
目前也没有具体的计划,想到哪里写到哪里,因此可能会很零散。
但是我争取让初学CFD 的人能够了解一些基本的东西,看过之后,会知道一个CFD代码怎么炼成的(这“炼”字好像很流行啊)。
欢迎大家提出意见,这样我尽可能的可以追加一些修改和解释。
物理建模中的计算流体力学技术使用方法计算流体力学(Computational Fluid Dynamics,CFD)是一种通过数学模型和计算机仿真来研究流体力学问题的方法。
在物理建模中,计算流体力学技术广泛应用于设计和分析涉及流体流动的系统,如飞行器、汽车、建筑和能源设备等领域。
本文将介绍物理建模中常用的计算流体力学技术使用方法。
首先,对于计算流体力学技术的使用,首要的步骤是建立准确的几何模型。
在物理建模中,几何模型可以通过3D建模软件或CAD工具来创建。
准确的几何模型可以提供精确的几何信息,这对于后续的计算流体力学分析非常重要。
确保几何模型的准确性,包括去除不必要的几何细节和优化几何表示,将有助于提高计算效率和结果的准确性。
第二步是选择合适的数值方法和离散格式。
计算流体力学使用数值方法来离散化流体力学方程,将连续的偏微分方程转化为离散的代数方程。
数值方法的选择直接影响计算结果的准确性和计算的效率。
常见的数值方法包括有限差分法、有限元法和有限体积法。
在选择数值方法时,需要考虑问题的复杂性、计算资源的可用性以及数值方法的适用性。
第三步是设置数值模拟的边界条件。
边界条件是指在模拟过程中对流体流动的边界施加的限制条件。
边界条件可以包括流体入口速度、温度、压力、流量等。
合理设置边界条件可以模拟真实场景,并准确预测流体流动行为。
需要注意的是,边界条件的选择应基于问题的实际情况和实验数据,以保证模拟结果的准确性。
接下来是选择适当的求解算法。
计算流体力学方程通常是非线性、时间变化的偏微分方程组。
因此,解决这些方程需要使用迭代或递推算法。
在物理建模中常用的求解算法包括迭代法、迭代加速技术(如多重网格方法)和时间积分算法(如显式和隐式算法)。
选择适当的求解算法可以提高计算速度和求解精度。
在进行计算流体力学分析之前,应该对模型进行验证和验证。
验证是指根据已知的实验数据验证计算模型的准确性。
验证的目的是确保模型具有良好的预测能力。
ansys cfd 入门指南计算流体力学基础及应用【ansys cfd 入门指南计算流体力学基础及应用】1. 介绍计算流体力学(CFD)是一种利用计算机对流体流动和传热过程进行数值模拟和分析的技术。
在工程、航空航天、汽车、船舶、能源等领域中有着广泛的应用。
本文将详细介绍ansys cfd入门指南,帮助大家了解流体力学的基础知识和ansys cfd的应用。
2. 流体力学基础流体力学是研究流体运动的科学,它包括流体的基本性质、流体运动的基本规律和流体力学方程等内容。
在ansys cfd入门指南中,我们首先要了解流体的基本性质,如密度、粘度和压力等概念;其次是流体流动的基本规律,如连续性方程、动量方程和能量方程;最后是流体力学方程,如纳维-斯托克斯方程和能量方程的数学形式。
3. ansys cfd简介ansys cfd是一款强大的计算流体力学软件,它能够对流体流动、传热和传质等问题进行数值模拟和分析。
ansys cfd具有友好的用户界面和丰富的后处理功能,可以满足工程实际应用的需求。
在ansys cfd入门指南中,我们将学习如何使用ansys cfd进行流体力学仿真分析,包括建模、网格划分、求解和后处理等步骤。
4. ansys cfd的应用ansys cfd在工程领域有着广泛的应用,如风力发电机组的气动设计、汽车发动机的冷却系统优化、船舶的流体力学性能分析等。
在ansys cfd入门指南中,我们将结合实际案例,介绍如何使用ansys cfd解决实际工程问题,包括模型建立、边界条件设置、求解过程和结果分析等内容。
5. 个人观点和总结我认为ansys cfd入门指南对于学习流体力学和应用ansys cfd的人来说是非常有价值的。
通过系统学习流体力学的基础知识和ansys cfd 的使用方法,可以更好地理解流体力学的原理和应用。
ansys cfd作为一款先进的计算流体力学软件,可以为工程领域的问题提供可靠的数值模拟和分析方法,为工程设计和优化提供有力的支持。
作业:已知一流场满足下面的稳态对流扩散方程:()()⎪⎪⎭⎫⎝⎛∂∂+∂∂Γ=∂∂+∂∂2222y xyv xρu ϕϕϕρϕ其中:5=uρ,3=v ρ,5.0=Γ。
下图中,流场为正方形,边长为1,且50=ABϕ,100=BCϕ,300=CD ϕ,200=ADϕ。
用数值解法,计算此流场的ϕ分布。
解:一、离散化:原式代入数据并变形有:⎪⎪⎭⎫⎝⎛∂∂+∂∂⨯=∂∂⨯+∂∂⨯22225.035y xy x ϕϕϕϕ对上式进行数值求解,取各边步长均相等,并分别设0.1,0.05,0.04三种网格,此三种网格的贝克利数:Γ∆∙=∆xu P ρ,均大于零小于2,可以采用中心差分,离散后公式变为:⎪⎪⎭⎫⎝⎛∆+-+∆+-⨯=∆-⨯+∆-⨯++++21-j i,j ,i 1j ,i 2j,1-i j ,i j ,1i 1-j i,1j ,i j,1-i j ,1i 225.02325x x xxϕϕϕϕϕϕϕϕϕϕ整理后有:()()()()1-j ,i j ,1-i 1j ,i j ,1i j ,i 75.025.025.125.075.0-25.025.1-25.0ϕϕϕϕϕx x x x ∆++∆++∆+∆=++二、源程序:根据上式,利用C++进行编程,主要程序如下: float f1[200][200],f2[200][200],x; int i,j,n,a; printf("%s","输入步长x:");scanf("%f",&x);n=1.00/x;for(i=0;i<=n;i++) //给AB边赋值{ j=0;f1[i][j]=50;}for(j=0;j<=n;j++) //给AD边赋值{ i=0;f1[i][j]=200;}for(i=0;i<=n;i++) //给CD边赋值{ j=n;f1[i][j]=300;}for(j=0;j<=n;j++) //给BC边赋值{ i=n;f1[i][j]=100;}for(i=1;i<n;i++){for(j=1;j<n;j++) //给内部节点设初值f1[i][j]=50;}do{ a=0;for(i=0;i<=n;i++){for(j=0;j<=n;j++)f2[i][j]=f1[i][j]; //将f1的值赋给f2}for(i=1;i<n;i++){for(j=1;j<n;j++){f1[i][j]=(0.25-1.25*x)*f1[i][j+1]+(0.25-0.75*x)*f1[i-1][j]+(0.25+1.25*x)*f1[i][j-1]+(0.25+0.75 *x)*f1[i+1][j];}}for(i=1;i<n;i++){for(j=1;j<n;j++){if(fabs(f1[i][j]-f2[i][j])>=1e-3) //保证每个节点值的误差都小于0.001a=1;}}}while(a==1);三、计算结果(1)步长为0.1,则共有11行节点。
用matlab进行编程计算第一问:z=30;p1=50*9.8*10^4;p2=2*9.8*10^4;jdc=0.00015;gama=9800;d=0.257;L=50000 ;mu=6*10^(-6);hf=z+(p1-p2)/(0.86*gama)xdc=2*jdc/d;beta=4.15;m=1;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;Re1=59.7/xdc^(8*xdc/7);Re2=(665-765*log(xdc))/xdc;i=hf/L;if Re<3000Q=Q;elseif 3000<Re<Re1m=0.25;beta=0.0246;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;elseif Re1<Re<Re2m=0.123;A=10^(0.127*log(jdc/d)-0.627);beta=0.0802*A;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;elsem=0;langda=1/(2*log(3.7*d/jdc))^2;beta=0.0816*langda;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;endiQRevhf =588.1395i =0.0118Q =0.0915Re =7.5526e+004v =1.7632利用IF 语句对四种流态一一进行试算,最终的结果水力损失为588.1395m ,水力坡降0.0118第二问:将其中10km换成直径305mm的管子z=30;p1=50*9.8*10^4;p2=2*9.8*10^4;jdc=0.00015;gama=9800;mu=6*10^(-6);d= [0.257 0.305];L=[40000 10000];x=zeros(4,1);Q1=0.0915;hf=z+(p1-p2)/(0.86*gama);xdc=2*jdc./d;beta=4.15;m=1;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;Re1(1)=59.7/xdc(1)^(8/7);Re1(2)=59.7/xdc(2)^(8/7);Re2(1)=(665-765*log(xdc(1)))/xdc(1);Re2(2)=(665-765*log(xdc(2)))/xdc(2);if Re(1)<3000 & Re(2)<3000Q=Q;elseif 3000<Re(1)<Re1 & 3000<Re(2)<Re1m=0.25;beta=0.0246;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2) *d(2)/mu;elseif Re1<Re(1)<Re2 & Re1<Re(2)<Re2m=0.123;A=10^(0.127*log(jdc/d)-0.627);beta=0.0802*A;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;elsem=0;langda=1/(2*log(3.7*d/jdc))^2;beta=0.0816*langda;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;endQ Revq=Q-Q1baifenbi=q/Q1Q =0.0978Re =1.0e+004 *8.0795 6.8080v =1.8863 1.3393q =0.0063baifenbi =0.0694先假设流态均为层流,再进行试算,最终可得输量可提高6.94个百分点。
借宝地写几个小短文,介绍CFD的一些实际的入门知识。
主要是因为这里支持Latex,写起来比较方便。
CFD,计算流体力学,是一个挺难的学科,涉及流体力学、数值分析和计算机算法,还有计算机图形学的一些知识。
尤其是有关偏微分方程数值分析的东西,不是那么容易入门。
大多数图书,片中数学原理而不重实际动手,因为作者都把读者当做已经掌握基础知识的科班学生了。
所以数学基础不那么好的读者往往看得很吃力,看了还不知道怎么实现。
本人当年虽说是学航天工程的,但是那时本科教育已经退步,基础的流体力学课被砍得只剩下一维气体动力学了,因此自学CFD的时候也是头晕眼花。
不知道怎么实现,也很难找到教学代码——那时候网络还不发达,只在教研室的故纸堆里搜罗到一些完全没有注释,编程风格也不好的冗长代码,硬着头皮分析。
后来网上淘到一些代码研读,结合书籍论文才慢慢入门。
可以说中间没有老师教,后来赌博士为了混学分上过CFD专门课程,不过那时候我已经都掌握课堂上那些了。
回想自己入门艰辛,不免有一个想法——写点通俗易懂的CFD入门短文给师弟师妹们。
本人不打算搞得很系统,而是希望能结合实际,阐明一些最基本的概念和手段,其中一些复杂的道理只是点到为止。
目前也没有具体的计划,想到哪里写到哪里,因此可能会很零散。
但是我争取让初学CFD 的人能够了解一些基本的东西,看过之后,会知道一个CFD代码怎么炼成的(这“炼”字好像很流行啊)。
欢迎大家提出意见,这样我尽可能的可以追加一些修改和解释。
言归正传,第一部分,我打算介绍一个最基本的算例,一维激波管问题。
说白了就是一根两端封闭的管子,中间有个隔板,隔板左边和右边的气体状态(密度、速度、压力)不一样,突然把隔板抽去,管子内面的气体怎么运动。
这是个一维问题,被称作黎曼间断问题,好像是黎曼最初研究双曲微分方程的时候提出的一个问题,用一维无粘可压缩Euler方程就可以描述了。
这里这个方程就是描述的气体密度、动量和能量随时间的变化()与它们各自的流量(密度流量,动量流量,能量流量)随空间变化()的关系。
在CFD中通常把这个方程写成矢量形式这里进一步可以写成散度形式一定要熟悉这种矢量形式以上是控制方程,下面说说求解思路。
可压缩流动计算中,有限体积(FVM)是最广泛使用的算法,其他算法多多少少都和FVM有些联系或者共通的思路。
了解的FVM,学习其他高级点的算法(比如目前比较热门的间断有限元、谱FVM、谱FDM)就好说点了。
针对一个微元控制体,把Euler方程在空间积分用微积分知识可以得到也就是说控制体内气体状态平均值的变化是控制体界面上流通量的结果。
因此我们要计算的演化,关键问题是计算控制体界面上的。
FVM就是以这个积分关系式出发,把整个流场划分为许多小控制体,每个控制体和周围相邻的某个控制体共享一个界面,通过计算每个界面上的通量来得到相邻控制体之间的影响,一旦每个控制体的变化得到,整个流场的变化也就知道了。
所以,再强调一次,关键问题是计算控制体界面上的。
初学者会说,这个不难,把界面上的插值得到,然后就可以计算。
有道理!咱们画个图,有三个小控制体i-1到i+1,中间的“|”表示界面,控制体i 右边的界面用表示,左边的就是。
| i-1 | i | i+1 |好下个问题:每个小控制体长度都是如何插值计算界面上的?最自然的想法就是:取两边的平均值呗,但是很不幸,这是不行的。
那么换个方法?直接平均得到?还是很不行,这样也不行。
我靠,这是为什么?这明明是符合微积分里面的知识啊?这个道理有点复杂,说开了去可以讲一本书,可以说从50年代到70年代,CFD科学家就在琢磨这个问题。
这里,初学者只需要记住这个结论:对于流动问题,不可以这样简单取平均值来插值或者差分。
如果你非要想知道这个究竟,我现在也不想给你讲清楚,因为我眼下的目的是让你快速上手,而且该不刨根问底的时候就不要刨根问底,这也是初学阶段一种重要的学习方法。
好了,既然目的只是为了求,我在这里,只告诉你一种计算方法,也是非常重要、非常流行的一种方法。
简单的说,就是假设流动状态在界面是不连续的,先计算出界面两边的值,和,再由它们用某种方法计算出。
上述方法是非常重要的,是由一个苏联人Godunov在50年代首创的,后来被发展成为通用Godunov方法,著名的ENO/WENO就是其中的一种。
好了,现在的问题是:1 怎么确定和2 怎么计算对于第一个问题,Godunov在他的论文中,是假设每个控制体中是均匀分布的,因此第二个问题,Godunov采用了精确黎曼解来计算。
什么是“精确黎曼解”,就是计算这个激波管问题的精确解。
既然有精确解,那还费功夫搞这些FVM算法干什么?因为只有这种简单一维问题有精确解,稍微复杂一点就不行了。
精确解也比较麻烦,要分析5种情况,用牛顿法迭代求解(牛顿法是什么?看数值计算的书去,哦,算了,现在暂时可以不必看)。
这是最初Godunov的方法,后来在这个思想的基础上,各种变体都出来了。
也不过是在这两个问题上做文章,怎么确定,怎么计算。
Godunov假设的是每个小控制体内是均匀分布,也就是所谓分段常数(piecewise constant),所以后来有分段线性(picewise linear)或者分段二次分布(picewise parabolic),到后来ENO/WENO出来,那这个假设的多项式次数就继续往上走了。
都是用多项式近似的,这是数值计算中的一个强大工具,你可以在很多地方看到这种近似。
Godunov用的四精确黎曼解,太复杂太慢,也不必要,所以后来就有各种近似黎曼解,最有名的是Roe求解器、HLL求解器和Osher求解器,都是对精确黎曼解做的简化。
这个多项式的阶数是和计算精度密切相关的,阶数越高,误差就越小。
不过一般来说,分段线性就能得到不错的结果了,所以工程中都是用这个,Fluent、Fastran以及NASA的CFL3D、OverFlow都是用这个。
而黎曼求解器对精度的影响不是那么大,但是对整个算法的物理适用性有影响,也就是说某种近似黎曼求解器可能对某些流动问题不合适,比如单纯的Roe对于钝头体的脱体激波会算得乱七八糟,后来加了熵修正才算搞定。
上次()说到了求解可压缩流动的一个重要算法,通用Godunov方法。
其两个主要步骤就是1 怎么确定和2 怎么计算这里我们给出第一点一个具体的实现方法,就是基于原始变量的MUSCL 格式(以下简称MUSCL)。
它是一种很简单的格式,而且具有足够的精度,NASA著名的CFL3D软件就是使用了这个格式,大家可以去它的主页()上看手册,里面空间离散那一章清楚的写着。
MUSCL假设控制体内原始变量(就是)的分布是一次或者二次多项式,如果得到了这个多项式,就可以求出控制体左右两个界面的一侧的值和。
我们以压力p为例来说明怎么构造这个多项式。
这里我只针对二次多项式来讲解,你看完之后肯定能自己推导出一次多项式的结果(如果你搞不定,那我对你的智商表示怀疑)。
OK,开始假设,这个假设不影响最终结论,因为你总可以把一个区间线性的变换到长度为1的区间。
假设压力p在控制体i内部的分布是一个二次多项式,控制体i的中心处于处,左右两个界面就是和。
这里先强调一个问题,在FVM中,每个控制体内的求解出来的变量实际上是这个控制体内的平均值。
所以,。
我们知道,和,等距网格情况下和处的导数可以近似表示为那么由上述三个有关a,b和c的方程,我们可以得到这样就可以得到f(x)的表达式了,由此可以算出和通常MUSCL格式写成如下形式对应我们的推导结果(二次多项式假设)。
但是这不是最终形式。
如果直接用这个公式,就会导致流场在激波(间断)附近的振荡。
因为直接用二次多项式去逼近一个间断,会导致这样的效果。
所以科学家们提出要对间断附近的斜率有所限制,因此引入了一个非常重要的修改——斜率限制器。
加入斜率限制器后,上述公式就有点变化。
这里是Van Albada限制器是一个小数(),以防止分母为0。
密度和速度通过同样的方法来搞定。
密度、速度和压力被称作原始变量,所以上述方法是基于原始变量的MUSCL。
此外还有基于特征变量的MUSCL,要复杂一点,但是被认为适合更高精度的格式。
然而一般计算中,基于原始变量的MUSCL由于具有足够的精度、简单的形式和较低的代价而被广泛使用。
OK,搞定了。
下面进入第二点,怎么求。
关于这一点,我不打算做详细介绍了,直接使用现有的近似黎曼解就可以了,都是通过和计算得到。
比如Roe因为形式简单,而非常流行。
在CFL3D软件主页()上看手册,附录C的C.1.3。
想了一下,还是把Roe求解器稍微说说吧,力求比较完整。
但是不要指望我把Roe求解器解释清楚,因为这个不是很容易三言两语说清的。
Roe求解器的数学形式是这样的显然这个公式的第一项是一个中心差分形式,先前说过简单的中心差分不可行,原因是耗散不足导致振荡,说得通俗点就像一个弹簧,如果缺乏耗散(阻尼)它就会一直振荡。
“耗散”这个术语在激波捕捉格式中是最常见的。
第二项的作用就是提供足够的耗散了。
这里和已经用MUSCL求得了,的定义在第一讲中已经介绍了。
只有是还没说过的。
这个矩阵可以写成特征矩阵和特征向量矩阵的形式而,,和的具体表达式在许多书上都有,而且这里的矩阵表达有问题,所以就不写了。
是由、和代入计算得到。
而、和采用所谓Roe平均值这才是Roe求解器关键的地方!总结一下,就是用Roe平均计算界面上的气体状态,然后计算得到,这样就可以得到了。
如果有时间,我后面会找一个代码逐句分析一下。
计算流体力学过渡到编程的傻瓜入门教程总之,计算还是很不直接的。
构造近似黎曼解是挺有学问的,需要对气体动力学的物理和数学方面有较深的理解。
通常,如果不是做基础研究,你只需要知道它们的特点,会用它们就可以了,而不必深究它们怎么推导出来的。
11 / 11。