首页> 中国专利> 一种流体力学模拟的方法、装置及计算机可读存储介质

一种流体力学模拟的方法、装置及计算机可读存储介质

摘要

本申请公开流体力学模拟的方法、装置及计算机可读存储介质,该方法包括:利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数,宏观信息包括密度、速度和总能,分布函数包括粒子分布函数和总能分布函数,所有进程所对应的子区域构成待模拟的流场模型;利用每个进程基于各自所对应的子区域中的每个网格单元的当前分布函数,确定网格单元当前宏观信息;根据网格单元当前宏观信息确定流场模型的收敛值,并基于收敛值判断流场模型是否满足收敛条件;若是,将流场模型中所有网格单元的当前宏观信息聚合输出作为流场模型的模拟结果,该方案实现对大规模复杂可压缩流场的模拟计算。

著录项

  • 公开/公告号CN112613243A

    专利类型发明专利

  • 公开/公告日2021-04-06

    原文格式PDF

  • 申请/专利权人 中国科学院深圳先进技术研究院;

    申请/专利号CN202011492712.1

  • 申请日2020-12-16

  • 分类号G06F30/28(20200101);G06F30/25(20200101);G06F111/10(20200101);G06F113/08(20200101);G06F119/14(20200101);

  • 代理机构44280 深圳市威世博知识产权代理事务所(普通合伙);

  • 代理人黎坚怡

  • 地址 518055 广东省深圳市南山区深圳大学城学苑大道1068号

  • 入库时间 2023-06-19 10:29:05

说明书

技术领域

本申请涉及流体力学技术领域,特别是涉及一种流体力学模拟的方法、装置及计算机可读存储介质。

背景技术

流体力学复杂流场的数值模拟,特别是高速可压缩流动,与国家发展、社会发展以及人类生活有着密切的关系。同时,求解复杂高速可压缩流动问题对高性能计算有着强烈的依赖与迫切的需求。随着空间技术、航天技术、军事技术和生物技术等现代科学技术的高速发展,人们对流动与传热的机理需要越来越深入的了解。这些机理的揭示,单靠以宏观尺度为基础的实验研究和理论分析是无法胜任的,越来越多的工作需要从微观和跨尺度的介观角度才能得以深入揭示。

起源于格子气自动机方法的格子Boltzmann方法目前已成为一种流行的介观计算流体力学方法,被广泛应用于不可压缩流、多相流、多孔介质、晶体生长、磁流体以及微流动等问题。对于高速可压缩流问题,传统的格子Boltzmann方法在复杂边界处需要高精度网格才可以捕捉到激波等物理现象。为了使格子Boltzmann方法更好的模拟高速可压缩流,需要一种可以解决上述技术问题的方案。

发明内容

本申请主要解决的技术问题是提供一种可以实现对大规模复杂可压缩流场进行模拟计算的方法,具体提供了一种流体力学模拟的方法、装置及计算机可读存储介质。

为解决上述技术问题,本申请采用的一个技术方案是:提供一种流体力学模拟的方法,所述方法包括:

利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个所述网格单元当前分布函数,其中,所述宏观信息包括密度、速度和总能,所述分布函数包括粒子分布函数和总能分布函数,所有所述进程所对应的所述子区域构成待模拟的流场模型;

利用每个所述进程基于各自所对应的所述子区域中的每个所述网格单元的所述粒子分布函数和所述总能分布函数,确定所述网格单元当前宏观信息;

根据所述网格单元所述当前宏观信息,确定所述流场模型的收敛值,并基于所述收敛值判断所述流场模型是否满足收敛条件;

若是,则将所述流场模型中所有所述网格单元的宏观信息聚合,并输出作为所述流场模型的模拟结果。

为解决上述技术问题,本申请采用的另一个技术方案是:提供一种流体力学模拟装置,所述装置包括耦接的存储器和处理器,其中,

所述存储器包括本地储存,且存储有计算机程序;

所述处理器用于运行所述计算机程序,以执行如上所述的方法。

为解决上述技术问题,本申请采用的又一个技术方案是:提供一种计算机可读存储介质,所述计算机可读存储介质存储有能够被处理器运行的计算机程序,所述计算机程序用于实现如上所述的方法。

本申请的有益效果是:区别于现有技术的情况,本申请所提供的技术方案,通过利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算得到每个网格单元当前分布函数,其中,宏观信息包括密度、速度和总能,分布函数包括粒子分布函数和总能分布函数,所有进程所对应的子区域构成待模拟的流场模型,然后在利用每个进程基于各自所对应的子区域中每个网格单元的当前分布函数,确定网格单元当前宏观信息,然后根据所确定的网格单元当前宏观信息确定流场模型的收敛值,再基于所确定的流场模型的收敛值判断流场模型是否满足收敛条件,并在判断得到流场模型满足收敛条件时,将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果。本申请所提供的技术方案,通过将利用并行的多个进程同时执行,分别对流场模型中部分子区域进行模拟运算,减少了对待模拟的流场模型模拟运算的时间,可以较好地提高对待模拟的流场模型进行流体力学模拟的效率。同时,本申请所提供的技术方案中,通过结合压力和总能分布函数,可以更为准确的对流场模型进行更为准确的流体力学模拟。

附图说明

图1是本申请一种流体力学模拟的方法一实施例中的流程示意图;

图2为本申请一种流体力学模拟的方法另一实施例中的流程示意图;

图3为本申请一种流体力学模拟的方法又一个实施例中的流程示意图;

图4为本申请一种流体力学模拟的方法再一实施例中的流程示意图;

图5为本申请一种流体力学模拟装置一实施例中的结构示意图;

图6为本申请一种存储介质一实施例结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。可以理解的是,此处所描述的具体实施例仅用于解释本申请,而非对本申请的限定。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

在现有流体力学领域中,根据观察尺度的不同,描述流体主要有宏观连续模型、微观分子模型和介观动力学模型三种方法。传统计算流体力学的数值模拟基于宏观连续模型,将流体视为连续的,通过一组高度非线性的偏微分方程描述,但是基于宏观连续模型存在着稳定性、收敛速度、并行效率等问题。微观分子模型中,流体被视为由许多分子组成的系统,研究单个分子的动力学特性,然后应用统计方法得到宏观的流体信息,但是微观分子模型的模拟程序较复杂,计算量大,对内存的要求高,无法适应于大规模复杂的流场模拟应用场景。

格子Boltzmann方法(介观动力学模型)不同于直接离散纳维叶-斯托克斯(Navier-Stokes)等宏观方程和分子动力学,它基于分子动理论,由Boltzmann方程演化而来,是介于流体的微观分子动力学模型和宏观连续模型之间的介观模型。它从介观的角度反映了流体流动的物理本质,将流体视为比分子大,但在宏观上无限小的一系列粒子。这些粒子按照一定物理规律在网格上进行演化计算,通过对反映粒子状态的分布函数进行统计平均求得宏观物理量。由于粒子在迁移过程中,格点上的粒子只是与格点最近的粒子进行信息交换,而碰撞过程中只与格点自身相关,所以格子Boltzmann方法非常适合并行计算。近年来,格子Boltzmann方法已发展成为一种流行的、有前景的数值方法,并在多相流、多孔介质、磁流体、燃烧、结晶等方面有着成功的应用和研究。

但是现有的格子Boltzmann方法多采用均匀笛卡尔网格,然而对于具有复杂边界的几何模型,所需要的格子数目往往是巨大的。由于均匀笛卡尔网格的缺陷,格子Boltzmann方法难以处理具有复杂几何边界的流场计算,更无法处理可压缩的流场,而本申请所提供的流体力学模拟的方法,则是在空间上采用有限体积方法离散、时间上采用前向欧拉方案离散的格子Boltzmann方法的全并行高效算法,结合流体的密度、速度和总能实现更好地模拟可压缩的流场,可以较好地解决现有技术中所存在的问题,具体请参见下文各个实施例中对应部分的阐述。

参阅图1,图1是本申请一种流体力学模拟的方法一实施例中的流程示意图。在当前实施例中,本申请所提供的方法包括:

S110:利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数。

其中,宏观信息包括密度速度和总能,分布函数包括粒子分布函数和总能分布函数。

每个进程对应一个子区域,即每个进程用于对流场模型中的一个子区域进行流体力学模拟,一个流场模型中所包括的子区域的数量等于设定的进程数量,所有进程所对应的子区域构成待模拟的流场模型。换而言之,流场模型中所包括的子区域的数量是根据进程数量进行设定。进一步地,是根据设定的进程数量对流场模型或流场模型对应的网格文件进行划分,进而获得等于进程数量的子区域。

进一步地,子区域为一个占有体积的区域空间,相邻的子区域之间具有相邻界面,但是不具备相互重叠的空间。

首先需要说明的是,在本申请所提供的技术方案中,包括多个进程,多个进程包括一个主进程和若干普通进程。主进程可用于执行读取网格文件、聚合处理普通进程汇总过来的数据,普通进程用于对子区域中网格单元执行模拟过程。

在对待模拟的流场模型进行流体力学模拟时,利用并行的多个进程分别根据各自所对应的子区域中的每个网格单元的历史宏观信息和历史分布函数,计算求取每个网格单元的当前分布函数。其中,历史宏观信息为对同一个网格单元上一次进行流体力学模拟所得的当前宏观信息,同理,历史分布函数为对同一个网格单元上一次进行流体力学模拟所得的当前分布函数。进一步地,如若当前是首次对当前网格单元进行流体力学模拟,则历史宏观信息为设定的初始宏观信息,历史分布函数为基于初始宏观信息对网格单元初始化所得的初始分布函数。

如,在一实施例中,预先设定进程数量为480个(对应将进程编号为0至479号),则会对应将流场模型或流场模型所对应的网格文件划分为480个子区域(对应将0至479号进程所对应的子区域编号为0至479号子区域),则480个进程会同时运行,以分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算求得各自所对应的子区域中每个网格单元的当前分布函数。具体地,利用0号进程根据0号子区域中每个网格单元的历史宏观信息和历史分布函数,对应求取0号子区域中每个网格单元的当前分布函数;同时利用1号进程根据1号子区域中每个网格单元的历史宏观信息和历史分布函数,对应求取1号子区域中每个网格单元的当前分布函数;同理,还会同时利用2号至479号进程分别根据2号至479号子区域中每个网格单元的历史宏观信息和历史分布函数,对应求取2号至479号子区域中每个网格单元的当前分布函数。

需要说明的是,本申请所提供的技术方案中,每个进程是并行运行,即在对流场模型或流场模型所对应的网格文件划分成多个子区域后,所有的进程会同时处理自己所对应的子区域。但是在此不限定,每个进程对应的子区域内是串行处理网格单元还是并行处理各个网格单元。如,在当前实施例中,每个进程在处理自身所对应的子区域时会串行循环子区域内的所有网格单元,以获取每个网格单元的当前分布函数和当前宏观信息。在其他实施例中,每个进程在处理自身所对应的子区域时也可以是并行获取每个网格单元的当前分布函数和当前宏观信息。

S120:利用每个进程基于各自所对应的子区域中的每个网格单元的当前分布函数,确定网格单元当前宏观信息。

在执行步骤S110计算求得每个网格单元当前分布函数后,还会进一步利用每个进程基于各自所对应的子区域中的每个网格单元的当前分布函数,确定网格单元当前宏观信息。

S130:根据网格单元当前宏观信息,确定流场模型的收敛值,并基于收敛值判断流场模型是否满足收敛条件。

在各个进程确定各自所对应的子区域中各个网格单元的当前宏观信息后,进一步根据网格单元的当前宏观信息,计算求取流场模型的收敛值,然后再基于所求取的流场模型的收敛值判断流场模型是否满足收敛条件。其中,收敛条件是预先根据流体力学模拟的需求设定的,具体在此不做限定。

S140:将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果。

若判断得到流场模型满足收敛条件,则会将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果。具体地,是将流场模型中所有网格单元的密度、速度和总能聚合,输出作为流场模型的模拟结果。其中,模拟结果至少包括流场模型的密度、速度和总能。

反之,若判断得到流场模型不满足收敛条件,本申请所提供的方法还包括:则再执行利用并行的每个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数及之后的步骤,即再次执行步骤S110及之后的步骤。

本申请图1所提供的技术方案,通过利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算得到每个网格单元当前分布函数,其中,宏观信息包括密度、速度和总能,分布函数包括粒子分布函数和总能分布函数,所有进程所对应的子区域构成待模拟的流场模型,然后在利用每个进程基于各自所对应的子区域中每个网格单元的当前分布函数,确定网格单元当前宏观信息,然后根据所确定的网格单元当前宏观信息确定流场模型的收敛值,再基于所确定的流场模型的收敛值判断流场模型是否满足收敛条件,并在判断得到流场模型满足收敛条件时,将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果。本申请所提供的技术方案,通过将利用并行的多个进程同时执行,分别对流场模型中部分子区域进行模拟运算,减少了对待模拟的流场模型模拟运算的时间,可以较好地提高对待模拟的流场模型进行流体力学模拟的效率。同时,本申请所提供的技术方案中,通过结合粒子分布函数和总能分布函数,可以更为准确的对流场模型进行更为准确的流体力学模拟。

请参见图2,图2为本申请一种流体力学模拟的方法另一实施例中的流程示意图。在当前实施例中,上述步骤S110利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数,进一步包括步骤S201至步骤S205。

S201:利用每个进程将各自所对应的子区域的最外层的网格单元的历史分布函数传递给相邻进程。

其中,相邻进程为与进程对应的子区域相邻的子区域所对应的进程。换而言之,也可以将相邻进程理解为与当前进程所对应的子区域具备相邻界面的进程。历史分布函数包括上一轮模拟所得的粒子分布函数和总能分布函数。

在当前实施例中,在利用各个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格网格单元当前分布函数值前,每个进程首先会将各自所对应的子区域的最外层的网格单元的历史分布函数传递至相邻进程。其中,子区域最外层的网格单元为与其他子区域相邻的网格单元,也可以理解为分布于子区域交界面的网格单元。

其中,需要说明的是,相邻进程之间传递分布函数以及其他类型数据所需要的内存为预先分配的。故本申请所提供的方案中还包括:在内存中分配用于通讯协议并行接收和发送的缓冲区,以用于相邻的子区域中具备交界面的相邻网格单元之间的数据传递。其中,可以是为每个进程分配一个可以同时用于接收和发送的缓冲区。

在另一实施例中,还可以是为每个进程分别分配用于接收的缓冲区和用于发送的缓冲区。在当前实施例中,也可以理解为每个进程具备两个缓冲区,一个用于接收相邻子区域所对应的进程传递的数据,一个用于保存向相邻子区域发送数据。

进一步地,如若当前是对流场模型首次进行流体力学模拟,每个进程则会将各自所对应的子区域的最外层的网格单元的初始分布函数传递给相邻进程。

S202:根据预设单元的宏观量,利用每个进程通过平衡态外推法,计算各自所对应的子区域中的每个预设单元的当前分布函数。

其中,预设单元为预设的流场模型边界网格单元对应的单元,也可以将预设单元理解为预设的用于处理边界条件的单元。预设单元的宏观量为初始宏观信息。

故可以理解的是,在并行的多个进程分别根据各自所对应的子区域中每个网格单元计算当前分布函数之前,本申请所提供的方法还包括:利用每个进程为各自对应的子区域生成预设单元。具体地,只为该子区域中所包括的流场模型边界网格单元对应生成预设单元。如:当流场模型中边界网格单元有9个,则会对应生成9个预设单元。

进一步地,在利用各个进程为各自对应的子区域生成预设单元之后,本申请所提供的方法还包括:利用每个进程计算各自对应的子区域中的每个网格单元的属性信息。其中,属性信息包括网格单元体积、构成网格单元的面的面积、每个面外法向、每个面的质心和网格单元的质心。

具体地,执行步骤S202时是采用下述公式计算每个预设单元的当前分布函数。公式如下:

其中,i'为生成的用于该子区域的边界条件的、且与流场模型边界网格单元i对应的预设单元。公式中的f

在当前实施例中,基于三维非结构化网格,针对离散格子Boltzmann方程,在空间上通过有限体积方法,在时间上采用前向欧拉方法,进行离散,从而得到有限体积格子Boltzmann方法的完整离散格式,为后续模拟提供了基础。

S203:利用每个进程分别根据各自所对应的子区域中的网格单元的历史分布函数和与网格单元相邻的网格单元的历史分布函数,计算每个网格单元的对流通量。

其中,对流通量包括粒子分布函数对流通量和总能分布函数对流通量。在各个进程将各自所对应的子区域的最外层的网格单元的历史分布函数传递给相邻进程,然后根据预设单元的宏观量,利用每个进程通过平衡态外推法,计算各自所对应的子区域中的每个预设单元的当前分布函数之后,进一步利用每个进程分别根据各自所对应的子区域中的网格单元的历史分布函数,以及与每个网格单元相邻的网格单元的历史分布函数,计算求取得到每个网格单元的对流通量。其中,网格单元的对流通量为当前网格单元通过的流通量。

具体地,采用下述公式计算网格单元的对流通量,

其中,

其中,

上述式中,

其中,

当前步骤通过在每次开始新一轮迭代计算前,利用每个进程将其各自所处理的子区域最外层所有单元的粒子分布函数和总能分布函数发送给相邻并行进程负责的子区域,从而使得相邻子进程可以得到需要的相邻子区域最外层粒子分布函数值和总能分布函数值,以便可顺利计算求得每个网格单元的分布函数。

S204:利用每个进程分别根据各自所对应的子区域中的网格单元的历史分布函数,计算网格单元的碰撞项。

其中,利用每个进程分别根据各自所对应的子区域的历史分布函数,计算网格单元的碰撞项。具体地,采用下述公式计算网格单元的粒子分布函数的碰撞项

其中,τ

具体地,是采用下述公式计算网格单元的总能分布函数的碰撞项

其中,τ

S205:利用每个进程分别根据各自所对应的子区域中的网格单元的碰撞项和对流通量,计算网格单元的当前分布函数。

在求取得到网格单元的碰撞项和对流通量后,进一步利用每个进程分别根据各自所对应的子区域中的网格单元的碰撞项和对流通量,计算网格单元的当前分布函数。其中,当前分布函数包括当前粒子分布函数和当前总能分布函数,即步骤S205是用于求取网格单元的当前粒子分布函数和当前总能分布函数。

具体地,采用下述公式计算网格单元的当前粒子分布函数

具体地,还采用下述公式计算网格单元的当前总能分布函数

进一步地,基于图2所对应的实施例,上述步骤S120利用每个进程基于各自所对应的子区域中的每个网格单元的粒子分布函数和总能分布函数,确定网格单元当前宏观信息,进一步包括:采用下述公式计算网格单元当前宏观信息。其中,公式为ρ=∑f

其中,f

在图2所示意的实施例中,通过引入流场模型中各个网格单元的压力这个参数,并进一步基于压力、速度和密度计算求取得到总能分布函数,即结合压力以及总能分布函数,可实现对可压缩的复杂流场模型进行更为准确地模拟,进而求取得到一个更为准确的模拟结果。

请参见图3,图3为本申请一种流体力学模拟的方法又一实施例中的流程示意图。在当前实施例中,上述步骤S130根据网格单元当前宏观信息,确定流场模型的收敛值,并基于收敛值判断流场模型是否满足收敛条件,进一步包括步骤S301至步骤S303。

S301:利用每个进程根据各自对应的子区域中每个网格单元的速度和网格单元的总能,计算子区域对应的收敛值,并将收敛值发送至主进程。

首先需要说明的是,进程包括一个主进程和若干普通进程,在当前实施例中,主进程和普通进程在判断流场模型是否满足收敛条件里分别执行不同的步骤。具体可以参见图3所对应实施例中的阐述。

在判断流场模型是否满足收敛条件时,首先要利用各个进程根据各自对应的子区域中每个网格单元的流体速度u,和对应网格单元的总能,分别求得各个子区域对应的速度变化量以及速度大小的和、总能变化量以及总能大小的和,然后求取子区域的速度变化量和速度大小的比值、总能变化量和总能大小的比值,进而得到当前子区域的收敛值。其中,子区域的速度变化量为该子区域中所有网格单元的速度变量的值,子区域的速度的和为该子区域内所有网格单元的速度的和,子区域的总能变化量为该子区域中所有网格单元的总能变量的值,子区域的总能的和为该子区域内所有网格单元的总能的和。

在求取得到子区域对应的收敛值之后,进程还会进一步将该子区域的收敛值反馈至主进程,由主进程基于各个子区域的收敛值计算求取流场模型的收敛值,然后基于所求取流场模型收敛值,判断流场模型是否满足收敛条件。

S302:利用主进程计算流场模型的收敛值,并判断流场模型的收敛值是否小于预设阈值。

在利用每个进程求取得到各个子区域的收敛值并将收敛值发送至主进程后,进一步利用主进程计算流场模型的收敛值,并利用主进程判断流场模型的收敛值是否小于预设阈值,并由主进程根据判断结果确定流场模型是否满足收敛条件。其中,预设阈值是预设的用于判断流场模型是否满足收敛的经验值,具体可以根据实际的需要或根据模拟需要进行设置,在此不做任何限定。其中,流场模型的收敛值的计算以及是否满足收敛条件的判断公式如下:

其中,u

S303:判断得到流场模型满足收敛条件。

若主进程判断得到流场模型的收敛值小于预设阈值时,则判断得到流场模型满足收敛条件。进一步地,主进程会将每个子区域对应的宏观信息聚合并输出作为流场模型的模拟结果。

在一实施例中,当是先判断子区域是否满足收敛条件,并基于流场模组中的各个子区域是否满足收敛条件,确定流场模型是否满足收敛条件时,只有在利用子区域中每个网格单元的流体速度u在t时刻(n个时间步长)在三维方向上的分量计算求得的收敛值小于ζ,且利用子区域中每个网格单元的总能在t时刻的值求取的收敛值小于η,才判断得到当前子区域满足收敛条件。

在另一实施例中,当是求取流场模型的收敛值,然后基于流场模型的收敛值判断流场模型是否满足收敛条件时,则首先基于上述两个公式求取流场模型的收敛值,并只有在利用流场模型中每个网格单元的流体速度u在t时刻(n个时间步长)在三维方向上的分量计算求得的收敛值小于ζ,且利用流场模型中每个网格单元的总能在t时刻的值求取的收敛值小于η,才判断得到流场模型满足收敛条件。

S304:判断得到流场模型不满足收敛条件。

反之,若主进程判断得到流场模型的收敛值大于或等于预设阈值时,则判断得到流场模型不满足收敛条件。进一步地,此时会重新执行上述步骤S110。

可以理解的是,在其他实施例中,本申请所提供的方法中,上述步骤S130根据网格单元当前宏观信息,确定流场模型的收敛值,并基于收敛值判断流场模型是否满足收敛条件,进一步包括下述流程:利用每个进程根据各自对应的子区域中每个网格单元的速度和对应网格单元的总能,计算子区域对应的收敛值,并由各个进程分别根据计算所得的收敛值判断所对应的子区域是否小于满足收敛条件,即判断当前计算所的子区域的收敛值是否小于预设阈值,若是,则判断子区域满足收敛条件,反之,则判断得到当前子区域不满足收敛条件;利用每个进程向主进程反馈各自所对应的子区域是否满足收敛条件的判断结果;然后,利用主进程根据各个进程反馈的判断结果,判断流场模型是否满足收敛条件。如可以利用主进程判断得到流场模型中是否有超过预设比例的子区域满足收敛条件,若是,则判断流场模型满足收敛条件,反之则判断流场模型不满足收敛条件。

其中,计算子区域的收敛值并判断子区域的收敛值是否小于预设阈值的过程如下:首先要利用各个进程根据各自对应的子区域中每个网格单元的流体速度u和总能E,分别求得各自所对应的子区域中所包括网格单元的当前模拟所得相比上一次模拟所得的速度的变化量和总能的变化量。具体地,可以是通过将当前模拟所得的速度在三维方向上的分量对应减去上一次模拟所得的历史速度在三维方向上速度分量,并将所求取的三个方向的速度分量的差值平方后相加再开方得到速度的变化量,将当前模拟所得的总能减去上一次模拟所得的总能得到的差值去绝对值得到总能的变化量,进而求取得到当前网格单元的收敛值。每个进程将其所对应的子区域中的所有网格单元的收敛值相加即可求取得到当前子区域对应的收敛值。具体地,计算每个子区域的收敛值是否小于预设阈值的过程还可以参照上文图3所对应实施例中的公式部分的阐述,具体在此不再重复。

进一步地,主进程可以根据所收到的其他各个进程反馈的子区域是否满足收敛条件的判断结果,进一步判断流场模型是否满足收敛条件。具体地,主进程可以通过判断满足收敛条件的子区域比例是否大于或等于预设比例,来判断流场模型是否满足收敛条件。

在一实施例中,预设比例可以为百分之百,即只有当判断得到流场模型中所有的子区域的速度变化量小于预设阈值时,主进程方会判断流场模型满足收敛条件。

在另一实施例中,当流场模型中所包括的子区域数量较多时,如可以根据实际需要设置预设比例为百分之九十五,那么对应的,主进程只有在判断得到流场模型中有大于或等于百分之九十五的子区域的收敛值小于预设阈值时,方会判断流场模型满足收敛条件。

请参见图4,图4为本申请一种流体力学模拟的方法再一实施例中的流程示意图。在当前实施例中,本申请所提供的方法包括步骤S401至步骤S410。

在当前实施例中,在步骤利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数之前,还包括步骤S401至步骤S406。

S401:获取流场模型对应的非结构化网格与基于流场模型设置的初始宏观信息、边界条件信息和执行进程数量。

其中,宏观信息包括压力、密度和速度,边界条件信息包括压力边界条件信息、速度边界条件信息和密度边界条件,执行进程数量为同时并行执行的进程的数量。

具体地,步骤S401中是根据流场模拟问题的需要,设置初始宏观信息、流场模型各个边界的边界条件信息和同时并行执行的进程数量。

进一步地,多个进程包括一主进程和若干普通进程。则步骤S401中的获取流场模型对应的非结构化网格,进一步包括:获取流场模型,并利用网格生成软件生成对应流场模型的非结构化网格;将非结构化网格保存为网格文件,并利用主进程读取网格文件。其中,在此不限定网格生成软件的类型。

如,可以通过直接导入的方式获取流场模型,然后再通过网格生成软件生成对应该流场模型的非结构化网格。

S402:利用并行的多个进程对非结构化网格进行划分,以分别获取每个进程所对应的一个子区域。

设定进程的数量后,进一步构建所设定的执行进程数量的进程。其中,进程为用于对流场模型中至少部分区域执行流体力学模拟的代码程序。利用并行的多个进程对非结构化网格进行划分所得的子区域的形状和尺寸为随机的,不具备结构化特点。

进一步地,利用并行的进程对非结构化网格进行划分,包括:利用并行的进程采用预设划分算法对网格文件进行划分,预设划分算法包括并行多级k路图划分算法。可以理解的是,在其他实施例中,还可以采用其他类型预设划分算法对网格文件进行划分,在此不一一举例。

在当前实施例中,步骤S402之后,本申请所提供的方法还包括步骤S403和步骤S405。

S403:利用每个进程为各自对应的子区域生成预设单元。

其中,预设单元为预设的用于处理边界条件,且与流场模型边界单元对应的单元,专门用于处理边界条件。在一些实施例中还会定义预设单元为ghost单元。

S404:利用每个进程计算各自对应的子区域中的每个网格单元的属性信息。

其中,属性信息包括网格单元体积、构成网格单元的面的面积、每个面外法向、每个面的质心和网格单元的质心。

其中,在本申请所提供的技术方案中1个网格单元中包括很多个面,每个面中包括多个点,在利用网格生成软件生成对应流场模型的非结构化网格时可获取到每个点的坐标。在计算每个网格单元的属性信息时,是由点及面,再至单元进行计算。具体地,可以是基于网格中各个点的坐标求取构成网格单元各个面的面积、网格单元的体积、每个面外法向和网格单元的质心。其中,面的质心为面的质量中心,网格单元的质心为网格单元的质量中心。

在当前实施例中,通过利用并行的多个进程对非结构化网格并行划分,根据边界条件并行生成网格信息与预设单元,保证了大规模流场网格划分的并行效率,同时通过利用每个并行进程生成各自负责的子区域部分边界上的ghost单元,缩短了了对整个流场模型进行模拟运算所需的时间。

S405:在内存中为每个进程分配用于通讯协议并行接收和发送的缓冲区,以用于相邻的子区域中具备交界面的相邻网格单元之间的数据传递。

在当前实施例中,对应为每个进程分配两个缓冲区,一个缓冲区专用于接收来自相邻的子区域所对应的进程所发送的数据,一个缓冲区专用于向与其相对应的子区域相邻的子区域的进程发送数据。

需要说明的是,在此并不限定其他实施例中,步骤S404和步骤S405具体执行顺序,如一些实施例中,也可以是同时执行步骤S404和步骤S405。

S406:利用并行的多个进程分别根据初始宏观信息初始化各自所对应的子区域中每个网格单元的宏观量,以获取每个网格单元的初始粒子分布函数和初始总能分布函数。

其中,计算网格单元各个设定离散速度方向的初始化粒子分布函数

其中α为设定的离散速度方向,在当前实施例中设定25个离散速度方向,即α=0,1,...,24。

在上述公式中,

在不同的方向上,ω

在获取到每个网格单元的初始粒子分布函数和初始总能分布函数后,进一步执行步骤S407。

S407:利用并行的多个进程分别根据各自所对应的子区域中每个网格单元的历史宏观信息和历史分布函数,计算每个网格单元当前分布函数。

S408:利用每个进程基于各自所对应的子区域中的每个网格单元的当前分布函数,确定网格单元当前宏观信息。

S409;根据网格单元当前宏观信息,确定流场模型的收敛值,并基于收敛值判断流场模型是否满足收敛条件。

S410:若是,则将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果。

在步骤S409中判断得到流场模型满足收敛条件,则将流场模型中所有网格单元的当前宏观信息聚合,并输出作为流场模型的模拟结果,并结束循环。反之,在步骤S409中判断得到流场模型不满足收敛条件,则会重新执行步骤S407。

其中,步骤S407至步骤S410可以参见上文图1及其所对应的任意一个实施例中对应部分的阐述内容,在此不再赘述。

本申请所提供的技术方案,通过引入压力和总能分布函数,可以用于处理大规模复杂流场边界。在复杂流场边界处,本方案还可以提高边界处的网格精度,进而实现更加精确模拟高速流场边界层处信息。同时本申请是基于三维非结构化网格下有限体积格子Boltzmann方法的并行算法,得到完整的粒子分布函数和总能分布函数迭代方式,并通过超级计算机并行划分非结构化网格,并行执行有限体积格子Boltzmann方法,实现快速得到流场模型的模拟结果。本申请的技术方案可以用于模拟大规模计算流体力学实际应用问题,可以较为准确地模拟大规模复杂流场情况。相比于传统基于均匀网格的格子Boltzmann方法,本发明基于非结构化网格,在流场信息变化大的流场位置可以采用高精度的网格,在流场信息变化平缓的流场位置,可以采用大尺寸的网格,可以使用较小规模的网格就可得到整个复杂流场的信息,改善了传统均匀笛卡尔网格下网格尺寸必须保持一致的缺点。再者,本申请针对的是三维高速可压缩流场,相对于已有的可压缩流场格子Boltzmann方法,该方法更加适合于模拟高速流场问题。

具体地,以三维ONERA M6翼型举例说明本方法的具体实现形式:将翼型绕流的几何模型导入到网格生成软件中生成非结构化网格,并导出保存为网格文件,由主进程读取网格文件。同时设置网格的入口、出口、壁面、圆球面等边界条件、初始宏观信息和进程数。

具体地,设置网格的初始流场信息:ρ=1.0,Ma=0.8395,攻角为3.06°,设置并行执行的进程数为480。由480个进程分别对网格文件开始进行并行划分得到各自所对应的子区域,然后利用480个进程并行对各自所对应的子区域中的网格单元进行计算获得当前分布函数和当前宏观信息,并基于所得的当前分布函数和当前宏观信息判断流场模型是否满足收敛条件后,并在确定流场模型满足收敛条件时停止计算,将当前流场模型中的所有网格单元的宏观信息聚合输出作为模拟结果。进一步地,在其他实施例中,也可以是将目标区域中的网格单元的宏观信息聚合输出作为模拟结果,具体依据实际要求,在此不做限定。

请参见图5,图5为本申请一种流体力学模拟装置一实施例中的结构示意图。在当前实施例中,本申请所提供的流体力学模拟装置500包括耦接的处理器501和存储器502。其中,流体力学模拟装置500可以执行图1至图4及其对应的任意一个实施例中所述的流体力学模拟的方法。

其中,存储器502包括本地储存(图未示),且存储有计算机程序,计算机程序被执行时可以实现图1至图4及其所对应的任意一个实施例中所述的方法。

处理器501与存储器502耦接,处理器501用于运行计算机程序,以执行如上图1至图4及其对应的任意一个实施例中所述的流体力学模拟的方法。

参见图6,图6为本申请一种存储介质一实施例结构示意图。该存储介质600存储有能够被处理器运行的计算机程序601,该计算机程序601用于实现如上图1至图4及其对应的任意一个实施例中所描述的流体力学模拟的方法。具体地,上述存储介质600可以是存储器、个人计算机、服务器、网络设备,或者U盘等其中的一种,具体在此不做任何限定。

以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号