PDE Model Boundary Conditions
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi Everyone,
I have a question regarding the matlab PDE Model Boundary Conditions.
Currently, I am working with a 2D mesh with all egdes being adiabatic.
Files are available to be downloaded here:
Thus,
applyBoundaryCondition(model,'neumann','Edge',1,'q',0,'g',0);%Bottom Edge
applyBoundaryCondition(model,'neumann','Edge',4,'q',0,'g',0);%Left Edge
applyBoundaryCondition(model,'neumann','Edge',2,'q',0,'g',0);%Right Edge
applyBoundaryCondition(model,'neumann','Edge',3,'q',0,'g',0);%Top Edge
However, I have a non-constant Boundary Condition on the Face of the mesh:
applyBoundaryCondition(model,'neumann','face',1,'q',0,'g',@myfun);

The code is here:
load('dat.mat')
load('Q(x,y,t).mat')
%%
Interptest(Q,dat)
%%
function Interptest(Q,dat)
%Variables:
for i=1:201
t0_{i,1} = i;
end
%
tglob=0;
tlist = [0;0.1;0.2;0.3];
framerate = 100; %Frequency in Hertz
x_width = 3.2e-2;
y_height = 3.2e-2;
xpix = 501;
rat = x_width./xpix;
freq = 0.01;
ypix = xpix;
x1 = linspace(0,x_width,xpix);
y1 = linspace(0,y_height,ypix);
tt_vec=linspace(0,2,201);
[XX1,YY1] = meshgrid(x1,y1);
[XX2,YY2] = meshgrid(linspace(0,x_width,xpix),linspace(0,y_height,ypix));
[XXorig, YYorig] = meshgrid(linspace(0,x_width,size(Q{5,1}{1,1},2))',linspace(0,y_height,size(Q{5,1}{1,1},1))');
[XX0, YY0] = meshgrid(linspace(0,x_width,size(dat.transftempK{1,1},2)),linspace(0,y_height,size(dat.transftempK{1, 1},1)));
[XX3, YY3,tt_vec] = meshgrid(linspace(0,x_width,size(dat.transftempK{1,1},2)),linspace(0,y_height,size(dat.transftempK{1, 1},1)),linspace(0,2,201));
Xvec0 = XX0(:);
Yvec0 = YY0(:);
XXorig_vec = XXorig(:);
YYorig_vec = YYorig(:);
Xvec1 = XX3(:);
Yvec1 = YY3(:);
ttvec1 = tt_vec(:);
% tt_vec=linspace(0,2,201);
Tu = 293.15;
Tb = 77.15;
Rho = 4.43*10^3;
thickness = 1.5/1000;
cvfunc = @(T) 413.5+0.4372.*T+1.443.*10.^-4.*T.^2;
Sigma = 5.670.*10.^-8;
lambdafunc = @(T) 2.369+1.316.*T.*10.^-2;
tglob=0;
for i=5:length(t0_)
sprintf('Dataset %i of %i',i,length(t0_))
model = createpde(3);
geo = [3, 4, 0, x_width, x_width, 0, 0, 0, y_height, y_height]';
sf = 'R1';
ns = [82 49]';
dl = decsg(geo,sf,ns);
geometryFromEdges(model,dl);
pdegplot(model,'Facelabels','on','EdgeLabels','on');
hmax = 1e-3;
mesh = generateMesh(model,'Hmax',hmax,'GeometricOrder','quadratic');
m = 0;
d = @(location,state) Rho.*cvfunc(state.u);
c = @(location,state) lambdafunc(state.u);
f = 0;
a = 0;
% x=@myfun;
applyBoundaryCondition(model,'neumann','Edge',1,'q',0,'g',0);%Bottom Edge
applyBoundaryCondition(model,'neumann','Edge',4,'q',0,'g',0);%Left Edge
applyBoundaryCondition(model,'neumann','Edge',2,'q',0,'g',0);%Right Edge
applyBoundaryCondition(model,'neumann','Edge',3,'q',0,'g',0);%Top Edge
applyBoundaryCondition(model,'neumann','face',1,'q',0,'g',@myfun);
specifyCoefficients(model,'m',m,...
'd',d,...
'c',c,...
'a',a,...
'f',f);
model.SolverOptions.ReportStatistics='on';
T0{i,1} = dat.transftempK{t0_{i,1},1};
Tvec0 = T0{i,1}(:);
T00 = griddata(Xvec0, Yvec0, Tvec0, model.Mesh.Nodes(1,:), model.Mesh.Nodes(2,:))';
dummyResult = createPDEResults(model,[T00,T00],0:1*10^-12:1*10^-12,'time-dependent');
setInitialConditions(model,dummyResult);
%Interpolation unchanged here!
tsel{i,1} = t0_{i,1}+tlist./freq;
tsel{i,1} = tsel{i,1};
disp('solve pde');
results{i,1} = solvepde(model,tlist);
for j=1:length(tlist)
sprintf('Sim %i of %i \n',j,size(tlist,1))
T_Sim_interp{i,1}{j,1} = rot90(flipud(griddata(results{i,1}.Mesh.Nodes(1,:)',results{i,1}.Mesh.Nodes(2,:)',results{i,1}.NodalSolution(:,j),XX1,YY1,'cubic')),-1);
end
end
function q = myfun(location,state)
if(tglob~=state.time)
tglob=state.time
end
q=0;
% q=interp3(Xvec1,Yvec1,ttvec1,state.u,location.x,location.y,state.time);
% disp(location.x);
% disp(location.y);
% disp(state.time);
end
end
Apparently, I have troubleshoot it and the myfun works when it is on the edges. It does not work when I place:
applyBoundaryCondition(model,'neumann','Face',1,'q',0,'g',@myfun);
Did I make a mistake regarding createpde(1) or should I work with a 3D model instead?
I greatly appreciate if anyone could help regarding this.
Best regards,
Justin
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu General PDEs finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!