首页/文章/ 详情

【经典教材翻译】10-管道的粘性流动

8天前浏览264

1.管道中的粘性流动


     

   

管道与流体流动密切相关。在日常生活中,我们经常遇到管道流动的例子——家庭和办公室的水和燃气供应,在流体机械中,以及长距离输送石油等。

流动可以分为内部流动外部流动。 内部流动进一步分为管道流动明渠流动。 管道流动是指流体完全填充管道的情况。主要驱动力是压力,尽管重力也可能对流动有所贡献。明渠流动是开放的,流体没有完全填充管道。驱动力是重力。

图1:流动分类


2.流动的分类,层流和湍流


     

   

流动可以是层流、湍流或过渡流的性质。根据遇到的流动类型,会得到非常不同的结果。 这一点在奥斯本·雷诺兹Osborne Reynolds(1842-1912)进行的实验中得到了证明。他在玻璃管(图2)中的流动中注入了染料,以观察流动的性质。当速度较小时,流动沿直线路径流动(由于染料扩散而略有模糊)。随着流速的增加,染料波动并观察到间歇性的爆发。当流速进一步提高时,染料变得模糊并开始填充整个管道的宽度。 这些不同的结果展示了层流、过渡流和湍流

图2:雷诺实验

为了详细测量发生的情况,可以使用现代电子设备进行实验,热线风速仪。这种仪器测量某一点的瞬时速度。图3显示了三种流动状态下速度的踪迹。层流在主要流动方向上具有主要速度分量,湍流在流动法线方向上具有显著的速度分量。而层流是"有序的",湍流是"随机的"和"混乱的"。

图3:湍流(顶部)、过渡流(中间)和层流(底部)的热线信号

如果管道中的雷诺数(基于管道直径)小于2100,则流动是层流;如果大于4000,则为湍流。过渡流在这两个极限之间占主导地位。然而,这些是一般化的结果,一些实验通过仔细监测的条件在非常高的雷诺数下发现了保持层流的情况,或者在非常粗糙的表面上在较低的雷诺数下发现了湍流。

图4:管道入口处的流动

考虑流动进入管道的情况。进入的流动假定是均匀的,所以无粘性。一旦流动遇到管道壁,速度变化就会发生。 粘度在管道壁上施加了"无滑动No Slip"条件。

因此,管道壁上的速度分量均为零,即u = v = 0。管道壁附近的流动沿管道移动时减速。管道壁附近的边界层建立了速度剖面。边界层内粘性效应占主导地位。在这层之外,无粘性核心保持不变,直到来自对面的边界层增长在中心线汇合。 这可以在图4中看到。一旦发生这种情况,无粘性核心就终止了,流动完全变成粘性的。现在这种流动被称为完全发展流动Fully Developed Flow。速度剖面变成抛物线形,并且在流动方向上不变化。在这个区域,压力梯度和流动中的剪切应力是平衡的。管道的这段长度,从开始到完全发展流动开始的点,称为入口长度Entrance Length。用Le表示,入口长度是流动雷诺数的函数。一般来说,

其中ReD是基于"入口直径"的雷诺数。

在临界条件下,即ReD =2300,层流的Le/D138。 在湍流条件下,它从18(在ReD = 4000)变化到95(在ReD=108


3.管道沿程的压力


     

   

沿管道作用的力是惯性力、剪切引起的粘性力和压力力。如果管道是水平的,可以忽略重力。 当流动完全发展时,压力梯度和剪切力相互平衡,流动以恒定的速度剖面继续。压力梯度保持恒定。 在入口区域,流体正在减速。 惯性、压力和剪切力之间达到平衡。这部分流动的压力梯度不是恒定的,并且如图5所示,随着流动的进行而减小。

图5:管道中沿流动的压力分布。


4.管道中的完全发展层流


     

   

考虑管道中的完全发展层流,可以推导出速度剖面的表达式,然后计算出有用的实际结果。 这种推导可以通过多种方式进行——(1)通过控制体积分析,(2)从纳维-斯托克斯方程,或(3)通过尺寸分析。


5.体积流量


     

   

管道流动中感兴趣的量是体积流量,通过积分速度剖面获得。考虑半径为r的圆盘厚度为dr, 则

积分得到

得到

如果定义平均速度V,使得V=Q /A 可以验证

以压力梯度表示的体积流量写成,


6.非水平管道的校正


     

   

如果前面分析中考虑的管道不是水平的,那么在计算速度和体积流量时应该包括重力效应。 参考图8,如果流动与水平线成θ角倾斜,压力差项需要修改。

图8:倾斜管道中的流动。

因此,力的平衡变为

其他方程中的压力差项也需要替换。

因此,



7.能量考虑,摩擦因子


     

   

图9:管道流动的能量平衡。

再次考虑前面的管道流动部分,可以进行能量分析。参考图9,对于质量平衡,

由于流动是不可压缩的,管道横截面积是恒定的,

现在应用稳态流动的能量方程,

注意上述方程中的每个项都具有长度的量纲。由于正在考虑完全发展的流动,那么 α1 = α2。 在(1)和(2)之间没有外部特征可以添加或移除能量。因此,损失的头由下式给出,

在控制体积上的x方向上的力平衡给出,

注意,

除以πγR^2得到,

检查这些方程显示

这个结果对于层流和湍流都是有效的。


8.尺寸分析


     

   

通过尺寸分析,可以推导出管道流动中"损失头"的表达式。假设压力降与管道长度成比例,可以显示

因此,压力降现在变为,

其中

无量纲量f被称为"达西摩擦因子Darcy's Friction Factor"。对于层流,它由f=64/Re给出。

可以显示


9.管道中的湍流


     

   

可以使用纳维-斯托克斯方程以及湍流模型来计算湍流。为此开发了几种模型。它们从简单的代数模型开始,到最复杂的雷诺应力建模。此外,直接数值模拟(DNS)和大涡模拟(LES)是处理湍流的最新计算方法。这些数值方法的全面讨论超出了本节流体力学的范围。

基于实验发现,可以得到一个称为对数重叠定律Logarithmic Overlap Law的速度剖面。如下所示构建。


10.对数重叠定律


     

   

图10:对数重叠定律

图11:湍流边界层的速度和剪切应力剖面

图10显示了一个关于平板的湍流的典型边界层速度剖面。这个剖面与图11中也显示的剪切应力剖面一起研究。剖面以三个不同的区域或层次为特征——(1)壁层,(2)外层和(3)重叠层。


11.壁层


     

   

壁层是最靠近壁的层。在这层中,流动由粘性剪切力主导。从图11中可以清楚地看出,这层中的剪切应力几乎是恒定的。通过定义一个摩擦速度friction velocity

可以建立这层中,

由于按定义,ν=μ/ρ,壁层从壁开始延伸到一个y^+大约为5,并在重叠区域的y^+大约为30处与对数剖面合并。


12.重叠层


     

   

重叠层位于壁层和外层之间。顾名思义,这层中既存在层流剪切应力也存在湍流剪切应力。 速度剖面由对数定律给出,

其中卡门常数Karman constant κ0.41,B≈5.0


13.外层


     

   

外层位于重叠层旁边。发现在这层中uμ,分子粘性无关。流动由湍流剪切力主导。现在速度剖面由速度缺陷定律Velocity Defect Law给出。


14.幂律速度剖面


     

   

在许多工程计算中,可以使用简单的幂律近似来简化这种复杂的速度剖面模型,

指数"n"是雷诺数的函数。然而,n=7对于广泛的管道流动是一个良好的近似,并且是常用的。它被称为"七分之一幂律"。 然而,这个幂律不能用来计算壁剪切应力,因为它在壁上给出了无限的速度梯度。

对于幂律,可以显示平均速度与中心线速度的比率由下式给出,


来源:CFD饭圈
ACTFluentCFX燃烧湍流电子Polyflow控制ParaView管道
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-08
最近编辑:8天前
CFD饭圈
硕士 分享CFD文章,感谢关注
获赞 9粉丝 4文章 345课程 0
点赞
收藏
作者推荐

高效CFD代码开发:编译型、解释型和JIT语言哪一种好?

在计算流体动力学(CFD)等领域进行计算模拟或者开发求解器时,选择合适的编程语言至关重要。所选语言可以显著影响模拟的性能、开发过程和整体效率。因此,理解编程语言之间的细微差别变得非常重要。一、计算模拟中选择正确编程语言的重要性 编程世界提供了广泛的选择,每种语言都有其自身的优势和劣势。通过仔细考虑您的CFD应用程序的特定要求,您可以就使用哪种语言做出明智的决定。必须考虑计算需求、开发资源、项目目标和平台考虑等因素。二、编译型、解释型和即时编译(JIT)语言的差异 在深入了解CFD编程语言的细节之前,了解编译型、解释型和即时编译(JIT)语言之间的基本差异非常重要。编译型语言:编译型语言是在执行前将源代码翻译成机器代码的语言。这种转换由编译器执行,生成一个可执行文件,可以直接在目标平台上运行。在CFD领域中流行的编译型语言包括Fortran、C和C++。解释型语言:另一方面,解释型语言直接执行源代码,无需事先编译。解释器逐行读取并执行代码。Python和MATLAB是CFD领域广泛使用的知名解释型语言。即时编译(JIT)语言:JIT编译语言结合了编译型和解释型语言的元素。它们最初使用解释器执行代码,但在运行时,它们还对某些代码段进行动态编译成机器代码,优化性能。JIT编译对于计算密集型任务特别有益。在CFD中使用的JIT编译语言的例子包括C#、Julia和Java(带有V8等JIT编译器)。理解这些差异至关重要,因为它影响CFD模拟的各个方面,包括性能、执行速度、可移植性和开发过程。通过根据您的特定要求选择最合适的编程语言,您可以优化模拟的效率和生产力。在接下来的部分中,我们将探讨编译型和解释型语言,探索它们在CFD应用中的特性、优势和劣势。我们还将研究即时编译的作用以及它如何弥合编译型和解释型语言之间的差距,为CFD应用提供潜在的性能优势。三、编译型编程语言 编译型编程语言在CFD中提供高性能和高效率。例子包括Fortran、C、C++。它们在执行速度方面是黄金标准,但可能需要为不同的平台重新编译。开发和调试过程可能更加复杂。3.1 编译型语言的定义和特性 编译型语言是执行前经过编译过程的编程语言。在这个过程中,源代码被编译器翻译成特定于目标平台的机器代码。生成的编译程序可以直接执行,提供高水平的性能和效率。编译型语言的主要特点包括:效率:编译型语言以其高执行速度和效率而闻名。由于代码被转换为机器代码,可以直接被计算机硬件理解,因此可以充分利用系统资源,实现更快的执行时间。强类型:编译型语言通常强制执行严格的数据类型检查。这意味着变量和数据结构必须明确定义,允许在编译过程中更好地检测错误。3.2 CFD中流行的编译型语言示例 在计算流体动力学领域,由于它们的性能和计算能力,几种编译型编程语言已经获得了显著的地位。一些值得注意的例子包括:Fortran:Fortran(Formula Translation的缩写)在科学计算和CFD中有着悠久的历史。它高效的数组处理和数学库使其非常适合数值密集型模拟。大多数遗留代码仍然使用Fortran,上次你查看天气预报时看到的结果可能来自Fortran代码库。Fortran的示例代码包括NASA的CFL3D和FUN3D求解器。C和C++:C及其面向对象的扩展C++由于它们的低级控制和卓越性能,在CFD中被广泛使用。它们提供了广泛的库,允许高效的内存管理和与系统硬件的紧密交互。现在较新的CFD代码主要是用C++(如OpenFOAM、SU2)和C(如code_saturne)编写的。3.3 编译型语言的优势和劣势 性能和执行速度:编译型语言的主要优势是它们的高性能。通过直接将代码翻译成机器指令,编译型语言可以优化计算任务,实现CFD模拟的更快执行时间。可移植性和平台依赖性:编译型语言的一个挑战是它们的平台依赖性。由于编译代码特定于目标平台,可能需要重新编译或修改才能在不同的操作系统(Windows、macOS、UNIX(Linux))或硬件架构(32位vs64位)上运行。然而,这种负担可以通过使用平台 独立的编译器和构建系统来减轻。开发和调试过程:虽然编译型语言提供了高性能,但与解释型语言相比,开发和调试过程有时可能更加复杂。编译错误可能在构建过程中发生,需要仔细注意语法、类型检查和链接。调试编译型代码也可能需要更多的努力,因为低级访问和潜在的优化复杂性。小型代码库可能编译得快,但大型代码编译可能需要几分钟甚至几小时,需要进一步的策略来分块编译而不是整个代码库。尽管存在这些挑战,由于它们的性能优势和科学计算优化库的可用性,编译型语言仍然是CFD领域的流行选择。CFD模拟计算成本高,我们似乎总是需要比可用的计算资源更多的资源。性能是关键,作为一个好的CFD工程师,你需要至少精通一种编译型语言。C++是目前的流行选择,尽管学习曲线陡峭,特别是面向对象部分及其不断增长的复杂性,但了解C++在行业中被认为是一种资产。它通常排在最受欢迎和使用最多的编程语言前五名,并且有其庞大的指导委员会支持,C++在不久的将来不太可能改变。四、解释型编程语言 像Python和MATLAB这样的解释型编程语言在CFD中也被广泛使用。它们提供了灵活性、可移植性和易用性。虽然它们的执行速度可能较慢,但像即时编译(JIT)这样的进步可以提高性能。4.1 解释型语言的定义和特性 解释型语言是直接执行源代码而无需事先编译的编程语言。它们不生成可执行文件,而是在运行时由解释器逐行读取和处理代码。这种解释性方法提供了某些特性:灵活性:解释型语言以其灵活性和动态性而闻名。它们允许交互式开发,并支持动态类型(变量可以改变其类型,例如从字符串变为浮点数)和运行时代码修改,这可以提高生产力和易用性。可移植性:解释型语言通常比编译型语言更可移植。由于源代码是被解释而不是编译成特定于平台的机器代码,解释程序可以在不同的平台上运行,无需重新编译。4.2 CFD中流行的解释型语言示例 由于它们的易于实现和广泛的库,几种解释型编程语言已经得到了广泛的使用。一些突出的例子包括:Python:Python是一种多才多艺且被广泛采用的解释型语言,在科学计算和CFD中。它的简单性、可读性和广泛的库生态系统(例如NumPy、SciPy)使其成为CFD中原型设计、数据分析和可视化任务的理想选择。Python的大多数科学包(例如NumPy)是用编译型语言实现的,提供与编译型语言相似的速度,因此这些包可以大大提高底层Python代码的性能。MATLAB:MATLAB是一种在包括CFD在内的各种科学和工程领域广泛使用的解释型语言。它提供了强大的矩阵操作能力、丰富的可视化工具和为数值计算量身定制的众多专业工具箱。其语言语法类似于C编程,并且它提供了一个丰富的用户界面,可以在其中键入MATLAB代码。4.3 解释型语言的优势和劣势 性能和执行速度:由于需要运行时解释,解释型语言通常比它们的编译型对应物慢。如上所述,解释型语言可能通过用编译型语言实现的包和库提供性能提升,这消除了解释型语言的一些劣势。然而,这将引入轻微的开销,这些解释型语言总是比纯编译型语言慢。可移植性和平台 独立性:解释型语言在可移植性方面表现出色。由于代码是被解释而不是编译成机器代码,程序可以轻松地在不同的平台上运行,最小化修改,增强了可移植性并减少了平台依赖性。开发和调试过程:解释型语言通常提供更用户友好的开发体验。它们通常具有更简单的语法、动态类型和交互式环境,实现快速原型设计、探索和调试。然而,缺少编译步骤可能会将错误检测延迟到运行时。尽管可能存在性能限制,但由于它们的易用性、原型设计能力和广泛的库,解释型语言在CFD中已经获得了流行。它们的灵活性和可移植性使它们适合广泛的应用。五、即时编译(JIT) 即时编译(JIT)通过在运行时动态编译代码段来提高CFD的性能。它提供了性能改进、动态优化,但也带来了初始化开销。JIT编译是优化解释型语言中CFD模拟的有价值工具。5.1 JIT编译的解释及其在编程语言中的作用 即时编译(JIT)是一种结合了编译型和解释型语言元素的技术。它旨在通过在运行时动态编译代码的某些部分来提高解释型语言的性能。这一过程弥合了解释型和编译型语言之间的差距,提供了性能优势,同时保留了解释的灵活性。5.2 JIT编译在实践中的工作原理 在实践中,JIT编译涉及几个步骤:初始解释:源代码最初由解释器解释和执行。分析和识别:在执行期间,JIT编译器分析代码,识别热点——频繁执行并可能从编译中受益的代码段。即时编译:当识别到热点时,相应的代码被动态编译成机器代码。这个编译版本替换了解释的代码,提高了该代码段后续执行的性能。典型的例子是耗时较长的循环,例如时间和空间循环。动态优化:JIT编译器可以根据运行时信息对编译的代码应用进一步的优化。这包括内联函数调用、消除冗余计算和优化内存访问模式。5.3 CFD中流行的JIT编译语言示例 CFD代码主要是用编译型或解释型语言编写的。然而,在某些边缘情况下,JIT编译语言可能是一个不错的选择。下面的列表提供了合适的候选概述:Julia:Julia是一种高级、高性能的编程语言,专门设计用于数值和科学计算。凭借其内置的即时编译(JIT),Julia提供了快速的执行速度、动态类型和用户友好的语法,使其成为CFD模拟的理想选择。C#:C Sharp是由微软开发的现代、面向对象的编程语言。它结合了静态类型的能力和JIT编译的灵活性。C#提供了丰富的功能集,包括内存管理、与.NET框架的强大集成和广泛的社区支持,使其成为需要性能和生产力的CFD应用的可行选择。但是,如果您想充分利用它,您必须在Windows上开发。Python:等等,你不是说Python是解释型的吗?是的,它是,但它丰富的生态系统意味着我们也可以通过像Numba或PyPy这样的包获得JIT编译。这些包在Python中启用了JIT编译,允许我们在继续使用Python提供的所有其他功能的同时享受性能提升的好处。5.4 JIT编译在CFD应用中的优势和劣势 性能提升:JIT编译可以显著提高用解释型语言编写的CFD应用的性能。通过选择性地编译热点,计算密集型代码段可以以接近编译型语言的速度执行。这使得模拟和数据分析更快。动态优化:JIT编译器的优势在于能够适应运行时条件。它们可以根据分析信息动态优化代码,通过定制编译代码以适应特定的执行环境来提高性能。这可以导致有效的内存使用和更好的硬件资源利用。开销和初始化时间:JIT编译在程序的初始执行期间引入开销,因为编译器需要分析和编译代码。这可能导致与纯解释型语言相比增加的初始化时间。然而,编译代码的后续运行不会受到这种开销的影响,整体性能提升可以超过初始成本。尽管JIT编译提供了显著的优势,但必须考虑潜在的缺点:内存消耗:JIT编译器在运行时生成编译代码,导致与纯解释执行相比增加的内存消耗。当处理需要有效内存管理的大型CFD模拟时,这可能是一个考虑因素。预热期:JIT编译器通常需要一个预热期来识别和编译热点。最初,解释的代码可能较慢,直到JIT编译器收集了足够的分析数据来优化性能。这个预热期可能影响短命程序的性能或在需要快速执行的情况下的性能。总的来说,JIT编译可以是优化用解释型语言编写的CFD应用性能的有价值工具。它在运行时动态编译和优化代码的能力提供了性能和灵活性之间的平衡。然而,尽管上述列出的一些优势,JIT编译语言很少用于编写CFD求解器。总结 理解编译型和解释型语言之间的权衡对于在CFD应用中做出明智的决策至关重要。编译型语言在性能和执行速度方面表现出色,使它们成为计算密集型模拟的理想选择。解释型语言提供了灵活性、易用性和快速原型设计能力。即时编译语言提供了这些语言之间的一条路径,从程序员那里拿走了识别计算热点的负担,同时提供了与解释型语言相同的灵活性。最终,选择权在您手中,将取决于您的项目。然而,我对这个问题有自己的看法,我强烈认为你需要知道如何使用C++。如果你对C++开发是认真的,这是你可以做出的最好的投资来提升你的简历。来源:CFD饭圈

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈