FG.h 15.60 KiB
/*============================================================================*/
/*                           Functional Group Class                           */
/*============================================================================*/
/*!
 * \file FG.h
 * \brief Plant Functional Group definition
 * \author Damien Georges
 * \version 1.0
#ifndef FG_H
#define FG_H
#include "FGresponse.h"
#include "FGUtils.h"
#include "FilesOfParamsList.h"
#include "GlobalSimulParameters.h"
using namespace std;
 /*!
 * \class FG
 * \brief Plant Functional Group definition
 * This object stores all the parameters characterizing a Plant Functional
 * Group. Depending on which modules are activated or not, more or less
 * parameters are required.
 * Basic and required parameters concern FG identification, life history and
 * propagule biology.
 * Additional parameters need to be specified if the following modules are on :
 *  - light competition
 *  - dispersal
 *  - soil competition
 *  - disturbance(s)
 *  - fire(s)
 *  - drought(s)
 *  - invasive (or alien) species
class FG
	private:
	/* FG Identification */
	string m_Name; /*!< FG name */
	/* Life history*/
	int m_M; /*!< Maturation time */
	int m_L; /*!< Life span */
	Abund m_MaxA; /*!< Maximum Abundance */
	double m_ImmSize; /*!< Proportion of immature plants relative to mature abundance */
	int m_StrataMax; /*!< Maximum stratum reached */
	vector<int> m_Strata; /*!< Strata change age */
	/* Propagule biology */
	vector<int> m_PoolL; /*!< Seed Pool Life Span [PTcount] */
	bool m_InnateDorm; /*!< Do FG seeds have Innate dormancy properties */
	int m_PotentialFecundity; /*!< Potential Fecundity of mature plants */
	/* Light competition module */
	vector<Fract> m_ActiveGerm; /*!< Proportion of Active seeds able to germinate considering light resources [Rcount] */
	vector< vector<bool> > m_Tolerance; /*!< Is FG survived considering available light resources [LScount][Rcount] */
	/* Dispersal module */
	bool m_Dispersed; /*!< Is FG widely dispersed ? */
	double m_disp50; /*!< Distance where 50% of seeds are dispersed */
	double m_disp99; /*!< Distance where 99% of seeds are dispersed */
	double m_dispLD; /*!< Long distance dispersal */
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
/* Soil competition module */ double m_SoilContrib; /*!< Contribution of PFG to refill soil nutriment resources (kind of litter index) */ double m_SoilLow; /*!< Contribution of PFG to refill soil nutriment resources (kind of litter index) */ double m_SoilHigh; /*!< Contribution of PFG to refill soil nutriment resources (kind of litter index) */ vector<Fract> m_SoilActiveGerm; /*!< Proportion of Active seeds able to germinate considering light resources [Rcount] */ vector< vector<Fract> > m_SoilTolerance; /*!< Is FG survived considering available soil nutriment resources [LScount][Rcount] */ /* Disturbance response */ FGresponse m_DistResponse; /*!< PFG response to disturbances */ /* Fire response */ FGresponse m_FireResponse; /*!< PFG response to fire disturbances */ double m_Flamm; /*!< Flammability : how easily the FG will burn */ /* Drought response */ FGresponse m_DroughtResponse; /*!< PFG response to severe drought disturbance, with immediate or post-year effects */ vector<double> m_DroughtSD; /*!< (mean-1.5sd), (mean-2sd) from MoistDistribution and corresponding to thresholds to moderate and severe drought */ unsigned m_CountModToSev; /*!< How many years of previous drought lead a moderate drought to a severe one */ unsigned m_CountSevMort; /*!< How many years of previous drought lead a severe drought to have mortality effects*/ unsigned m_DroughtRecovery; /*!< How many years of previous drought the PFG recovers during a year without drought */ /* Alien introduction module */ bool m_IsAlien; /*!< Is FG an alien plant introduced ? */ /*-------------------------------------------*/ /* Serialization function -------------------*/ /*-------------------------------------------*/ friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int /*version*/) { //cout << "> Serializing FG..." << endl; ar & m_Name; ar & m_M; ar & m_L; ar & m_MaxA; ar & m_ImmSize; ar & m_StrataMax; ar & m_Strata; ar & m_PoolL; ar & m_InnateDorm; ar & m_PotentialFecundity; ar & m_ActiveGerm; ar & m_Tolerance; ar & m_Dispersed; ar & m_disp50; ar & m_disp99; ar & m_dispLD; ar & m_SoilContrib; ar & m_SoilLow; ar & m_SoilHigh; ar & m_SoilActiveGerm; ar & m_SoilTolerance; ar & m_SoilTolerance; ar & m_DistResponse; ar & m_FireResponse; ar & m_Flamm; ar & m_DroughtResponse; ar & m_DroughtSD; ar & m_CountModToSev; ar & m_CountSevMort; ar & m_DroughtRecovery; ar & m_IsAlien; } public:
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
/*-------------------------------------------*/ /* Constructors -----------------------------*/ /*-------------------------------------------*/ /*! * \brief Default constructor * * FG default constructor => All parameters are set to 0, False or None */ FG(); /*! * \brief Full constructor * * FG full constructor * * \param PFG_LifeHistoryFile : path to text file containing well-formatted * life history related parameters * \param PFG_LightFile : path to text file containing well-formatted light * competition related parameters * \param PFG_DispersalFile : path to text file containing well-formatted * dispersal related parameters * \param PFG_DisturbancesFile : path to text file containing well-formatted * disturbances related parameters * \param PFG_SoilFile : path to text file containing well-formatted soil * competition related parameters * \param PFG_FiresFile : path to text file containing well-formatted fires * related parameters * \param PFG_DroughtFile : path to text file containing well-formatted * drought related parameters * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) */ FG(const string& PFG_LifeHistoryFile, const string& PFG_LightFile, const string& PFG_DispersalFile, const string& PFG_DisturbancesFile, const string& PFG_SoilFile, const string& PFG_FiresFile, const string& PFG_DroughtFile, const GSP& glob_params ); /*! * \brief Full constructor * * FG full constructor * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * param file_of_params : FOPL class object containing paths to parameters * text file (--PFG_LIFE_HISTORY_PARAMS--, --PFG_DISPERSAL_PARAMS--, ...) * param fg_id : functional group ID to create community later */ FG(const GSP& glob_params, const FOPL& file_of_params, const unsigned& fg_id); /*! * \brief Part of constructor (BASE : demographic model) * * FG part of constructor (BASE : demographic model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_LifeHistoryFile : path to text file containing well-formatted * life history related parameters */ void getSuccParams(const GSP& glob_params, const string& PFG_LifeHistoryFile);
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
/*! * \brief Part of constructor (OPTIONAL : light competition model) * * FG part of constructor (OPTIONAL : light competition model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_LightFile : path to text file containing well-formatted light * competition related parameters */ void getLightParams(const GSP& glob_params, const string& PFG_LightFile); /*! * \brief Part of constructor (OPTIONAL : dispersal model) * * FG part of constructor (OPTIONAL : dispersal model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_DispersalFile : path to text file containing well-formatted * dispersal related parameters */ void getDispParams(const GSP& glob_params, const string& PFG_DispersalFile); /*! * \brief Part of constructor (OPTIONAL : disturbances model) * * FG part of constructor (OPTIONAL : disturbances model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_DisturbancesFile : path to text file containing well-formatted * disturbances related parameters */ void getDistParams(const GSP& glob_params, const string& PFG_DisturbancesFile); /*! * \brief Part of constructor (OPTIONAL : soil competition model) * * FG part of constructor (OPTIONAL : soil competition model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_SoilFile : path to text file containing well-formatted soil * competition related parameters */ void getSoilParams(const GSP& glob_params, const string& PFG_SoilFile); /*! * \brief Part of constructor (OPTIONAL : fires model) * * FG part of constructor (OPTIONAL : fires model) * * param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_FiresFile : path to text file containing well-formatted fires * related parameters */ void getFireParams(const GSP& glob_params, const string& PFG_FiresFile); /*! * \brief Part of constructor (OPTIONAL : drought model) * * FG part of constructor (OPTIONAL : drought model) *
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
* param glob_params : GSP class object containing global simulation * related parameters, and modules specific (e.g number of strata, number of * disturbances...) * \param PFG_DroughtFile : path to text file containing well-formatted * drought related parameters */ void getDrouParams(const GSP& glob_params, const string& PFG_DroughtFile); /*-------------------------------------------*/ /* Destructor -------------------------------*/ /*-------------------------------------------*/ /*! * \brief Destructor * * FG destructor */ virtual ~FG(); /*-------------------------------------------*/ /* Operators --------------------------------*/ /*-------------------------------------------*/ bool operator==(const FG& o) const { return (m_Name == o.m_Name && m_M == o.m_M && m_L == o.m_L && m_MaxA == o.m_MaxA && m_ImmSize == o.m_ImmSize && m_StrataMax == o.m_StrataMax && m_Strata == o.m_Strata && m_PoolL == o.m_PoolL && m_InnateDorm == o.m_InnateDorm && m_PotentialFecundity == o.m_PotentialFecundity && m_ActiveGerm == o.m_ActiveGerm && m_Tolerance == o.m_Tolerance && m_Dispersed == o.m_Dispersed && m_disp50 == o.m_disp50 && m_disp99 == o.m_disp99 && m_dispLD == o.m_dispLD && m_SoilContrib == o.m_SoilContrib && m_SoilLow == o.m_SoilLow && m_SoilHigh == o.m_SoilHigh && m_SoilActiveGerm == o.m_SoilActiveGerm && m_SoilTolerance == o.m_SoilTolerance && m_DistResponse == o.m_DistResponse && m_FireResponse == o.m_FireResponse && m_Flamm == o.m_Flamm && m_DroughtResponse == o.m_DroughtResponse && m_DroughtSD == o.m_DroughtSD && m_CountModToSev == o.m_CountModToSev && m_CountSevMort == o.m_CountSevMort && m_DroughtRecovery == o.m_DroughtRecovery && m_IsAlien == o.m_IsAlien); /* check fixed size tables equality */ /* for (unsigned i=0; i<PTcount; i++) { is_equal = ( is_equal && m_PoolL[i] == o.m_PoolL[i] ); } for (unsigned i=0; i<Rcount; i++) { is_equal = ( is_equal && m_ActiveGerm[i] == o.m_ActiveGerm[i] ); } for (unsigned i=0; i<LScount; i++) { for (unsigned j=0; j<Rcount; j++) { is_equal = ( is_equal && m_Tolerance[i][j] == o.m_Tolerance[i][j] );
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
} }*/ } /*-------------------------------------------*/ /* Getters & Setters ------------------------*/ /*-------------------------------------------*/ const string& getName() const; const int& getMatTime() const; const int& getLifeSpan() const; const Abund& getMaxAbund() const; const double& getImmSize() const; const int& getStrataMax() const; const vector<int> getStrata() const; const int& getStrata(const int& i) const; const vector<int> getPoolLife() const; const int& getPoolLife(const PoolType& pt ) const; const bool& getInnateDormancy() const; const int& getPotentialFecund() const; const vector<Fract> getMaxRecruitLight() const; const Fract& getMaxRecruitLight(const Resource& r) const; const vector< vector<bool> >& getTolerance() const; const bool getTolerance(LifeStage ls, Resource r) const; const bool& getDispersed() const; const double& getDisp50() const; const double& getDisp99() const; const double& getDispLD() const; const double& getSoilContrib() const; const double& getSoilLow() const; const double& getSoilHigh() const; const vector<Fract> getMaxRecruitSoil() const; const Fract& getMaxRecruitSoil(const Resource& r) const; const vector< vector<Fract> >& getSoilTolerance() const; const Fract getSoilTolerance(LifeStage ls, Resource r) const; const FGresponse& getDistResponse() const; const FGresponse& getFireResponse() const; const double& getFlamm() const; const FGresponse& getDroughtResponse() const; const vector<double>& getDroughtSD() const; const unsigned& getCountModToSev() const; const unsigned& getCountSevMort() const; const unsigned& getDroughtRecovery() const; const bool& getIsAlien() const; void setName(const string& name); void setMatTime(const int& matTime); void setLifeSpan(const int& lifeSpan); void setMaxAbund(const Abund& maxAbund); void setImmSize(const double& immSize); void setStrataMax(const int& strataMax); void setStrata(const vector<int>& strata); void setStrata(const int& strata, const int& i); void setPoolLife(const int (&poolLife)[ PTcount ]); void setPoolLife(const int& poolLife, const PoolType& pt); void setInnateDormancy(const bool& innateDormancy); void setPotentialFecund(const int& potentialFecund); void setMaxRecruitLight(const Fract (&maxRecruit)[ Rcount ]); void setMaxRecruitLight(const Fract& maxRecruit, const Resource& r ); void setTolerance(const bool (&tolerance)[ LScount ][ Rcount ]); void setTolerance(const bool& tolerance, const LifeStage& ls, const Resource& r); void setDispersed(const bool& dispersed); void setDisp50(const double& disp50); void setDisp99(const double& disp99); void setDispLD(const double& dispLD); void setSoilContrib(const double& soilContrib); void setSoilLow(const double& soilLow); void setSoilHigh(const double& soilHigh); void setMaxRecruitSoil(const Fract (&maxRecruit)[ Rcount ]);
421422423424425426427428429430431432433434435436437438439440441442443444445
void setMaxRecruitSoil(const Fract& maxRecruit, const Resource& r ); void setSoilTolerance(const vector< vector<Fract> >& tolerance); void setSoilTolerance(const Fract& tolerance, const LifeStage& ls, const Resource& r); void setDistResponse(const FGresponse& distResponse); void setFireResponse(const FGresponse& fireResponse); void setFlamm(const double& flamm); void setDroughtResponse(const FGresponse& droughtResponse); void setDroughtSD(const vector<double>& droughtSD); void setCountModToSev(const unsigned& countModToSev); void setCountSevMort(const unsigned& countSevMort); void setDroughtRecovery(const unsigned& droughtRecovery); void setIsAlien(const bool& isAlien); /*-------------------------------------------*/ /* Others functions -------------------------*/ /*-------------------------------------------*/ void show(); }; BOOST_CLASS_VERSION(FG, 0) #endif // FG_H