FG.cpp 22.84 KiB
/*================================================*/
/*            Plants Functionals Groups           */
/*                 Definition Class               */
/*================================================*/
#include <cmath>
#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdio>
#include "FG.h"
#include "FGUtils.h"
#include "Params.h"
using namespace std;
  /* Note : New version of FG constructor using Matt T. parameters handler utilities (Params.h) */
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
/* Constructors                                                                                    */
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
FG::FG() : m_Name(""), m_M(0), m_L(1), m_MaxA(ANone), m_ImmSize(0.0), m_StrataMax(0), m_Strata(0,1000), /* Life history*/
m_PoolL(PTcount,0), m_InnateDorm(false), m_PotentialFecundity(100), /* Propagule biology */
m_ActiveGerm(Rcount, PC100), m_Tolerance(LScount, vector<bool>(Rcount, true)), /* Light response */
m_Dispersed(false), m_disp50(0.0), m_disp99(0.0), m_dispLD(0.0), /* Dispersal module */
m_SoilContrib(0.0), m_SoilLow(0.0), m_SoilHigh(0.0), /* Soil response */
 m_SoilActiveGerm(Rcount, PC100), m_SoilTolerance(LScount, vector<Fract>(Rcount, PC100)), /* Soil response */
m_DistResponse(FGresponse()), /* Disturbance response */
m_FireResponse(FGresponse()), m_Flamm(0.0), /* Fire response */
m_DroughtResponse(FGresponse()), m_DroughtSD(2,0.0), m_CountModToSev(0), m_CountSevMort(0), m_DroughtRecovery(0), /* Drought response */
m_IsAlien(false) /* Alien module */
  	/* Nothing to do */
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
void FG::getSuccParams(const GSP& glob_params, const string& PFG_LifeHistoryFile)
	/* 1. check parameter file existence */
	testFileExist("--PFG_LIFE_HISTORY_PARAMS--", PFG_LifeHistoryFile, false);
	/* 2. read succession parameters */
	par::Params SuccParams(PFG_LifeHistoryFile.c_str(), " = \"", "#"); /* opening PFG life history traits parameters file */
	cout << endl;
	cout << "*********************************************" << endl;
	cout << "** PFG : " << SuccParams.get_val<string>("NAME")[0] << endl;
	cout << "*********************************************" << endl;
	cout << endl;
	cout << "> Succession files opened" << endl;
	/* 3. fill FG object according to given parameters */
	/* PFG Life History parameters filling =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
	m_Name = SuccParams.get_val<string>("NAME")[0];
	m_M = SuccParams.get_val<int>("MATURITY")[0];
	m_L = SuccParams.get_val<int>("LONGEVITY")[0];
	if (m_M >= m_L)
		cerr << "!!! MATURITY is superior or equal to LONGEVITY. Please check!" << endl;
		terminate();
	m_MaxA = Abund(SuccParams.get_val<int>("MAX_ABUNDANCE")[0]);
	m_ImmSize = FractToDouble(Fract(SuccParams.get_val<int>("IMM_SIZE")[0]));
	//m_StrataMax = SuccParams.get_val<int>("STRATA")[0];
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
vector<int> v_int = SuccParams.get_val<int>("STRATA", true); if (v_int.size()) m_StrataMax = v_int[0]; else m_StrataMax = glob_params.getNbStrata(); m_Strata = SuccParams.get_val<int>("CHANG_STR_AGES"); m_Strata.push_back(10000); /* High value of to avoid PFGs to exit the upper stata */ if (m_Strata.size() != glob_params.getNbStrata() + 1) { cerr << "!!! Wrong number of parameters provided for CHANG_STR_AGES (" << m_Strata.size() - 1; cerr << " instead of " << glob_params.getNbStrata() << "). Please check!" << endl; terminate(); } bool is_sup = false; int prev_age = m_Strata[0]; for(unsigned i=1; i<m_Strata.size(); i++) { if (m_Strata[i] < prev_age) { is_sup = true; } prev_age = m_Strata[i]; if (is_sup) { cerr << "!!! CHANG_STR_AGES must be given in ascending order. Please check!" << endl; terminate(); } } v_int = SuccParams.get_val<int>("IS_ALIEN", true); if (v_int.size()) m_IsAlien = v_int[0]; else m_IsAlien = false; /* Propagule biology parameters filling =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ m_PoolL = SuccParams.get_val<int>("SEED_POOL_LIFE"); if (m_PoolL.size() != PTcount) { cerr << "!!! Wrong number of parameters provided for SEED_POOL_LIFE (" << m_PoolL.size() << " instead of " << PTcount << "). Please check!" << endl; terminate(); } m_InnateDorm = bool(SuccParams.get_val<int>("SEED_DORMANCY")[0]); /* Potential fecundity parameter filling =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ v_int = SuccParams.get_val<int>("POTENTIAL_FECUNDITY", true); if (v_int.size()) m_PotentialFecundity = v_int[0]; else m_PotentialFecundity = 100.0; cout << "> Life History parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getLightParams(const GSP& glob_params, const string& PFG_LightFile) { /* 1. check parameter file existence */ testFileExist("--PFG_LIGHT_PARAMS--", PFG_LightFile, false); /* 2. read light parameters */ par::Params LightParams(PFG_LightFile.c_str(), " = \"", "#"); vector<int> v_int = LightParams.get_val<int>("ACTIVE_GERM"); m_ActiveGerm = convert_int_to_enum<Fract>("ACTIVE_GERM", v_int, "Fract", Fcount); if (m_ActiveGerm.size() != Rcount) { cerr << "!!! Wrong number of parameters provided for ACTIVE_GERM (LIGHT) (" << m_ActiveGerm.size() << " instead of " << Rcount << "). Please check!" << endl; terminate(); } /* get shade tolerance as vector and reshape it into matrix format */ v_int = LightParams.get_val<int>("SHADE_TOL"); if (v_int.size() < (LScount-1) * Rcount) { cerr << "!!! Wrong number of parameters provided for SHADE_TOL (" << v_int.size() << " instead of " << (LScount-1) * Rcount << "). Please check!" << endl; terminate(); }
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
int counter = 0; m_Tolerance.resize(int(LScount)); for (int ls=1; ls<int(LScount); ls++) { m_Tolerance[ls].resize(int(Rcount)); for (int r=0; r<int(Rcount); r++) { m_Tolerance[ls][r] = v_int[counter]; counter ++; } } /* Propagule Light tolerance is assumed to be the same as germinants */ m_Tolerance[0].resize(int(Rcount)); for (int r=0; r<int(Rcount); r++) { m_Tolerance[0][r] = m_Tolerance[1][r]; } cout << "> PFGS light parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getDispParams(const GSP& glob_params, const string& PFG_DispersalFile) { /* 1. check parameter file existence */ testFileExist("--PFG_DISPERSAL_PARAMS--", PFG_DispersalFile, false); /* 2. read dispersal parameters */ par::Params DispParams(PFG_DispersalFile.c_str(), " = \"", "#"); m_Dispersed = false; vector<double> v_double = DispParams.get_val<double>("DISPERS_DIST"); if (v_double.size() == 3) { m_disp50 = v_double[0]; m_disp99 = v_double[1]; m_dispLD = v_double[2]; } else { cerr << "!!! Wrong number of parameters provided for DISPERS_DIST (" << v_double.size() << " instead of " << 3 << "). Please check!" << endl; terminate(); } if (m_disp99 < m_disp50 || m_dispLD < m_disp50 || m_dispLD < m_disp99) { cerr << "!!! DISPERS_DIST must be given in ascending order (disp50 <= disp99 <= dispLD). Please check!" << endl; terminate(); } cout << "> PFGS dispersal parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getDistParams(const GSP& glob_params, const string& PFG_DisturbancesFile) { m_DistResponse = FGresponse(PFG_DisturbancesFile, glob_params.getNbDisturbances(), glob_params.getNbDistSub()); cout << "> PFGS disturbances parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getSoilParams(const GSP& glob_params, const string& PFG_SoilFile) { /* 1. check parameter file existence */ testFileExist("--PFG_SOIL_PARAMS--", PFG_SoilFile, false); /* 2. read dispersal parameters */ par::Params SoilParams(PFG_SoilFile.c_str(), " = \"", "#");
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
m_SoilContrib = SoilParams.get_val<double>("SOIL_CONTRIB")[0]; m_SoilLow = SoilParams.get_val<double>("SOIL_LOW")[0]; m_SoilHigh = SoilParams.get_val<double>("SOIL_HIGH")[0]; if (m_SoilHigh < m_SoilContrib || m_SoilContrib < m_SoilLow || m_SoilHigh < m_SoilLow) { cerr << "!!! Soil values must be given in ascending order (SOIL_LOW <= SOIL_CONTRIB <= SOIL_HIGH). Please check!" << endl; terminate(); } vector<int> v_int = SoilParams.get_val<int>("ACTIVE_GERM"); m_SoilActiveGerm = convert_int_to_enum<Fract>("ACTIVE_GERM", v_int, "Fract", Fcount); if (m_SoilActiveGerm.size() != Rcount) { cerr << "!!! Wrong number of parameters provided for ACTIVE_GERM (SOIL) (" << m_SoilActiveGerm.size() << " instead of " << Rcount << "). Please check!" << endl; terminate(); } /* get soil tolerance as vector and reshape it into matrix format */ v_int = SoilParams.get_val<int>("SOIL_TOL", true); if (v_int.size() != Rcount * (LScount - 1)) { cerr << "!!! Wrong number of parameters provided for SOIL_TOL (" << v_int.size() << " instead of " << Rcount * (LScount - 1) << "). Please check!" << endl; terminate(); } int counter = 0; m_SoilTolerance.resize(int(LScount)); for (unsigned i=1; i<m_SoilTolerance.size(); i++) { // fill automatically germinant LS case ==> not use at time m_SoilTolerance[i].resize(Rcount); for (unsigned j=0; j<m_SoilTolerance[i].size(); j++) { m_SoilTolerance[i][j] = convert_int_to_enum<Fract>("SOIL_TOL", v_int[counter], "Fract", Fcount); counter ++; } } /* Propagule Soil tolerance is assumed to be the same as germinants */ m_SoilTolerance[0].resize(Rcount); for (unsigned c=0; c<m_SoilTolerance[0].size(); c++) { m_SoilTolerance[0][c] = m_SoilTolerance[1][c]; } cout << "> PFGS soil parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getFireParams(const GSP& glob_params, const string& PFG_FiresFile) { /* 1. check parameter file existence */ testFileExist("--PFG_FIRES_PARAMS--", PFG_FiresFile, false); /* 2. read fire disturbance parameters */ par::Params FireParams(PFG_FiresFile.c_str(), " = \"", "#"); m_FireResponse = FGresponse(PFG_FiresFile, glob_params.getNbFireDisturbances(), glob_params.getNbFireSub()); m_Flamm = FireParams.get_val<double>("FLAMMABILITY")[0]; cout << "> PFGS fires parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::getDrouParams(const GSP& glob_params, const string& PFG_DroughtFile) { /* 1. check parameter file existence */ testFileExist("--PFG_DROUGHT_PARAMS--", PFG_DroughtFile, false); /* 2. read drought disturbance parameters */ par::Params DroughtParams(PFG_DroughtFile.c_str(), " = \"", "#"); m_DroughtResponse = FGresponse(PFG_DroughtFile, 2, glob_params.getNbDroughtSub());
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
m_DroughtSD = DroughtParams.get_val<double>("DROUGHT_SD"); m_CountModToSev = DroughtParams.get_val<unsigned>("COUNT_MOD_TO_SEV")[0]; m_CountSevMort = DroughtParams.get_val<unsigned>("COUNT_SEV_MORT")[0]; m_DroughtRecovery = DroughtParams.get_val<unsigned>("DROUGHT_RECOVERY")[0]; cout << "> PFGS drought parameters provided" << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ FG::FG(const GSP& glob_params, const FOPL& file_of_params, const unsigned& fg_id) { bool wrong_identifier = false; bool doLight = glob_params.getDoLightCompetition(); bool doDisp = glob_params.getDoDispersal(); bool doDist = glob_params.getDoDisturbances(); bool doSoil = glob_params.getDoSoilCompetition(); bool doFire = glob_params.getDoFireDisturbances(); bool doDrought = glob_params.getDoDroughtDisturbances(); if (fg_id < file_of_params.getFGLifeHistory().size()) { getSuccParams(glob_params,file_of_params.getFGLifeHistory()[fg_id]); if (doLight) { if (fg_id < file_of_params.getFGLight().size()) { getLightParams(glob_params,file_of_params.getFGLight()[fg_id]); } else { wrong_identifier = true; } } else { m_ActiveGerm.resize(int(Rcount), PC100); m_Tolerance.resize(int(LScount), vector<bool>(Rcount, true)); } if (doDisp) { if (fg_id < file_of_params.getFGDispersal().size()) { getDispParams(glob_params,file_of_params.getFGDispersal()[fg_id]); } else { wrong_identifier = true; } } else { m_Dispersed = false; m_disp50 = 0.0; m_disp99 = 0.0; m_dispLD = 0.0; } if (doSoil) { if (fg_id < file_of_params.getFGSoil().size()) { getSoilParams(glob_params,file_of_params.getFGSoil()[fg_id]); } else { wrong_identifier = true; } } else { m_SoilContrib = 0.0; m_SoilLow = 0.0; m_SoilHigh = 0.0; m_SoilActiveGerm.resize(int(Rcount), PC100); m_SoilTolerance.resize(int(LScount), vector<Fract>(Rcount, PC100)); //m_SoilTolerance.resize(int(LScount), vector<bool>(1, true));
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
} if (doDist) { if (fg_id < file_of_params.getFGDisturbance().size()) { getDistParams(glob_params, file_of_params.getFGDisturbance()[fg_id]); } else { wrong_identifier = true; } } else { m_DistResponse = FGresponse(); } if (doFire) { if (fg_id < file_of_params.getFGFire().size()) { getFireParams(glob_params, file_of_params.getFGFire()[fg_id]); } else { wrong_identifier = true; } } else { m_FireResponse = FGresponse(); m_Flamm = 0.0; } if (doDrought) { if (fg_id < file_of_params.getFGDrought().size()) { getDrouParams(glob_params, file_of_params.getFGDrought()[fg_id]); } else { wrong_identifier = true; } } else { m_DroughtResponse = FGresponse(); m_DroughtSD.resize(2,0.0); m_CountModToSev = 0; m_CountSevMort = 0; m_DroughtRecovery = 0; } } else { wrong_identifier = true; } if (wrong_identifier) { cerr << "!!! Wrong identifier of FG given. Please check!" << endl; terminate(); } else { this->show(); } } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Destructor */ /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ FG::~FG() { /* Nothing to do */ }
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Getters & Setters */ /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ const string& FG::getName() const {return m_Name;} const int& FG::getMatTime() const {return m_M;} const int& FG::getLifeSpan() const {return m_L;} const Abund& FG::getMaxAbund() const {return m_MaxA;} //int FG::getMaxAbund() {return(AbundToInt(m_MaxA));} const double& FG::getImmSize() const {return m_ImmSize;} const int& FG::getStrataMax() const {return m_StrataMax;} const vector<int> FG::getStrata() const {return m_Strata;} const int& FG::getStrata(const int& i) const {return m_Strata[i];} const vector<int> FG::getPoolLife() const {return m_PoolL;} const int& FG::getPoolLife(const PoolType& pt ) const {return m_PoolL[pt];} const bool& FG::getInnateDormancy() const {return m_InnateDorm;} const int& FG::getPotentialFecund() const {return m_PotentialFecundity;} const vector<Fract> FG::getMaxRecruitLight() const {return m_ActiveGerm;} const Fract& FG::getMaxRecruitLight(const Resource& r) const {return m_ActiveGerm[r];} const vector< vector<bool> >& FG::getTolerance() const {return m_Tolerance;} const bool FG::getTolerance(LifeStage ls, Resource r) const {return m_Tolerance[ls][r];} const bool& FG::getDispersed() const {return m_Dispersed;} const double& FG::getDisp50() const {return m_disp50;} const double& FG::getDisp99() const {return m_disp99;} const double& FG::getDispLD() const {return m_dispLD;} const double& FG::getSoilContrib() const {return m_SoilContrib;} const double& FG::getSoilLow() const {return m_SoilLow;} const double& FG::getSoilHigh() const {return m_SoilHigh;} const vector<Fract> FG::getMaxRecruitSoil() const {return m_SoilActiveGerm;} const Fract& FG::getMaxRecruitSoil(const Resource& r) const {return m_SoilActiveGerm[r];} const vector< vector<Fract> >& FG::getSoilTolerance() const {return m_SoilTolerance;} const Fract FG::getSoilTolerance(LifeStage ls, Resource r) const { return m_SoilTolerance[ls][r];} const FGresponse& FG::getDistResponse() const {return m_DistResponse;} const FGresponse& FG::getFireResponse() const {return m_FireResponse;} const double& FG::getFlamm() const {return m_Flamm;} const FGresponse& FG::getDroughtResponse() const {return m_DroughtResponse;} const vector<double>& FG::getDroughtSD() const {return m_DroughtSD;} const unsigned& FG::getCountModToSev() const {return m_CountModToSev;} const unsigned& FG::getCountSevMort() const {return m_CountSevMort;} const unsigned& FG::getDroughtRecovery() const {return m_DroughtRecovery;} const bool& FG::getIsAlien() const {return m_IsAlien;} void FG::setName(const string& name){m_Name = name;} void FG::setMatTime(const int& matTime){m_M = matTime;} void FG::setLifeSpan(const int& lifeSpan){m_L = lifeSpan;} void FG::setMaxAbund(const Abund& maxAbund){m_MaxA = maxAbund;} void FG::setImmSize(const double& immSize){m_ImmSize = immSize;} void FG::setStrataMax(const int& strataMax){m_StrataMax = strataMax;} void FG::setStrata(const vector<int>& strata){m_Strata = strata;} void FG::setStrata(const int& strata, const int& i){m_Strata[i] = strata;} void FG::setPoolLife(const int (&poolLife)[ PTcount ]){for(int i=0; i<PTcount; i++){m_PoolL[i] = poolLife[i];}} void FG::setPoolLife(const int& poolLife, const PoolType& pt ){m_PoolL[pt] = poolLife;} void FG::setInnateDormancy(const bool& innateDormancy){m_InnateDorm = innateDormancy;} void FG::setPotentialFecund(const int& potentialFecund){m_PotentialFecundity = potentialFecund;} void FG::setMaxRecruitLight(const Fract (&maxRecruit) [ Rcount ] ){ for(int i=0; i<Rcount; i++){m_ActiveGerm[i] = maxRecruit[i];}} void FG::setMaxRecruitLight(const Fract& maxRecruit, const Resource& r ){ m_ActiveGerm[r] = maxRecruit;} void FG::setTolerance(const bool (&tolerance)[ LScount ][ Rcount ]){ for(int i=0; i<LScount; i++){ for(int j=0; j<Rcount; j++){ m_Tolerance[i][j] = tolerance[i][j];}}} void FG::setTolerance(const bool& tolerance, const LifeStage& ls, const Resource& r){m_Tolerance[ls][r] = tolerance;} void FG::setDispersed(const bool& dispersed){m_Dispersed = dispersed;} void FG::setDisp50(const double& disp50){ m_disp50 = disp50;} void FG::setDisp99(const double& disp99){ m_disp99 = disp99;} void FG::setDispLD(const double& dispLD){ m_dispLD = dispLD;} void FG::setSoilContrib(const double& soilContrib) {m_SoilContrib = soilContrib;} void FG::setSoilLow(const double& soilLow) {m_SoilLow = soilLow;} void FG::setSoilHigh(const double& soilHigh) {m_SoilHigh = soilHigh;} void FG::setMaxRecruitSoil(const Fract (&maxRecruit) [ Rcount ] ){ for(int i=0; i<Rcount; i++){m_SoilActiveGerm[i] = maxRecruit[i];}}
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
void FG::setMaxRecruitSoil(const Fract& maxRecruit, const Resource& r ){ m_SoilActiveGerm[r] = maxRecruit;} void FG::setSoilTolerance(const vector< vector<Fract> >& tolerance) { m_SoilTolerance = tolerance; } void FG::setSoilTolerance(const Fract& tolerance, const LifeStage& ls, const Resource& r) { m_SoilTolerance[ls][r] = tolerance; } void FG::setDistResponse(const FGresponse& distResponse){m_DistResponse = distResponse;} void FG::setFireResponse(const FGresponse& fireResponse){m_FireResponse = fireResponse;} void FG::setFlamm(const double& flamm){m_Flamm = flamm;} void FG::setDroughtResponse(const FGresponse& droughtResponse){m_DroughtResponse = droughtResponse;} void FG::setDroughtSD(const vector<double>& droughtSD){m_DroughtSD = droughtSD;} void FG::setCountModToSev(const unsigned& countModToSev){m_CountModToSev = countModToSev;} void FG::setCountSevMort(const unsigned& countSevMort){m_CountSevMort = countSevMort;} void FG::setDroughtRecovery(const unsigned& droughtRecovery){m_DroughtRecovery = droughtRecovery;} void FG::setIsAlien(const bool& isAlien){m_IsAlien = isAlien;} /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Other functions */ /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ void FG::show() { cout << endl; cout << "*********************************************" << endl; cout << "** Functional Group Parameters:" << endl; cout << "*********************************************" << endl; cout << endl; cout << "m_Name = " << m_Name << endl; cout << "m_M = " << m_M << endl; cout << "m_L = " << m_L << endl; cout << "m_MaxA = " << m_MaxA << endl; cout << "m_ImmSize = " << m_ImmSize << endl; cout << "m_StrataMax = " << m_StrataMax << endl; cout << "m_Strata = " ; copy(m_Strata.begin(), m_Strata.end(), ostream_iterator<int>(cout, " ")); cout << endl; cout << "m_PoolL = " ; for(int i=0; i<PTcount; i++){cout << m_PoolL[i] << " ";} cout << endl; cout << "m_InnateDorm = " << m_InnateDorm << endl; cout << "m_PotentialFecundity = " << m_PotentialFecundity << endl; cout << "m_ActiveGerm = (column: resource) "; for(int i=0; i<Rcount; i++){cout << m_ActiveGerm[i] << " ";} cout << endl; cout << "m_Tolerance = (line: life stage, column: resource)"; for(int i=0; i<LScount; i++){ cout << endl; for(int j=0; j<Rcount; j++){cout << m_Tolerance[i][j] << " ";}} cout << endl; cout << "m_Dispersed = " << m_Dispersed << endl; cout << "m_disp50 = " << m_disp50 << endl; cout << "m_disp99 = " << m_disp99 << endl; cout << "m_dispLD = " << m_dispLD << endl; cout << "** m_DistResponse = " << endl; cout << endl; m_DistResponse.show(); cout << endl; cout << "m_SoilContrib = " << m_SoilContrib << endl; cout << "m_SoilLow = " << m_SoilLow << endl; cout << "m_SoilHigh = " << m_SoilHigh << endl; cout << "m_SoilActiveGerm = (column: resource) "; for(int i=0; i<Rcount; i++){cout << m_SoilActiveGerm[i] << " ";} cout << endl; cout << "m_SoilTolerance = (line: life stage, column: resource)"; for(int i=0; i<LScount; i++){ cout << endl; for(int j=0; j<Rcount; j++){cout << m_SoilTolerance[i][j] << " ";}} cout << endl << endl; cout << "** m_FireResponse = " << endl; cout << endl; m_FireResponse.show(); cout << "m_Flamm = " << m_Flamm << endl; cout << endl; cout << "** m_DroughtResponse = " << endl; cout << endl;
561562563564565566567568569570571572573574575576
m_DroughtResponse.show(); cout << endl; cout << "m_DroughtSD = "; for(unsigned i=0; i<m_DroughtSD.size() ; i++){cout << m_DroughtSD[i] << " ";} cout << endl; cout << "m_CountModToSev = " << m_CountModToSev << endl; cout << "m_CountSevMort = " << m_CountSevMort << endl; cout << "m_DroughtRecovery = " << m_DroughtRecovery << endl; cout << "m_IsAlien = " << m_IsAlien << endl; cout << endl; } /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/