openfoam UPstream类探索(二)

前言

接上次的博文,本篇补全以下几个函数的介绍:
Pstream::nProcs()
Pstream::parRun()
UPstream::exit()


简述几个常用的函数如下:

Pstream::nProcs()
openfoam对其的介绍是:

Number of processes in parallel run.

        //- Number of processes in parallel run         static label nProcs(const label communicator = 0)         {             return procIDs_[communicator].size();         } 
	Foam::DynamicList<int> Foam::UPstream::myProcNo_(10); 
        //- List of process IDs         static DynamicList<List<int>> procIDs_; 

Pstream::nProcs()与上篇我们介绍的函数Pstream::myProcNo()非常相似,
Pstream::nProcs()的介绍是Number of processes in parallel run
Pstream::myProcNo()的介绍是Number of this process (starting from masterNo() = 0)
按照这个程序释义来说,Pstream::nProcs()返回的是并行计算中进程的数量,而Pstream::myProcNo()返回的是从主节点开始该进程的数量
我这英语水平不大行,没看懂其中区别,继续从源码中寻找答案

看看两个静态成员函数的返回值
Pstream::nProcs()的返回值是procIDs_[communicator].size(),Pstream::myProcNo()的返回值是myProcNo_[communicator]
procIDs_与myProcNo_的定义分别是

        //- List of process IDs         static DynamicList<List<int>> procIDs_; 
        //- My processor number         static DynamicList<int> myProcNo_; 

单单从成份上看,procIDs_装载的是List< int >,而myProcNo_装载的只是int
从这个角度也更能解释他们的程序注释,Pstream::nProcs()返回的是包含列表的动态列表,Pstream::myProcNo()返回的仅仅是一个int类型的动态列表
后续遇到再结合程序案例进行分析


Pstream::parRun()
openfoam对其的介绍非常明确了

        //- Is this a parallel run?         static bool& parRun()         {             return parRun_;         } 

返回的是布尔型判断,默认值是false
而且返回值是引用类型,说明可以在程序运行时随时更改

bool Foam::UPstream::parRun_(false); 

所以这句话也经常在判断语句中使用,如:

	if (nProcs == 0) 	{ 	    parRun_ = false; 	    statement(); 	} 

这段语句说明如果是在主节点运行,我这个标识符就置为false
当然也这样使用

    if (doPstream && parRun())//并行处理前的判定     {         statement();     } 

Pstream::exit()
这个可以参考该链接
之所以用exit()函数,因为他是强制关闭,类似正在开机的电脑长摁电源键几秒


结语

后续如果遇到并行计算需要的函数或者不理解其中原理,我认为可以按照我的方法刨根问底,可能前十次的速度很慢,但好事多磨,这两篇文章更重要的是说明学习openfoam的方法
of的学习曲线就是开始很缓慢后续很陡峭,没办法,该花的时间要花的
修行在个人,修行在个人

一起探索openfoam也是相当有趣的一件事,非常欢迎私信讨论
指正的价值要比打赏更重要,下面是个人联系方式,希望能结交到志同道合的朋友
openfoam  UPstream类探索(二)

发表评论

相关文章