减少mpi 通信
刘雄国
帖子
-
-
其实也不难,你用grep大概能猜出个所以然来。
grep -rn "validate"
其他都是空函数只有一个函数有点意思template<class BasicTurbulenceModel> void Foam::ReynoldsStress<BasicTurbulencemModel>::validate() { correctNut(); }
然后我又grep 了
correctNut()
常用的是kOmega 我看了下template<class BasicTurbulenceModel> void kOmega<BasicTurbulenceModel>::correctNut() { this->nut_ = k_/omega_; correctBC; BasicTurbulenceModel::correctNut(): }
我虽然没有一行行debug, 大概猜出来就是湍流初始化。最开始给定k omega 初始值计算出第一步的nut 初始值给k omega方程,即previous time step,欢迎指正。
-
volScalarField YcMinus0dot7 = Yc(s) - 0.7;
-
@hurricane007 在 欧拉-拉格朗日方法,用不同的线程来进行流场计算和颗粒跟踪 中说:
如果有这种求解器的话,求指点一下,如果不能的话,求讨论一下为啥不能
线程 != processor 进程
OpenFOAM only applies the MPI library, not OpenMP. Another problem, the particle/cloud classes require the local velocity, temperature, turbulence, and pressure field to calculate the particle velocity or forces. You need to solve that, how particle tracking slaves access the those information from CFD slaves. Furthermore, does the particle field affect the fluid field? Then, ... It is complex.
Sorry, I don't have Chinese typing now. -
可以参照vector<>内存管理模式,网上很多资料。不清空内存是为了防止堆空间内存反复allocate和delete,防止重复调用系统资源,这样运行速度下降。allocated size是分配了多少空间,size是你用多少个空间。
double a[10] = {1,1,1};
类似这种,分配10个double空间,实际上只用了3个double空间,当然这使用的是栈内存。 -
OpenFOAM 矩阵计算效率是可以更高,这点没有疑问. 矩阵计算效率高不高 主要取决于 MPI 通信
1000 processors 以上 不同节点上 计算 OpenFOAM 要重构效率高不高除了算法,计算问题类型, 代码优化等有关系
大牛说 下一代cfd 需要 大规模计算机网格 + Algorithm + Coding 整体考虑 我觉得很有道理
问过openfoam developer, 他的意思是 OpenFOAM is a general CFD solver. They want to solve specific problem to make money (ESI).
-
@zhe qtcreator line-by-line debuging
-
OpenFOAM 颗粒的粒径可以大于网格尺寸, 这个库是有bug的,你需要花时间认真读读
-
@r07522121 google MPI load balance
-
@东岳 老师不好意思,我回答不了,和具体应用有关。
-
如果是静态网格 global mesh 可以只重组一次,就能节省通信时间。动态网格这个方法也不是特别好,需要测试一下。OpenFOAM这个粒子输运库我想改改,太慢了
-
可neng你的粒子源就在很小区域位置释放,所以导致进程不平均。建议在每个时间步网格重组,每个进程都有global mesh,在global mesh进行粒子输运, 就能解决这个问题啦!However, it is a little hard.
-
目前没有,openfoam实现的叫代数多重网格,就是在求解矩阵时候一些数学技巧而已。不建议一头扎进OpenFOAM,按照你的要求可以用MATLAB先实现一个简单解法器,把流程走一遍再看OpenFOAM。OpenFOAM版本越新c++高级技巧越多,做工程的人很少有人懂这么多程序技巧。
-
//- Cumulative particle counter - used to provode unique ID
static label particleCount_;
应该不是你可以修改基础particle类,让它生产粒子源时附带一个"字符码",particle在multi processors区域传输的时候把这个字符码也带上。就可以区别开来了。
-
qtcreator
etc/bashrc
export WM_COMPILE_OPTION=Opt
改为
export WM_COMPILE_OPTION=Debug
然后重新wmake all 在src 里面在qtcreator 可以实现一行一行debug, 是可行. 具体步骤可以google以下.
问题是OpenFOAM 太大了, 建议你还是直接把结果一步一步打印出来就可以拉
-
大家好, 请问有人测试过OpenFOAM 非对称矩阵解法器. 解法器算得总是不太对, 误差有点大. 我把问题一个一个排查, 发现可能OpenFOAM 非对称矩阵解法器可能有问题. 或者某些参数没给对, 我不太确定. 请问有人做过这方面研究不? 怎么对OpenFOAM的非对称矩阵PBiCG进行详细测试呢? 谢谢各位了哈!
-
现在OpenFOAM7 出来了 据我的同事说改变了很多 你可以看一下
-
应该是Sb.boundaryField() 返回const reference
Sb.boundaryField().ref() 返回 reference
根据我的经验是这样,如果错误的话把编译错误贴上来
认真看看代码很简单的,编译器的错误已经告诉你所有信息了! -
@chengan-wang 不能说没啥用,在某些时候很关键.如果没有这个就有可能出现重定义
-
@ZYj http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/ 里面有好多资料,你看懂了就不用我回答了.
-
好吧!我先自己回复下自己。在稀疏矩阵存储中,通用有两种格式,如下矩阵
A = [ a00 a01 0 0 0 a11 a12 0 a20 0 a22 0 a30 0 0 a33];
引用一篇博士论文 CRS scheme stores the non-zero elements the matrix in left-to-right and top-to-bottom order in vector v (row-wise storge). 存储格式如下
v = [a00, a01, a11,a12,a20,a22,a30,a33] cI = [0,1,1,2,0,2,0,3] rI = [0,1,1,2,0,2,0,3]
但是在openfoam中,不是这么存储的
openfoam是一种 LDU 格式 对角线 lowerAddr() upperAddr()A = [ d0 u0 u1 0 0 0 l0 d1 u2 0 0 0 0 l1 l2 d2 u4 u5 . . . ]
l = [l0 l1 l2 ...] d = [d0 d1 d2 d3 d4 ...] u = [u0 u1 u2 u3 ...] L = [0 0 1 1 2 2 3 ...] U = [1 2 2 3 3 4 4 ..]
具体可参见lduAddressing.H 头文件
因为计算流体力学中,大部分矩阵都是对称(因为一个internal face对应两个体)除了特别的边界条件外,基本上都是对称矩阵。而矩阵对角元素就更好求了,大部分情况直接把该行相加就得到主对角元素。这种sparse matrix设计是符合cfd计算原理的,但是我的问题还是没解决。看到相关资料分享一下。
稀疏矩阵也分好多种,openfoam中的renumberMesh就是尽量保证在是多对角阵。
谢谢! -
各位大神好,我从事热辐射输运方向。现在想在openfoam中开发新的蒙特卡洛求解热辐射输运方程,所用的方法为READ法。我现在想用sparse matrix 存储viewfactor, 需要用到一个内存动态变化的sparse matrix。因为在fvMatrix类中,sparse matrix根据网格类型、差值算法等条件,内存都是事先分配好的。请问大神有什么建议吗?
-
modest radiative heat transfer
这本书太厚了,去看下周怀春老师的视频吧! -
@d-benjamin 应该要改下代码 有兴趣可以加个微信交流下
-
你改下文件设置solution,求解动量方程。在system目录下要设置求解动量方程,默认是不求解的
-
Yes, you need to install gdb, gcc and g++. For more information, you can see the website http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2008/debugging.pdf.
Thanks -
Sorry, you have to recompile the code.
Change the OpenFOAM/etc/bashrcthecompilemodetoDebug:export WMCOMPILEOPTION=Debug
source OpenFOAM/etc/bashrc
then recompile it. Finally, you can use gdb paraFoam to the more information about your error.
-
用 gdb 调试一下 可能是除以零了
-
这些辐射系数都是和 wavenumber 相关, 在RT E中需要这些带量纲参数.
Thanks -
Thank you. That is a great help.
-
Now I have an idea. It is very easy.
If we want to debug a virtual function in OpenFOAM, just add one line in the specific position.
"
int c = getchar();
"
Then recompile this library and run it in gdb mode. If the program stops, "ctrl + c" kills the program. And just type 'bt' to print a backtrace of the entire stack."
(gdb) r
Starting program: /OpenFOAM/OpenFOAM-plus/platforms/linux64GccDPInt32Debug/bin/
Missing separate debuginfos, use: zypper install glibc-debuginfo-2.22-19.1.x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
...
^C
Program received signal SIGINT, Interrupt.
0x00007ffff08f1320 in __read_nocancel () from /lib64/libc.so.6
Missing separate debuginfos, use: zypper install libgcc_s1-debuginfo-7.3.1+r258812-10.1.x86_64 libstdc++6-debuginfo-7.3.1+r261272-106.1.x86_64 libz1-debuginfo-1.2.8-14.3.1.x86_64 openmpi-libs-debuginfo-1.10.6-4.1.x86_64
(gdb) bt
"Thanks for your attention.
-
大家好, 我是一名openfoam初学者,之前也在写代码的,对C++还是比较熟悉.
首先我用Debug模式编译了, 我想设置一个断点在一个基类的方法函数上, 但是我发现该函数有好多模板类和继承, 请问大家有这方面经验吗?
另外,我对Openfoam程序框架还是很迷糊, 模块之间主要通过mesh这个类耦合,但是好多虚拟函数相互怎么调用的都不太懂, 请问大家有什么高见吗?
谢谢!
-
谢谢哈!
-
请问大家用过openfoam热辐射输运计算功能吗?
能解释一些这个RTE方程吗?IiEq = ( fvm::div(Ji, ILambda_[lambdaI], "div(Ji,Ii_h)") + fvm::Sp(k*omega_, ILambda_[lambdaI]) == 1.0/constant::mathematical::pi*omega_ * ( k*blackBody_.bLambda(lambdaI) + absorptionEmission_.ECont(lambdaI)/4 ) );
看个乐:renumberMesh后的魔性云图
turbulence->validate有何意义
求助帖:OpenFOAM后处理极小数
欧拉-拉格朗日方法,用不同的线程来进行流场计算和颗粒跟踪
List类的clear()函数
并行效率疑问
并行效率疑问
请问,MPPIC这个方法的particle distribution function的运作
请问DPMFoam不能用于非常精细的网格的模型么?
拉格朗日粒子在平行運算下的問題
拉格朗日粒子在平行運算下的問題
拉格朗日粒子在平行運算下的問題
拉格朗日粒子在平行運算下的問題
在OpenFoam植入多尺度模拟方法的可行性
颗粒的全局ID输出问题?
Ubuntu 下 OpenFOAM代码的调试
OpenFOAM 非对称矩阵解法器
particleforce类内ErgunWenYuDrag的表达式感觉有错误
forAll boundary
请教一个代码IOdictionary_H
请教:cloudFunction 编译问题
OpenFOAM sparse matrix 内存管理
OpenFOAM sparse matrix 内存管理
关于OpenFOAM中radiationProperties的疑问
radiationProperties中是否可以设置物性随空间位置变化?
buoyantBoussinesqPimpleFoam求解器没有求解速度吗?
请教一下openfoam中出现这种错误是什么意思?
请教一下openfoam中出现这种错误是什么意思?
请教一下openfoam中出现这种错误是什么意思?
OpenFOAM辐射算例中辐射属性发射率问题
请问大家用过gdb调试openfoam吗?
请问大家用过gdb调试openfoam吗?
请问大家用过gdb调试openfoam吗?
openfoam fvDOM热辐射输运计算
openfoam fvDOM热辐射输运计算
方程中Sp是什么意思?