00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef OB_KINETICS_H
00017 #define OB_KINETICS_H
00018
00019 #include <openbabel/generic.h>
00020
00021 namespace OpenBabel
00022 {
00023
00024 const unsigned RateData = 55555;
00025 const unsigned ThermoData = 55556;
00026
00029
00036 class OBRateData : public OBGenericData
00037 {
00038 protected:
00039 double Rates[3];
00040 double LoRates[3];
00041 double TroeParams[4];
00042 std::map<std::string,double> Efficiencies;
00043 public:
00044 virtual OBGenericData* Clone(OBBase* parent) const{return new OBRateData(*this);}
00045 enum rate_type {A, n, E};
00046 enum reaction_type {ARRHENIUS=55555, LINDERMANN, TROE, SRI, THREEBODY};
00047 reaction_type ReactionType;
00048 OBRateData():OBGenericData("Rate data", RateData)
00049 {
00050 Rates[0]=Rates[1]=Rates[2]=0;
00051 LoRates[0]=LoRates[1]=LoRates[2]=0;
00052 TroeParams[0]=TroeParams[1]=TroeParams[2]=TroeParams[3]=0;
00053 ReactionType = ARRHENIUS;
00054 }
00055
00056 double GetRate(rate_type n) const
00057 {
00058 return Rates[n];
00059 }
00060
00061 void SetRate(rate_type n, const double val)
00062 {
00063 if(n<3)
00064 Rates[n] = val;
00065 }
00066
00067 double GetLoRate(rate_type n) const
00068 {
00069 return LoRates[n];
00070 }
00071
00072 void SetLoRate(rate_type n, const double val)
00073 {
00074 if(n<3)
00075 LoRates[n] = val;
00076 }
00077
00078 double GetTroeParam(int n) const
00079 {
00080 return TroeParams[n];
00081 }
00082
00083 void SetTroeParams(int n, const double val)
00084 {
00085 if(n<4)
00086 TroeParams[n] = val;
00087 }
00088
00089 void SetEfficiency(std::string id, double Eff)
00090 {
00091 Efficiencies[id] = Eff;
00092 }
00093
00094 double GetEfficiency(std::string id)
00095 {
00096 return Efficiencies[id];
00097 }
00098
00099 bool GetNextEff(std::string& id, double& Eff)
00100 {
00101
00102 std::map<std::string, double>::iterator itr;
00103 if(id.empty())
00104 itr = Efficiencies.begin();
00105 else
00106 {
00107 itr = Efficiencies.find(id);
00108 if(itr!=Efficiencies.end())
00109 ++itr;
00110 }
00111 if(itr==Efficiencies.end())
00112 return false;
00113 id = itr->first;
00114 Eff = itr->second;
00115 return true;
00116 }
00117 };
00118
00119
00122
00134 class OBNasaThermoData : public OBGenericData
00135 {
00136 protected:
00137 double Coeffs[14];
00138 double LoT, MidT, HiT;
00139 char phase;
00140 public:
00141 OBNasaThermoData(): LoT(300),MidT(1000),HiT(3000),phase('G')
00142 { _type = ThermoData; _attr = "Nasa thermo data";}
00143
00144 virtual OBGenericData* Clone(OBBase* parent) const{return new OBNasaThermoData(*this);}
00145
00146 double GetCoeff(unsigned n) const
00147 {
00148 return Coeffs[n];
00149 }
00150
00151 void SetCoeff(unsigned n, const double val)
00152 {
00153 if(n<14)
00154 Coeffs[n] = val;
00155 }
00156 double GetLoT() const {return LoT;}
00157 double GetMidT() const {return MidT;}
00158 double GetHiT() const {return HiT;}
00159 void SetLoT(double val){LoT=val;}
00160 void SetMidT(double val){MidT=val;}
00161 void SetHiT(double val){HiT=val;}
00162
00163 char GetPhase() const {return phase;}
00164 void SetPhase(char ph){phase=ph;}
00165 };
00166
00167 }
00168
00169 #endif //OB_KINETICS_H
00170