Can I solve a system of nolinear parabolic PDE using PDE toolbox in MATLAB?

1 次查看(过去 30 天)
I have a system of two parabolic PDEs with c coefficient of second equation as a function of solution of both first and second equation. I defined c coefficient as a function handle, but getting error: Function handle specifying a coefficient must accept two input arguments and return one output argument.
My function handle is: function c = ccofficient(region,state)
Dref = 2.592e-5; % reference humidity diffucion coefficient in m^2/day alpha = 0.05; % represents Dh,min/Dh,max n = 10; % characterises spread of the drop in Dh U = 25; % activation energy of moisture diffusion process in kJ/mol Tref = 23; % Reference temperature at which Dh,ref measured te = 28; % hydration period of concrete in days hc = 0.75; % value of pore relative humidity at which Dh drops halfway between Dh,max and Dh,min. R = -0.03056; % gas constant in Joule/(mol^oC) t = state.time; n1 = 2; nr = numel(region.x); c = zeros(n1,nr); c(1,:) = k*ones(1,n1); c(2,:) = Dref*(alpha+(1-alpha)+(1+((1-state.u(:,2,t))/(1-hc)).^n))*exp(U/R*(1/Tref-1/(state.u(:,1,t))))... *0.3+(13/te).^0.5;
Kindly suggest me how to write function handle for this type of nonlinear parabolic system of PDE.
  3 个评论
Aditi
Aditi 2017-4-14
function cmatrix = ccoeffunction(region,state)
Dref = 2.592e-5; % reference humidity diffucion coefficient in m^2/day
alpha = 0.05; % represents Dh,min/Dh,max
n = 10; % characterises spread of the drop in Dh
U = 25; % activation energy of moisture diffusion process in kJ/mol
Bh = 0.02592; % Surface humidity transfer coefficient
Tref = 23; % Reference temperature at which Dh,ref measured
te = 28; % hydration period of concrete in days
hc = 0.75; % value of pore relative humidity at which Dh drops halfway between Dh,max and Dh,min.
R = -0.03056; % gas constant in Joule/(mol^oC)
n1 = 2;
nr = numel(region.x);
cmatrix = zeros(n1,nr);
cmatrix(1,:) = k*ones(1,nr);
cmatrix(2,:) = Dref*(alpha+(1-alpha)+(1+((1-state.u(:,2))/(1-hc)).^n))*exp(U/R*(1/Tref-1/(state.u(:,1))))...
*0.3+(13/te).^0.5;
This is my code for the function handle to define coefficient c. I have rectified the initial code by eliminating t = state.time. and now getting error in line nr = numel(region.x).
Aditi
Aditi 2017-4-15
function cmatrix = ccoeffunction(region,state)
n1 = 9;
nr = numel(region.x);
cmatrix = zeros(n1,nr);
cmatrix(1,:) = ones(1,nr);
cmatrix(2,:) = 2*ones(1,nr);
cmatrix(3,:) = 8*ones(1,nr);
cmatrix(4,:) = 1+region.x.^2 + region.y.^2;
cmatrix(5,:) = state.u(2,:)./(1 + state.u(1,:).^2 + state.u(3,:).^2);
cmatrix(6,:) = cmatrix(4,:);
cmatrix(7,:) = 5*region.subdomain;
cmatrix(8,:) = -ones(1,nr);
cmatrix(9,:) = cmatrix(7,:);
I created a function for c coefficient using the above example given in MATLAB documentation.
My problem is a system of parabolic equations. I want to make sure that parabolic non linear system of PDE can be solved using PDE toolbox in MATLAB.
However when I write the state.u as mentioned above error shows up:
Function handle specifying a coefficient must accept two input arguments and return one output argument.

请先登录,再进行评论。

采纳的回答

Ravi Kumar
Ravi Kumar 2017-4-14
Hi Aditi,
This error generally indicates that the function for c, ccoefficient, did not return a output value. This could be due to a syntax error in the function. You can insert a breakpoint in the function and step through the code to identify the line containing error.
Regards,
Ravi
  4 个评论
Aditi
Aditi 2017-4-15
>> ccoeffunction
Not enough input arguments.
Error in ccoeffunction (line 32)
nr = numel(region.subdomain);
Aditi
Aditi 2017-4-15
cmatrix(2,:) = Dref*(alpha+(1-alpha)+(1+((1-state.u(:,2))/(1-hc)).^n))*exp(U/R*(1/Tref-1/(state.u(:,1))))...
*0.3+(13/te).^0.5;
I was able to resolve the error as mentioned in my previous comment
nr = numel(region.subdomain);
Kindly guide me how to write the state.u in cmatrix(2,:) above, as I am still getting error
Error using pde.CoefficientAssignment/checkCoefFcnHdlArgCounts (line 531) Function handle specifying a coefficient must accept two input arguments and return one output argument.
Error in pde.CoefficientAssignment/checkFcnHdlArgCounts (line 267) self.checkCoefFcnHdlArgCounts(self.c, systemsize, ndims);
Error in pde.CoefficientAssignment (line 105) obj.checkFcnHdlArgCounts(systemsize, numdims);
Error in pde.PDEModel/specifyCoefficients (line 121) coef = pde.CoefficientAssignment(coefcont,argsToPass{:});
Error in combinedll (line 48) specifyCoefficients(pdem,'m',0,'c',@ccoeffunction,'a',0,'f',f,'d',d);
Note here, my result u is time varying, and I am solving two PDEs.

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by