cantera/test_problems/spectroscopy/spectratest.cpp
Ray Speth b411f513ae Resolved the namespace collision between the two classes named "Gaussian"
This was causing problems on MinGW builds where Gaussian "function" objects
were being misinterpreted as Gaussian "line broadeners" and returning
incorrect results.
2012-05-29 18:03:22 +00:00

72 lines
1.8 KiB
C++

#include "cantera/spectra.h"
#include "spectra/Nuclei.h"
#include <iostream>
using namespace std;
using namespace Cantera;
int main()
{
Nucleus* a = HydrogenNucleus();
Nucleus* b = HydrogenNucleus();
if (*a == *b) {
cout << "a and b and indistinguishable" << endl;
} else {
cout << "\nwhy are a and b not indistinguishable?\n";
return 1;
}
// test line broading classes
double gam = 2.0e0;
double sigma = 5.0;
LineBroadener* lor = new LorentzianProfile(gam);
LineBroadener* gaus = new GaussianProfile(sigma);
Voigt* voig = new Voigt(sigma, gam);
//voig->testv();
double dnu = 0.1;
double nu;
double sum = 0.0, sumg = 0.0, sumlor = 0.0;
for (int n = -2000; n < 2000; n++) {
//cout << n << endl;
nu = n*dnu;
sumg += gaus->profile(nu)*dnu;
sum += voig->profile(nu)*dnu;
sumlor += lor->profile(nu)*dnu;
//cout << nu << ", " << (*lor)(nu) << ", " << (*gaus)(nu)
// << ", " << (*voig)(nu) << endl;
}
/* old output
cout << "Voigt area = " << sum << endl;
cout << "Gaussian area = " << sumg << endl;
cout << "Lorentzian area = " << sumlor << endl;
*/
// 'blessed' output:
// Voigt area = 0.99363
// Gaussian area = 1
// Lorentzian area = 0.993634
// guessing a sane tolerance
double TOL = .0001;
if (abs(sum-.99363) > TOL) {
cout << "\nVOIGT AREA REGRESSION TEST FAILURE\n";
return 1;
}
if (abs(sumg-1.0) > TOL) {
cout << "\nGAUSSIAN AREA REGRESSION TEST FAILURE\n";
return 1;
}
if (abs(sumlor-.993634) > TOL) {
cout << "\nLORENTZIAN AREA REGRESSION TEST FAILURE\n";
return 1;
}
// steady as she goes
return 0;
}