preCICE是一个开源的多物理场数值模拟耦合库,可以用于多个求解器联合求解一个复杂的多场问题,支持在大规模并行系统上应用,具有良好的并行效率。并且可以对各种支持二次开发的求解器进行快速适配,在开发方面具有高度的灵活性。
01
多物理场耦合的概念
多物理场耦合是指在一个物理系统中,存在两个或更多的物理场(如流体、热传导、结构力学等)之间相互作用的情况。这些场的相互作用可以是单向的,也可以是相互影响的。通过多物理场耦合,在耦合交界面上完成位移、速度、压力、温度等耦合数据的迭代交互,按照耦合步长,逐步迭代推进,最终完成耦合仿真过程。这些物理场可以包括电磁场、重力场、热场、弹性场、化学反应场等。
02
多物理场应用背景介绍
多物理场耦合问题的背景主要来自于日益增加的仿真需求。在实际工程应用中,往往需要考虑多种因素的影响,例如在汽车、飞机、船舶等的设计中需要考虑气动力、流体动力学、材料学等多种物理场的影响。另一方面,现代制造业、先进材料制备、医学诊断与治疗等领域的高科技发展也对多物理场耦合问题提出了新的挑战。
因此,多物理场耦合问题研究具有非常广泛的应用领域,在现代科技发展中扮演着重要角色。
| |
(a) 螺旋桨 | (b) 海上风机 |
| |
(c) 海底管道 |
图1 多物理场耦合使用场景
03
preCICE软件简介
多物理场数值模拟耦合库preCICE是用于开发或运行大规模并行多物理场仿真模拟的一个工具。其可用于分区多物理场模拟,包括但不限于流体-结构相互作用(FSI)。现有程序往往仅可以计算或模拟FSI涉及的完整物理场中的部分物理场,而preCICE的作用就是对现有程序进行整合,使之可以对完整的物理场进行模拟计算。
图2 preCICE官方示意图
图2是preCICE支持的主体功能,示意图中间是preCICE的四个核心功能
communication | 点对点通信 |
data mapping | 不同离散化网格的数据映射 |
coupling schemes | 耦合方案 |
time interpolation | 时间插值 |
| |
| |
图3 preCICE已完成/待开发的适配器
图中四个角落代表了preCICE已经完成适配的求解器或正在开发的求解器,包括CFD(流体求解器),FEM(结构求解器),Particle(粒子法求解器)以及in-horse(自研求解器),使用preCICE开发求解器仅需要使用preCICE提供的高级API接口对求解器进行适配开发即可,开发过程非常灵活和快捷。
表1 preCICE官方以及开源社区部分已经完成适配的功能的求解器
官方开发 | 社区自主开发 |
Fluent | Alya |
CalculiX | APES |
code_aster | DuMuX |
COMSOL | DUNE |
deal.ll | ElmerFEM |
OpenFOAM | ExaDG |
SU2 | FEAP |
04
preCICE适用范围
在多场耦合问题中,由于物理场间存在相互作用,所以可以认为方程组之间是耦合的,但不同的物理场是由不同的控制方程决定。基于此的数值求解方法可以分为整体求解和分区求解。preCICE就是基于分区求解原理提供了通用多物理场解决方案。
preCICE基于分区求解原理可以进一步引申为:preCICE可以将现有的求解器结合起来,这些求解器能够模拟一个物理问题完整物理的一个子场。可以在求解过程中体现出分区方法的强大拓展性以及计算的高效性。
表2 整体求解与分区求解介绍
整体求解 | 分区求解 |
流体方程和固体方程作为一个整体的非线性系统,同时在流体域和固体域以及流固交界面上进行求解,具有较好的稳定性,但计算成本通常非常大。 | 流体与固体的控制方程在各自的物理域内独立求解,并通过满足交界面处的边界条件耦合在一起。求解复杂的FSI问题时,分区方法也易于实现大规模并行计算。 |
05
preCICE源代码的基本框架
下图为preCICE的所有源代码,每个文件夹代表了一个模块,可以按照功能划分为核心模块以及辅助模块,其中在红色线框内部的即为核心模块。
图3 preCICE源代码
preCICE核心模块可以按层次划分为三个层级
> 1. preCICE底层基本数据结构:
> 2.preCICE核心功能:
> 3.preCICE对外接口(高级API)
preCICE的每个模块的目录都是具有相似的结构的,除了实现基本功能的主体部分的代码外,还包括了tests、config、impl。
➥tests:存放了用于自动测试相应组件的类。
➥config:提供读取XML文件配置信息,以设置模块类的功能。
➥impl:包含模块的实现,impl其接口的一部分,仅作为模块的内部实现方法,在内部使用。
06
preCICE使用效果展示
运行环境:linux系统
参与耦合的求解器:OpenFOAM,C++ 刚体求解器
将上述两个求解器结合使用以实现流固耦合。刚体只有一个自由度,即通道中襟翼的偏转角。它也固定在原点,流体施加在刚体结构上的力导致刚体的振荡旋转。
演示效果:
preCICE官网地址链接:https://precice.org
preCICE在github上的开源项目地址链接:https://github.com/precice