openfoam UPstream类探索(二)

时间:2023-02-25 14:06:26

前言

接上次的博文,本篇补全以下几个函数的介绍:
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类探索(二)