45 #ifndef N_DEV_ReactionNetwork_H
46 #define N_DEV_ReactionNetwork_H
48 #include <N_UTL_fwd.h>
58 #include <N_ERH_ErrorMgr.h>
87 void addReactant(
const std::string &name,
const std::string &reactant,
double stoich);
88 void addProduct(
const std::string &name,
const std::string &reactant,
double stoich);
92 void setCaptureCalc(
const std::string &name,
double sigma,
double v);
93 void setEmissionCalc(
const std::string &name,
double sigma,
double v,
double N,
double E);
103 double gammaAB,
double gammaA,
double gammaB,
double concSi);
106 double sigma,
double hopDistance);
122 std::vector<double> &concs,
123 std::vector<double> &constant_vec);
125 std::vector<double> &concs,
126 std::vector<double> &constant_vec);
130 void setSpecies(std::vector<Specie> &theSpeciesVect);
132 void setConstants(std::vector<Specie> &theConstantsVect);
137 void addSourceTerm(
const std::string &speciesName,
const std::string &expressionStr);
138 void addSourceTerm(
const std::string &speciesName,Util::Expression *expression);
151 std::vector<double> &ddt);
152 void getJac(std::vector<double> &concs, std::vector<double> &
constants,
153 std::vector<std::vector<double> >&jac);
155 std::vector<double> &concs, std::vector<double> &
constants,
156 std::vector<double> &dFdConst);
159 std::vector<std::vector<double> >&jac, std::vector<double> &constVec);
162 std::vector<int> &captureVect, std::vector<int> &emissionVect);
164 std::vector<int> &captureVect, std::vector<int> &emissionVect,
165 std::vector<double>&dratedc);
168 std::vector<int> &captureVect, std::vector<int> &emissionVect,
169 std::vector<double>&dratedc);
172 std::vector<int> &captureVect,
double &concentration);
174 std::vector<int> &captureVect,
double &concentration,
175 std::vector<double> &lifetimes);
179 std::vector<double> &lifetimes);
181 std::vector<double> &lifetimes);
187 std::vector<double>&dratedc);
189 std::vector<double>&dratedc);
192 std::vector<double>&dratedConst);
194 std::vector<double>&dratedConst);
206 void setName(
const std::string &name);
208 void output(std::ostream & os)
const;
213 std::vector<double> concs,
214 std::vector<double> carrierConcs);
346 std::map<std::string,int>::iterator n_i;
420 Report::UserFatal() <<
"Invalid species name specified: " << name;
437 std::map<std::string,int>::iterator n_i;
484 inline std::pair<std::string,double>
500 std::map<std::string,int>::iterator n_i;
541 Report::UserFatal() <<
"Attempt to access non-existant reaction " << name;
698 double bindingEnergy,
706 bindingEnergy,gammaAB,gammaA,
741 for (i=0;i<
species.size();++i)
743 os <<
"species["<<i<<
"] = " <<
species[i].getName() << std::endl;
756 os <<
"Electron Capture Reactions: " << std::endl;
765 os <<
"Hole Capture Reactions: " << std::endl;
774 os <<
"Electron Emission Reactions: " << std::endl;
783 os <<
"Hole Emission Reactions: " << std::endl;
804 os <<
"Reaction Network: " << std::endl;
828 std::vector<double> &constant_vec)
843 std::vector<double> &constant_vec)
850 eConc = constant_vec[-(concNum+1)];
852 eConc = concs[concNum];
868 std::vector<double> &constant_vec,
869 std::vector<double> &lifetimes)
876 eConc = constant_vec[-(concNum+1)];
878 eConc = concs[concNum];
895 std::vector<double> &constant_vec,
896 std::vector<double> &dRatedC)
912 std::vector<double> &constant_vec,
913 std::vector<double> &dRatedConst)
935 std::vector<double> &constant_vec)
951 std::vector<double> &constant_vec)
958 hConc = constant_vec[-(concNum+1)];
960 hConc = concs[concNum];
975 std::vector<double> &constant_vec,
976 std::vector<double> &lifetimes)
983 hConc = constant_vec[-(concNum+1)];
985 hConc = concs[concNum];
1002 std::vector<double> &constant_vec,
1003 std::vector<double> &dRatedC)
1019 std::vector<double> &constant_vec,
1020 std::vector<double> &dRatedConst)
1034 (
const std::string & name,
const double temp)
1036 int num = getSpeciesNum(name);
1042 D = species[num].getDiffusionCoefficient(temp);
1055 (
int specie,
const double temp)
1062 D = species[specie].getDiffusionCoefficient(temp);
1076 (
int specie,
const double temp,
1077 std::vector<double> concs,
1078 std::vector<double> carrierConcs)
1085 D = species[specie].getDiffusionCoefficient(temp, concs, carrierConcs);
1098 (
const std::string & name)
1100 int num = getSpeciesNum(name);
1106 z = species[num].getChargeState();
1126 z = species[specie].getChargeState();
void setBourgoinCorbettCalc(const std::string &speciesName, const std::string &carrierName, double sigma, double hopDistance)
std::vector< std::pair< int, Util::Expression * > > theSourceTerms
void setSimpleRateCalculator(double k, double C0, double t0, double x0)
void addConstant(const Specie &aConstant)
void setComplexMultiplierRateCalculator(std::vector< Specie > &VariableSpecies, std::vector< Specie > &ConstantSpecies, double C0, double t0, double x0, double multiplier)
bool reactantExist(const std::string &name)
double getHRate(std::vector< double > &concs, std::vector< double > &constants)
void getDERateDConst(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &dratedConst)
void scaleRateConstant(const std::string &name, double kscale)
void output(std::ostream &os) const
int getChargeState(const std::string &name)
void getDHRateDConst(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &dratedConst)
double getELifetime(std::vector< double > &concs, std::vector< double > &constants)
void setScaleParams(double c, double t, double x)
Pure virtual class to augment a linear system.
double getHLifetime(std::vector< double > &concs, std::vector< double > &constants)
void getDRateDConst(std::vector< double > &concs, std::vector< double > &constants, std::vector< int > &captureVect, std::vector< int > &emissionVect, std::vector< double > &dratedc)
std::map< std::string, int > reactionNamesMap
void getELifetimes(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &lifetimes)
double getCaptureLifetime(std::vector< double > &concs, std::vector< double > &constants, std::vector< int > &captureVect, double &concentration)
void getCaptureLifetimes(std::vector< double > &concs, std::vector< double > &constants, std::vector< int > &captureVect, double &concentration, std::vector< double > &lifetimes)
void setHoleEmissionCalc(const std::string &name, double sigma, double E)
void scaleRateConstantsFromCalc()
void setName(const std::string &name)
void setElectronCaptureCalc(const std::string &name, double sigma)
void unscaleRateConstantFromCalculator(const std::string &name)
const std::string & getSpeciesName(int i)
std::vector< std::pair< std::string, double > > initialConditions
std::vector< int > holeEmissionReactions
void getDdt(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &ddt)
void setSimpleCalc(const std::string &name, double k)
const std::string & getConstantsName(int i)
void setCoefficients(double Temp)
const T & value(const ParameterBase &entity, const Descriptor &descriptor)
Returns the value of the parameter for the entity.
void addReactant(const std::string &name, const std::string &reactant, double stoich)
void setEmissionRateCalculator(double sigma, double v, double N, double Energy, double C0, double t0, double x0)
void getJacobianVC(std::vector< double > &concs, std::vector< double > &constants, std::vector< std::vector< double > > &jac, std::vector< double > &constVec)
double getRate(std::vector< double > &concs, std::vector< double > &constants, std::vector< int > &captureVect, std::vector< int > &emissionVect)
std::map< std::string, int > speciesMap
void addMasterSourceTerm(const std::string &speciesName)
void setComplexCalc(const std::string &name)
void setFDElectronEmissionCalc(const std::string &name, double sigma, double E)
Reaction & getReaction(const std::string &name)
std::vector< int > holeCaptureReactions
void setDecomplexCalc(const std::string &name, double bindingEnergy, double gammaAB, double gammaA, double gammaB, double concSi)
std::vector< Reaction > theReactions
void setRateConstantsFromCalc(double T)
void setSimTime(double time)
double getDiffusionCoefficient(const std::string &name, const double temp)
double getERate(std::vector< double > &concs, std::vector< double > &constants)
void getDHRateDC(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &dratedc)
virtual ~ReactionNetwork()
void setCaptureCalc(const std::string &name, double sigma, double v)
std::vector< Specie > constants
void getDERateDC(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &dratedc)
std::vector< int > electronEmissionReactions
void getHLifetimes(std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &lifetimes)
void setSourceScaleFac(double scf)
bool constantExist(const std::string &name)
void setElectronEmissionCalc(const std::string &name, double sigma, double E)
void setDecomplexRateCalculator(std::vector< Specie > &VariableSpecies, std::vector< Specie > &ConstantSpecies, double bindingEnergy, double gammaAB, double gammaA, double gammaB, double concSi, double C0, double t0, double x0)
void getJac(std::vector< double > &concs, std::vector< double > &constants, std::vector< std::vector< double > > &jac)
void setHoleCaptureCalc(const std::string &name, double sigma)
void getDFdConst(const std::string &constantName, std::vector< double > &concs, std::vector< double > &constants, std::vector< double > &dFdConst)
void setMaterial(MaterialLayer *material, double Temp)
void addReaction(const std::string &name)
void setEmissionCalc(const std::string &name, double sigma, double v, double N, double E)
void setBourgoinCorbettHoleCalc(const std::string &name, double sigma)
void setConstants(std::vector< Specie > &theConstantsVect)
void setRxnVariableCoeffs(bool variableCoeffs)
void setApplySources(bool flag)
void scaleRateConstantFromCalculator(const std::string &name)
void setCaptureRateCalculator(double sigma, double v, double C0, double t0, double x0)
void setSpecies(std::vector< Specie > &theSpeciesVect)
double getBreakpointTime()
std::vector< int > electronCaptureReactions
std::vector< std::string > reactionNames
int getNumInitialConditions()
int getSpeciesNum(const std::string &name)
void setFDHoleEmissionCalc(const std::string &name, double sigma, double E)
std::pair< std::string, double > getInitialCondition(int i)
std::vector< int > masterSourceSpecies
void setComplexMultiplierCalc(const std::string &name, double multiplier)
void setRateConstantFromCalculator(const std::string &name, double T)
void addSpecie(const Specie &aSpecie)
void setBourgoinCorbettHoleRateCalculator(std::vector< Specie > &VariableSpecies, std::vector< Specie > &ConstantSpecies, double sigma, double C0, double t0, double x0)
int getReactantNum(const std::string &name)
int getConstantNum(const std::string &name)
void unscaleRateConstantsFromCalc()
std::map< std::string, int > constantsMap
void setMasterSourceValue(double msv)
void setRateConstant(const std::string &name, double k)
ReactionNetwork(const std::string &name="NoName")
void addProduct(const std::string &name, const std::string &reactant, double stoich)
int getReactionNum(const std::string name)
void setReactionNetworkFromFile(const NetlistLocation &netlist_location, const std::string &fileName)
void getDRateDC(std::vector< double > &concs, std::vector< double > &constants, std::vector< int > &captureVect, std::vector< int > &emissionVect, std::vector< double > &dratedc)
void addSourceTerm(const std::string &speciesName, const std::string &expressionStr)
void addInitialCondition(const std::string &speciesName, double value)
std::ostream & operator<<(std::ostream &os, const Configuration &configuration)
void setComplexRateCalculator(std::vector< Specie > &VariableSpecies, std::vector< Specie > &ConstantSpecies, double C0, double t0, double x0)
std::vector< Specie > species