added LineBroadener

This commit is contained in:
Dave Goodwin 2007-12-18 02:53:12 +00:00
parent c9b7f0e988
commit e02cb93ea1
3 changed files with 114 additions and 1 deletions

View file

@ -0,0 +1,52 @@
#include "ct_defs.h"
#include "LineBroadener.h"
using namespace std;
namespace Cantera {
doublereal to_wavenumbers(doublereal freq) {
return freq/(100.0*lightSpeed);
}
doublereal from_wavenumbers(doublereal omega) {
return omega*(100.0*lightSpeed);
}
Lorentzian::Lorentzian(doublereal FWHM) {
m_hwhm = 0.5*FWHM;
m_hwhm2 = m_hwhm*m_hwhm;
}
doublereal Lorentzian::profile(doublereal deltaFreq) {
return (1.0/Pi) *m_hwhm/(deltaFreq*deltaFreq + m_hwhm2);
}
doublereal Lorentzian::cumulative(doublereal deltaFreq) {
return (1.0/Pi) * atan(deltaFreq/m_hwhm) + 0.5;
}
doublereal Lorentzian::width() {
return 2.0*m_hwhm;
}
Gaussian::Gaussian(doublereal FWHM) {
m_width = FWHM;
m_sigma = 0.5*FWHM / sqrt(2.0 * log(2.0));
m_sigma2 = m_sigma*m_sigma;
}
doublereal Gaussian::profile(doublereal deltaFreq) {
return 1.0/(m_sigma*SqrtTwo*SqrtPi) *
exp(-deltaFreq*deltaFreq/(2.0*m_sigma2));
}
doublereal Gaussian::cumulative(doublereal deltaFreq) {
return 0.5*(1.0 + erf(deltaFreq/(m_sigma*SqrtTwo)));
}
doublereal Gaussian::width() {
return m_width;
}
}

View file

@ -0,0 +1,61 @@
#include "ct_defs.h"
#include "ctexceptions.h"
namespace Cantera {
class LineBroadener {
public:
LineBroadener() {}
virtual ~LineBroadener() {}
/**
* the line shape profile, as a function of distance from line
* center. This function must have total area = 1.0.
*/
virtual doublereal profile(doublereal deltaFreq) {
throw CanteraError("LineBroadener::profile",
"base class method called!");
}
/**
* The cumulative profile, defined as
* \f[
* C(\Delta \nu) = \int_{-\infty}^{\Delta \nu} P(x) dx
* \f]
*/
virtual doublereal cumulative(doublereal deltaFreq) {
throw CanteraError("LineBroadener::cumulative",
"base class method called!");
}
};
class Lorentzian : public LineBroadener {
public:
Lorentzian(doublereal FWHM);
virtual doublereal profile(doublereal deltaFreq);
virtual doublereal cumulative(doublereal deltaFreq);
virtual double width();
protected:
doublereal m_hwhm;
doublereal m_hwhm2;
};
class Gaussian : public LineBroadener {
public:
Gaussian(doublereal FWHM);
virtual doublereal profile(doublereal deltaFreq);
virtual doublereal cumulative(doublereal deltaFreq);
virtual doublereal width();
protected:
doublereal m_sigma;
doublereal m_sigma2;
doublereal m_width;
};
}

View file

@ -54,7 +54,7 @@ namespace Cantera {
* is returned. Otherwise, it is computed as a sum
* \f[
* z = \sum_{J=0}^{J_{max} (2J + 1) \exp(-E(J)/kT)
* \]
* \f]
*/
doublereal Rotor::partitionFunction(doublereal T, int cutoff) {
int j = 0;