/** * @file ctmethods.cpp * * The interface between the MATLAB environment and the C++ Cantera * kernel is through a single MEX file. This is top-level driver for * the MEX file. * * This file handles the methods of all Cantera MATLAB classes. The * class is indicated by the first parameter in the call from MATLAB. */ #include #include #include "mex.h" #include "ctmatutils.h" #include "mllogger.h" const int NO_CLASS = 0; const int XML_CLASS = 10; const int THERMO_CLASS = 20; const int PHASE_CLASS = 30; const int KINETICS_CLASS = 40; const int TRANSPORT_CLASS = 50; const int REACTOR_CLASS = 60; const int REACTORNET_CLASS = 65; 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; const int MIXTURE_CLASS = 120; void ctfunctions( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void xmlmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void thermomethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void phasemethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void mixturemethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void surfmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void kineticsmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void transportmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void reactormethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void reactornetmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void wallmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void flowdevicemethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void onedimmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); void funcmethods( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ); static Cantera::ML_Logger* _logger = 0; void initLogger() { if (!_logger) { _logger = new Cantera::ML_Logger; // Call the DLL program to set the logger void * vl = (void *) _logger; int retn = setLogWriter(vl); } } extern "C" { void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { // mexPrintf("Number of lhs = %d\n", nlhs); // mexPrintf("number of rhs = %d\n", nrhs); // create a log writer for error messages if this is the // first MATLAB function call initLogger(); // flag specifying the class int iclass = getInt(prhs[0]); // Hand off to the appropriate routine, based on the // value of the first parameter switch (iclass) { case NO_CLASS: ctfunctions(nlhs, plhs, nrhs, prhs); break; case XML_CLASS: xmlmethods(nlhs, plhs, nrhs, prhs); break; case THERMO_CLASS: thermomethods(nlhs, plhs, nrhs, prhs); break; case PHASE_CLASS: phasemethods(nlhs, plhs, nrhs, prhs); break; case MIXTURE_CLASS: mixturemethods(nlhs, plhs, nrhs, prhs); break; case KINETICS_CLASS: kineticsmethods(nlhs, plhs, nrhs, prhs); break; case TRANSPORT_CLASS: transportmethods(nlhs, plhs, nrhs, prhs); break; case REACTOR_CLASS: reactormethods(nlhs, plhs, nrhs, prhs); break; case REACTORNET_CLASS: reactornetmethods(nlhs, plhs, nrhs, prhs); break; case WALL_CLASS: wallmethods(nlhs, plhs, nrhs, prhs); break; case FLOWDEVICE_CLASS: flowdevicemethods(nlhs, plhs, nrhs, prhs); break; case ONEDIM_CLASS: 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: mexPrintf("iclass = %d",iclass); //mexErrMsgTxt("unknown class"); } } }