8#ifndef FMTreplanningtask_Hm_included
9#define FMTreplanningtask_Hm_included
36 class FMTParallelWriter;
74 std::unique_ptr<FMTTask>
clone()
const;
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,
103 const bool writeSchedule =
false);
119 const std::string& outputlocation,
120 const std::string& gdaldriver,
121 const std::vector<std::string>& creationoptions,
135 void setReplicates(
const int& replicatesnumbermin,
const int& replicatesnumbermax);
148 virtual std::vector<std::unique_ptr<FMTTask>>
split(
const unsigned int& numberoftasks)
const;
154 virtual std::unique_ptr<FMTTask>
spawn();
170 void passInLogger(
const std::unique_ptr<Logging::FMTLogger>& logger)
override;
186 std::shared_ptr<FMTParallelWriter>m_resultswriter;
189 std::shared_ptr<Core::FMTSchedule>m_baseschedule;
192 std::shared_ptr<Models::FMTModel>global;
195 std::shared_ptr<Models::FMTModel>m_stochastic;
198 std::shared_ptr<Models::FMTModel>m_local;
201 std::queue<int>m_replicateids;
204 std::vector<Core::FMTActualDevelopment>m_dynamicarea;
210 std::vector<Core::FMTConstraint>m_dynamicconstraints;
213 int m_replanningperiods;
216 bool m_writeSchedule;
217 std::string m_outputlocation;
224 std::unique_ptr<Models::FMTModel>_copySharedModel(
const std::shared_ptr<Models::FMTModel>model);
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);
250 void _writeResults(
const std::string& modelname,
const int& modellength,
251 const std::unique_ptr<Models::FMTModel>& modelptr,
const int& replanningperiod,
bool onlyfirstperiod =
false);
259 void _writeSchedule(
const std::unique_ptr<Models::FMTModel>& p_model,
260 int p_ReportingPeriod,
int p_ModelPeriod)
const;
266 const int _getIteration()
const;
273 void _setReIgnore(std::unique_ptr<Models::FMTModel>& modelcpy,
const int& replanningperiod)
const;
280 void _setReplicate(std::unique_ptr<Models::FMTModel>& modelcpy,
const int& replanningperiod)
const;
285 std::string m_primaryName;
#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