VM2D  1.12
Vortex methods for 2D flows simulation
Queue.h
Go to the documentation of this file.
1 /*--------------------------------*- VMlib -*----------------*---------------*\
2 | ## ## ## ## ## ## ## | | Version 1.12 |
3 | ## ## ### ### ## ## | VMlib: VM2D/VM3D Library | 2024/01/14 |
4 | ## ## ## # ## ## ## #### | Open Source Code *----------------*
5 | #### ## ## ## ## ## ## | https://www.github.com/vortexmethods/VM2D |
6 | ## ## ## #### ### #### | https://www.github.com/vortexmethods/VM3D |
7 | |
8 | Copyright (C) 2017-2024 Ilia Marchevsky |
9 *-----------------------------------------------------------------------------*
10 | File name: Queue.h |
11 | Info: Source code of VMlib |
12 | |
13 | This file is part of VMlib. |
14 | VMLib is free software: you can redistribute it and/or modify it |
15 | under the terms of the GNU General Public License as published by |
16 | the Free Software Foundation, either version 3 of the License, or |
17 | (at your option) any later version. |
18 | |
19 | VMlib is distributed in the hope that it will be useful, but WITHOUT |
20 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
21 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22 | for more details. |
23 | |
24 | You should have received a copy of the GNU General Public License |
25 | along with VMlib. If not, see <http://www.gnu.org/licenses/>. |
26 \*---------------------------------------------------------------------------*/
27 
28 
37 #ifndef QUEUE_H
38 #define QUEUE_H
39 
40 #include "defs.h"
41 #include "Parallel.h"
42 #include "Task.h"
43 
44 #ifdef CODE2D
45  namespace VM2D
46  {
47  class World2D;
48  }//namespace VM2D
49 #endif
50 
51 #ifdef CODE3D
52  namespace VM3D
53  {
54  class World3D;
55  }//namespace VM3D
56 #endif
57 
58 namespace VMlib
59 {
60 
61  class WorldGen;
62 
72  class Queue
73  {
74  private:
75 
82  struct
83  {
87  int prepared;
88 
92  int solving;
93 
95  int finished;
96  } numberOfTask;
97 
105  std::vector<int> procState;
106 
117  std::vector<int> procStateVar;
118 
125  std::vector<int> flagFinish;
126 
128  int myidAll;
129 
131  int nProcAll;
132 
133 #ifdef USE_MPI
134  MPI_Group groupAll;
136 
138  MPI_Group groupStarting;
139 
141  MPI_Comm commStarting;
142 
146  MPI_Group groupSolving;
147 
151  MPI_Comm commSolving;
152 #else
153  int groupAll;
158 #endif
159 
164 
168  void ConstructProcStateVar();
169 
174  void AddTask(int _nProc, std::unique_ptr<PassportGen> _passport);
175 
178 
179  public:
183  std::vector<Task> task;
184 
186  std::unique_ptr<WorldGen> world;
187 
194 
201 
207  const double kvantTime = 10.0;
208 
211 
218 
226 
234  Queue(int& argc, char**& argv, void(*_CreateMpiTypes)());
235 
237  ~Queue();
238 
242  void TaskSplit();
243 
247  void TaskUpdate();
248 
250  void RunConveyer();
251 
258  void LoadTasksList(const std::string& _tasksFile, const std::string& _mechanicsFile, const std::string& _defaultsFile, const std::string& _switchersFile);
259  };
260 
261 }//namespace VMlib
262 
263 #endif
264 
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: Queue.h:177
int myProcState
Состояние данного процессора
Definition: Queue.h:193
Класс, определяющий работу с потоком логов
Definition: LogStream.h:53
int groupSolving
Definition: Queue.h:156
int solving
Число решаемых в данный момент задач
Definition: Queue.h:92
Заголовочный файл с описанием класса Task.
int commStarting
Definition: Queue.h:155
std::vector< int > procStateVar
Модифицированный список состояний процессоров
Definition: Queue.h:117
int commSolving
Definition: Queue.h:157
Описание базовых вспомогательных функций
int myidAll
Глобальный номер процессора
Definition: Queue.h:128
Заголовочный файл с описанием класса Parallel и структуры parProp.
int myProcStateVar
Состояние данного процессора
Definition: Queue.h:200
Класс, опеделяющий список решаемых задач и очередь их прохождения
Definition: Queue.h:72
Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме
Definition: Parallel.h:83
std::vector< int > procState
Список состояний процессоров
Definition: Queue.h:105
std::vector< int > flagFinish
Список возвращаемых флагов останова задачи
Definition: Queue.h:125
int nProcAll
Общее число процессоров
Definition: Queue.h:131
int groupStarting
Definition: Queue.h:154
Definition: Airfoil2D.h:45
int prepared
Число подготовленных к запуску задач
Definition: Queue.h:87
std::vector< Task > task
Список описаний решаемых задач
Definition: Queue.h:183
int currentKvant
Номер текущего кванта времени
Definition: Queue.h:210
int groupAll
Definition: Queue.h:153
std::unique_ptr< WorldGen > world
Умный указатель на текущую решаемую задачу
Definition: Queue.h:186
int finished
Число уже решенных задач
Definition: Queue.h:95
Parallel parallel
Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме
Definition: Queue.h:225
int sizeCommSolving
Число процессоров в группе для головных процессоров в решаемых в данном кванте времени задачах ...
Definition: Queue.h:163
int nextKvant
Признак необходимости выполнения следующего кванта и продолжения расчета
Definition: Queue.h:217