显示方法的含义

时间:2013-11-26 01:40:02

标签: c++ methods process command-line-arguments

在我分析的一个构造函数中是以下方法:

if (validParOptions.found(optionName))
{
parRunControl_.runPar(argc, argv); 
break;  //leave loop
}

ParRunControl parRunControl_ //- Switch on/off parallel mode.

void runPar(int& argc, char**& argv)
{
RunPar = true;  //bool RunPar;
if (!Pstream::init(argc, argv))
{
Info<< "Failed to start parallel run" << endl;
Pstream::exit(1);
}
}

此处

bool Foam::UPstream::init(int& argc, char**& argv) //Spawns slave processes and                      
{                                                  //initialises inter-communication                                                                                  
FatalErrorIn("UPstream::init(int& argc, char**& argv)")
{                                                                                                                       
<< "Trying to use the dummy Pstream library." << nl                                                                                                                             
<< "This dummy library cannot be used in parallel mode"                                                                                                                               
<< Foam::exit(FatalError);                                                                                                                               
return false;                                                                                                                               
}   

在第一个if条件中,检查commandlinearguments选项的存在,并且像最后一个方法的描述init告诉应该生成一个从属进程 和初次沟通应该初始化。两个问题:

  1. 我没有看到方法init中的哪个进程产生了。相反,我只看到一个 方法中的错误消息。我错过了什么吗?
  2. commandlinearguments中的选项通常会产生slave进程吗?
  3. 问候直播

1 个答案:

答案 0 :(得分:1)

我假设它是一个宏,因为it seems to have lots of different invocations。但是,错误消息正在盯着你:它不会让你使用该代码。 看看其他源文件:

https://github.com/OpenFOAM/OpenFOAM-2.2.x/blob/95dc52c102041058f0bcfc8b6aab6b41b20dc313/src/Pstream/dummy/UPstream.C

https://github.com/OpenFOAM/OpenFOAM-2.2.x/blob/95dc52c102041058f0bcfc8b6aab6b41b20dc313/src/Pstream/dummy/UOPwrite.C

https://github.com/OpenFOAM/OpenFOAM-2.2.x/blob/95dc52c102041058f0bcfc8b6aab6b41b20dc313/src/Pstream/dummy/UIPread.C

它们具有空定义或包含notImplemented。最重要的提示是它们都位于dummy目录中。

我的猜测是你可能从错误的标题中拉出来。看看这个:

https://github.com/OpenFOAM/OpenFOAM-2.2.x/blob/master/src/Pstream/mpi/UPstream.C

它实际上有代码:

bool Foam::UPstream::init(int& argc, char**& argv)
{
    MPI_Init(&argc, &argv);

    int numprocs;
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myProcNo_);

    /* SNIP */

    return true;
}