2013-11-26 2 views
-2

в одном конструкторе, что я анализа являются методы ниже:Значение показанных методов

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;                                
} 

В первом, если условии о имеющихся вариантах commandlinearguments проверены и как описание последнего метода init говорит процесс подчиненного должны быть породили унд между сообщением должно быть инициализировано. Два квантонов:

  1. Я не вижу, где в методе init происходит процесс. Скорее я вижу сообщение об ошибке внутри метода. Я что-то упускаю?
  2. Есть ли опции в командной строке, как правило, запускает ведомый процесс?

поздравления Streight

ответ

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; 
} 
+0

У меня есть несколько вопросов по этому поводу. 1. Если я перейду к ссылке класса класса PStream, я найду только метод, который я опубликовал. Зачем? Есть ли ошибка в библиотеке? 2.Что такое фиктивный каталог? – Streight

+0

@Streight Все, что я могу придумать, это «макет» ups, которые используются для модульного тестирования. Что касается того, почему у вас есть только «фиктивная» версия, я понятия не имею. Попытайтесь загрузить версию из github, если вам нужно. –

+0

Я просто анализирую исходный код, поэтому мне не нужно загружать другую версию. Однако я должен быть уверен, что это правильная версия, включенная в код, который я анализирую. В библиотеке OpenFOAM для init() показана только версия, которую я включил, но при поиске файлов .C-файлов класса UpStream на моем ПК я получаю три разных файла с тремя различными методами init(). Как я могу предположить, какой из них будет использоваться в коде, который я анализирую? – Streight

Смежные вопросы