【CG物理模擬系列】流體模擬--粒子法之MPS法(理論)
MPS法
前面的文章裡我們講過SPH曾是為了解決壓縮性流體問題而提出的方法,與之相對,這一篇來說說用粒子法處理非壓縮性流體的研究方法--Moving Particle Semi-implicit (MPS)法[1]。 MPS法中匯入了粒子數密度這一概念,通過隱式方法求解泊松方程,來使得這個密度保持一定。經此處理,流體在整體上便具備了非壓縮性。這個方法由於只有一部分使用了隱式方法求解,所以屬於Semi-implicit。
非壓縮性流體的支配方程
與SPH一樣,也用非壓縮流體的支配方程(Navier-Stokes方程)來描述流體物質,方程如下.
其中,是流體的速度,是液體密度,
粒子間相互作用模型
MPS法中,梯度,擴散,laplacian等微分運算元,是以粒子間相互作用模型為基礎進行離散化計算的。 首先加權函式的計算如下.
這裡,是粒子間的距離,指代有效半徑。這個公式表示,相互作用僅發生在粒子間距小於的情況下。為了保持流體的非壓縮性,使用加權函式,按照如下的方式定義粒子數密度。
這裡,指代粒子和其臨近粒子的位置向量。另外,我們稱粒子數密度的初始值為初期粒子數密度。
由於非壓縮性流體的密度是保持一定的。 在MPS法中,通過使各粒子的粒子數密度變成來實現這一特性。
根據粒子間相互作用模型,梯度,擴散,発散,laplacian的離散化如下.
- 梯度:根據粒子的位置得到梯度向量的演算。 這裡,是次元數,是初期粒子數密度.
- 擴散:
- laplacian:把粒子的變數(這裡指速度,圧力等物理量), 根據加權函式的分佈,分配到臨近的粒子的演算。 其中,的計算如下
MPS法中粒子位置的更新
Navier-Stokes方程(質量守恆和動量守恆)的離散化表示如下。
腳標指相應物理量的級數(number of steps)。MPS法中,使用值,計算隱式圧力梯度項。 粘性項和重力項則用顯式方法計算。
首先,我們計算粘性項和重力項,獲得粒子臨時速度,臨時位置。
然後通過如下方式離散化粘性項。
這裡把粒子位置的粒子數密度表示成
和上述粘性項類似,離散化等式右邊,可以得到關於的線性系統。
A是對稱稀疏矩陣,於是可通過不完全喬勒斯基分解共軛梯度(Incomplete Cholesky Decomposition Conjugate Gradient method)等方法解得。再從得到的中,求解和。
計算演算法
MPS法按照如下順序進行水流模擬。
- 設定水流的初期條件
- 顯式方法計算臨時速度的位置
- 計算粒子數密度
- 求解圧力的泊松方程
- 根據圧力梯度項修正速度的位置
- 返回步驟2
相關推薦
【CG物理模擬系列】流體模擬--粒子法之MPS法(理論)
MPS法 前面的文章裡我們講過SPH曾是為了解決壓縮性流體問題而提出的方法,與之相對,這一篇來說說用粒子法處理非壓縮性流體的研究方法--Moving Particle Semi-implici
【CG物理模擬系列】流體模擬--粒子法之SPH(程式碼講解)
#include "sph_system.h" #include "sph_header.h" SPHSystem::SPHSystem() { max_particle=30000; num_particle=0; kernel=0.04f; mass=0.02f; //初始化空間大小,並計算
【CG物理模擬系列】流體模擬--粒子法之SPH(實現)
鄰域搜尋的效率化 SPH等粒子法,由於需要考慮到鄰域粒子帶來的影響,通常鄰域搜尋都會消耗大量時間。如果我們只是單純的計算所有粒子組合的歐氏距離的話,計算時間只會呈指數增加。 而空間分割法的出現,使鄰域搜尋實現了效率化。 空間分割法是一種,把希望檢索到的物體存在的空
【CG物理模擬系列】流體模擬--粒子法之Position Based Fluids
[1] M. Macklin and M. Muller, "Position based fluids" ACM Trans. Graph., 32, pp.104:1-104:12, 2013. [2] M. Muller, B. Heidelberger, M. Hennix and J. Ratcl
【NOIP 模擬賽】鐘 模擬+鏈表
color blog 不常用 get 循環鏈表 fig problem bsp 常用 biubiu~~ 這道題實際上就是優化模擬,就是找到最先死的讓他死掉,運用時間上的加速,題解上說,要用堆優化,也就是這個意思。 對於鏈表,單項鏈表和循環鏈表都不常用,最常用的是雙向鏈表
【模擬登陸】github模擬登陸,列印資訊流
目的:動態獲取cookie 第一:分析登陸過程 1、開啟開發者工具,檢視各自請求 2、可以看到name為session的請求【方式post,傳入的data】 3、檢視name為login的請求,原始碼中獲得token,作為上一個請求中的data的一部分
特效模擬:SPH流體模擬及液面重構問題
爆炸 方程 力學 壓力 大學 png sch 技術 當前 這裏是關於特效模擬算法的一些敘述,主要是流體模擬部分的研究。 目前動畫領域內的流體模擬主要是拉格朗日法無網格法和歐拉網格法,兩種方法更有利弊。 我研究的主要是拉格朗日法中的SPH模型,即光滑粒子流體動力學模型。
【數據庫系列】MySql中的select的鎖表範圍
nbsp 範圍 nod 指定 lock 無數據 才會 rdb sele 由於InnoDB預設的是Row-Level Lock,只有明確指定主鍵的時候MySql才會執行Row lock,否則MySql將會執行Table Lock. 1、明確指定主鍵則是行鎖 2、明確指定主鍵,
【SQL Server 學習系列】-- 獲取字符串中出現某字符的次數及字符某次出現的下標
nbsp pan urn ace server type char sel sql DECLARE @Str NVARCHAR(500) = ‘1_BB_CC_DD_AA_EE_YY_WW_HH_GG‘ --// 1. 獲取下劃線在字符串中出現的次數 SELECT LE
【ASP.NET MVC系列】淺談MVC
後端 nbsp 文獻 ats 路勁 onf 將在 cot get 描述 本篇文章主要概述ASP.NET MVC,具體包括如下內容: 1.MVC模式概述 2.WebForm概述 3.WebForm與MVC區別 4.ASP.NET MVC發展歷程 5.運用程序結構 6.ASP.
【APS.NET 框架系列】淺談ASP.NET 框架
處理請求 splay bapi tps cat 底層 show 一個 優化 本篇文章稍微偏原理且底層,有一定難度和且比較晦澀。 本篇文章主要是從廣度上概括一下,具體的更細粒度的,會在後續的文章中,結合具體的Demo實例分析。 一 .NET框架概述
【ASP.NET MVC系列】淺談表單和HTML輔助方法
繼承 好的 內容 概述 調用 復制 畫圖 models pac 【01】淺談Google Chrome瀏覽器(理論篇) 【02】淺談Google Chrome瀏覽器(操作篇)(上) 【03】淺談Google Chrome瀏覽器(操作篇)(下) 【04】淺談AS
【腫瘤預測模型系列】如何在R軟體中求一致性指數( Harrell'concordance index:C-index)?
今晚收到一封醫生好友的郵件,諮詢如何求Harrell的C-index?曾在丁香園論壇裡遇到過朋友求助,自己也嘗試回答過,論壇裡回答的言簡意賅,針對問題論問題,沒有詳細的原理說明,今天趁回覆朋友郵件的機會,就大致總結下自己對C-index的理解以及在R軟體中的計算過程。 所謂C-index,英文名全稱conc
【中文分詞系列】 8 更好的新詞發現演算法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【黑帽SEO系列】網頁劫持和頁面跳轉
網頁劫持是目前黑帽SEO或者說黑產最喜歡的一種網頁引流方式,此手法往往通過入侵政府、教育機構網站(權重高),修改網站原始碼、放寄生蟲程式、設定二級目錄反向代理等實現。網頁劫持可以分為服務端劫持、客戶端劫持、百度快照劫持、百度搜索劫持等等;表現形式可以是劫持跳轉,也可以是劫持呈現的網頁內容,目
【黑帽SEO系列】基礎知識
【黑帽SEO系列】基礎知識 發表於 2016-10-09 | 分類於 黑產研究 | 熱度 3320 ℃ SEO全稱為搜尋引擎優化,是指通過站內優化、站外優化等方式,提升搜尋引擎收錄排名。既然有SEO技術,便會有相應的從業人員,他們被稱為白帽SEO,專指通過公正SEO手法,幫助提升站點排名
【黑帽SEO系列】暗鏈
【黑帽SEO系列】暗鏈 發表於 2016-10-12 | 分類於 黑產研究 | 熱度 2325 ℃ 暗鏈也稱為黑鏈,即隱蔽連結 hidden links,是黑帽SEO的作弊手法之一。在早期的SEO優化中,黑鏈是最有效最迅速的方法之一;但是現在百度演算法已經對iframe和display:
【go語言 基礎系列】陣列及slice
【陣列】 Go語言處理陣列特別的地方是:go把陣列看成是值傳遞 如果需要傳引用,需要額外處理 *[5]int 如下demo package main import ( "fmt" ) func main() { var arr1 = [5]int{1,
【go語言 基礎系列】內建函式
原始檔builtin.go檔案中一共定義了15個內建函式,go1.9.2 版本。通過函式名可以直接呼叫函式。 func append(slice []Type, elems ...Type) []Type func copy(dst, src []Type) int
【阿裏面試系列】Java線程的應用及挑戰
thread線程 ram 時間 title extend 歸類 ace 定義 code 文章簡介 上一篇文章【「阿裏面試系列」搞懂並發編程,輕松應對80%的面試場景】我們了解了進程和線程的發展歷史、線程的生命周期、線程的優勢和使用場景,這一篇,我們從Java層面更進一步了解