当前位置: 首页 > news >正文

AI for Science系列(二):国内首个基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!

AI for Science被广泛认为是下一代科研范式,可以有效处理多维度、多模态、多场景下的模拟和真实数据,解决复杂推演计算问题,加速新科学问题发现[1] 。百度飞桨科学计算工具组件赛桨PaddleScience是国内首个公开且可应用于CFD(Computational Fluid Dynamics,计算流体力学)领域的工具,提供端到端应用API,致力于解决科学计算类任务。赛桨综合数学计算与物理数据相结合的处理方法,提供物理机理约束的PINNs(Physics Informed Neural Networks 物理信息神经网络)加速求解偏微分方程,解决计算流体力学中的仿真分析。本篇文章将重点介绍赛桨PaddleScience v1.0 Beta的典型案例及API使用示例。

赛桨提供的典型案例包含使用AI方法进行顶盖驱动方腔流(LDC)、达西流、2D&3D圆柱绕流的流场预测及涡激振动(VIV)。所有案例都基于泛化的微分方程、PINNs求解器、控制体、网络定义以及可视化等多种接口。下面我们将详细讲解赛桨PaddleScience v1.0 Beta中提供的计算流体力学案例及科学计算API的功能及使用。
PaddleScience v1.0 Beta产品全景

场景案例详解

前言

在流体领域,流体力学作为比较传统的物理学科,广泛应用于航空航天、船舶工业以及建筑、水利、能源等工程领域。

在航空工程和造船工业中,如飞行器和船舶的外形设计、操控性、稳定性等问题成为流体力学中广泛的研究课题,并促使流体力学得到了很大的发展。

在水利工程中,如大型水利枢纽和水力发电站的设计与建造、洪峰的预报工作、河流泥沙等问题都与流体力学紧密关联。

在动力机械制造工业中,如何提高水力及蒸汽涡轮、喷气发动机、压缩机和水泵等动力机械的性能,与叶片、导流片及其他零件设计形状的正确性有关。

随着工程问题的深入,流体力学已经逐渐与其他学科互相交叉渗透,形成新的交叉学科或边缘科学,如磁流体力学、物理-化学流体力学、生物流变学等等。

围绕不同的流体问题,当前流体力学分析主要基于数值计算。典型的方法有直接数值模拟 (DNS) 、雷诺平均方法 (RANS)、大涡模拟方法 (LES)、分离涡模拟 (DES) 以及格子玻尔兹曼法(LBM)等求解流体本构N-S (Navier-Stokes) 方程。由于物理问题的复杂度,数值方法往往有很多局限性,如计算效率等。PaddleScience的PINNs科学计算求解器,将物理信息融入神经网络,针对流体力学问题提供新的解决思路。本章节中,我们将介绍2D&3D圆柱绕流及涡激振动的案例,展示PaddleScience的基础科研能力。
不可压缩N-S(Navier-Stokes)方程

2D非定常圆柱绕流

圆柱绕流作为经典的CFD问题,在不同的雷诺数下,涡脱落产生的卡门涡街类型不同,是能够综合体现层流、湍流过渡的典型问题。针对该问题,采用PINNs方法,并基于连续时间的2D不可压、非定常NS方程作为约束深度学习神经网络的物理规则,将传统的CFD求解转换为神经网络参数的优化问题。同时,为了加速训练的收敛时间,提高预测精度,采用半监督方式,从开源CFD工具OpenFOAM的结果中记录边界位置处约200个测点在不同时刻的流场信息,与N-S方程、初边值条件等共同形成了网络优化的损失函数。对雷诺数Re=100工况,定义约110W个时空训练点(t, x, y),并采用NVIDIA V100-32G单卡训练约8小时,结果如下图所示。基于PINNs方法构建的网络能够完整的模拟卡门涡的周期性脱落,且预测的流场结果与OpenFOAM相对误差小于5%(除边界层中个别点外),可满足工程需求。
图3 Re=100的2D圆柱绕流结果
(左:OpenFOAM结果,右:PINNs方法结果)

同时,基于训练完成的模型,利用推理功能,8ms内即可完成百万级空间位置在30个时间步的结果预测,相比于同样网格数量且固定求解配置的OpenFOAM计算过程,速度提升近12000倍,非常利于后期在线评估、优化等工程应用。

案例链接:
https://github.com/PaddlePaddle/PaddleScience/tree/develop/examples/cylinder/2d_unsteady_continuous

3D非定常圆柱绕流

除2D圆柱绕流外,赛桨PaddleScience同时提供3D圆柱绕流案例,基于PINNs方法,求解3D非定常不可压缩Navier-Stokes方程,完成了无模化Re=100的圆柱绕流问题求解。在该问题中,采用OpenFOAM的结果作为基准,选择流场稳定的相对0时刻,并记录有限时间内特定测点的数据。采用离散时间的PINNs神经网络进行训练,其模型数量与所选取的时间步长相关,在t_start至t_end内,定义离散时间步长dt,采用(t_end-t_start)/(T*dt)个模型进行训练,其中T为涡脱周期。对比OpenFOAM的理论值,相对误差在5%以内。x轴上的流场速度变化如下:
3D圆柱绕流x轴流场速度

案例链接:
https://github.com/PaddlePaddle/PaddleScience/tree/develop/examples/cylinder/3d_unsteady_discrete

涡激振动

涡激振动(VIV)是一种典型的流致振动,是流体经过结构后稳定涡脱频率与结构固有频率综合的流固耦合问题。是海洋工程中立管、输油管路等大跨度结构的主要损伤源,但由于结构复杂,无法有效测量刚度、阻尼等本构特征,导致损伤探测及预防难度较大。相比基于PINNs方法实现2D圆柱绕流正问题分析,解决“反问题”是PINNs方法的一个亮点,可通过部分实验数据“逆向”预测流场中结构的刚度、阻尼等本构特征,从而对实际工程中的复杂结构的疲劳损伤及破坏的预测及预防提出指导。

从工程落地的角度,赛桨 PaddleScience 从“半实物仿真”的技术路线出发,构建了涡激振动试验台架以及模型驱动试验装备的电控闭环,创新性地探索并论证深度学习模型与物理装备的虚实结合的技术可行性。

通过对涡激振动开展分阶段分析,首先基于加速度计及激光设备等传感器采集结构振动振幅与结构升力,对系统进行弹簧-振子单自由度等效。基于实测的160组位移及受力数据,训练过程中最小化“振幅”、“升力”、“方程”等共同组成的损失函数。采用V100-16G单卡训练约0.5h,预测结果如下图(右上)。基于PINNs预测的结构振动振幅、结构升力结果与试验数据的相对误差均在2%以内。同时基于“反问题”方式分析得到的结构刚度、阻尼分别为1.092964与4.1e-6,相比真实值1.09与0,相对误差均小于2%。

涡激振动主要基于试验与深度学习模型结合的方式进行,通过构建风洞试验装备,在第一阶段完成结构刚度、阻尼的预测,在第二阶段则基于得到的结构刚度、阻尼等属性,进行流场重构以及升阻力的预测。过程中基于赛桨提供的泛化PDE接口,对涡激振动中流固耦合方程也重新进行了整合,定义新的网络与求解过程,具体流程如下图所示。
VIV试验及深度学习模型联合验

案例链接:
https://github.com/PaddlePaddle/PaddleScience/tree/develop/examples/fsi

API功能及使用示例

上述案例充分利用了赛桨PaddleScience v1.0 Beta提供的API。本部分将着重介绍涉及的主要API接口及使用示例方法。
PaddleScience科学计算工具组件设计架构

科学计算问题定义

科学计算问题定义包含三部分:方程定义(PDE)、计算域定义(Geometry)、初边值条件定义(IC/BC)。下图展示了如何定义在一个方形区域内求解二维非定常Navier-Stokes方程问题。具体而言,该问题数学上由(图b) 定义,包含方程、初边值条件及计算域信息,代码上每一条信息由相应接口描述(图a及图c)。图中展示了一部分数学信息和接口的对应关系,该对应关系由同样的颜色方框表示。
PaddleScience科学计算问题定义

本章节将介绍关于科学计算问题定义相关的API。

偏微分方程(PDE)

赛桨支持调用预置方程接口及自定义方程接口。

**预置方程接口:**方程定义内置在赛桨中,用户直接调用即可,仅需配置相关参数(如维度、物理属性等)。

**自定义方程接口:**用户使用 Python SymPy 定义自变量、因变量及方程,通过“add_equation”接口将方程加入PDE模块。
在这里插入图片描述

对于高维偏微分方程,连续时间方法将时间和空间均视为网络的输入;离散时间方法首先使用数值(隐式)方法对时间离散,得到仅包含空间变量的方程,进而使用PINNs方法求解该方程,3D N-S方程及使用隐式离散方法得到的方程如下,其中 n 时刻的状态(3个方向的速度)已知,求解n+1时刻的状态(3个方向的速度)。
使用隐式方法对时间离散后得到的方程

如下代码展示如何定义一个非定常N-S方程,以及如何使用连续时间方法和离散时间方法,进行方程离散。仅需通过改变参数 “time_method” 的取值即可选取对应的方法。
在这里插入图片描述

计算域(Geometry)

赛桨提供了常用的计算域形状,如立方体、立方体除去圆柱等几何外形,及VTK 可视化支持,同时提供 " add_boundary " 接口定义边界。

图片

初边值条件(IC/BC)
边值条件模块预置了Dirichlet/Neumann/Robin边值条件,仅需定义边值条件,并通过 “set_bc” 接口将其指定到对应边界即可。对于PDE,以类似方式增加了初值条件模块。
图片

深度学习方法求解模块

上一章节介绍了如何使用赛桨定义科学计算问题,本章节继续介绍深度学习方法求解上述科学计算问题所需使用到的模块。

网络(Network)
赛桨支持全连接网络(FC)以及初始化网络权重的接口initialize,支持从文件读取权重进行初始化,以及使用飞桨预置的初始化函数(paddle.nn.initializer)进行初始化。
在这里插入图片描述

损失函数(Loss)
赛桨提供了灵活的Loss设置方式,允许通过设置独立的权重系数配置多任务Loss (Loss = w_1 * Loss_equation + w_2 * Loss_ic+ w_3 * loss_bc +w_4 * Loss_data)。

图片

优化器(Optimizer)
赛桨支持Adam优化器。

图片

求解器(Solver)及求解模式
求解器提供了控制功能,在训练和推理阶段可以分别使用。
图片

启动自动并行模式

使用自动并行技术实现分布式计算内嵌在赛桨中,无需特别设置,使用如下代码运行程序即可实现数据自动并行。
在这里插入图片描述

启动动态图/静态图/自动微分模式

赛桨后端支持动态图和静态图模式,可以通过简单的接口进行切换。另外,在单机静态图模式下,赛桨提供接口启用高阶自动微分。
在这里插入图片描述
下一期我们将对支持PaddleScience的底层框架技术,如自动微分机制、编译器等功能进行详细介绍,敬请期待~

引用:
[1]《IDC perspective:AI for Science市场研究》报告正式启动.
https://mp.weixin.qq.com/s/gtEbuSULI5fzCIvbDKhkfA
拓展阅读:
1.《AI+Science系列(一):飞桨加速CFD(计算流体力学)原理与实践》
2.赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器

相关地址:
1.飞桨AI for Science共创计划:
https://www.paddlepaddle.org.cn/science
2.飞桨PPISG-Science小组:
https://www.paddlepaddle.org.cn/specialgroupdetail?id=9

相关文章:

AI for Science系列(二):国内首个基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!

AI for Science被广泛认为是下一代科研范式,可以有效处理多维度、多模态、多场景下的模拟和真实数据,解决复杂推演计算问题,加速新科学问题发现[1] 。百度飞桨科学计算工具组件赛桨PaddleScience是国内首个公开且可应用于CFD(Comp…...

SpringCloud简单介绍

文章目录1. 开源组件2. CAP原则1. 开源组件 功能springcloud netflixspringcloud alibabaspringcloud官方其他服务注册与发现eurekanacosconsulzookeeper负载均衡ribbondubbo服务调用openFeigndubbo服务容错hystrixsentinel服务网关zuulgateway服务配置的同一管理cofig-server…...

《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置

如果进行开发的话,首先要配置路由页面 page.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 {"pages": [{"path": "pages/component/index…...

APICloud 弹动与滚轴冲突的解决模拟

当打开页面的bounces开关来实现下拉刷新和上翻加载是,如果页面中有scroll-view,那么手指上下滑动时弹动会触发,而滚轴无法正常实现,只有按住不动再拖动滚轴才会触发。开始想通过获取手指点击屏幕的坐标点设置触发条件来解决两者的…...

Spring Cloud(微服务)学习篇(四)

Spring Cloud(微服务)学习篇(四) 1.nacos实现服务之间传参数 1.1 在dto包(shop-sms-api项目)中创建SmsDTO类 package com.zlz.shop.sms.api.dto;import lombok.Data;Data public class SmsDTO {private String tel; }1.2 复制SmsDTO类到shop-sms-server项目的dto包下面 1.3 …...

【Java Pro】001-Java基础:面向对象

【Java Pro】001-Java基础:面向对象 文章目录【Java Pro】001-Java基础:面向对象一、面向对象1、什么是对象现实生活中的对象与程序中的对象2、什么是面向对象面向过程面向对象3、面向过程与面向对象的比较思想方面设计方式方面实现方式方面4、面向过程与…...

ElasticSearch从0到1——基础知识

1.ES是什么? 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能&…...

【面试系列】equals和==的区别

问题:两个对象值相同(x.equals(y) true),但是可能存在hashCode不同吗? 的定义 比较的是两个对象的内存地址,相等则意味着内存地址一样。 对象的equals方法 Object#equals public boolean equals(Object obj) {return (this obj);}Stri…...

存在重复元素模块-三道题

文章目录存在重复元素217. 存在重复元素219. 存在重复元素 II220. 存在重复元素 III (SortedList二分)小结存在重复元素 217. 存在重复元素 题目链接:217. 存在重复元素 题目大意:给你一个整数数组 nums 。如果任一值在数组中出…...

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…...

Codeforces Round 855 (Div. 3)(A~F)

A. Is It a Cat?定义满足条件的字符串为:其中仅可能含有meow四种字母的大小写,而且相同种类的字母必须挨在一起,四种字母的顺序必须按照meow排列。给出一个字母串,求是否满足条件。思路:感觉是个很麻烦的模拟。首先把…...

【SpringCloud】SpringCloud详解之Feign实战

目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.使用Feign远程调用(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽…...

tuts4you上lena‘s40个crackme(1)

本来是不打算写文章了,因为懒,想以后通过录屏的形式保存一下自己学的路程。但奈何开学后一直没找到机会,在宿舍也不愿意大吼大叫的讲东西,只好再写写文章了 最近学了一些汇编语言和逆向工程,所以就想通过这40给题目来看…...

研讨会回顾 | Perforce版本控制工具Helix Core入华十年,携手龙智赋能企业大规模研发

2023年2月28日,龙智联合全球领先的数字资产管理工具厂商Perforce共同举办Perforce on Tour网络研讨会,主题为“赋能‘大’研发,助力‘快’交付”。 作为Perforce Helix Core产品在中国地区的唯一授权合作伙伴,龙智董事长何明女士为…...

C++ vscode 开发环境搭建

C vscode 开发环境搭建 笔记内容: C vscode 开发环境搭建准备了解g命令编译调试掌握使用launch.json和tasks.json配置文件编译调试了解使用cmake构建 git: https://github.com/weichangk/hellocpp/tree/master/vscodecmakecpp 环境搭建准备 安装vscode安装qt&a…...

ANR系列(二)——ANR监听方案之SyncBarrier

前言 在项目中经常遇到了手机假死问题,无规律的偶现问题,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件,会发生各种奇怪的ANR,且trace不固定。而SyncBarrier是其中的罪魁祸首…...

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit),安装完成之后运行一点毛病都没有,可是过了两三个月,再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框,如下图示 出现这个问题我就上网查找,无非…...

.NET基础加强第二课--静态成员,静态类

类 实例类 默认是实例类 静态类 在类前加上static ,就是静态类 静态类中,所有包含的成员必须是静态成员 实例成员是属于具体某个对象的 举例代码 Person p1 new Person(); p1.Age 20; p1.Name “张三”; class Person { public string Name { get; set;…...

【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类

文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例(前面两部分有点无聊,如果大家没兴趣看可以直接从知识讲解开始看) 简述OOPC oopc,是一种轻量级的面向对象的C语言编程框架, LW_OOPC是Light-Weight …...

软件测试自动化Java篇【Selenium+Junit 5】

文章目录Selenium环境部署自动化测试例子常见的元素操作窗口等待浏览器的操作弹窗选择器执行脚本文件上传浏览器参数Junit 5导入依赖Junit 4 和 Junit5 注解对比断言测试顺序参数化单参数多参数动态参数测试套件指定类来运行测试用例指定包名来运行包下测试用例Selenium 为什么…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...