An error occurred while loading the file. Please try again.
-
Guillaume Perréal authored
Irstea\FileUploadBundle\Service\FileManagerInterface => Irstea\FileUploadBundle\Model\FileManagerInterface.
11890174
/*============================================================================*/
/* 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