首页/文章/ 详情

一个简单的例子解释流体力学中为什么会有无量纲数

8天前浏览456

1.无量纲数的作用


     

   

实验是流体力学发现的重要工具。在设计和测试飞机、船只、汽车、泵、涡轮机、风扇等设备时需要进行实验。这些实验的目的是理解诸如湍流等基本流动现象。为了获得准确的结果,实验必须有计划地执行。确定哪些参数重要是规划正确实验的基础。各种缩放因子在决定流动行为中起着重要作用。这些因子通常表示为无量纲数。例如,实验的马赫数可以决定流动是否具有亚音速或超音速特性。雷诺数可以用来预测流动是否平滑或湍流。在这里,无量纲分析将被用来提取流体流动的重要缩放因子。


2.不用无量纲数会怎样


     

   

图 :绕圆柱体的流动

考虑例如圆柱体周围的阻力研究。控制这一过程的参数是什么?根据以前的实验,发现主要参数是:

  • 来流速度 V

  • 圆柱体直径 D

  • 流体密度 ρ 和

  • 流体粘度 μ

可以进行一个盲目的实验,简单地测量每个参数的影响。可以执行一系列测试,改变自由流速度,同时保持其他参数不变。可以制作一个阻力与速度 V 的曲线,同时保持 μ,ρD 恒定。但请注意,为了获得一整套结果,还需要对其他参数的不同值重复相同的实验。(见下图)。

图 :阻力依赖于各种参数

然后可以重新进行实验,考虑阻力与 ρ 的关系,同时保持其他参数不变。最终需要进行大量的测试。如果每条曲线需要大约十个点来获得良好的定义,那么很容易看出需要进行多达 10,000 次实验来完全覆盖所有可能性


3. 用了无量纲数会怎样


     

   

相反,可以事先尝试进行尺寸分析,以确定这些参数之间的关系,从而最小化实验数量。这种分析技术将帮助确定流动的无量纲数。无量纲数将涉及一些占主导地位的参数组合。在圆柱体阻力的情况下,这些是阻力 F、密度 ρ、粘度 μ、直径 D 和速度 V

在实验中,只需要改变这些无量纲数。例如,对于阻力问题,无量纲数是阻力系数 Cd 和雷诺数 Re(见下图),分别由下式给出:

图 :Cd 随 Re 的变化。

通过测量阻力系数,同时只改变雷诺数,可以完成描述圆柱体在所有条件下行为的全部结果集。虽然改变流动的 ρμ 可能很困难,但可以通过改变速度和/或直径来获得不同的雷诺数。

最终结果可以用来预测在任何特定条件下圆柱体的阻力,方法是从特定雷诺数的图表中找到阻力系数,然后将其扩展到阻力。


4.用了无量纲数的优点


     

   

无量纲数的另一个优点是,结果是独立于测量单位的。因此,习惯于完全不同的单位系统的人仍然可以解释结果。

这些数字的另一个应用是在相似性上。每当设计一种新的交通工具时,通常在建造全尺寸原型之前进行初始缩放模型测试。模型结果如何与全尺寸车辆的结果比较?两者之间是否只需要几何相似性?实际上,这要求模型和全尺寸之间的大多数适用无量纲数需要相同,以确保结果的准确性。




来源:CFD饭圈
FluentCFX燃烧湍流汽车Polyflow控制ParaViewParticleWorks
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间: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
联系我们
帮助与反馈