cantera/test_problems/spectroscopy/spectratest.cpp
2012-02-12 02:47:21 +00:00

74 lines
1.8 KiB
C++

#include "cantera/Cantera.h"
#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 Lorentzian(gam);
LineBroadener* gaus = new Gaussian(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;
}