Hey
I got great useful answers last time I asked so here I go again: As I run the code my value 'dt' doesn't change eventhough the condition 'if sum(F,j)-Fanvendt > 0.01*Fanvendt' is fulfilled – I've checked in the command window.
Thanks in advance.
%Debugging
clear clc %restarter alle kommandoer i Command window %alt køres ind med mm, N og MPa
% trinproces er 0,150 mm og stempeldiameteren er 110 mm
r = zeros(150,20); %preallocating = skrives for at lave hele matricen fra start, så det går hurtigere t = zeros(150,20); %; skrives for at matricen ikke skrives ud epsilontheta = zeros(150,20); epsilonn = zeros(150,20); epsilonr = zeros(150,20); den = zeros(150,20); det = zeros(150,20); der = zeros(150,20); epsilons = zeros(150,20); sigmas = zeros(150,20); sigman = 2*ones(150,20);%den første betingelse gør at sigman ikke må være 0 indledningsvis sigmar = zeros(150,20); k = zeros(150,20); l = zeros(150,20); A = zeros(150,20); F = zeros(150,20);
for i = 1:150 r0=110;%mm t0=1; %mm R=1.150; K=530; %N/mm^2 = MPa n=0.268; my=0.2;
for j =1:20 r(1,j)=r0-0.5*(j-1); r(i,1)=r0-1*(i-1); end %j = 1
t(1,1)=t0; t(i,1)=t(1,1); epsilonn(i,1)=0; epsilontheta(i,1)=0; epsilonr(i,1)=0; epsilons(i,1)=0; sigmas(i,1)=0; k(i,1)=0; l(i,1)=0; sigmar(i,1)=0; sigman(i,1)=0; F(i,1)=0;end j=2; i = 1; processtop = 0; dt = 0; zonestop = 0; processkift = 0;
while processkift == 0 %næste procestrin while processtop == 0 %kraftligevægtskriterie while zonestop == 0 %antal ringelementer i if j ~= 1 t(i,j)=t0+dt; %startantagelse af tykkelsen, dt ændrer sig if i ~=150 %tykkelsen i hvert procestrin er ens t(i+1,j)=t(i,j)+dt;
r(i+1, j) = sqrt((2*(r(i, j)^2*((t(i, j)+t(i+1, j))*(1/2))-(r(i, 1)^2-r(i+1, 1)^2)*t(i, 1)))/(t(i, j)+t(i+1, j))); end epsilonn(i,j)=log(t(i,j)/t0); epsilontheta(i,j)=log(r(i,j)/r(i,1)); epsilonr(i,j)= -(epsilonn(i,j) + epsilontheta(i,j)); den(i,j)=epsilonn(i,j) - epsilonn(i,j-1); det(i,j)=epsilontheta(i,j) - epsilontheta(i,j-1); der(i,j)=-(den(i,j)+det(i,j)); epsilons(i, j) = sqrt(R+1)*sqrt(R*(der(i,j)-det(i,j))^2+(der(i,j)-R*den(i,j))^2+(det(i, j)-R*den(i, j))^2)/(2*R+1); sigmas(i,j)= K*(epsilons(i,j))^n; k(i,j)= (sigmas(i,j)/epsilons(i,j))*((1+R)/(1+2*R))*(2*det(i,j)+den(i,j)); %k=(sigmatheta(i,j)-sigmar(i,j))
l(i,j)= (sigmas(i,j)/epsilons(i,j))*((1+R)/(1+2*R))*(den(i,j)*(1+R)+det(i,j)); %den(i,j) = 0
%l=(sigman(i,j)-sigmar(i,j))
sigmar(1,j) = 0; if i ~= 150 %for sigmar = 2:150
if j~=1 %er allerede defineret
sigmar(i+1, j) = (sigmar(i, j)+(1/2*(k(i+1, j)/r(i+1, j)+k(i, j)/r(i, j))+my*(l(i+1, j)+sigman(i, j))/t(i, j))*(r(i+1, j)-r(i, j)))/(1-my*(r(i+1, j)-r(i, j))/t(i, j)); end end end if j == 1 % der er et loop inden i loopet
sigman(i,1) = 0; else if i==1 sigman(1,j)= l(1,j); %ved i=1 er sigmar = 0
else sigman(i,j)=l(i,j)+sigmar(i,j); end end if j ~= 1 if sigman(i,j) >= 0 zonestop = 1 else i = i + 1; zonestop = 0; end end end %while zonestop == 0
if zonestop >= 1 Fanvendt = 2.8*10^4; %N
%if i ~= 150 %50 radier, men 49 ringelementer
for i=1:i-1 %alle ringelementer frem til radius r(i,j)
A(i,j)=((r(i,j))^2-(r(i+1,j))^2)*pi; F(i,j)= sqrt((sigman(i,j))^2)*A(i,j); end %end
if sum(F(:,j)) - Fanvendt > 0.01*Fanvendt %istedet for numerisk tegn
dt = dt + 0.01 zonestop = 0; %geninitialiserer zonestop
processtop = 0; i = 1; %starter forfra ved i = 1
else processtop = 1 end end % if zonestop >= 1
end %while processtop == 0
if processtop >= 1 j = j+1 %restarter alt undt. j
zonestop = 0; processtop = 0; i = 1; dt = 0; end if j > 20 processkift = 1 %terminerer alt
endend %while processkift = 0
Best Answer