Alsvinn  0.5.3
The fast FVM simulator with UQ support
QueueWriter.hpp
Go to the documentation of this file.
1 /* Copyright (c) 2018 ETH Zurich, Kjetil Olsen Lye
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program. If not, see <http://www.gnu.org/licenses/>.
14  */
15 
16 #pragma once
17 #include "alsfvm/io/Writer.hpp"
18 #include <mutex>
19 #include <vector>
20 #include <queue>
21 #include <condition_variable>
23 #include <functional>
24 
25 namespace alsfvm {
26 namespace io {
27 
34 class QueueWriter : public Writer {
35 public:
36 
43  QueueWriter(size_t queueLength,
44  alsfvm::shared_ptr<volume::VolumeFactory>& volumeFactory);
45 
52  virtual void write(const volume::Volume& conservedVariables,
53  const grid::Grid& grid,
54  const simulator::TimestepInformation& timestepInformation) override;
55 
56  void pop(std::function<void(const volume::Volume&)> handler);
57 private:
58  size_t queueSize;
59  size_t nextIndex = 0;
60  // Allocated volumes, these may be in use (check refcount)
61  std::vector<alsfvm::shared_ptr<volume::Volume> > allocatedVolumes;
62 
63  // These are the volumes that have not been used yet.
64  std::queue<alsfvm::shared_ptr<volume::Volume> > waitingVolumes;
65 
66  alsfvm::shared_ptr<volume::VolumeFactory> volumeFactory;
67 
68  std::mutex mutex;
69 
70  std::condition_variable conditionVariable;
71 };
72 } // namespace alsfvm
73 } // namespace io
virtual void write(const volume::Volume &conservedVariables, const grid::Grid &grid, const simulator::TimestepInformation &timestepInformation) override
write writes the data to the queue
Definition: QueueWriter.cpp:28
Definition: Grid.hpp:27
The Volume class represents a volume (a collection of cells with values for each cell (eg...
Definition: Volume.hpp:30
const grid::Grid & grid
Definition: NumericalFluxFactory.cpp:104
The QueueWriter class writes the data to a blocking queue.
Definition: QueueWriter.hpp:34
The Writer class is an abstract interface to represent output writers.
Definition: Writer.hpp:28
void pop(std::function< void(const volume::Volume &)> handler)
Definition: QueueWriter.cpp:55
Various utility functions to implement the tecno flux.
Definition: types.hpp:30
QueueWriter(size_t queueLength, alsfvm::shared_ptr< volume::VolumeFactory > &volumeFactory)
Definition: QueueWriter.cpp:21
Definition: TimestepInformation.hpp:22