SPH
文章平均质量分 78
beidou111
研究图形学流体仿真。个人学习笔记,仅作记录,侵权必删。曾经是搞CFD流化床生物质的。现北航计算机博士生在读。联系请发邮件。私信不看。邮箱:li_cl@foxmail.com
展开
-
【探索SPH_Taichi】测试使用json读取场景文件参数
要注意的就是最后一个测试中的rbs[0]。这是因为RigidBodies是一个列表。也就是说可能会有多个RigidBodies。原创 2022-11-25 01:52:06 · 222 阅读 · 0 评论 -
【taichi】关于SPH_Taichi的探索与尝试
这是太极实习生张铭睿同学做的SPH太极库。请看是作者的讲解。我们来探索一下这个库。这只是个笔记,写得会比较细碎。原创 2022-11-23 20:59:43 · 746 阅读 · 0 评论 -
【SPH】邻域搜索中的紧凑哈希(compact hash)算法讲解
常规的Grid-Based邻域搜索我们之前讲过:http://t.csdn.cn/Ytwuy常规方法有一个缺陷:那就是占用内存过高。想象一下:你要存储两个庞大的二维数组。第一个数组记录了每个网格里都有哪些粒子。我们姑且称为网格内粒子列表。particleInCellList第二个数组记录了每个粒子的邻域都有哪些粒子。我们姑且称为邻域列表。neighborList这两个列表的占用内存都很多。第一个列表,假设每个网格最多有100个粒子,那么就需要网格数量100 个int类型字节的内存。第二个列表,假设每个粒原创 2022-07-14 17:59:15 · 1104 阅读 · 1 评论 -
将pbf改为3d时数据结构的问题,ti.root.dense和ti.field太极构建4维数组的方法,元组的连接
原本的代码(pbf2d.py)这里grid_size是个元组,可以认为是(32,32)max_num_particles_per_cell是个常数,认为是100这里面其实就是声明了两个数组grid_num_particles和grid2particles假如我们想把它改为3维的。这时候grid_size=(32,32,32)这时候grid_num_particles这个变量只需要一点点变化grid_snode = ti.root.dense(ti.ijk, grid_size)也就是把ti.ij改为t原创 2022-07-03 23:24:39 · 298 阅读 · 0 评论 -
SPH中的粒子初始排列问题(两张图解决)
因此对应代码为(改自太极k-ye的pbf2d.py)其中delta就是dx=dy=dyoffs其实是初始偏移的位置num_floor就是每层有多少(8*8)个num_particles_x就是每排有多少(8)个delta就是dx=dy=dz原创 2022-07-03 20:55:07 · 321 阅读 · 0 评论 -
【SPH】DFSPH算法详解--1跟着paper学原理
前言DFSPH是目前图形学领域最新最快的压力求解SPH算法,值得被首先关注。我们将分为三部分来讲解DFSPH学原理:论文讲解读代码:splishsplash源码剖析动手实践:在taichi上从零开始实践该算法本文属于学原理DFSPH 原理在原理方面,参考文献为(摘抄自Splishsplash):[BK15] Jan Bender and Dan Koschier. Divergence-free smoothed particle hydrodynamics. In ACM SI原创 2022-05-25 22:34:05 · 1098 阅读 · 0 评论 -
【splishsplash】splishsplash安装并使用python binding
简介python binding不是本体,而是使用了一个叫pybind11的c++库,将c++的API暴露给python。这样就能用python去调用c++库中的函数和类了。pySplishsplash这个文件夹下面的源码都是为了暴露API而写的。我们这里不管这些,只要安装和使用即可。安装1 在cmake中指定-DUSE_PYTHON_BINDINGS=On选项这个用cmake-gui是找不到的,必须用命令行形式cmake -S . -B build -DUSE_PYTHON_BINDINGS原创 2022-05-25 02:20:04 · 599 阅读 · 1 评论 -
【splishsplash】对象何时实例化?--搜索所有= new语句
搜索“= new”关键字一般来说,很难找到面向对象程序中是何时开始实例化的。而对象何时创建,何时消亡是对理解对象的生命周期及其关键的。一种不是那么严谨的方法是看文件中哪些地方使用了new语句。利用VS Code全局搜索功能搜索“= new”关键字,排除extern文件夹(即第三方库)以后得到33个文件中的149个结果。如图所示再进行人工手动筛选,去掉Utilities、Tools、Test、Exporter等相关的。再去掉Boundary、PBD相关的折叠之后得到这里面显然可以分为三组:原创 2022-05-24 22:13:34 · 149 阅读 · 0 评论 -
【splishsplash】splishsplash源码算法剖析:粘性力算法
前面三个文章讲的是模拟的主流程。而splishsplash作为一个图形学算法开发人员的工具,最大的特点是方便植入和测试新算法,尤其是非压力梯度力算法。入口在TimeStepDFSPH.cpp的第125行: sim->computeNonPressureForces();这就是非压力梯度力的入口。F11步进,到Simulation.cpp的496行fm->computeViscosity();这里计算粘性力,其中fm是FluidModel类指针F11再次步进,到FluidMod原创 2022-05-20 14:50:45 · 734 阅读 · 0 评论 -
【读splishsplash源码】NonPressureForceBase类
这次我们从类的角度来观察NonPressureForceBase文件位置:D:\codes\SPH\SPlisHSPlasH\SPlisHSPlasH\SPlisHSPlasH\NonPressureForceBase.hUML 类图understand 自动生成的其父类为:ParameterObject其子类为:DragBaseElasticityBaseSurfaceTensionBaseViscosityBaseVorticityBase一共五个其成员函数和成员变量为:原创 2022-04-13 19:31:30 · 278 阅读 · 0 评论 -
【splishsplash】splishsplash添加新的粘性类
如何为splishsplash添加新的方法原创 2022-04-08 11:10:57 · 840 阅读 · 0 评论 -
【读splishsplash源代码】一步步调试3-- TimeStepDFSPH::step()
回顾上回说到,我们来到位于\SPlisHSPlasH\DFSPH\TimeStepDFSPH.cpp的第86行,即TimeStepDFSPH::step()函数入口此文件夹(DFSPH)中只有四个文件这次我们讲解TimeStepDFSPH.cpp中的代码流。1 TimeStepDFSPH::step()位于\SPlisHSPlasH\DFSPH\TimeStepDFSPH.cpp如图所示两个指针:sim和tm。前者指向大部分模拟数据对象。后者指向时间对象。局部变量h是时间步,这里是0原创 2022-03-31 18:33:39 · 421 阅读 · 1 评论 -
【读splishsplash源代码】一步步调试2--SimulatorBase::timeStep()
上回我们从main函数开始,讲了GUI外壳。现在到了Simulator文件夹下的SimulatorBase.cpp文件的timeStep()函数。上回链接:【读splishsplash源代码】一步步调试概览1–GUI外壳本文将继续讲解一步步的调试流程文章目录SimulatorBase::timeStep()part 1: 进入SimulatorBase::timeStep()函数part 2: //Simulation codepart 3: for循环附录:为VS debug程序传入参数的方法Si原创 2022-03-30 17:05:28 · 581 阅读 · 0 评论 -
【文献阅读】Peer2017 SPH弹性力
概述题目:An Implicit SPH Formulation for Incompressible LinearlyElastic Solids发表时间:2017年期刊/会议:CGF作者:Andreas Peer , Christoph Gissler, Stefan Band and Matthias TeschnerUniversity of Freiburg, Germany摘要:我们提出了一种新的用于可变形固体的光滑粒子流体动力学(SPH)公式。我们的方法的关键方面是隐式弹性力和变原创 2022-03-23 13:38:08 · 459 阅读 · 3 评论 -
【读splishsplash源代码】一步步调试1--GUI外壳
我们将采用调式的办法一步步跟随程序运行,从而认识大概程序运行的轨迹1 入口:main.cpp入口在main.cpp,main函数总共只有大概30行。做的就是三件事:创建一个SimulatorBase对象并初始化(通过加载json文件)选择是否使用GUI和哪种GUI运行,并且运行结束后删除实例。首先,实例化一个SimulatorBase的对象,名为base1.1 初始化并加载场景文件然后调用init方法,输入参数该步骤会弹出选择窗口让你选择scene文件如图选择Dambr原创 2022-03-03 11:33:12 · 620 阅读 · 0 评论 -
splishsplash库 windows调试debug方法
1 准备工作VS-2019社区版本下载好代码https://github.com/InteractiveComputerGraphics/SPlisHSPlasH解压并新建一个文件夹在该文件夹下新建一个build文件夹下载好cmake gui版本https://cmake.org/官方dochttps://splishsplash.readthedocs.io/en/latest/build_from_source.html#installation-instructions-windo原创 2022-02-28 13:40:50 · 555 阅读 · 1 评论 -
PCISPH2
一句话,PCISPH的核心思想是通过迭代压力梯度力最小化密度误差。1. 核心思想的推导这里有两个核心问题第一个问题是:为什么要最小化密度误差?第二个问题是:怎么把压力梯度力与密度联系起来?1.1 为什么要最小化密度误差第一个问题是:为什么要最小化密度误差?我们知道,不可压缩性的核心在于密度不能改变,或者说体积不能改变。那么就有控制密度误差和控制体积误差两种思路。在连续性方程中,分别对应着左边的密度项与右边的速度散度项(速度的散度就是体积变化量,这点可以看本章附录2)。所以两种思路在实质上原创 2021-11-25 13:07:13 · 1845 阅读 · 0 评论