From 83e19962950a2b297101d924e0e8127b71961f95 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Thu, 15 Mar 2012 19:51:45 +0000 Subject: [PATCH] Cleaned up some of the Matlab extension code --- src/base/ctexceptions.cpp | 2 +- src/matlab/mixturemethods.cpp | 9 ++--- src/matlab/onedimmethods.cpp | 64 ++++++++++---------------------- src/matlab/phasemethods.cpp | 39 +++++++------------ src/matlab/reactormethods.cpp | 3 +- src/matlab/reactornetmethods.cpp | 2 +- src/matlab/surfmethods.cpp | 12 ++---- src/matlab/thermomethods.cpp | 29 +++++---------- src/matlab/transportmethods.cpp | 1 - src/matlab/wallmethods.cpp | 4 +- src/matlab/xmlmethods.cpp | 3 -- 11 files changed, 52 insertions(+), 116 deletions(-) diff --git a/src/base/ctexceptions.cpp b/src/base/ctexceptions.cpp index 0374cecab..7ede4d96e 100644 --- a/src/base/ctexceptions.cpp +++ b/src/base/ctexceptions.cpp @@ -61,7 +61,7 @@ std::string ArraySizeError::getMessage() const { std::string IndexError::getMessage() const { std::stringstream ss; ss << "IndexError: " << arrayName_ << "[" << m_ << "]" << - " outside valid range of 0 to " << (mmax_-1) << "."; + " outside valid range of 0 to " << (mmax_) << "."; return ss.str(); } diff --git a/src/matlab/mixturemethods.cpp b/src/matlab/mixturemethods.cpp index 32cd6c846..1b732dac9 100644 --- a/src/matlab/mixturemethods.cpp +++ b/src/matlab/mixturemethods.cpp @@ -153,28 +153,25 @@ void mixturemethods(int nlhs, mxArray* plhs[], int iok = 0; mwSize nsp = (mwSize) mix_nSpecies(i); - double* x = new double[nsp]; + std::vector x(nsp); switch (job) { case 41: - iok = mix_getChemPotentials(i,nsp,x); + iok = mix_getChemPotentials(i,nsp, &x[0]); break; default: ; } - plhs[0] = mxCreateNumericMatrix(nsp,1, - mxDOUBLE_CLASS,mxREAL); + plhs[0] = mxCreateNumericMatrix(nsp,1, mxDOUBLE_CLASS,mxREAL); double* h = mxGetPr(plhs[0]); if (iok >= 0) { for (int i = 0; i < nsp; i++) { h[i] = x[i]; } - delete x; return; } else { for (int i = 0; i < nsp; i++) { h[i] = -999.99; } - delete x; mexErrMsgTxt("unknown attribute"); return; } diff --git a/src/matlab/onedimmethods.cpp b/src/matlab/onedimmethods.cpp index 92ec2ccb8..f90ecf766 100644 --- a/src/matlab/onedimmethods.cpp +++ b/src/matlab/onedimmethods.cpp @@ -5,12 +5,6 @@ #include using namespace std; - - -namespace Cantera -{ -void writelog(const std::string& s); -} using namespace Cantera; void onedimmethods(int nlhs, mxArray* plhs[], @@ -28,12 +22,12 @@ void onedimmethods(int nlhs, mxArray* plhs[], int idom, icomp, localPoint; if (job < 10) { - int ph, kin, tr, itype, *ptrs; + int ph, kin, tr, itype; size_t sz, nd; switch (job) { - // construct a new stagnation flow instance + // construct a new stagnation flow instance case 1: checkNArgs(7, nrhs); ph = getInt(prhs[3]); @@ -43,40 +37,39 @@ void onedimmethods(int nlhs, mxArray* plhs[], indx = stflow_new(ph, kin, tr, itype); break; - // construct a new Inlet1D instance + // construct a new Inlet1D instance case 2: checkNArgs(3, nrhs); indx = inlet_new(); break; - // construct a new Surf1D instance + // construct a new Surf1D instance case 3: checkNArgs(3, nrhs); indx = surf_new(); break; - // construct a new Symm1D instance + // construct a new Symm1D instance case 4: checkNArgs(3, nrhs); indx = symm_new(); break; - // construct a new Outlet1D instance + // construct a new Outlet1D instance case 5: checkNArgs(3, nrhs); indx = outlet_new(); break; - // construct a new ReactingSurf1D instance + // construct a new ReactingSurf1D instance case 6: checkNArgs(4, nrhs); indx = reactingsurf_new(); reactingsurf_setkineticsmgr(indx, getInt(prhs[3])); break; - // construct a new Sim1D instance - case 8: - //writelog("case 8\n"); + // construct a new Sim1D instance + case 8: { checkNArgs(5, nrhs); nd = getInt(prhs[3]); dom_ids = mxGetPr(prhs[4]); @@ -87,20 +80,15 @@ void onedimmethods(int nlhs, mxArray* plhs[], mexErrMsgTxt("wrong size for domain array"); } - ptrs = new int[sz]; - //writelog("allocated ptrs\n"); + std::vector ptrs(sz); for (size_t k = 0; k < sz; k++) { - // writelog("k = ...\n"); ptrs[k] = int(dom_ids[k]); } - //writelog("calling sim1D_new\n"); - indx = sim1D_new(sz, ptrs); - //writelog("deleting ptrs\n"); - delete[] ptrs; - //writelog("done\n"); + indx = sim1D_new(sz, &ptrs[0]); break; + } - // construct a new OutletRes1D instance + // construct a new OutletRes1D instance case -2: checkNArgs(3,nrhs); indx = outletres_new(); @@ -119,15 +107,11 @@ void onedimmethods(int nlhs, mxArray* plhs[], return; } - // methods - else if (job < 40) { - int k; switch (job) { - case 10: checkNArgs(3, nrhs); vv = domain_del(dom); @@ -226,9 +210,7 @@ void onedimmethods(int nlhs, mxArray* plhs[], } } - // set parameters - else { int iok = -1; double lower, upper, rtol, atol, *grid, *pos, *values, @@ -236,7 +218,7 @@ void onedimmethods(int nlhs, mxArray* plhs[], rdt, prune; size_t npts, np, nv; int comp, localPoint, idom, - loglevel, refine_grid, n, flag, itime, ns, *nsteps, icount, + loglevel, refine_grid, n, flag, itime, ns, icount, onoff, ss_age, ts_age; char* xstr, *fname, *id, *desc, *name; switch (job) { @@ -280,7 +262,6 @@ void onedimmethods(int nlhs, mxArray* plhs[], xstr = getString(prhs[3]); iok = bdry_setMoleFractions(dom, xstr); break; - case 63: checkNArgs(4, nrhs); p = getDouble(prhs[3]); @@ -304,7 +285,6 @@ void onedimmethods(int nlhs, mxArray* plhs[], flag = getInt(prhs[3]); iok = stflow_solveEnergyEqn(dom, flag); break; - case 100: checkNArgs(7, nrhs); idom = getInt(prhs[3]) - 1; @@ -353,8 +333,7 @@ void onedimmethods(int nlhs, mxArray* plhs[], slope = getDouble(prhs[5]); curve = getDouble(prhs[6]); prune = getDouble(prhs[7]); - iok = sim1D_setRefineCriteria(dom, idom, - ratio, slope, curve, prune); + iok = sim1D_setRefineCriteria(dom, idom, ratio, slope, curve, prune); break; case 107: iok = 0; @@ -387,17 +366,17 @@ void onedimmethods(int nlhs, mxArray* plhs[], id = getString(prhs[4]); iok = sim1D_restore(dom, fname, id); break; - case 112: + case 112: { tstep = getDouble(prhs[3]); ns = getInt(prhs[4]); dts = mxGetPr(prhs[5]); - nsteps = new int[ns]; + std::vector nsteps(ns); for (n = 0; n < ns; n++) { nsteps[n] = int(dts[n]); } - iok = sim1D_setTimeStep(dom, tstep, ns, nsteps); - delete[] nsteps; + iok = sim1D_setTimeStep(dom, tstep, ns, &nsteps[0]); break; + } case 113: checkNArgs(5, nrhs); rdt = getDouble(prhs[3]); @@ -410,11 +389,6 @@ void onedimmethods(int nlhs, mxArray* plhs[], ts_age = getInt(prhs[4]); iok = sim1D_setMaxJacAge(dom, ss_age, ts_age); break; - //case 200: - //iok = domain1D_clear(); - //iok = sim1D_clear(); - //break; - case 120: checkNArgs(4, nrhs); onoff = getInt(prhs[3]); diff --git a/src/matlab/phasemethods.cpp b/src/matlab/phasemethods.cpp index f7ea25008..47bcbe1f5 100644 --- a/src/matlab/phasemethods.cpp +++ b/src/matlab/phasemethods.cpp @@ -89,8 +89,7 @@ void phasemethods(int nlhs, mxArray* plhs[], input_buf = (char*)mxCalloc(buflen, sizeof(char)); status = mxGetString(prhs[3], input_buf, buflen); if (status != 0) - mexWarnMsgTxt("Not enough space. " - "String is truncated."); + mexWarnMsgTxt("Not enough space. " "String is truncated."); switch (mjob) { case 30: @@ -134,18 +133,18 @@ void phasemethods(int nlhs, mxArray* plhs[], vv = 1.0/phase_density(ph); break; case 10: - vv = (double) phase_nElements(ph); + vv = static_cast(phase_nElements(ph)); break; case 11: - vv = (double) phase_nSpecies(ph); + vv = static_cast(phase_nSpecies(ph)); break; case 12: input_buf = getString(prhs[3]); - vv = (double) phase_speciesIndex(ph, input_buf) + 1; + vv = static_cast(phase_speciesIndex(ph, input_buf)) + 1; break; case 13: input_buf = getString(prhs[3]); - vv = (double) phase_elementIndex(ph, input_buf) + 1; + vv = static_cast(phase_elementIndex(ph, input_buf)) + 1; break; case 14: k = getInt(prhs[3]); @@ -160,7 +159,7 @@ void phasemethods(int nlhs, mxArray* plhs[], ok = false; } if (ok) { - if (vv == DERR) { + if (vv == DERR || vv == -1 || vv == ERR) { reportError(); } plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); @@ -169,71 +168,62 @@ void phasemethods(int nlhs, mxArray* plhs[], return; } } - //ok = true; else if (job < 30) { - iok = 0; size_t nsp = phase_nSpecies(ph); - double* x = new double[nsp]; + std::vector x(nsp); switch (job) { case 20: - iok = phase_getMoleFractions(ph,nsp,x); + iok = phase_getMoleFractions(ph,nsp, &x[0]); break; case 21: - iok = phase_getMassFractions(ph,nsp,x); + iok = phase_getMassFractions(ph,nsp, &x[0]); break; case 22: - iok = phase_getMolecularWeights(ph,nsp,x); + iok = phase_getMolecularWeights(ph,nsp, &x[0]); break; default: ; } - plhs[0] = mxCreateNumericMatrix((mwSize) nsp,1, - mxDOUBLE_CLASS,mxREAL); + 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]; } - delete x; return; } else { for (size_t i = 0; i < nsp; i++) { h[i] = -999.99; } - delete x; mexErrMsgTxt("unknown attribute"); return; } } else if (job < 40) { - iok = 0; size_t nel = phase_nElements(ph); - double* x = new double[nel]; + std::vector x(nel); switch (job) { case 30: - iok = phase_getAtomicWeights(ph,nel,x); + iok = phase_getAtomicWeights(ph,nel, &x[0]); break; default: ; } - plhs[0] = mxCreateNumericMatrix((mwSize) nel,1, - mxDOUBLE_CLASS,mxREAL); + plhs[0] = mxCreateNumericMatrix((mwSize) nel, 1, mxDOUBLE_CLASS, mxREAL); double* h = mxGetPr(plhs[0]); if (iok >= 0) { for (size_t i = 0; i < nel; i++) { h[i] = x[i]; } - delete x; return; } else { for (size_t i = 0; i < nel; i++) { h[i] = -999.99; } - delete x; mexErrMsgTxt("unknown attribute"); return; } @@ -269,7 +259,6 @@ void phasemethods(int nlhs, mxArray* plhs[], plhs[0] = mxCreateString(output_buf); return; } else { - mexErrMsgTxt("error or unknown method."); reportError(); return; } diff --git a/src/matlab/reactormethods.cpp b/src/matlab/reactormethods.cpp index e1157bf4a..e2fe81309 100644 --- a/src/matlab/reactormethods.cpp +++ b/src/matlab/reactormethods.cpp @@ -36,7 +36,6 @@ void reactormethods(int nlhs, mxArray* plhs[], if (job < 20) { switch (job) { - case 1: iok = reactor_del(i); break; @@ -117,7 +116,7 @@ void reactormethods(int nlhs, mxArray* plhs[], plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); double* h = mxGetPr(plhs[0]); *h = r; - if (r == Undef) { + if (r == DERR) { reportError(); } return; diff --git a/src/matlab/reactornetmethods.cpp b/src/matlab/reactornetmethods.cpp index dba4097d6..2a8a8c8ba 100644 --- a/src/matlab/reactornetmethods.cpp +++ b/src/matlab/reactornetmethods.cpp @@ -100,7 +100,7 @@ void reactornetmethods(int nlhs, mxArray* plhs[], plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); double* h = mxGetPr(plhs[0]); *h = r; - if (r == Undef) { + if (r == DERR) { reportError(); } return; diff --git a/src/matlab/surfmethods.cpp b/src/matlab/surfmethods.cpp index d028a473b..e76658d69 100644 --- a/src/matlab/surfmethods.cpp +++ b/src/matlab/surfmethods.cpp @@ -7,10 +7,6 @@ using namespace std; -namespace Cantera -{ -void writelog(const std::string& s); -} using namespace Cantera; void surfmethods(int nlhs, mxArray* plhs[], @@ -69,15 +65,15 @@ void surfmethods(int nlhs, mxArray* plhs[], // return array parameters else if (job < 200) { nsp = phase_nSpecies(surf); - double* x = new double[nsp]; + std::vector x(nsp); switch (job) { case 101: checkNArgs(3,nrhs); - iok = surf_getcoverages(surf,x); + iok = surf_getcoverages(surf, &x[0]); break; case 103: - iok = surf_getconcentrations(surf,x); + iok = surf_getconcentrations(surf, &x[0]); break; default: ; @@ -89,13 +85,11 @@ void surfmethods(int nlhs, mxArray* plhs[], for (size_t i = 0; i < nsp; i++) { h[i] = x[i]; } - delete x; return; } else { for (size_t i = 0; i < nsp; i++) { h[i] = -999.99; } - delete x; reportError(); return; } diff --git a/src/matlab/thermomethods.cpp b/src/matlab/thermomethods.cpp index 44a7aeda5..d6d2a47ee 100644 --- a/src/matlab/thermomethods.cpp +++ b/src/matlab/thermomethods.cpp @@ -8,10 +8,6 @@ static void thermoset(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) { - - //if (nrhs != 4) { - // mexErrMsgTxt("wrong number of input parameters."); - //} int ierr = 0; int th = getInt(prhs[1]); int job = -getInt(prhs[2]); @@ -76,7 +72,7 @@ static void thermoset(int nlhs, mxArray* plhs[], // equilibrate else if (job == 50) { - char* xy = getString(prhs[3]); //int(*ptr); + char* xy = getString(prhs[3]); int solver = getInt(prhs[4]); double rtol = getDouble(prhs[5]); int maxsteps = getInt(prhs[6]); @@ -102,7 +98,6 @@ static void thermoget(int nlhs, mxArray* plhs[], int job = getInt(prhs[2]); if (job < 30) { - bool ok = true; switch (job) { case 0: @@ -191,46 +186,42 @@ static void thermoget(int nlhs, mxArray* plhs[], if (vv == DERR) { reportError(); } - plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); + plhs[0] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL); double* h = mxGetPr(plhs[0]); *h = vv; return; } } else if (job < 50) { - int iok = 0; size_t nsp = th_nSpecies(n); - double* x = new double[nsp]; + std::vector x(nsp); switch (job) { case 32: - iok = th_getEnthalpies_RT(n,nsp,x); + iok = th_getEnthalpies_RT(n, nsp, &x[0]); break; case 34: - iok = th_chemPotentials(n,nsp,x); + iok = th_chemPotentials(n, nsp, &x[0]); break; case 36: - iok = th_getEntropies_R(n,nsp,x); + iok = th_getEntropies_R(n, nsp, &x[0]); break; case 38: - iok = th_getCp_R(n,nsp,x); + iok = th_getCp_R(n, nsp, &x[0]); break; default: ; } - plhs[0] = mxCreateNumericMatrix((mwSize) nsp,1, - mxDOUBLE_CLASS,mxREAL); + 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]; } - delete x; return; } else { for (size_t i = 0; i < nsp; i++) { h[i] = -999.99; } - delete x; mexErrMsgTxt("unknown attribute"); return; } @@ -242,10 +233,8 @@ static void thermoget(int nlhs, mxArray* plhs[], } -void thermomethods(int nlhs, mxArray* plhs[], - int nrhs, const mxArray* prhs[]) +void thermomethods(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) { - int job = getInt(prhs[2]); if (job < 0) { thermoset(nlhs, plhs, nrhs, prhs); diff --git a/src/matlab/transportmethods.cpp b/src/matlab/transportmethods.cpp index a82f7ff07..1d483fe82 100644 --- a/src/matlab/transportmethods.cpp +++ b/src/matlab/transportmethods.cpp @@ -33,7 +33,6 @@ void transportmethods(int nlhs, mxArray* plhs[], if (job < 10) { - bool ok = true; switch (job) { case 0: diff --git a/src/matlab/wallmethods.cpp b/src/matlab/wallmethods.cpp index f5759f95c..5a56c2b6f 100644 --- a/src/matlab/wallmethods.cpp +++ b/src/matlab/wallmethods.cpp @@ -34,10 +34,8 @@ void wallmethods(int nlhs, mxArray* plhs[], } // options that do not return a value - if (job < 20) { switch (job) { - case 1: iok = wall_del(i); break; @@ -112,7 +110,7 @@ void wallmethods(int nlhs, mxArray* plhs[], plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); double* h = mxGetPr(plhs[0]); *h = r; - if (r == Undef) { + if (r == DERR) { reportError(); } return; diff --git a/src/matlab/xmlmethods.cpp b/src/matlab/xmlmethods.cpp index ac7c8a340..4fb8ed6f0 100644 --- a/src/matlab/xmlmethods.cpp +++ b/src/matlab/xmlmethods.cpp @@ -53,9 +53,7 @@ void xmlmethods(int nlhs, mxArray* plhs[], mexErrMsgTxt("Too many output arguments"); } - // options that do not return a value - if (job < 20) { switch (job) { case 0: @@ -135,7 +133,6 @@ void xmlmethods(int nlhs, mxArray* plhs[], } // options that return strings - char* v = (char*)mxCalloc(80, sizeof(char)); switch (job) { case 20: