Lack of Boundary Conditions to solve PDE (using pdepe function)

4 次查看(过去 30 天)
Hello,
I'm simulating the internal thermal and chemical dynamics of a fuel cell, using pdepe function (which is new to me). There are plenty of variables ( u1, u2, ..., un ) to be solved. However, I find that for each variable ui added, pdepe asks for boundary conditions (left and right) of ui, which I don't have sometimes.
For a simplified example, I don't know how to give boundary conditions of u2 for the following problem:
Its code is here (modified from MATLAB's example of pdepe):
function pde_example
m = 0;
x = linspace(0,1,20);
t = linspace(0,2,20);
sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
% Extract the first solution component as u1, u2.
u1 = sol(:,:,1);
u2 = sol(:,:,2);
% A surface plot of u1.
figure(1)
surf(x,t,u1)
title('Solution of u1')
xlabel('Distance x')
ylabel('Time t')
% A solution profile of u1 at t=2.
figure(2)
plot(x,u1(end,:))
title('Solution of u1 at t = 2')
xlabel('Distance x')
ylabel('u1(x,2)')
% A surface plot of u2.
figure(3)
surf(x,t,u2)
title('Solution of u2.')
xlabel('Distance x')
ylabel('Time t')
% A solution profile of u2 at t=2.
figure(4)
plot(x,u2(end,:))
title('Solution of u2 at t = 2')
xlabel('Distance x')
ylabel('u2(x,2)')
% ----------------------------*PDE part*----------------------------------
function [c,f,s] = pdex1pde(x,t,u,DuDx)
c = [pi^2;0];
f = [DuDx(1);0];
s = [0;u(2)-DuDx(1)];
% -----------------------------*IC part*---------------------------------
function u0 = pdex1ic(x)
u0 = [sin(pi*x);pi*cos(pi*x)];
% ----------------------------*BC part*----------------------------------
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
pl = [ul(1); ul(2)-pi*exp(-t)];
ql = [0;0];
pr = [pi*exp(-t); ur(2)+pi*exp(-t)];
qr = [1;0];
It seems that this code can get the appropriate solution of u2 only if boundary conditions of u2 is given (i.e. ul(2)-pi*exp(-t) and ur(2)+pi*exp(-t)), which is obtained manually. If it's true, it will be a disaster for my simulation. Or am I wrong? How to get the appropriate solutions without manual pre-calculation? Thanks a lot!
  2 个评论
Xuetao Xing
Xuetao Xing 2017-6-18
编辑:Xuetao Xing 2017-6-18
In my fuel cell case, it is like: (T-temperature, U-voltage, I-current) (DIDx is current density)
Torsten
Torsten 2017-6-19
No way to solve this system using "pdepe".
Discretize the first and second equation in space and use ODE15S to solve for T.
The profile for I can be obtained directly in each time step:
dU/dx = 0 gives U=constant. To solve U = f2(dI/dx,T) for I, you will need one boundary condition for I (either at x=0 or x=1). Now if T is given, you can use forward or backward differencing (depending on where the boundary condition for I is given) to solve for I.
Best wishes
Torsten.

请先登录,再进行评论。

回答(1 个)

Bill Greene
Bill Greene 2017-6-19
In your original code, set your boundary condition function to this:
pl = [ul(1); 0];
ql = [0;1];
pr = [pi*exp(-t); 0];
qr = [1;1];
Since f in your second PDE is zero, this boundary condition doesn't affect the solution but it does satisfy pdepe's requirement for a BC at both ends. This "trick" can often be used to get good solutions from pdepe when one or more of the PDE is only first order.

Community Treasure Hunt

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

Start Hunting!