116 lines
2.8 KiB
C++
116 lines
2.8 KiB
C++
#include <fstream>
|
|
|
|
#include "clib/ct.h"
|
|
#include "ctmatutils.h"
|
|
|
|
void reportError();
|
|
|
|
void transportmethods(int nlhs, mxArray* plhs[],
|
|
int nrhs, const mxArray* prhs[])
|
|
{
|
|
double vv = 0.0;
|
|
int n = getInt(prhs[1]);
|
|
int job = getInt(prhs[2]);
|
|
double* h;
|
|
int iok = 0;
|
|
int nsp;
|
|
|
|
if (job == -1) {
|
|
char* model = getString(prhs[3]);
|
|
int loglevel = getInt(prhs[4]);
|
|
int m = -2;
|
|
m = (int) newTransport(model, n, loglevel);
|
|
if (m < 0) {
|
|
reportError();
|
|
}
|
|
|
|
// Create matrix for the return argument.
|
|
plhs[0] = mxCreateDoubleMatrix(1,1, mxREAL);
|
|
double* x = mxGetPr(plhs[0]);
|
|
*x = m;
|
|
return;
|
|
}
|
|
|
|
|
|
if (job < 10) {
|
|
switch (job) {
|
|
case 0:
|
|
delTransport(n);
|
|
vv = 0.0;
|
|
break;
|
|
case 1:
|
|
vv = trans_viscosity(n);
|
|
break;
|
|
case 2:
|
|
vv = trans_thermalConductivity(n);
|
|
break;
|
|
case 3:
|
|
vv = trans_electricalConductivity(n);
|
|
break;
|
|
default:
|
|
mexErrMsgTxt("unknown Transport method");
|
|
}
|
|
if (vv < 0.0) {
|
|
reportError();
|
|
}
|
|
plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
|
|
h = mxGetPr(plhs[0]);
|
|
*h = vv;
|
|
return;
|
|
} else if (job < 20) {
|
|
nsp = getInt(prhs[3]);
|
|
plhs[0] = mxCreateNumericMatrix(nsp,1,mxDOUBLE_CLASS,mxREAL);
|
|
h = mxGetPr(plhs[0]);
|
|
|
|
switch (job) {
|
|
case 11:
|
|
iok = trans_getMixDiffCoeffs(n, nsp, h);
|
|
break;
|
|
case 12:
|
|
iok = trans_getThermalDiffCoeffs(n, nsp, h);
|
|
break;
|
|
default:
|
|
mexErrMsgTxt("unknown Transport method");
|
|
}
|
|
}
|
|
|
|
else if (job < 30) {
|
|
nsp = getInt(prhs[3]);
|
|
plhs[0] = mxCreateNumericMatrix(nsp,nsp,mxDOUBLE_CLASS,mxREAL);
|
|
h = mxGetPr(plhs[0]);
|
|
switch (job) {
|
|
case 21:
|
|
iok = trans_getBinDiffCoeffs(n, nsp, h);
|
|
break;
|
|
case 22:
|
|
iok = trans_getMultiDiffCoeffs(n, nsp, h);
|
|
break;
|
|
default:
|
|
mexErrMsgTxt("unknown Transport method");
|
|
}
|
|
}
|
|
|
|
// set parameters
|
|
else if (job < 40) {
|
|
double* params;
|
|
int typ, k;
|
|
switch (job) {
|
|
case 31:
|
|
typ = getInt(prhs[3]);
|
|
k = getInt(prhs[4]);
|
|
params = mxGetPr(prhs[5]);
|
|
iok = trans_setParameters(n, typ, k, params);
|
|
break;
|
|
default:
|
|
mexErrMsgTxt("unknown Transport method");
|
|
}
|
|
plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
|
|
h = mxGetPr(plhs[0]);
|
|
*h = double(iok);
|
|
} else {
|
|
mexErrMsgTxt("unknown Transport method");
|
|
}
|
|
if (iok < 0) {
|
|
reportError();
|
|
}
|
|
}
|