use of pdepe for a space-dependent diffusivity
1 view (last 30 days)
Show older comments
Giuseppe Pontrelli
on 29 May 2024
Commented: Giuseppe Pontrelli
on 29 May 2024
I have a space-dependent heat equation
Dc/dt = d/dx (D(x) dc/dx)
where the function D(x) is not defined as a function, but a position-dependent
vector of (n) points : diff
The vector diff has the same length of x, so I have x(i) and diff(i), i=1,…,n
How can I implement pdepe?
cb = pdepe(m,@heatcyl,@heatic,@heatbc,x,t); % run solver
function [c,f,s] = heatcyl(x,t,u,dudx) % diffusion equation equation
c = 1;
f = dudx*diff; ???? <<<<<<<<< not sure about that, since diff is a vector
s = 0;
end
function u0 = heatic(x) % initial condition
u0=1;
end
function [pl,ql,pr,qr] = heatbc(xl,ul,xr,ur,t) %BCs
global diff n
pl=0;
ql=1;
pr=ur;
qr=0;
end
Thank you!
0 Comments
Accepted Answer
Torsten
on 29 May 2024
Edited: Torsten
on 29 May 2024
First: Don't name the vector "diff" since "diff" is an internal MATLAB function. Name it D, e.g.
Second: To get the correct value of D, use
f = interp1(X,D,x)*dudx;
where X is the coordinate vector to which the D-values belong.
You can pass both to your function by using
cb = pdepe(m,@(x,t,u,dudx)heatcyl(x,t,u,dudx,X,D),@heatic,@heatbc,x,t); % run solver
...
function [c,f,s] = heatcyl(x,t,u,dudx,X,D) % diffusion equation equation
c = 1;
f = interp1(X,D,x)*dudx;
s = 0;
end
More Answers (0)
See Also
Categories
Find more on Geometry and Mesh in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!