cantera/src/matlab/surfmethods.cpp
2012-03-15 19:55:18 +00:00

99 lines
2.4 KiB
C++

#include <iostream>
#include <string>
#include "ctmatutils.h"
#include "clib/ctsurf.h"
#include "clib/ct.h"
using namespace std;
using namespace Cantera;
void surfmethods(int nlhs, mxArray* plhs[],
int nrhs, const mxArray* prhs[])
{
double vv;
int job = getInt(prhs[2]);
int iok = 0;
double* ptr;
char* str;
size_t nsp, n, m;
int surf = getInt(prhs[1]);
// set parameters
if (job < 100) {
switch (job) {
case 1:
checkNArgs(4, nrhs);
vv = getDouble(prhs[3]);
iok = surf_setsitedensity(surf, vv);
break;
case 3:
checkNArgs(4, nrhs);
ptr = mxGetPr(prhs[3]);
m = mxGetM(prhs[3]);
n = mxGetN(prhs[3]);
nsp = phase_nSpecies(surf);
if ((m == nsp && n == 1) || (m == 1 && n == nsp)) {
iok = surf_setcoverages(surf, ptr);
} else {
mexErrMsgTxt("wrong array size for coverages");
}
break;
case 5:
checkNArgs(4, nrhs);
str = getString(prhs[3]);
iok = surf_setcoveragesbyname(surf, str);
break;
default:
mexErrMsgTxt("unknown job");
}
if (iok < 0) {
reportError();
}
plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
double* h = mxGetPr(plhs[0]);
*h = double(iok);
return;
}
// return array parameters
else if (job < 200) {
nsp = phase_nSpecies(surf);
std::vector<double> x(nsp);
iok = -1;
switch (job) {
case 101:
checkNArgs(3,nrhs);
iok = surf_getcoverages(surf, &x[0]);
break;
case 103:
iok = surf_getconcentrations(surf, &x[0]);
break;
default:
;
}
plhs[0] = mxCreateNumericMatrix((mwSize) nsp,1,
mxDOUBLE_CLASS,mxREAL);
double* h = mxGetPr(plhs[0]);
if (iok >= 0) {
for (size_t i = 0; i < nsp; i++) {
h[i] = x[i];
}
return;
} else {
for (size_t i = 0; i < nsp; i++) {
h[i] = -999.99;
}
reportError();
return;
}
} else {
mexErrMsgTxt("unknown job");
}
}