LisaPizzoExercises/Project/CalculateLaplace_mult.m
2026-01-27 09:48:52 +01:00

41 lines
1,019 B
Matlab

function [K, F] = CalculateLaplace_mult(model, lambda_wall, lambda_fluid, lambda_air)
mesh = model.Mesh;
nodes = mesh.Nodes;
elements = mesh.Elements;
Nnodes = size(nodes,2);
Nelems = size(elements,2);
K = sparse(Nnodes, Nnodes);
F = zeros(Nnodes,1);
regions = zeros(Nelems,1);
regions(findElements(mesh,'region','Face',1)) = 1;
regions(findElements(mesh,'region','Face',2)) = 2;
regions(findElements(mesh,'region','Face',3)) = 3;
for e = 1:Nelems
vert = elements(:,e);
x = nodes(1,vert);
y = nodes(2,vert);
Ae = polyarea(x,y);
b = [y(2)-y(3); y(3)-y(1); y(1)-y(2)];
c = [x(3)-x(2); x(1)-x(3); x(2)-x(1)];
% conductivity by material
switch regions(e)
case 1
lambda = lambda_wall;
case 2
lambda = lambda_fluid;
case 3
lambda = lambda_air;
otherwise
error('Element %d has no material assignment', e);
end
Ke = (lambda/(4*Ae)) * (b*b.' + c*c.');
K(vert,vert) = K(vert,vert) + Ke;
end
end