continue calc with pre result from loop
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi, i want that after elseif (now only p_Z1(k)=100000) calculate my p_Z1(k) with the last result of elseif (p_Z1(k)=p_Z1(k-1)+dp_Z1(k-1);) for p_Umg that its calculate p_Z1(k)=p_Umg(--> should be last result of p_Z1 in elseif loop)/((V_Z1(k)/V_max)^kappa);
How can i do that?
How can i improve my code, because if i use more than 100 for ainput my computer calculate long time und sometimes give error because of program space.
Thank you in advance!
if true
ainput=input(['\n\n Anzahl Arbeitsspiele']);
kolbenwegmax=2*pi*0.057;
b_Z1=0.03;
h_Z1=0.03;
A_kolben=b_Z1*h_Z1;
V_max=kolbenwegmax*A_kolben;
p_Umg=101325; %Umgebungsdruck in pascal
T_Umg=293.75; %Umgebungstemperatur in Kelvin
kappa=1.4;
c_p=1005; %
c_v=718; %
R=287; %
T_w=50; %50 Kelvin ist T_Wand erhöht
VE_Z1_offen=330; %Ventil Zylinder 1->2 auf
VE_Z1_zu=350; %Ventil Zylinder 1 zu
A_VE1=0.00005; % Ventilquerschnitt in m^2
dt=1/(6*2400*100); % dt=1/6n * 100 für 1/100°KW
if isempty(ainput)
ainput=10;
end
alphai=0:0.01:(ainput*360);
kw = zeros(size(alphai));
for k = 1:numel(alphai)
if alphai(k)>360
kw_ungerundet=alphai(k)/360;
kw(k)=alphai(k)-(floor(kw_ungerundet)*360);
VE_Z1_o(k)=VE_Z1_offen+VE_Z1_offen*(floor(kw_ungerundet));
VE_Z1_z(k)=VE_Z1_zu+VE_Z1_zu*(floor(kw_ungerundet));
else
kw(k)=alphai(k);
VE_Z1_o(k)=VE_Z1_offen;
VE_Z1_z(k)=VE_Z1_zu;
end
s_k(k)=kolbenwegmax*(kw(k)/360); %Kolbenweg
if k > 32001
s_k2(k)=(kolbenwegmax*((kw(k-32000))/360)); %Kolbenweg 2
else
s_k2(k)=0.5;
end
V_Z1(k)=A_kolben*(s_k(k)-kolbenwegmax)*(-1);
V_Z2(k)=A_kolben*(s_k2(k));
dV_Z1=-8.953539062722324e-09; %diff(V_Z1);
dV_Z2=8.953539062722324e-09;
if alphai(k)<VE_Z1_offen
p_Z1(k)=p_Umg/((V_Z1(k)/V_max)^kappa);
T_Z1(k)=T_Umg/((p_Umg/p_Z1(k))^((kappa-1)/kappa));
p_Z2(k)=101325;
T_Z2(k)=293.15;
elseif alphai(k)>=VE_Z1_o(k) && alphai(k)<=VE_Z1_z(k)
p_Z1(k)=p_Z1(k-1)+dp_Z1(k-1); % Zeile 56
T_Z1(k)=T_Z1(k-1)+dT_Z1(k-1);
p_Z2(k)=p_Z2(k-1)+dp_Z2(k-1);
T_Z2(k)=T_Z2(k-1)+dT_Z2(k-1);
else
p_Z1(k)=100000; % Zeile 61
T_Z1(k)=800;
p_Z2(k)=50000;
T_Z2(k)=600;
end
pi_druck(k)=p_Z2(k)/p_Z1(k);
if pi_druck(k)<0.52
pi_druck(k)=0.52;
end
c_s(k)=sqrt(2*c_p*T_Z1(k)*(1-(pi_druck(k)^((kappa-1)/kappa)))); %Schallgeschwindigkeit
rho_1(k)=p_Z1(k)/(T_Z1(k)*R); % Dichte 1
rho_2(k)=p_Z2(k)/(T_Z2(k)*R); % Dichte 2
rho(k)=rho_1(k)*(pi_druck(k)^(1/kappa)); %Dichte Strömung 1->2
m1(k)=rho_1(k)*V_Z1(k); %Masse im Zylinder 1
m2(k)=rho_2(k)*V_Z2(k); %Masse im Zylinder 2
m_punkt(k)=c_s(k)*rho(k)*A_VE1;
dW_Z1(k)=dV_Z1*p_Z1(k); %Volumenänderungsarbeit Z1
dW_Z2(k)=dV_Z2*p_Z2(k); %Volumenänderungsarbeit Z2
dm(k)=m_punkt(k)*dt; %Masseveränderung 1->2
dH(k)=dm(k)*T_Z1(k)*c_p; %Enthalpieänderung
alpha_w(k)=127.93*(0.03^(-0.2))*((p_Z1(k)*10^-5)^0.8)*(T_Z1(k)^(-0.53))*(41.408^.8);
alpha_w2(k)=127.93*(0.03^(-0.2))*((p_Z2(k)*10^-5)^0.8)*(T_Z2(k)^(-0.53))*(41.408^.8);
dQw_Z1(k)=(2*b_Z1*h_Z1+4*b_Z1*(kolbenwegmax-s_k(k)))*alpha_w(k)*(273.15+T_w-T_Z1(k))*dt; %Wandwärmeverluste
dQw_Z2(k)=(2*b_Z1*h_Z1+4*b_Z1*(s_k2(k)))*alpha_w2(k)*(273.15+T_w-T_Z2(k))*dt; %Wandwärmeverluste
dT_Z1(k)=-(dH(k)+(c_v*T_Z1(k)*(-dm(k)))+dW_Z1(k)-dQw_Z1(k))/(m1(k)*c_v); %Temperaturänderung
dp_Z1(k)=((m1(k)*R*dT_Z1(k))+(R*T_Z1(k)*(-dm(k)))-dW_Z1(k))/V_Z1(k); %Druckänderung
dT_Z2(k)=(dH(k)-(c_v*T_Z2(k)*dm(k))-dW_Z2(k)+dQw_Z2(k))/(m2(k)*c_v);
dp_Z2(k)=((m2(k)*R*dT_Z2(k))+(R*T_Z2(k)*dm(k))-dW_Z2(k))/V_Z2(k); %Druckänderung
end end
0 Commenti
Risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!