From cfccafb9389b99d15ed03516813997b180d0cab4 Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Sun, 22 Feb 2004 17:03:56 +0000 Subject: [PATCH] *** empty log message *** --- Cantera/matlab/Makefile.in | 8 ++- Cantera/matlab/cantera/private/ctmethods.cpp | 9 ++-- .../matlab/cantera/private/funcmethods.cpp | 53 +++++++++++++++++++ Cantera/matlab/setup_matlab.py.in | 1 + Cantera/matlab/setup_winmatlab.py | 1 + 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 Cantera/matlab/cantera/private/funcmethods.cpp diff --git a/Cantera/matlab/Makefile.in b/Cantera/matlab/Makefile.in index d6ec492cd..8e7e676f6 100644 --- a/Cantera/matlab/Makefile.in +++ b/Cantera/matlab/Makefile.in @@ -21,7 +21,8 @@ SRCS = cantera/private/ctmethods.cpp \ cantera/private/wallmethods.cpp \ cantera/private/flowdevicemethods.cpp \ cantera/private/onedimmethods.cpp \ - cantera/private/surfmethods.cpp + cantera/private/surfmethods.cpp \ + cantera/private/funcmethods.cpp CANTERA_LIBDIR=@buildlib@ os_is_win=@OS_IS_WIN@ @@ -61,6 +62,7 @@ install: @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/@Reactor/private @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/@Wall/private @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/@FlowDevice/private + @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/@Func/private @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/1D @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/1D/@Domain1D/private @INSTALL@ -d @prefix@/matlab/toolbox/cantera/cantera/1D/@Stack/private @@ -100,6 +102,10 @@ install: @prefix@/matlab/toolbox/cantera/cantera/@FlowDevice cd cantera/@FlowDevice/private; @INSTALL@ *.m \ @prefix@/matlab/toolbox/cantera/cantera/@FlowDevice/private + cd cantera/@Func; @INSTALL@ *.m \ + @prefix@/matlab/toolbox/cantera/cantera/@Func + cd cantera/@Func/private; @INSTALL@ *.m \ + @prefix@/matlab/toolbox/cantera/cantera/@Func/private cd cantera/1D; @INSTALL@ *.m \ @prefix@/matlab/toolbox/cantera/cantera/1D cd cantera/1D/@Domain1D; @INSTALL@ *.m \ diff --git a/Cantera/matlab/cantera/private/ctmethods.cpp b/Cantera/matlab/cantera/private/ctmethods.cpp index 34ed18ec1..f4993d176 100644 --- a/Cantera/matlab/cantera/private/ctmethods.cpp +++ b/Cantera/matlab/cantera/private/ctmethods.cpp @@ -28,6 +28,7 @@ const int WALL_CLASS = 70; const int FLOWDEVICE_CLASS = 80; const int ONEDIM_CLASS = 90; const int SURF_CLASS = 100; +const int FUNC_CLASS = 110; void ctfunctions( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); @@ -62,6 +63,9 @@ void flowdevicemethods( int nlhs, mxArray *plhs[], int nrhs, void onedimmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); +void funcmethods( int nlhs, mxArray *plhs[], int nrhs, + const mxArray *prhs[] ); + extern "C" { @@ -72,9 +76,6 @@ extern "C" { // flag specifying the class int iclass = getInt(prhs[0]); - // specifies that function writelog should write to MATLAB - //Cantera::setMatlabMode(true); - // Hand off to the appropriate routine, based on the // value of the first parameter switch (iclass) { @@ -100,6 +101,8 @@ extern "C" { onedimmethods(nlhs, plhs, nrhs, prhs); break; case SURF_CLASS: surfmethods(nlhs, plhs, nrhs, prhs); break; + case FUNC_CLASS: + funcmethods(nlhs, plhs, nrhs, prhs); break; default: mexErrMsgTxt("unknown class"); } diff --git a/Cantera/matlab/cantera/private/funcmethods.cpp b/Cantera/matlab/cantera/private/funcmethods.cpp new file mode 100644 index 000000000..2f8e03c97 --- /dev/null +++ b/Cantera/matlab/cantera/private/funcmethods.cpp @@ -0,0 +1,53 @@ + +#include "mex.h" +#include "ctmatutils.h" +#include "../../../clib/src/ctfunc.h" + + +void funcmethods( int nlhs, mxArray *plhs[], + int nrhs, const mxArray *prhs[] ) +{ + int job = getInt(prhs[1]); + int nn; + + // constructor + if (job == 0) { + int type = getInt(prhs[2]); + int n = getInt(prhs[3]); + double* ptr = mxGetPr(prhs[4]); + int msize = mxGetM(prhs[4]); + int nsize = mxGetN(prhs[4]); + int lenp = msize*nsize; + nn = func_new(type, n, lenp, ptr); + plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); + double *h = mxGetPr(plhs[0]); + *h = double(nn); + if (nn < 0) reportError(); + return; + } + + else { + int nn = 0; + double t; + double v; + int i = getInt(prhs[2]); + if (job == 1) { + nn = func_del(int i); + if (nn < 0) reportError(); + v = double(nn); + } + else if (job == 2) { + t = getDouble(prhs[3]); + v = func_value(i, t); + if (v == Undef) reportError(); + } + else { + mexErrMsgTxt("unknown job parameter"); + } + plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL); + double *h = mxGetPr(plhs[0]); + *h = v; + return; + } +} + diff --git a/Cantera/matlab/setup_matlab.py.in b/Cantera/matlab/setup_matlab.py.in index f4c460531..88adf37fc 100644 --- a/Cantera/matlab/setup_matlab.py.in +++ b/Cantera/matlab/setup_matlab.py.in @@ -18,6 +18,7 @@ mex private/ctmethods.cpp private/ctfunctions.cpp ... private/thermomethods.cpp private/kineticsmethods.cpp ... private/transportmethods.cpp private/reactormethods.cpp ... private/wallmethods.cpp private/flowdevicemethods.cpp ... + prinvate/funcmethods.cpp ... private/onedimmethods.cpp private/surfmethods.cpp private/write.cpp ... """+'-I'+incdir+' -L'+libdir+' '+libs+'\n'+"""disp('done.'); """) diff --git a/Cantera/matlab/setup_winmatlab.py b/Cantera/matlab/setup_winmatlab.py index c7059a23a..819cfc16b 100644 --- a/Cantera/matlab/setup_winmatlab.py +++ b/Cantera/matlab/setup_winmatlab.py @@ -21,6 +21,7 @@ mex -I"""+incdir+""" private/ctmethods.cpp private/ctfunctions.cpp ... private/thermomethods.cpp private/kineticsmethods.cpp ... private/transportmethods.cpp private/reactormethods.cpp ... private/wallmethods.cpp private/flowdevicemethods.cpp ... + private/funcmethods.cpp ... private/onedimmethods.cpp private/surfmethods.cpp private/write.cpp ... """) s = ''