这只是某个算例佐证了liutex算法的优势。个人感觉(主流)学界对liutex的态度有非常大的差异,有些大佬对liutex法的态度偏消极(审稿意见)。
lizhisongsjtu
帖子
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题 -
请教:第三代涡识别方法Liutex的代码在linux中运行的问题用两种方法识别流场中的涡,第一种是lambda法,openfoam自带的无量纲方法,第二种是liutex方法。
123看出,改变阈值后,中心部位的漩涡变小;456看出中心漩涡并没有随阈值改变而明显改变。
根据S和Omega模的大小,把涡区分为剪切占优和旋转占优两种。123+456显示,阈值对剪切占优的涡结构的显示特征影响挺大,对旋转占优的涡结构影响并没那么明显。如此,凸显了liutex方法在旋转涡涡结构识别中的优势。
-
3阶以上矩阵定义与求逆总结一下:
求任意矩阵的逆矩阵,OpenFOAM中有三种方法:
(1) LU-scalarSquareMatrix,实数、方阵;
(2) QR-RectangularMatrix<Type> or SquareMatrix<Type> ,实数/复数、方阵/非方阵;
(3) SVD-scalarRectangularMatrix,实数、方阵/非方阵。
-
3阶以上矩阵定义与求逆下面的语句可以了
QRMatrix<RectangularMatrix<complex>> QRM ( JacobianM_QR, QRMatrix<RectangularMatrix<complex>>::modes::ECONOMY, QRMatrix<RectangularMatrix<complex>>::outputs::ONLY_R );
-
3阶以上矩阵定义与求逆@李东岳 在实数域内,这个方法完全可行。
可惜,我构建的矩阵类型是复数,上述方法暂时不支持扩展到复数域。
参考了CFD-online上帖子的回复,采用QR分解,把待分解的矩阵创建为RectangularMatrix<complex>类型。
创建QRMatrix<complex> 类型的矩阵,需要提供至少两个参数。
参考QRMatrix构造函数//- Construct with a matrix and perform QR decomposition explicit QRMatrix ( const modes mode, const outputs output, const bool pivoting, MatrixType& A ); //- Construct with a const matrix and perform QR decomposition explicit QRMatrix ( const MatrixType& A, const modes mode, const outputs output = outputs::BOTH_QR, const bool pivoting = false );
用如下语句创建QR矩阵,报错。
RectangularMatrix<complex> JacobianM_QR({3,3}, Zero); JacobianM_QR(0, 0) = 4; JacobianM_QR(0, 1) = 12; JacobianM_QR(0, 2) = -16; JacobianM_QR(1, 0) = 12; JacobianM_QR(1, 1) = 37; JacobianM_QR(1, 2) = -43; JacobianM_QR(2, 0) = -16; JacobianM_QR(2, 1) = -43; JacobianM_QR(2, 2) = 98; Info << "JacobianM_QR = " << JacobianM_QR << endl; Info << "JacobianM_QR.size() = " << JacobianM_QR.size() << endl; // QRMatrix<complex> QRM(JacobianM_A); // QRMatrix<complex> QRM(JacobianM_A, uint8_t(1)); QRMatrix<complex> QRM(JacobianM_A, (uint8_t)1); // QRMatrix<complex> QRM(JacobianM_QR, *); // *位置是uint8_t类型的1,
-
3阶以上矩阵定义与求逆openFoam中实现非线性方程组求解中的Jacobian矩阵、求逆、矩阵与列向量相乘
谢谢东岳回复。今天试了一下,SquareMatrix类型的方阵,无法求逆。
此外,还需要一个向量与方阵相乘的列向量,列向量的定义用List定义,不能点乘。
(牛顿法求非线性方程组)
#include "fvCFD.H" // #include "complex.H" #include "SquareMatrix.H" int main(int argc, char *argv[]) { Info << "Operation of Tensor and Square Matrix in OpenFOAM:" << endl; Info << endl << endl << "Part I: tensor" << endl; tensor myTensor(.1, 1, 2, 3, 4, 5, 6, 7, 8); vector myVector(1, 1, 1.); Info << "myTensor = " << myTensor << endl; Info << "myTensorInverse = " << inv(myTensor) << endl; Info << "det(myTensor) = " << det(myTensor) << endl; Info << "tr(myTensor) = " << tr(myTensor) << endl; Info << "myTensor & myVector = " << (myTensor & myVector) << endl; Info << endl << endl << "Part II: SquareMatrix" << endl; // 目标矩阵是8x8,暂时用4x4替代。 const label M(4); // 创建一个List List<scalar> myList(M); myList[0] = 1; myList[1] = 1; myList[2] = 1; myList[3] = 1; // 创建方阵并赋值。 SquareMatrix<scalar> hmm(M); hmm(0, 0) = -3.0; hmm(0, 1) = 10.0; hmm(0, 2) = -4.0; hmm(0, 3) = -5.0; hmm(1, 0) = 2.0; hmm(1, 1) = 3.0; hmm(1, 2) = 10.0; hmm(1, 3) = 9.0; hmm(2, 0) = 2.0; hmm(2, 1) = 6.0; hmm(2, 2) = 1.0; hmm(2, 3) = 5.0; hmm(3, 0) = 5.0; hmm(3, 1) = 8.0; hmm(3, 2) = 10.0; hmm(3, 3) = -4.0; Info << "det(hmm) = " << det(hmm) << endl; Info << "hmm.size() = " << hmm.size() << endl; // Info << "tr(hmm) = " << tr(hmm) << endl; // Info << "inv(hmm) = " << inv(hmm) << endl; // Info << "hmm & myList = " << (hmm & myList) << endl; return 0; }
-
3阶以上矩阵定义与求逆做2个算法植入,求解非线性方程组,需要构造Jacobian矩阵并求其逆矩阵。
算法1中,矩阵为3阶方阵,类型为复数张量Tensor<complex>,可正常调用函数inv计算逆矩阵。
算法2中,矩阵为8阶方阵,按常规的C++语法complex JacobianM定义矩阵,调用求逆函数时报错,求逆函数不适用C++语法定义的矩阵求逆。对上述矩阵求逆,请教道友如何定义一个3阶以上矩阵:
(1)可求逆
(2)逆矩阵可与向量点乘,&
算法1的OpenFOAM脚本,成功运行。算法2的Python脚本,验证准确。
算法2的OpenFOAM脚本,报错。
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题回复一下Liutex使用效果和使用报错的反馈:
-
关于Liutex识别的涡结构:在类似澡盆涡这样的旋转流动里,Liutex的方法确实会有(或者近似会有)阈值独立的涡结构,近似阈值独立的涡结构,lambda2方法、Q方法,都不存在阈值独立的涡结构。
-
关于报错:本人使用平台是of2206和of2306,而且流场本身的旋转占优。对剪切流动的效果,本人没有验证。关于浮点溢出,大概率是除数接近0,用户可以自行debug。
如上!
-
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题@BznW
感谢您的认可。我的使用环境是OF2206和OF2306。没出现类似的问题。建议用2206或2306试验。
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题@RQLI_CFD 我不熟悉剪切流动,暂时无法回复楼主的问题。
对旋转流动,使用经验确实印证了Liutex方法在涡核心区识别方面的卓越表现。文章见刊后,会共享识别涡核心区的结果。 -
关于waves2foam造波衰减问题首选请明确是否调用了湍流模型!
Larsen证明了两方程模型会导致准势流区域的湍动能会指数增长,波高沿程衰减。
建议调用Larsen改进的stablized版本的额湍流模型。
-
推板造波-孤立波请查看上海交通大学,宣瑞韬、张金牛、荣一毅等人的硕士论文。
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题@coolhhh 谢谢大佬
下载:RotexZhisong.zip在原始版本和东岳大佬版本基础上,用OF自带的场函数替换PQR\delta 的计算语句,200万网格,单核6s。
提示:新旧PQR\delta计算结果的差异,量级是-12,但最后Rotex的x和y分量有一点差异,z分量差异可忽略。
@李东岳 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:
我把 http://www.jhydrodynamics.com/en/download-of-liutex-code/ 这个链接里面的代码,小改了一下,放到了OpenFOAM-9里面可以编译成功。
下载:Rotex.zip
-
请教:第三代涡识别方法Liutex的代码在linux中运行的问题@lizhisongsjtu 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:
@李东岳 近期科研需要,花了两天研究这个程序。没调通,但发现一个bug。
原始程序142行qq=(Foam::pow(aa,2), 3bb)/9与《LiutexG涡定义和第三代涡识别方法》中公式12不同。应改为qq=(-Foam::pow(aa,2)+3bb)/9。
另外,求具体执行Rotex的命令!
我执行的命令是
postProcess -latestTime -func Rotex,提示cannot find functionObject file Rotex. -
请教:第三代涡识别方法Liutex的代码在linux中运行的问题@李东岳 近期科研需要,花了两天研究这个程序。没调通,但发现一个bug。
原始程序142行
qq=(Foam::pow(aa,2), 3*bb)/9
与《LiutexG涡定义和第三代涡识别方法》中公式12不同。应改为qq=(-Foam::pow(aa,2)+3*bb)/9
。另外,求具体执行Rotex的命令!