8#ifndef FMTplanningtask_Hm_included
9#define FMTplanningtask_Hm_included
33 class FMTParallelWriter;
69 std::unique_ptr<FMTTask>
clone()
const;
84 std::vector<Core::FMTSchedule>schedules = std::vector<Core::FMTSchedule>(),
85 std::vector<Core::FMTOutput>louputs = std::vector<Core::FMTOutput>());
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());
110 virtual std::vector<std::unique_ptr<FMTTask>>
split(
const unsigned int& numberoftasks)
const;
116 virtual std::unique_ptr<FMTTask>
spawn();
132 void passInLogger(
const std::unique_ptr<Logging::FMTLogger>& logger)
override;
139 template<
class ptrtype>
142 std::vector<const ptrtype*>castedptr;
143 for (
const std::unique_ptr<Models::FMTModel>& model : m_Models)
145 castedptr.push_back(
dynamic_cast<const ptrtype*
>(model.get()));
158 std::shared_ptr<FMTParallelWriter>m_ResultsWriter;
161 std::list<std::unique_ptr<Models::FMTModel>>m_Models;
164 std::list<std::vector<Core::FMTSchedule>>m_allSchedules;
167 std::list<std::vector<Core::FMTOutput>>m_Outputs;
177 std::list<std::unique_ptr<Models::FMTModel>>copyModels(
const std::list<std::unique_ptr<Models::FMTModel>>& tocopy)
const;
#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