Additional Code
This commit is contained in:
parent
9cb746341c
commit
1c550bd2e5
1 changed files with 106 additions and 0 deletions
106
Project/AdditionalPlotCodes.txt
Normal file
106
Project/AdditionalPlotCodes.txt
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
%% TASK 5: 3D plot and video
|
||||||
|
% Nodes and solution from Task 5
|
||||||
|
r = nodes(1,:)'; % r-coordinate
|
||||||
|
z = nodes(2,:)'; % z-coordinate
|
||||||
|
u_sol = u; % solution vector
|
||||||
|
|
||||||
|
% Create a fine phi grid for rotation
|
||||||
|
phi = linspace(0, 2*pi, 50);
|
||||||
|
|
||||||
|
% Create 3D coordinates
|
||||||
|
[Phi, R] = meshgrid(phi, r);
|
||||||
|
Z = repmat(z, 1, length(phi));
|
||||||
|
X = R .* cos(Phi);
|
||||||
|
Y = R .* sin(Phi);
|
||||||
|
|
||||||
|
% Interpolate u onto this grid (simple nearest neighbor)
|
||||||
|
U = repmat(u_sol, 1, length(phi));
|
||||||
|
|
||||||
|
% Plot
|
||||||
|
figure
|
||||||
|
surf(X, Y, Z, U, 'EdgeColor','none');
|
||||||
|
axis equal
|
||||||
|
xlabel('x'); ylabel('y'); zlabel('z');
|
||||||
|
title('Axisymmetric 3D solution');
|
||||||
|
colorbar
|
||||||
|
view(30,30)
|
||||||
|
|
||||||
|
% Assume you already have the 3D plot (X,Y,Z,U)
|
||||||
|
figure
|
||||||
|
h = surf(X,Y,Z,U, 'EdgeColor','none');
|
||||||
|
axis equal
|
||||||
|
colorbar
|
||||||
|
xlabel('x'); ylabel('y'); zlabel('z');
|
||||||
|
title('Axisymmetric 3D solution');
|
||||||
|
|
||||||
|
v = VideoWriter('mug_rotation.avi'); % create video file
|
||||||
|
open(v);
|
||||||
|
|
||||||
|
for angle = 0:2:360
|
||||||
|
view(angle, 30); % rotate camera around z-axis
|
||||||
|
drawnow;
|
||||||
|
frame = getframe(gcf); % capture current frame
|
||||||
|
writeVideo(v, frame);
|
||||||
|
end
|
||||||
|
close(v);
|
||||||
|
|
||||||
|
|
||||||
|
%% TASK 8: 9 snapshot of the solution over time:
|
||||||
|
|
||||||
|
% --- Snapshot times (seconds)
|
||||||
|
snapshot_times = [0 50 100 150 200 250 300 350 400];
|
||||||
|
snapshot_steps = round(snapshot_times / tau) + 1;
|
||||||
|
|
||||||
|
Nsnap = length(snapshot_steps);
|
||||||
|
snapshots = zeros(Nnodes, Nsnap);
|
||||||
|
|
||||||
|
% Initial condition (t = 0)
|
||||||
|
snapshots(:,1) = u0;
|
||||||
|
snapshot_counter = 2;
|
||||||
|
|
||||||
|
% --- Time stepping parameters
|
||||||
|
T_end = snapshot_times(end);
|
||||||
|
Nt = ceil(T_end / tau);
|
||||||
|
|
||||||
|
% --- System matrix
|
||||||
|
A = (1/tau)*M + K;
|
||||||
|
|
||||||
|
% LU factorization (constant matrix)
|
||||||
|
[L,U,P,Q] = lu(A);
|
||||||
|
|
||||||
|
% --- Initialize solution
|
||||||
|
u = u0;
|
||||||
|
|
||||||
|
% --- Time stepping loop
|
||||||
|
for k = 1:Nt
|
||||||
|
% Right-hand side
|
||||||
|
b = (1/tau)*M*u + F;
|
||||||
|
|
||||||
|
% Solve system
|
||||||
|
u_next = Q * (U \ (L \ (P * b)));
|
||||||
|
u = u_next;
|
||||||
|
|
||||||
|
% Store snapshots at requested times
|
||||||
|
if snapshot_counter <= Nsnap
|
||||||
|
if k+1 == snapshot_steps(snapshot_counter)
|
||||||
|
snapshots(:,snapshot_counter) = u;
|
||||||
|
snapshot_counter = snapshot_counter + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
%% --- 3x3 grid plot (overview figure)
|
||||||
|
figure(20)
|
||||||
|
for i = 1:Nsnap
|
||||||
|
subplot(3,3,i)
|
||||||
|
pdeplot(model, 'XYData', snapshots(:,i), 'Mesh','off');
|
||||||
|
axis equal
|
||||||
|
title(['T = ', num2str(snapshot_times(i)), ' s'])
|
||||||
|
end
|
||||||
|
colorbar
|
||||||
|
sgtitle('Transient temperature evolution')
|
||||||
|
|
||||||
|
% Save combined figure
|
||||||
|
saveas(gcf, 'Task8_Transient_3x3.png');
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue