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.cs

layout (std430, binding = 3) buffer rho {
  float RHO[];
};

layout (std430, binding = 4) buffer v {
  vec4 V[];
};
#version 460 core

layout(local_size_x = 16, local_size_y = 1, local_size_z = 16) in;

#include lbm.cs

layout (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
};

👉参阅一:计算思维

👉参阅二:亚图跨际

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于已知电网场景分段拟合智能体智能评估与自主进化方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

无广告、简单、实用的高性能 PDF 处理工具

一、简介 1、无广告、简单、实用的高性能 PDF 处理工具。它安装包大小在 240MB 左右&#xff0c;目前仅支持 Windows 平台。 二、下载 1、文末有下载链接,不明白可以私聊我哈&#xff08;麻烦咚咚咚&#xff0c;动动小手给个关注收藏小三连&#xff0c;我将继续努力为大家寻找以…

Michael.W基于Foundry精读Openzeppelin第59期——Proxy.sol

Michael.W基于Foundry精读Openzeppelin第59期——Proxy.sol 0. 版本0.1 Proxy.sol 1. 目标合约2. 代码精读2.1 _delegate(address implementation) internal2.2 _implementation() internal && _beforeFallback() internal2.3 fallback() && receive() 0. 版本…

Mybatis plus:Wrapper接口

一、介绍 MyBatis-Plus 提供了一套强大的条件构造器&#xff08;Wrapper&#xff09;&#xff0c;用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件&#xff0c;无需编写繁琐的 SQL 语句&#xff0c;从而提高开发效率并减少 SQL 注入的风险。 …

GPT-5大幅推迟?OpenAI CTO称将在2025年底到2026年初推出

GPT-5大幅推迟&#xff1f;OpenAI CTO称将在2025年底到2026年初推出 OpenAI CTO同时透露&#xff0c;GPT-5性能将有巨大飞跃&#xff0c;在某些特定任务中达到“博士水平”智能&#xff0c;此前市场曾预测GPT-5可能在2023年底或2024年夏季发布。 一再跳票的GPT-5可能大幅推迟…

Git客户端安装步骤详解

git windows7 百度经验:jingyan.baidu.com 方法/步骤 1 从git官网下一个git安装包。 步骤阅读 2 点击git.exe安装程序&#xff0c;点击【next】 ![git的安装和配置](https://imgsa.baidu.com/exp/w500/sign7565f44ba58b87d65042ab1f37092860/21a4462309f790525e5b0144…

STM32 Customer BootLoader 刷新项目 (二) 方案介绍

STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析 首先在开始编程之前&#xff0c;我们先详细设计一下BootLoder的方案。 本项目做…

自动驾驶规划中使用 OSQP 进行二次规划 代码原理详细解读

目录 1 问题描述 什么是稀疏矩阵 CSC 形式 QP Path Planning 问题 1. Cost function 1.1 The first term: 1.2 The second term: 1.3 The thrid term: 1.4 The forth term: 对 Qx 矩阵公式的验证 整体 Q 矩阵&#xff08;就是 P 矩阵&#xff0c;二次项的权重矩阵&…

【数据库】六、事务与并发控制(封锁)

六、事务与并发控制 文章目录 六、事务与并发控制1.事务1.1事务的ACID特性1.2MySQL事务控制语句开启事务提交事务回滚事务 2.并发控制2.1并发执行可能引起的问题2.1.1丢失更新2.1.2不可重复读2.1.3读脏数据 2.2并发调度的可串行性2.3并发与并行的区分2.4事务的隔离级别 3.封锁3…

36.Http协议的设计与解析

Http协议比Redis协议复杂的多,如果程序员自己去实现,工作量大。 Netty已经把Http协议的编解码器实现好了,只需要简单的配置就可以使用。 做一个http的服务端需要HttpServerCodec。 看它继承的父类: 结合了两个类: HttpRequestDecoder(入站处理器extends Channelnbound…

数据库的概念-数据库、数据库管理系统、数据库系统、数据库管理员、数据库设计人员、开发管理使用数据库系统的人员

一、数据库&#xff08;DB&#xff09; 1、数据库就是存储数据的仓库&#xff0c;只不过这个仓库是在计算机存储设备上 2、严格的说&#xff0c;数据库是长期存储在计算机内、有组织的、统一管理的、可共享的相关数据的集合 3、数据库应是为一个特定目标而设计、构建并装入数…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的&#xff1f;☆利用数组存储完全二叉树的好处&#xff1f; 4、PriorityQueu…

酒店宾馆民宿预订管理系统(ThinkPHP+uniapp+uView)

便捷高效&#xff0c;轻松管理你的住宿预订&#x1f3e8; 基于ThinkPHPuniappuView开发的多门店民宿酒店预订管理系统&#xff0c;快速部署属于自己民宿酒店的预订小程序&#xff0c;包含预订、退房、WIFI连接、吐槽、周边信息等功能。​​ 一、引言&#xff1a;为何需要民宿…

Spring Boot+vue社区养老系统(智慧养老平台)

使用技术&#xff1a; springbootvueMySQL 主要功能&#xff1a; 管理员 登录个人资料密码管理, 用户管理:床位类型管理,床位管理,护工管理,老人管理 咨询登记管理&#xff0c;预约登记管理,老人健康信 息管理,费用管理等功能.护工角色包含以下功能: 护工登录&#xff0c;个…

使用 GCD 实现属性的多读单写

使用 Grand Central Dispatch (GCD) 实现多读单写的属性 首先需要确保在多线程环境下的线程安全性。可以使用 GCD 提供的读写锁机制 dispatch_rwlock_t 或者 dispatch_queue_t 来实现这个功能。 Swift版本的实现 怎样创建一个并发队列 &#xff1f;// 使用 Swift 来实现的首…

UE5 中的碰撞问题

文章目录 一、初始准备二、重叠和碰撞三、自定义碰撞 一、初始准备 首先我们创建一个 BP_ThirdPerson 项目&#xff0c;然后在项目中创建两个 Actor 的蓝图 Blueprint 首先是一个移动的 BP_Push&#xff0c;这里使用 time line 循环旋转 cube 的相对位置 得到效果如下 然后是…

css如何动态累计数字?

导读&#xff1a;css如何动态累计数字&#xff1f;用于章节目录的序列数生成&#xff0c;用css的计数器实现起来比 js方式更简单&#xff01; 伪元素 ::after ::before伪元素设置content 可以在元素的首部和尾部添加内容&#xff0c;我们要在元素的首部添加序列号&#xff0c…

关于read,write,open时出现的文本文件和二进制文件读写的问题(怎么写入怎么读)

1、发现问题 使用read读取文本文件&#xff0c;一般采用字符空间作为缓存&#xff0c;最后输出&#xff1b; 使用read读取二进制文件&#xff0c;这里采用整数读取的展示&#xff1a; 首先创建文本文件&#xff0c;用write写入i的值到文件中&#xff1b; 再通过lseek改变读写一…

Day9 —— 大数据技术之ZooKeeper

ZooKeeper快速入门系列 ZooKeeper的概述什么是ZooKeeper&#xff1f;ZooKeeper的特点和功能使用ZooKeeper的原因 ZooKeeper数据模型ZooKeeper安装ZooKeeper配置ZooKeeper命令行操作常见服务端命令 ZooKeeper的概述 什么是ZooKeeper&#xff1f; ZooKeeper是一个开源的分布式协…

FFmpeg编译4

CPUx86-64 TOOLCHAIN N D K / t o o l c h a i n s / x 8 6 6 4 − 4.9 / p r e b u i l t / l i n u x − x 8 6 6 4 S Y S R O O T NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64 SYSROOT NDK/toolchains/x866​4−4.9/prebuilt/linux−x866​4SYSROOTNDK/platforms/and…