cantera/interfaces/matlab/toolbox/@Func/Func.m

74 lines
2 KiB
Matlab

function x = Func(typ, n, p)
%
% Func - a class for functors.
%
% A functor is an object that behaves like a function. Cantera
% defines a set of functors to use to create arbitrary functions to
% specify things like heat fluxes, piston speeds, etc., in reactor
% network simulations. Of course, they can be used for other things
% too.
%
% The main feature of a functor class is that it overloads the '()'
% operator to evaluate the function. For example, suppose object
% 'f' is a functor that evaluates the polynomial '2x^2 - 3x +
% 1'. Then writing 'f(2)' would cause the method that evaluates the
% function to be invoked, and would pass it the argument '2'. The
% return value would of course be 3.
%
% The types of functors you can create in Cantera are these:
% 1. A polynomial
% 2. A Fourier series
% 3. A sum of Arrhenius terms
% 4. A Gaussian.
% You can also create composite functors by adding, multiplying, or
% dividing these basic functors, or other composite functors.
%
% Note: this MATLAB class shadows the underlying C++ Cantera class
% "Func1". See the Cantera C++ documentation for more details.
%
if ~isa(typ, 'char')
error('Function type must be a string')
end
x.f1 = 0;
x.f2 = 0;
x.coeffs = 0;
itype = -1;
if strcmp(typ, 'polynomial')
itype = 2;
elseif strcmp(typ,'fourier')
itype = 1;
elseif strcmp(typ,'arrhenius')
itype = 3;
elseif strcmp(typ,'gaussian')
itype = 4;
end
if itype > 0
x.coeffs = p;
x.index = funcmethods(0,itype,n,p);
elseif strcmp(typ,'periodic')
itype = 50;
x.f1 = n;
x.coeffs = p;
x.index = funcmethods(0,itype,n.index,p);
else
if strcmp(typ,'sum')
itype = 20;
elseif strcmp(typ,'diff')
itype = 25;
elseif strcmp(typ,'prod')
itype = 30;
elseif strcmp(typ,'ratio')
itype = 40;
elseif strcmp(typ,'composite')
itype = 60;
end
x.f1 = n;
x.f2 = p;
x.index = funcmethods(0,itype,n.index,p.index);
end
x.typ = typ;
x = class(x,'Func');