FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTPlanningTask.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019 Gouvernement du Québec
3
4SPDX-License-Identifier: LiLiQ-R-1.1
5License-Filename: LICENSES/EN/LiLiQ-R11unicode.txt
6*/
7
8#ifndef FMTplanningtask_Hm_included
9#define FMTplanningtask_Hm_included
10
11#include "FMTTask.h"
12#include <list>
13#include <memory>
14#include "FMTutility.h"
15
16
17namespace Models
18{
19 class FMTModel;
20}
21
22namespace Core
23{
24 class FMTOutput;
25 class FMTSchedule;
26}
27
28
29
31namespace Parallel
32{
33 class FMTParallelWriter;
34 // DocString: FMTPlanningTask
39 {
40 public:
41 // DocString: FMTPlanningTask::FMTPlanningTask()
45 FMTPlanningTask() = default;
46 // DocString: FMTPlanningTask::FMTPlanningTask(const FMTPlanningTask&)
52 // DocString: FMTPlanningTask::operator=(const FMTPlanningTask&)
58 FMTPlanningTask& operator = (const FMTPlanningTask& rhs);
59 // DocString: FMTPlanningTask::~FMTPlanningTask()
63 virtual ~FMTPlanningTask()=default;
64 // DocString: FMTPlanningTask::clone
69 std::unique_ptr<FMTTask>clone() const;
70 // DocString: FMTPlanningTask::setKeepModels
75 // DocString: FMTPlanningTask::push_back
83 void push_back(const Models::FMTModel& model,
84 std::vector<Core::FMTSchedule>schedules = std::vector<Core::FMTSchedule>(),
85 std::vector<Core::FMTOutput>louputs = std::vector<Core::FMTOutput>());
86 // DocString: FMTPlanningTask::FMTPlanningTask(...)
97 FMTPlanningTask(const int& minoutputperiod,
98 const int& maxoutputperiod,
99 const std::string& outputlocation,
100 std::string gdaldriver = "CSV",
101 std::vector<std::string>creationoptions= std::vector<std::string>(),
103 std::string primaryfilelocation = std::string());
104 // DocString: FMTPlanningTask::split
110 virtual std::vector<std::unique_ptr<FMTTask>>split(const unsigned int& numberoftasks) const;
111 // DocString: FMTPlanningTask::spawn
116 virtual std::unique_ptr<FMTTask>spawn();
117 // DocString: FMTPlanningTask::work
121 virtual void work();
122 // DocString: FMTPlanningTask::finalize
126 virtual void finalize();
127 // DocString: FMTPlanningTask::passInLogger
132 void passInLogger(const std::unique_ptr<Logging::FMTLogger>& logger) override;
133 // DocString: FMTPlanningTask::getModelsFromDynamicCast
139 template<class ptrtype>
140 const std::vector<const ptrtype*> getModelsFromDynamicCast() const
141 {
142 std::vector<const ptrtype*>castedptr;
143 for (const std::unique_ptr<Models::FMTModel>& model : m_Models)
144 {
145 castedptr.push_back(dynamic_cast<const ptrtype*>(model.get()));
146 }
147 return castedptr;
148 }
149 // DocString: FMTPlanningTask::SupportsMultiThreading()
154 bool SupportsMultiThreading() const override;
155 private:
156 // DocString: FMTPlanningTask::m_ResultsWriter
158 std::shared_ptr<FMTParallelWriter>m_ResultsWriter;
159 // DocString: FMTPlanningTask::m_Models
161 std::list<std::unique_ptr<Models::FMTModel>>m_Models;
162 // DocString: FMTPlanningTask::m_allSchedules
164 std::list<std::vector<Core::FMTSchedule>>m_allSchedules;
165 // DocString: FMTPlanningTask::m_Outputs
167 std::list<std::vector<Core::FMTOutput>>m_Outputs;
168 // DocString: FMTPlanningTask::m_keepModels
170 bool m_keepModels;
171 // DocString: FMTPlanningTask::copyModels
177 std::list<std::unique_ptr<Models::FMTModel>>copyModels(const std::list<std::unique_ptr<Models::FMTModel>>& tocopy) const;
178
179 };
180
181}
182
183
184
185#endif
#define FMTEXPORT
Definition: FMTutility.h:125
Base class for the different models in FMT.
Definition: FMTModel.h:62
Task to carry multiple parallel optimizations of different FMTModel using the doPlanning function.
Definition: FMTPlanningTask.h:39
virtual std::vector< std::unique_ptr< FMTTask > > split(const unsigned int &numberoftasks) const
Split the main task into multiple planning tasks.
virtual std::unique_ptr< FMTTask > spawn()
Spawn a minimal task from the master task.
virtual void work()
Main function doing the planning task.
void setKeepModels()
Force the task to keep the models, which may consume memory.
void passInLogger(const std::unique_ptr< Logging::FMTLogger > &logger) override
Pass in the logger.
FMTPlanningTask()=default
Default constructor for FMTPlanningTask.
FMTPlanningTask(const FMTPlanningTask &rhs)
Default copy constructor for FMTPlanningTask.
void push_back(const Models::FMTModel &model, std::vector< Core::FMTSchedule >schedules=std::vector< Core::FMTSchedule >(), std::vector< Core::FMTOutput >louputs=std::vector< Core::FMTOutput >())
Push a new FMTModel in the task queue with an optional schedule.
virtual void finalize()
Do nothing at finalization.
virtual ~FMTPlanningTask()=default
Destructor for FMTPlanningTask, taking care of writing the drift probabilities.
FMTPlanningTask(const int &minoutputperiod, const int &maxoutputperiod, const std::string &outputlocation, std::string gdaldriver="CSV", std::vector< std::string >creationoptions=std::vector< std::string >(), Core::FMToutputlevel outputlevel=Core::FMToutputlevel::standard, std::string primaryfilelocation=std::string())
Construct a FMTPlanningTask, mainly with the output parser parameters.
std::unique_ptr< FMTTask > clone() const
Clone function for FMTPlanningTask.
bool SupportsMultiThreading() const override
Check if the task support multithreading.
const std::vector< const ptrtype * > getModelsFromDynamicCast() const
Return the models dynamically cast to the requested model type.
Definition: FMTPlanningTask.h:140
Task for parallel jobs.
Definition: FMTTask.h:27
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
FMToutputlevel
Enumerator describing the level of detail of an output (standard, total only, development).
Definition: FMTutility.h:22
@ standard
Definition: FMTutility.h:23
Namespace containing all enumerator and classes used to construct or manipulate the different type of...
Definition: FMTAreaParser.h:54
Namespace for parallel tasking may include multithreading / multiprocessing.
Definition: FMTOpAreaSchedulerTask.h:40