added LineBroadener
This commit is contained in:
parent
c9b7f0e988
commit
e02cb93ea1
3 changed files with 114 additions and 1 deletions
52
Cantera/src/spectra/LineBroadener.cpp
Normal file
52
Cantera/src/spectra/LineBroadener.cpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
61
Cantera/src/spectra/LineBroadener.h
Normal file
61
Cantera/src/spectra/LineBroadener.h
Normal 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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue