C++风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体

🎯要点

🎯无滑移速度边界条件:🖊反弹法计算库埃特流、泊肃叶流 | 🖊湿节点法计算库埃特流、泊肃叶流 | 🎯力模型:🖊反弹法和不同的格子玻尔兹曼体力模型计算泊肃叶流 | 🖊湿节点法计算不同的格子玻尔兹曼体力模型计算泊肃叶流 | 🎯狄利克雷边界条件:🖊防反弹算法计算薄膜流体 | 🖊Inamuro 的边界条件计算薄膜流体 | 🖊计算薄膜均匀流体 | 🖊圆柱体静态流体扩散 | 🖊高斯丘陵的平流扩散一维和二维碰撞算子 | 🖊斯丘陵的平流扩散一维和二维双弛豫时间碰撞算子 | 🎯赝势方法模拟

🍇C++ GPU加速模拟三维风流

在物理学中,流体是一种在施加的剪切应力或外力作用下可能连续移动和变形(流动)的液体、气体或其他材料。它们的剪切模量为零,或者简单地说,是无法抵抗施加在其上的任何剪切力的物质。

虽然流体这一术语通常包括液相和气相,但其定义在不同的科学分支中有所不同。固体的定义也各不相同,根据领域的不同,一些物质可以同时具有流体和固体的性质。非牛顿流体,如橡皮泥,在突然施加力时似乎表现得与固体相似。粘度极高的物质,如沥青,似乎也表现得像固体(见沥青滴落实验)。在粒子物理学中,这一概念扩展到包括液体或气体以外的流体物质。[4] 医学或生物学中的流体是指身体的任何液体成分(体液),而“液体”不是以这种意义使用的。有时,通过饮用或注射来补充体液的液体也被称为流体(例如“多喝水”)。在液压学中,流体是指具有某些特性的液体,比(液压)油更广泛。

相比之下,固体可以抵抗“变形”(例如,通过产生与剪切力成比例的弹性恢复力),而流体则不会并且只会变形。根据这个定义,空气是一种流体,因为它的行为就像由其变形行为定义的流体一样,因此我们可以将流体力学定律应用于它。

偏微分方程将未知多变量函数的偏导数相互关联,从而描述其在各个维度(通常是空间、时间)的行为并隐式定义该函数。偏微分方程可以解释为一个约束,求解偏微分方程意味着找到满足该约束的函数。

将任何物理守恒量写为时间和空间的函数,该函数必须满足微分守恒定律,偏微分方程约束才能守恒。

最基本的微分守恒定律之一是“平流扩散方程”,它描述了运动流体中扩散的稀释溶质的质量如何守恒。
∂ c ∂ t = ∇ ⋅ ( D ∇ c ) − ∇ ⋅ ( v c ) + R \frac{\partial c}{\partial t}=\nabla \cdot(D \nabla c)-\nabla \cdot(v c)+R tc=(Dc)(vc)+R
这表明溶质浓度对时间(在固定位置)的导数由三项之和给出:扩散项、平流项和源项。将源 R 设置为 0 意味着质量进入或离开体积的唯一方式是通过扩散或平流穿过微分体积边界,从而守恒质量。

对偏微分方程(尤其是纳维-斯托克斯方程)进行分析积分通常仅适用于具有简单边界和初始条件的少数众所周知的问题陈述。计算流体动力学关注的是流体流动问题的数值求解,并且大量研究集中于提高这些偏微分方程求解方法的速度、精度和稳定性。

因此,粒子分布函数和传播缓冲区的大小为 N d ∗ Q N^d*Q NdQ,而宏观量和边界条件的大小为 N d N^d Nd​。对于我们的实现,我们只需在 CPU 上声明具有正确大小的缓冲区。请注意,我们在着色器代码中使用扁平索引对这些缓冲区进行索引。

Buffer f(NX*NY*Q, (float*)NULL);      
Buffer fprop(NX*NY*Q, (float*)NULL);  Buffer rho(NX*NY, (float*)NULL);
Buffer v(NX*NY, (glm::vec4*)NULL);Buffer b(NX*NY, (float*)NULL);       

然后,我们将这些缓冲区作为着色器存储缓冲区对象绑定到我们的主着色器:

Compute init("shader/init.cs", {"f", "fprop", "b", "rho", "v"});
init.bind<float>("f", &f);
init.bind<float>("fprop", &fprop);
init.bind<float>("b", &b);
init.bind<float>("rho", &rho);
init.bind<glm::vec4>("v", &dirbuf);Compute collide("shader/collide.cs", {"f", "fprop", "b", "rho", "v"});
collide.bind<float>("f", &f);
collide.bind<float>("fprop", &fprop);
collide.bind<float>("b", &b);
collide.bind<float>("rho", &rho);
collide.bind<glm::vec4>("v", &dirbuf);Compute stream("shader/stream.cs", {"f", "fprop", "b"});
stream.bind<float>("f", &f);
stream.bind<float>("fprop", &fprop);
stream.bind<float>("b", &b);

并使用以下方式在着色器中访问它们:

layout (std430, binding = 0) buffer f {float F[];
};layout (std430, binding = 1) buffer fprop {float FPROP[];
};layout (std430, binding = 2) buffer b {float B[];
};
#version 460 core
layout(local_size_x = 16, local_size_y = 1, local_size_z = 16) in;#include lbm.cslayout (std430, binding = 3) buffer rho {float RHO[];
};layout (std430, binding = 4) buffer v {vec4 V[];
};
#version 460 corelayout(local_size_x = 16, local_size_y = 1, local_size_z = 16) in;#include lbm.cslayout (std430, binding = 3) buffer rho {float RHO[];
};

二维和三维速度集合

uniform int NX = 256;
uniform int NY = 128;
const int Q = 9;
const float w[Q] = {4.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0};
const int cp[Q] = {0, 3, 4, 1, 2, 7, 8, 5, 6};
const ivec2 c[Q] = {ivec2(0, 0),ivec2(1, 0),ivec2(0, 1),ivec2(-1, 0),ivec2(0, -1),ivec2(1, 1),ivec2(-1, 1),ivec2(-1, -1),ivec2(1, -1)
};

三维速度集

uniform int NX = 64;
uniform int NY = 64;
uniform int NZ = 64;
const int Q = 19;const float w[Q] = {1.0/3.0,1.0/18.0, 1.0/18.0, 1.0/18.0, 1.0/18.0, 1.0/18.0, 1.0/18.0,1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0,1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0, 1.0/36.0
};const ivec3 c[Q] = {ivec3( 0,  0,  0),ivec3( 1,  0,  0), ivec3(-1,  0,  0),ivec3( 0,  1,  0), ivec3( 0, -1,  0),ivec3( 0,  0,  1), ivec3( 0,  0, -1),ivec3( 1,  1,  0), ivec3(-1, -1,  0),ivec3( 1,  0,  1), ivec3(-1,  0, -1),ivec3( 0,  1,  1), ivec3( 0, -1, -1),ivec3( 1, -1,  0), ivec3(-1,  1,  0),ivec3( 1,  0, -1), ivec3(-1,  0,  1),ivec3( 0,  1, -1), ivec3( 0, -1,  1)
};const int cp[Q] = {0,2, 1, 4, 3, 6, 5,8, 7, 10, 9, 12, 11,14, 13, 16, 15, 18, 17
};

👉参阅一:计算思维

👉参阅二:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自监督分类网络:创新的端到端学习方法

现代人工智能的快速发展中&#xff0c;分类任务的高效解决方案一直备受关注。今天&#xff0c;我们向大家介绍一种名为Self-Classifier的全新自监督端到端分类学习方法。由Elad Amrani、Leonid Karlinsky和Alex Bronstein团队开发&#xff0c;Self-Classifier通过优化同一样本的…

express+vue在线im实现【二】

expressvue在线im实现【一】 在线体验 本期完成了&#xff1a; 1、心跳检测 2、支持发送表情与图片【这个目前还需要优化下&#xff0c;当图片上传后会被默认选中&#xff0c;需要点击一下旁边&#xff0c;使之失去选中效果&#xff0c;才能正常&#xff0c;留待下期优化吧】…

Gone框架介绍27 - 再讲 Goner 和 依赖注入

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档地址&#xff1a;https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架&am…

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

桂电人工智能学院大数据实验&#xff0c;使用 Docker 搭建 hadoop 集群 第一步 安装 Docker, Windows 上可以使用 Docker Desktop 下载地址&#xff1a;https://www.docker.com/products/docker-desktop/ 安装过程自行谷歌 安装好的标志&#xff1a;打开终端 运行docker p…

矩阵补全学习笔记

目录 矩阵补全概念原理 ICLR 2020 | 超越传统&#xff0c;基于图神经网络的归纳矩阵补全 因果面板数据模型的矩阵补全方法 矩阵补全概念原理 【综述】矩阵补全问题-CSDN博客 GitHub - XLearning-SCU/2022-CVPR-AirNet: PyTorch implementation for All-In-One Image Restor…

windows11子系统Ubuntu 22.04.4子安装图形化界面

1、windows11家庭版本设置 打开虚拟机安装许可 2、Microsoft Store下载安装ubuntu 我使用的是22.04.4 LTS版本 3、 打开ubuntu 命令窗口 1、打开win11的命令行&#xff0c;在下拉三角下标&#xff0c;打开&#xff0c;可以看到有Ubuntu 的选项&#xff0c;点击即可进入linux命…

pdb restore flashback recover 的三个办法 + CDB 级还原 注意数据库实际时间

Recover可以drop掉PDB&#xff0c;另外两个不行&#xff01;&#xff01; 除非CDB级还原 千万要注意好数据库时间 RMAN> recover pluggable database pdb until time "to_date(16-JUN-2024 19:00:00,DD-MON-YYYY HH24:MI:SS)" auxiliary destination data1; S…

鸿蒙应用开发

学习视频&#xff1a; 00.课程介绍_哔哩哔哩_bilibili 官网&#xff1a;开发者文档中心 | 华为开发者联盟 (huawei.com) 开发工具 &#xff1a;DevEcoStudio &#xff0c; 类似Jetbrains 全家桶 ArkTS开发语言 &#xff1a;&#xff08;基于TS,集成了前端语言&#xf…

wifiphisher详细安装教程

仅用于学习&#xff1a; 1、先进入root权限&#xff1b; 2、下载roguehostpad文件&#xff1b; git clone https://github.com/wifiphisher/roguehostapd.git3、进入roguehostpad文件夹&#xff1b; cd roguehostapd4、检查roguehostpad文件夹内的setup.py颜色是否变绿&#…

MySQL日志(二):MySQL抖动

一条SQL语句&#xff0c; 正常执行的时候特别快&#xff0c; 但是有时也不知道怎么回事&#xff0c; 它就会变得特别慢&#xff0c; 并且这样的场景很难复现&#xff0c; 它不只随机&#xff0c; 而且持续时间还很短。 看上去&#xff0c; 这就像是数据库“抖”了一下。 今天&…

c++编程(18)——deque的模拟实现(2)容器篇

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 文章目录 deque的数据结构deque的构造默认构造填充构造 deque的其他操作deque的插入、删除push_back和push_frontpop_back和pop_frontclear、erase和insert操作 传送门 在上一篇中&#xff0c;我们已经实现了deque最核…

springboot整合redis以及使用

在Spring Boot中整合Redis&#xff0c;并使用Redis作为缓存或数据存储&#xff0c;是非常常见和有用的场景。Redis作为一种高性能的键值存储系统&#xff0c;可以用来加速数据访问、会话管理、消息队列等多种用途。下面是整合和使用Redis的基本步骤&#xff1a; 1. 添加Redis依…

数学中常用希腊字母发音读法

序号大写小写英文注音国际音标注音中文注音1Ααalphaa:lf阿尔法2Ββbetabet贝塔3Γγgammaga:m伽马4Δδdeltadelt德尔塔5Εεepsilonepsilon伊普西龙6Ζζzetazat截塔7Ηηetaeit艾塔8Θθthetθit西塔9Ιιiotaiot约塔10Κκkappakap卡帕11∧λlambdalambd兰布达12Μμmumj…

数据仓库和数据库有什么区别?

一、什么是数据仓库二、什么是数据库三、数据仓库和数据库有什么区别 一、什么是数据仓库 数据仓库&#xff08;Data Warehouse&#xff09;是一种专门用于存储和管理大量结构化数据的信息系统。它通过整合来自不同来源的数据&#xff0c;为企业提供统一、一致的数据视图&…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 简而言之&#xff1a;就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

测试基础(一)

测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础…

Outlook 邮箱使用技巧大全

前言 Microsoft Outlook 不仅是一个电子邮件客户端&#xff0c;还是一个强大的时间管理工具。无论你是个人用户还是企业用户&#xff0c;了解如何高效使用Outlook都可以帮助你提升工作效率。下面&#xff0c;我将为你介绍几个实用的Outlook邮箱使用技巧。 技巧汇总 1. 邮件分…

论文阅读:RAM++ | Open-Set Image Tagging with Multi-Grained Text Supervision

发表时间&#xff1a;2023年11月16 论文地址&#xff1a;https://arxiv.org/pdf/2310.15200 项目地址&#xff1a;https://github.com/xinyu1205/recognize-anything Recognize Anything Plus Model&#xff08;RAM&#xff09;&#xff0c;这是一种有效利用多粒度文本监督的开…

博通加速向Nvidia发起进攻 为何连iPhone 15都不能用“苹果智能”?

博通加速向Nvidia发起进攻 博通强调的一项优势是其 XPU 的能效。其功耗不到 600 瓦&#xff0c;是业内功耗最低的 AI 加速器之一。 Nvidia 的许多竞争对手都想抢占其市场主导地位。其中一个不断出现的名字是 Broadcom。仔细观察就会知道原因。其 XPU 功耗不到 600 瓦&#xff…

GPT-4并非世界模型,LeCun双手赞同!ACL力证LLM无法模拟真实世界

一直以来&#xff0c;支持LLM的观点之一是模型可以集成海量事实知识&#xff0c;作为通往「世界模拟器」的基础。虽然也有不少反对意见&#xff0c;但缺乏实证依据。那么&#xff0c;LLM能否作为世界模拟器&#xff1f; 最近&#xff0c;亚利桑那大学、微软、霍普金斯大学等机构…