필터 지우기
필터 지우기

Parabolic solver of PDE and coefficient in function form.

조회 수: 1 (최근 30일)
Pavel M
Pavel M 2019년 6월 2일
편집: Pavel M 2019년 6월 4일
I want to solve non-stationary parabolic equation dut−∇·(cu)+au=f , where a=f(u) , but Matlab give out such errors:
Undefined function or variable 'u'.
Error in MoePDE (line 17)
u=parabolic(u0,tlist,b,p,e,t,c,acoeff(p,t,u,tlist),f,d);
where
function coeff = acoeff(p,t,u,time)
% Triangle point indices
it1 = t(1,:);
it2 = t(2,:);
it3 = t(3,:);
% Find centroids of triangles
xpts = (p(1,it1) + p(1,it2) + p(1,it3))/3;
ypts = (p(2,it1) + p(2,it2) + p(2,it3))/3;
uintrp = pdeintrp(p,t,u); % Interpolated values at centroids
A1=-1.0174E-10; A2=2.10708E-10; x0=423976; dx=873999.05251;
Eps1=6.8*8.85e-12;Eps2=22.6*8.85e-12;h=0.002;
coeff=appr2(uintrp,A2,A1,x0,dx,h)/Eps1;
end
and
function v=appr2(u,A2,A1,x0,dx,h)
v = A2 + (A1-A2)./(1 + exp((u-x0)/dx));
end
full code:
vs=1e-12;
c=(-vs*h)/Eps1;
f=0;
d=1;
[p, e, t] = initmesh(g, 'Hmax', 0.08);
pdemesh(p,e,t); axis equal
n=200;
u0=1600;
tlist=linspace(0,5,260);
u=parabolic(u0,tlist,b,p,e,t,c,acoeff(p,t,u,tlist),f,d);
pdesurf(p,t,u); grid on;
boundary conditions are u=0 on each edge and geometry model(square 1x1) i have export from PDE TOOL.
If I use
u=parabolic(u0,tlist,b,p,e,t,c,@acoeff,f,d);
then result of 'a' will be constant, am i right? (i just build two plots: 1st with a=0.29 and 2nd like@acoeff, and they were same), but i want that a is variable coefficient which varies during the execution of the solver.
Function coefficient 'a' is calculated as written in Documentation:
Calculate Coefficients in Function FormX- and Y-Values
The x- and y-values of the centroid of a triangle t are the mean values of the entries of the points p in t. To get row vectors xpts and ypts containing the mean values:
% Triangle point indices
it1 = t(1,:);
it2 = t(2,:);
it3 = t(3,:);
% Find centroids of triangles
xpts = (p(1,it1) + p(1,it2) + p(1,it3))/3;
ypts = (p(2,it1) + p(2,it2) + p(2,it3))/3;
Interpolated u
The pdeintrp function linearly interpolates the values of u at the centroids of t, based on the values at the points p.
uintrp = pdeintrp(p,t,u); % Interpolated values at centroids
The output uintrp is a row vector with the same number of columns as t. Use uintrp as the solution value in your coefficient calculations.
____________________________________
Thanks in advance for your help
  댓글 수: 12
Torsten
Torsten 2019년 6월 4일
Check which function files MATLAB uses on execution.
It can't happen that MATLAB uses
v = A2+(A1-A2)./(1+exp((U-x0)/dx))
to calculate v if it states that there is an error in the line
v = A2 + (A1-A2)/(1 + exp((U-x0)/dx))
(except for the case that this line appears more than once in your code).
Pavel M
Pavel M 2019년 6월 4일
편집: Pavel M 2019년 6월 4일
Maybe it happen because of i use ''function in function''?
function coeff = acoeff(p,t,u,time)
uintrp = pdeintrp(p,t,u); % Interpolated values at centroids
A1=-1.0174E-10;
A2=2.10708E-10;
x0=423976;
dx=873999.05251;
Eps1=6.8*8.85e-12;
% Eps2=22.6*8.85e-12;
h=0.002;
coeff=appr2(uintrp,A2,A1,x0,dx,h)./Eps1;
end

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Geometry and Mesh에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by