138 if (myProcState == MPI_UNDEFINED)
139 world.reset(
nullptr);
141 if (myProcState == -32766)
142 world.reset(
nullptr);
168 while ((taskFol <
task.size()) && (nfree >=
task[taskFol].nProc))
183 procState[j] =
static_cast<int>(taskFol);
186 task[taskFol].proc[p] = j;
194 }
while (p <
task[taskFol].nProc);
207 nfree -=
task[taskFol].nProc;
220 info(
'i') <<
"ProcStates: " << std::endl;
222 info(
'-') <<
"proc[" << i <<
"] <=> problem[" <<
procState[i] <<
"]" << std::endl;
235 MPI_Bcast(&
numberOfTask.solving, 1, MPI_INT, 0, MPI_COMM_WORLD);
236 MPI_Bcast(&
numberOfTask.prepared, 1, MPI_INT, 0, MPI_COMM_WORLD);
237 MPI_Bcast(&
numberOfTask.finished, 1, MPI_INT, 0, MPI_COMM_WORLD);
242 std::vector<int> prepList;
248 for (
size_t i = 0; i<
task.size(); ++i)
253 prepList.push_back(
task[i].proc[0]);
263 MPI_Bcast(&
numberOfTask.prepared, 1, MPI_INT, 0, MPI_COMM_WORLD);
275 MPI_Bcast(prepList.data(),
numberOfTask.prepared, MPI_INT, 0, MPI_COMM_WORLD);
282 MPI_Comm_create(MPI_COMM_WORLD,
groupStarting, &commStarting);
284 commStarting = 0x04000000;
292 if (commStarting != MPI_COMM_NULL)
294 if (commStarting != 0x04000000)
301 MPI_Comm_rank(commStarting, &myidStarting);
314 world.reset(
new VM3D::World3D(
task[myProcState].getPassport()));
320 MPI_Comm_free(&commStarting);
322 commStarting = 0x04000000;
334 std::vector<int> solvList;
347 solvList.push_back(0);
358 solvList.push_back(s);
381 MPI_Bcast(solvList.data(),
sizeCommSolving, MPI_INT, 0, MPI_COMM_WORLD);
390 MPI_Comm_create(MPI_COMM_WORLD,
groupSolving, &commSolving);
392 commSolving = 0x04000000;
424 if (myProcStateVar != -32766)
450 if (
world ==
nullptr)
455 if (
world ==
nullptr)
456 world.reset(
new VM3D::World3D(
task[myProcState].getPassport()));
462 MPI_Bcast(&(
world->getPassportGen().timeDiscretizationProperties.currTime), 1, MPI_DOUBLE, 0,
parallel.
commWork);
477 VM3D::World3D& world3D =
dynamic_cast<VM3D::World3D&
>(*world);
483 world3D.getTimestat().GenerateStatHeader();
LogStream info
Поток для вывода логов и сообщений об ошибках
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
int myProcState
Состояние данного процессора
int myidWork
Локальный номер процессора, решающего конкретную задачу
std::vector< int > procStateVar
Модифицированный список состояний процессоров
int myidAll
Глобальный номер процессора
int commWork
Коммуникатор для решения конкретной задачи
int myProcStateVar
Состояние данного процессора
void GenerateMechanicsHeader(size_t mechanicsNumber)
std::vector< int > procState
Список состояний процессоров
void ConstructProcStateVar()
Процедура, нумерующая задачи в возрастающем порядке
std::vector< int > flagFinish
Список возвращаемых флагов останова задачи
int nProcAll
Общее число процессоров
std::vector< Task > task
Список описаний решаемых задач
int currentKvant
Номер текущего кванта времени
const Passport & getPassport() const
Возврат константной ссылки на паспорт
virtual void GenerateStatHeader() const override
Генерация заголовка файла временной статистики
std::unique_ptr< WorldGen > world
Умный указатель на текущую решаемую задачу
Класс, опеделяющий текущую решаемую задачу
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
void endl()
Вывод в поток логов пустой строки
Parallel parallel
Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме
struct VMlib::Queue::@0 numberOfTask
Структура, содержащая информацию о количестве задач в данный момент времени
int nProcWork
Число процессоров, решающих конкретную задачу
int sizeCommSolving
Число процессоров в группе для головных процессоров в решаемых в данном кванте времени задачах ...