VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
Queue.h
Go to the documentation of this file.
1/*--------------------------------*- VM2D -*-----------------*---------------*\
2| ## ## ## ## #### ##### | | Version 1.14 |
3| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2026/03/06 |
4| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5| #### ## ## ## ## ## | Open Source Code |
6| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7| |
8| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9*-----------------------------------------------------------------------------*
10| File name: Queue.h |
11| Info: Source code of VM2D |
12| |
13| This file is part of VM2D. |
14| VM2D 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| VM2D 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 VM2D. If not, see <http://www.gnu.org/licenses/>. |
26\*---------------------------------------------------------------------------*/
27
28
40#ifndef QUEUE_H
41#define QUEUE_H
42
43#include "defs.h"
44#include "Parallel.h"
45#include "Task.h"
46
47#ifdef CODE2D
48 namespace VM2D
49 {
50 class World2D;
51 }//namespace VM2D
52#endif
53
54#ifdef CODE3D
55 namespace VM3D
56 {
57 class World3D;
58 }//namespace VM3D
59#endif
60
61namespace VMlib
62{
63
64 class WorldGen;
65
75 class Queue
76 {
77 private:
78
85 struct
86 {
91
96
100
108 std::vector<int> procState;
109
120 std::vector<int> procStateVar;
121
128 std::vector<int> flagFinish;
129
132
135
136#ifdef USE_MPI
138 MPI_Group groupAll;
139
141 MPI_Group groupStarting;
142
144 MPI_Comm commStarting;
145
149 MPI_Group groupSolving;
150
154 MPI_Comm commSolving;
155#else
161#endif
162
167
172
177 void AddTask(int _nProc, std::unique_ptr<PassportGen> _passport);
178
181
182 public:
186 std::vector<Task> task;
187
189 std::unique_ptr<WorldGen> world;
190
197
204
210 const double kvantTime = 1.0;
211
214
221
229
237 Queue(int& argc, char**& argv);
238
240 ~Queue();
241
245 void TaskSplit();
246
250 void TaskUpdate();
251
253 void RunConveyer();
254
261 void LoadTasksList(const std::string& _tasksFile, const std::string& _mechanicsFile, const std::string& _defaultsFile, const std::string& _switchersFile);
262 };
263
264}//namespace VMlib
265
266#endif
267
Заголовочный файл с описанием класса Parallel и структуры parProp.
Заголовочный файл с описанием класса Task.
Класс, определяющий работу с потоком логов
Definition LogStream.h:57
Класс, опеделяющий список решаемых задач и очередь их прохождения
Definition Queue.h:76
~Queue()
Деструктор
Definition Queue.cpp:118
void ConstructProcStateVar()
Процедура, нумерующая задачи в возрастающем порядке
Definition Queue.cpp:615
const double kvantTime
Продолжительность кванта времени в секундах
Definition Queue.h:210
int prepared
Число подготовленных к запуску задач
Definition Queue.h:90
int sizeCommSolving
Число процессоров в группе для головных процессоров в решаемых в данном кванте времени задачах
Definition Queue.h:166
int myProcState
Состояние данного процессора
Definition Queue.h:196
void LoadTasksList(const std::string &_tasksFile, const std::string &_mechanicsFile, const std::string &_defaultsFile, const std::string &_switchersFile)
Загрузка списка задач
Definition Queue.cpp:712
int myProcStateVar
Состояние данного процессора
Definition Queue.h:203
std::unique_ptr< WorldGen > world
Умный указатель на текущую решаемую задачу
Definition Queue.h:189
int solving
Число решаемых в данный момент задач
Definition Queue.h:95
int groupSolving
Definition Queue.h:159
int nProcAll
Общее число процессоров
Definition Queue.h:134
std::vector< int > procStateVar
Модифицированный список состояний процессоров
Definition Queue.h:120
struct VMlib::Queue::@0 numberOfTask
Структура, содержащая информацию о количестве задач в данный момент времени
int commSolving
Definition Queue.h:160
std::vector< int > flagFinish
Список возвращаемых флагов останова задачи
Definition Queue.h:128
std::vector< Task > task
Список описаний решаемых задач
Definition Queue.h:186
void RunConveyer()
Запуск вычислительного конвейера (в рамках кванта времени)
Definition Queue.cpp:655
Parallel parallel
Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме
Definition Queue.h:228
int currentKvant
Номер текущего кванта времени
Definition Queue.h:213
void AddTask(int _nProc, std::unique_ptr< PassportGen > _passport)
Добавление задачи в список
Definition Queue.cpp:701
void TaskUpdate()
Процедура обновления состояния задач и процессоров
Definition Queue.cpp:485
int myidAll
Глобальный номер процессора
Definition Queue.h:131
int groupAll
Definition Queue.h:156
int groupStarting
Definition Queue.h:157
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition Queue.h:180
int commStarting
Definition Queue.h:158
void TaskSplit()
Процедура постановка новых задач на отсчет и занятие процессоров
Definition Queue.cpp:128
std::vector< int > procState
Список состояний процессоров
Definition Queue.h:108
int finished
Число уже решенных задач
Definition Queue.h:98
int nextKvant
Признак необходимости выполнения следующего кванта и продолжения расчета
Definition Queue.h:220
Описание базовых вспомогательных функций