FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTReplanningTask.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 FMTreplanningtask_Hm_included
9#define FMTreplanningtask_Hm_included
10
11#include "FMTTask.h"
13#include "FMTSchedule.h"
14#include <vector>
15#include <queue>
16#include <memory>
17#include <string>
18#include "FMTutility.h"
19
20
21namespace Models
22{
23 class FMTModel;
24}
25
26namespace Core
27{
28 class FMTOutput;
29}
30
31
32
34namespace Parallel
35{
36 class FMTParallelWriter;
37 // DocString: FMTReplanningTask
43 {
44
45 public:
46 // DocString: FMTReplanningTask::FMTReplanningTask()
50 FMTReplanningTask() = default;
51 // DocString: FMTReplanningTask::FMTReplanningTask(const FMTReplanningTask&)
56 FMTReplanningTask(const FMTReplanningTask& rhs) = default;
57 // DocString: FMTReplanningTask::operator=(const FMTReplanningTask&)
63 FMTReplanningTask& operator = (const FMTReplanningTask& rhs) = default;
64 // DocString: FMTReplanningTask::~FMTReplanningTask()
68 virtual ~FMTReplanningTask() = default;
69 // DocString: FMTReplanningTask::clone
74 std::unique_ptr<FMTTask>clone() const;
75 // DocString: FMTReplanningTask::FMTReplanningTask(...)
93 const Models::FMTModel& stochasticm,
94 const Models::FMTModel& localm,
95 const std::vector<Core::FMTOutput>& outputs,
96 const std::string& outputlocation,
97 const std::string& gdaldriver,
98 const std::vector<std::string>& creationoptions,
99 const int& replicates,
100 const int& replanningperiodssize,
101 const double& minimaldrift,
102 Core::FMToutputlevel outputlevel,
103 const bool writeSchedule = false);
104 // DocString: FMTReplanningTask::FMTReplanningTask(const Models::FMTModel&,const Models::FMTModel&,const Models::FMTModel&)
117 const Models::FMTModel& stochasticm,
118 const Models::FMTModel& localm,
119 const std::string& outputlocation,
120 const std::string& gdaldriver,
121 const std::vector<std::string>& creationoptions,
122 Core::FMToutputlevel outputlevel);
123 // DocString: FMTReplanningTask::setReplicates
128 void setReplicates(const int& replicatesnumber);
129 // DocString: FMTReplanningTask::setReplicates
135 void setReplicates(const int& replicatesnumbermin, const int& replicatesnumbermax);
136 // DocString: FMTReplanningTask::setReplanningPeriods
141 void setReplanningPeriods(const int& periodsnumber);
142 // DocString: FMTReplanningTask::split
148 virtual std::vector<std::unique_ptr<FMTTask>>split(const unsigned int& numberoftasks) const;
149 // DocString: FMTReplanningTask::spwan
154 virtual std::unique_ptr<FMTTask>spawn();
155 // DocString: FMTReplanningTask::work
159 virtual void work();
160 // DocString: FMTReplanningTask::finalize
164 virtual void finalize();
165 // DocString: FMTReplanningTask::passInLogger
170 void passInLogger(const std::unique_ptr<Logging::FMTLogger>& logger) override;
171 // DocString: FMTReplanningTask::setWriteSchedule
176 void setWriteSchedule(const bool p_write);
177 // DocString: FMTReplanningTask::SupportsMultiThreading()
182 bool SupportsMultiThreading() const override;
183 private:
184 // DocString: FMTReplanningTask::m_resultswriter
186 std::shared_ptr<FMTParallelWriter>m_resultswriter;
187 // DocString: FMTReplanningTask::m_baseschedule
189 std::shared_ptr<Core::FMTSchedule>m_baseschedule;
190 // DocString: FMTReplanningTask::global
192 std::shared_ptr<Models::FMTModel>global;//base area is in here.
193 // DocString: FMTReplanningTask::m_stochastic
195 std::shared_ptr<Models::FMTModel>m_stochastic;
196 // DocString: FMTReplanningTask::m_local
198 std::shared_ptr<Models::FMTModel>m_local;
199 // DocString: FMTReplanningTask::m_replicateids
201 std::queue<int>m_replicateids;
202 // DocString: FMTReplanningTask::m_dynamicarea
204 std::vector<Core::FMTActualDevelopment>m_dynamicarea;
205 // DocString: FMTReplanningTask::m_iterationglobalschedule
207 Core::FMTSchedule m_iterationglobalschedule;
208 // DocString: FMTReplanningTask::m_dynamicconstraints
210 std::vector<Core::FMTConstraint>m_dynamicconstraints;
211 // DocString: FMTReplanningTask::m_replanningperiods
213 int m_replanningperiods;
214 // DocString: FMTReplanningTask::appendSchedule
216 bool m_writeSchedule;
217 std::string m_outputlocation;
218 // DocString: FMTReplanningTask::_copySharedModel
224 std::unique_ptr<Models::FMTModel>_copySharedModel(const std::shared_ptr<Models::FMTModel>model);
225 // DocString: FMTReplanningTask::_doModelPlanning
235 std::unique_ptr<Models::FMTModel>_doModelPlanning(
236 const std::shared_ptr<Models::FMTModel>model,
237 const int& replanningperiod,
238 bool getsolutionandlocal = false,
239 bool applyscheduleweight = false,
240 bool setdynamicconstraints = true);
241 // DocString: FMTReplanningTask::_writeResults
250 void _writeResults(const std::string& modelname, const int& modellength,
251 const std::unique_ptr<Models::FMTModel>& modelptr, const int& replanningperiod, bool onlyfirstperiod = false);
252 // DocString: FMTReplanningTask::_writeSchedule
259 void _writeSchedule(const std::unique_ptr<Models::FMTModel>& p_model,
260 int p_ReportingPeriod, int p_ModelPeriod) const;
261 // DocString: FMTReplanningTask::_getIteration
266 const int _getIteration() const;
267 // DocString: FMTReplanningTask::_setReIgnore
273 void _setReIgnore(std::unique_ptr<Models::FMTModel>& modelcpy, const int& replanningperiod) const;
274 // DocString: FMTReplanningTask::_setReplicate
280 void _setReplicate(std::unique_ptr<Models::FMTModel>& modelcpy, const int& replanningperiod) const;
281 // DocString: FMTReplanningTask::m_primaryName
285 std::string m_primaryName;
286 };
287
288}
289
290
291
292#endif
#define FMTEXPORT
Definition: FMTutility.h:125
Spatially referenced schedule describing the area of developments for which an action can be operated...
Definition: FMTSchedule.h:29
Base class for the different models in FMT.
Definition: FMTModel.h:62
Replanning task using global, stochastic and local abstract models to simulate natural disturbances o...
Definition: FMTReplanningTask.h:43
FMTReplanningTask(const Models::FMTModel &globalm, const Models::FMTModel &stochasticm, const Models::FMTModel &localm, const std::vector< Core::FMTOutput > &outputs, const std::string &outputlocation, const std::string &gdaldriver, const std::vector< std::string > &creationoptions, const int &replicates, const int &replanningperiodssize, const double &minimaldrift, Core::FMToutputlevel outputlevel, const bool writeSchedule=false)
Construct a FMTReplanningTask from the models and the replanning parameters.
virtual void finalize()
Take care of writing the drift probabilities at finalization.
void setReplicates(const int &replicatesnumber)
Set the number of replicates to use.
FMTReplanningTask(const Models::FMTModel &globalm, const Models::FMTModel &stochasticm, const Models::FMTModel &localm, const std::string &outputlocation, const std::string &gdaldriver, const std::vector< std::string > &creationoptions, Core::FMToutputlevel outputlevel)
Short constructor for the replanning task using the outputs of the global model and 0....
FMTReplanningTask(const FMTReplanningTask &rhs)=default
Default copy constructor for FMTReplanningTask.
bool SupportsMultiThreading() const override
Check if the task support multithreading.
virtual void work()
Main function doing the replanning task.
void setReplicates(const int &replicatesnumbermin, const int &replicatesnumbermax)
Set the range of replicates to use.
void passInLogger(const std::unique_ptr< Logging::FMTLogger > &logger) override
Pass in the logger.
virtual ~FMTReplanningTask()=default
Default destructor for FMTReplanningTask.
std::unique_ptr< FMTTask > clone() const
Clone function for FMTReplanningTask.
void setWriteSchedule(const bool p_write)
Set whether a replanning schedule is written for each replicate.
FMTReplanningTask()=default
Default constructor for FMTReplanningTask.
void setReplanningPeriods(const int &periodsnumber)
Set the number of replanning periods.
virtual std::vector< std::unique_ptr< FMTTask > > split(const unsigned int &numberoftasks) const
Split the main task into multiple replanning tasks.
virtual std::unique_ptr< FMTTask > spawn()
Spawn a minimal task from the master task.
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
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