Palabos User Guide中文解读 | 第十二章 | 数据评估
作者的話:本人在學習palabos時,發現國內中文資料甚少,恰好網上可以直接搜到palabos user guide這種英文資料,加之時間充裕,便打算開始翻譯,翻了一節后發現這可能算侵權,就比較傷腦筋,突然想到自己寫中文解讀即可,便有了下面的博客。
Palabos User Guide
Release 1.0 r1
Copyright ? 2019 University of Geneva
Jul 05, 2019
Chapter Twelve
數據評估
12.1 概覽
在19.2節附錄(數據分析等的不變值算子操作(主要講預設的block-lattice內的不變值用于數據后處理))中,有很多用于轉換數據的palabos代碼。
當我們運行完程序后,接下來就到了處理數據的環節,我們可能會用到一些標準的后處理工具,所以我們需要轉換一下數據。
本節會涉及到 computeVelocity 函數。可用于2D和3D中的atomic-blocks與multi-blocks。
下面是3D的例子:
// Version 1
void computeVelocity(MultiBlockLattice3D<T,Descriptor>& lattice,
MultiTensorField3D<T,Descriptor< T>::d>& velocity, Box3D domain);
// Version 2
std::unique_ptr<MultiTensorField3D<T,3> >
computeVelocity(MultiBlockLattice3D<T,Descriptor>& lattice, Box3D domain);
// Version 3
std::unique_ptr<MultiTensorField3D<T,3> >
computeVelocity(MultiBlockLattice3D<T,Descriptor>& lattice);
上面的version1,速度是在block-lattice的子域被計算的,得到的結果對應的是3個元素的張量場的子域。
其中block-lattice和張量場無需擁有相同的尺寸,也不需要有相同的內部區塊安排。如果兩者之一的域超過了另一個的尺寸,域會自動相應地切對齊。
version2中的代碼更加常用,會自動生成一個與上面代碼中的domain尺寸相同的張量場。這里用到的是C++標準庫的指針功能。
當你使用std::unique_ptr<MultiTensorField3D<T,3> >,就如同使用 MultiTensorField3D<T,3>*一樣。區別在于自動指針有著自動內存管理的機制,把你從用完后還需要delete中解放出來。
下面是個典型的使用computeVelocity的例子:
pcout << *computeVelocity(lattice, domain) << endl;
如果你使用了這行代碼,計算結果會立刻出現在終端屏幕上。代碼前的星號是為了區分出別的速度域的指針。在程序末行,速度域的內存會自動被處理,無需再消除。
version3中因為domain語句為整個lattice的區域,即lattice.getBoundingBox(),就非常的方便。
12.2 輸出數據評估算子
computeVelocity函數得到的值可以直接用于別的數據處理操作。由此代碼可以寫的比較復雜,例如,在之前節中提到的computeAverage函數可以被一個速度場的計算來替代(計算速度,將其值代入計算范數平方{normsquare},除以2,得到平均動能):
pcout << "The value " << *computeAverageEnergy(lattice) << " is the same as " << computeAverage (
*multiply ( 0.5, *computeNormSqr (
*computeVelocity(lattice) ) ) )
<< endl;
在附錄19章(部分函數和類的參考)列出了這個例子涉及的所有函數。更多的數據分析,標量場構建以及數據分析算子的結合計算都在examples/codesByTopic/scalarField目錄下。
總結
以上是生活随笔為你收集整理的Palabos User Guide中文解读 | 第十二章 | 数据评估的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节跳动第四批笔试题
- 下一篇: 无线充电智能车的制作