File:Animation Diagramm Carnotprozess.ogv
From Outreach Wiki
Jump to navigation
Jump to search
Size of this JPG preview of this OGG file: 800 × 450 pixels. Other resolutions: 320 × 180 pixels | 640 × 360 pixels | 1,024 × 576 pixels | 1,280 × 720 pixels | 2,304 × 1,296 pixels.
Original file (Ogg Theora video file, length 1 min 2 s, 2,304 × 1,296 pixels, 353 kbps, file size: 2.61 MB)
This free media file is from Wikimedia Commons. Its description page is included below. |
Summary
DescriptionAnimation Diagramm Carnotprozess.ogv |
Deutsch: Animation zum Carnot-Prozess |
Date | |
Source | Own work |
Author | Menner |
Licensing
I, the copyright holder of this work, hereby publish it under the following license:
This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication. | |
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of their rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
Source code
Required tools:
- GNU octave with GNU plot
- png2yuv
- unix shell
- ffmpeg2theora
batch_processing
#!/bin/sh
start=`date`;
framerate=20
% framerate=2
name="carnot"
rm ./svg -rf
mkdir ./svg
octave ./carnot_p_V.m
rm ./png -rf
mkdir ./png
cd svg
mogrify -format png *svg
mv *png ../png
cd ..
rm ./yuv
mkdir ./yuv
png2yuv -j ./png/$name-%04d.png -f $framerate -I p -b 0 > ./yuv/out.yuv
rm ./$name.ogv
./ffmpeg2theora-0.29.linux32.bin ./yuv/out.yuv -F $framerate -v 9 -o ./$name.ogv;
end=`date`;
echo Start: $start;
echo End: $end;
carnot.m
#!/usr/bin/octave -qf
%
% 2014
%
%
% Hintergrund_Plot
%
function Hintergrund_Plot()
global parameters;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_1 = parameters.Druck_1;
Druck_2 = parameters.Druck_2;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
kappa = parameters.kappa;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
Volumen = 0:0.1:parameters.PlotSize; % 2..4 / 4..9
% 1 -> 2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
Druck_1_2_iso = Druck_1 * Volumen_1 ./ Volumen;
% 2 -> 3 Isentrop
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, 1, 2);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
Druck_2_3_iso = Druck_2 * (Volumen_2 ./ Volumen) .^ kappa;
% 3 -> 4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
Druck_3_4_iso = Druck_3 * Volumen_3 ./ Volumen;
% 4 -> 1 Isentrop
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, 1, 2);
Druck_4_1 = Druck_4 * (Volumen_4 ./ Volumen_4_1) .^ kappa;
Druck_4_1_iso = Druck_4 * (Volumen_4 ./ Volumen) .^ kappa;
ylim([0,15]);
xlim([0,10]);
xlabel("Volumen", "FontSize", FontSize);
ylabel("Druck", "FontSize", FontSize);
axis("tic", "labeloff");
%axis("square"); % Vermeide ausrücken des y-Beschriftung
plot(Volumen, Druck_1_2_iso/1e5,"color", "b");
plot(Volumen, Druck_2_3_iso/1e5, "color", "k");
plot(Volumen, Druck_3_4_iso/1e5, "color", "r");
plot(Volumen, Druck_4_1_iso/1e5, "color", "k");
plot(Volumen_1_2, Druck_1_2/1e5, ";Isotherm kalt;", "linewidth", 2, "color", "b");
plot(Volumen_3_4, Druck_3_4/1e5, ";Isotherm warm;", "linewidth", 2, "color", "r");
plot(Volumen_2_3, Druck_2_3/1e5, ";Isentrop;", "linewidth", 2, "color", "k");
plot(Volumen_4_1, Druck_4_1/1e5, "linewidth", 2, "color", "k");
legend("location", "NorthEast");
copied_legend = findobj(gcf(),"type","axes","Tag","legend"); % thanks to http://stackoverflow.com/questions/3938348/matlab-how-to-obtain-all-the-axes-handles-in-a-figure-handle
set(copied_legend, "FontSize", FontSize);
outerposition = get(copied_legend, 'OuterPosition'); % thanks to http://stackoverflow.com/questions/9589793/matlab-latex-interpreter-font-spacing
delta_h = 0.25*outerposition(4);
outerposition(2) = outerposition(2) - delta_h;
outerposition(4) = outerposition(4) + delta_h;
set(copied_legend, 'OuterPosition', outerposition)
set (gca(), "linewidth", 1.5);
plot(Volumen_1, Druck_1/1e5, "o", "color", "k");
text(Volumen_1, Druck_1/1e5 + 0.25, "1", "color", "k", "FontSize", FontSize);
plot(Volumen_2, Druck_2/1e5, "o", "color", "k");
text(Volumen_2, Druck_2/1e5 + 0.25, "2", "color", "k", "FontSize", FontSize);
plot(Volumen_3, Druck_3/1e5, "o", "color", "k");
text(Volumen_3, Druck_3/1e5 + 0.25, "3", "color", "k", "FontSize", FontSize);
plot(Volumen_4, Druck_4/1e5, "o", "color", "k");
text(Volumen_4, Druck_4/1e5 + 0.25, "4", "color", "k", "FontSize", FontSize);
endfunction
%
% Hintergrund_Plot_T_S
%
function Hintergrund_Plot_T_S()
global parameters;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
% Entropie
% Temperatur
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
kappa = parameters.kappa;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Volumen_1 = parameters.Volumen_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Faktor = parameters.Faktor;
% 1->2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Entropie_1_2 = Berechne_SpezifischeEntropie(Volumen_1_2/Volumen_1, Temperatur_1_2) * Faktor;
% 3->4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Entropie_3_4 = Berechne_SpezifischeEntropie(Volumen_3_4/Volumen_1, Temperatur_3_4) * Faktor;
ylim([0, 1.15 * Temperatur_3_4]);
xlim([0.95 * Entropie_2_3, 1.025 * Entropie_4_1]);
xlabel("Entropie", "FontSize", FontSize);
ylabel("Temperatur", "FontSize", FontSize);
axis("tic", "labeloff");
Temperatur_1_2_A = ones(size(Entropie_1_2)) * Temperatur_1_2;
Temperatur_3_4_A = ones(size(Entropie_3_4)) * Temperatur_3_4;
plot(Entropie_1_2, Temperatur_1_2_A, ";Isotherm kalt;", "linewidth", 2, "color", "b");
plot(Entropie_3_4, Temperatur_3_4_A, ";Isotherm warm;", "linewidth", 2, "color", "r");
plot([Entropie_2_3, Entropie_2_3], [Temperatur_1_2, Temperatur_3_4], ";Isentrop;", "linewidth", 2, "color", "k");
plot([Entropie_4_1, Entropie_4_1], [Temperatur_3_4, Temperatur_1_2], "linewidth", 2, "color", "k");
legend("location", "NorthEast");
copied_legend = findobj(gcf(),"type","axes","Tag","legend"); % thanks to http://stackoverflow.com/questions/3938348/matlab-how-to-obtain-all-the-axes-handles-in-a-figure-handle
set(copied_legend, "FontSize", FontSize);
set (gca(), "linewidth", 1.5);
plot(Entropie_4_1, Temperatur_1_2, "o", "color", "k");
text(Entropie_4_1, Temperatur_1_2 * 1.025, "1", "color", "k", "FontSize", FontSize);
plot(Entropie_2_3, Temperatur_1_2, "o", "color", "k");
text(Entropie_2_3, Temperatur_1_2 * 1.025, "2", "color", "k", "FontSize", FontSize);
plot(Entropie_2_3, Temperatur_3_4, "o", "color", "k");
text(Entropie_2_3, Temperatur_3_4 * 1.025, "3", "color", "k", "FontSize", FontSize);
plot(Entropie_4_1, Temperatur_3_4, "o", "color", "k");
text(Entropie_4_1, Temperatur_3_4 * 1.025, "4", "color", "k", "FontSize", FontSize);
endfunction
%
% Volumen_a_b
%
function ret = Volumen_a_b(Volumen_a, Volumen_b, Zaehler, Laenge)
Steps = 20;
Vorzeichen = +1;
delta = (Volumen_b-Volumen_a)*Zaehler/(Laenge-1);
if(delta == 0)
if(Volumen_b > Volumen_a)
delta = +0.01;
else
delta = -0.01;
endif
endif
ret = Volumen_a:delta/Steps:Volumen_a+delta;
endfunction
%
% SeqPause
%
function retZaehler = SeqPause(Zaehler)
global parameters;
for Zaehler_Pause = Zaehler:(Zaehler-1+parameters.FrameRate*parameters.Pause)
filename = ["./svg/carnot-", num2str(Zaehler_Pause, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
endfor
retZaehler = Zaehler_Pause + 1;
endfunction
%
% Carnot_Process_1_2
%
function retZaehler = Carnot_Process_1_2(Zaehler)
global parameters;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
SequenzLaenge = parameters.SequenzLaenge;
Druck_1 = parameters.Druck_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Entropie_4_1 = parameters.Entropie_4_1;
Entropie_2_3 = parameters.Entropie_2_3;
Faktor = parameters.Faktor;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
subplot(1,2,2); % p-V-Diagram
hold("on");
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
area(Volumen_1_2, Druck_1_2/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_1_2(end), Druck_1_2(end)/1e5, "x", "color", "k")
text(Volumen_2 + (Volumen_1-Volumen_2)/5, Druck_1/(1e5*2), "W₁₂=∫p·dV<0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagramm
hold("on");
Entropie_1_2 = Berechne_SpezifischeEntropie(Volumen_1_2/Volumen_1, Temperatur_1_2) * Faktor;
Temperatur_1_2_A = ones(size(Entropie_1_2)) * Temperatur_1_2;
area(Entropie_1_2, Temperatur_1_2_A, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_1_2(end), Temperatur_1_2_A(end), "x", "color", "k")
text(Entropie_2_3 + (Entropie_4_1-Entropie_2_3)/5, Temperatur_1_2/2, "Q₁₂=∫T·dS<0", "color", "k", "FontSize", FontSize);
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_2_3
%
function retZaehler = Carnot_Process_2_3(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FontSize = parameters.FontSize;
FrameRate = parameters.FrameRate;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Druck_2 = parameters.Druck_2;
kappa = parameters.kappa;
Temperatur_1_2 = parameters.Temperatur_1_2;
SequenzLaenge = parameters.SequenzLaenge;
Faktor = parameters.Faktor;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
subplot(1,2,2); % p-V-Diagram
hold("on");
area(Volumen_2_3, Druck_2_3/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_2_3(end), Druck_2_3(end)/1e5, "x", "color", "k")
text(Volumen_3 + (Volumen_2-Volumen_3)/5, Druck_2/(1e5*2), "W₂₃=∫p·dV<0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % p-V-Diagram
hold("on");
Temperatur = Temperatur_1_2 * (Volumen_2 ./ Volumen_2_3).^(kappa - 1); % Isentrop
Entropie_2_3_A = ones(size(Temperatur)) * Entropie_2_3;
area(Entropie_2_3_A, Temperatur, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_2_3_A(end), Temperatur(end), "x", "color", "k")
text(Entropie_2_3 - (Entropie_4_1-Entropie_2_3)/5, Temperatur_1_2/2, "Q₂₃=∫T·dS=0", "color", "k", "FontSize", FontSize);
hold("off");
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print(filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_3_4
%
function retZaehler = Carnot_Process_3_4(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
FrameRate = parameters.FrameRate;
Faktor = parameters.Faktor;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
%Druck_4 = InnereEnergie_3_4 ./ Volumen_4;
%Druck_3_4 = InnereEnergie_3_4 ./ Volumen_3_4;
%Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
subplot(1,2,2); % p-V-Diagram
hold("on");
area(Volumen_3_4, Druck_3_4/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_3_4(end), Druck_3_4(end)/1e5, "x", "color", "k")
text(Volumen_3 + (Volumen_4-Volumen_3)/5, Druck_4/(1e5*2), "W₃₄=∫p·dV>0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagram
hold("on");
Entropie_3_4 = Berechne_SpezifischeEntropie(Volumen_3_4/Volumen_1, Temperatur_3_4) * Faktor;
Temperatur_3_4_A = ones(size(Entropie_3_4)) * Temperatur_3_4;
area(Entropie_3_4, Temperatur_3_4_A, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_3_4(end), Temperatur_3_4_A(end), "x", "color", "k")
text(Entropie_2_3 + (Entropie_4_1-Entropie_2_3)/5, Temperatur_3_4/2, "Q₃₄=∫T·dS>0", "color", "k", "FontSize", FontSize);
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_4_1
%
function retZaehler = Carnot_Process_4_1(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_4 = parameters.Volumen_4;
Volumen_1 = parameters.Volumen_1;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
kappa = parameters.kappa;
Druck_1 = parameters.Druck_1;
Temperatur_3_4 = parameters.Temperatur_3_4;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
% ₃
hold("on");
subplot(1,2,2); % p-V-Diagram
hold("on");
Druck_4_1 = Druck_1 * (Volumen_1 ./ Volumen_4_1) .^ kappa;
area(Volumen_4_1, Druck_4_1/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_4_1(end), Druck_4_1(end)/1e5, "x", "color", "k")
text(Volumen_4 + (Volumen_1-Volumen_4)/5, Druck_1/(1e5*2), "W₄₁=∫p·dV>0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagram
hold("on");
Temperatur = Temperatur_3_4 * (Volumen_4 ./ Volumen_4_1).^(kappa - 1); % Isentrop
Entropie_4_1_A = ones(size(Temperatur)) * Entropie_4_1;
area(Entropie_4_1_A, Temperatur, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_4_1_A(end), Temperatur(end), "x", "color", "k")
text(Entropie_4_1 - (Entropie_4_1-Entropie_2_3)/5, Temperatur_3_4/2, "Q₄₁=∫T·dS=0", "color", "k", "FontSize", FontSize);
hold("off");
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Delta
%
function retZaehler = Carnot_Delta(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_1 = parameters.Druck_1;
Druck_2 = parameters.Druck_2;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
kappa = parameters.kappa;
Entropie_4_1 = parameters.Entropie_4_1;
Entropie_2_3 = parameters.Entropie_2_3;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Volumen = 0:0.1:parameters.PlotSize; % 2..4 / 4..9
% 1 -> 2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
% 2 -> 3 Isentrop
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, 1, 2);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
% 3 -> 4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
% 4 -> 1 Isentrop
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, 1, 2);
Druck_4_1 = Druck_4 * (Volumen_4 ./ Volumen_4_1) .^ kappa;
subplot(1,2,2); % p-V-Diagram
hold("on");
Volumen = [Volumen_1_2, Volumen_2_3, Volumen_3_4, Volumen_4_1 ];
Druck = [Druck_1_2, Druck_2_3, Druck_3_4, Druck_4_1 ];
fill(Volumen, Druck/1e5, "c");
Hintergrund_Plot();
plot([(Volumen_2+Volumen_4)/2, Volumen_4+0], [(Druck_2+Druck_4)/(1e5*2), Druck_4/1e5+1], "color", "k", "linewidth", 2);
text(Volumen_4+0, Druck_4/1e5+1, "ΔW = ΔQ", "FontSize", FontSize);
subplot(1,2,1); % T-S-Diagram
hold("on");
Temperatur = [Temperatur_1_2, Temperatur_1_2, Temperatur_3_4, Temperatur_3_4 ];
Entropie = [Entropie_4_1, Entropie_2_3, Entropie_2_3, Entropie_4_1];
fill(Entropie, Temperatur, "c");
Hintergrund_Plot_T_S();
text((Entropie_2_3+Entropie_4_1)/2, (Temperatur_1_2+Temperatur_3_4)/2, "ΔQ", "FontSize", FontSize);
hold("off");
for Zaehler_Final = Zaehler:1:Zaehler + SequenzLaenge*FrameRate - 1
filename = ["./svg/carnot-", num2str(Zaehler_Final, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
endfor
retZaehler = Zaehler_Final + 1;
close();
endfunction
%
% Berechne_Volumen_4
%
function Volumen = Berechne_Volumen_4()
global parameters;
% Volumen = ( parameters.Entropie_4_1 / parameters.InnereEnergie_3_4)^(1/(parameters.kappa-1)); % Schnittpunkt
Volumen_3 = parameters.Volumen_3;
Volumen_1 = parameters.Volumen_1;
Druck_1 = parameters.Druck_1;
Druck_3 = parameters.Druck_3;
kappa = parameters.kappa;
% V_4 / V_3 = p_3 / p_4 % Isotherm
% p_4 = p_1 * (V_1 / V_4) ^ kappa % Isentrop
temp = Volumen_3 / Volumen_1^kappa * (Druck_3 / Druck_1);
Volumen = temp^(1/(1-kappa));
endfunction
%
% Berechne Druck in N / m^2
%
function Druck = Berechne_SpezifischenDruck(Volumen, Temperatur)
global parameters;
R_S = parameters.R_S;
Druck = R_S * 1000. * Temperatur ./ Volumen;
endfunction
%
% Berechne spezifische Entropie in kJ / K
%
function S_spez = Berechne_SpezifischeEntropie(Volumen, Temperatur)
global parameters;
S_Std = parameters.S_Std;
R_S = parameters.R_S;
T_Std = parameters.T_Std;
p_Std = parameters.p_Std;
Druck = Berechne_SpezifischenDruck(Volumen, Temperatur);
C_p = parameters.C_p;
C_V = parameters.C_V;
Delta_Entropie = R_S * (C_p * log(Temperatur/T_Std) - log(Druck/p_Std));
S_spez = S_Std + Delta_Entropie;
endfunction
%
% Berechne spezifische InnereEnergie
%
function InnereEnergie = Berechne_SpezifischeInnereEnergie(Entropie, Temperatur, Volumen)
global parameters;
Druck = Berechne_SpezifischenDruck(Volumen, Temperatur);
InnereEnergie = Entropie * Temperatur - Druck * Volumen/1000; % kJ
endfunction
%
% Testberechnungen
%
function Testberechnungen()
global parameters;
Druck_1 = parameters.InnereEnergie_1_2 ./ parameters.Volumen_1 % Druck der spezifischen Masse
Druck_2 = parameters.InnereEnergie_1_2 ./ parameters.Volumen_2;
Druck_3 = parameters.Entropie_2_3 ./ (parameters.Volumen_3 ^ parameters.kappa);
delta_W_1_2 = Druck_1 * parameters.Volumen_1 * log(parameters.Volumen_1 / parameters.Volumen_2)
delta_S_1_2 = delta_W_1_2 / parameters.Temperatur_1_2
delta_T_2_3 = parameters.Temperatur_1_2 * (Druck_3/Druck_2)^((parameters.kappa - 1)/parameters.kappa)% Isentrop
V_spez = 1;
T_std = 50. + 273.
S_spez = Berechne_SpezifischeEntropie(V_spez, T_std) * 9;
S_spez
U_spez = Berechne_SpezifischeInnereEnergie(S_spez, T_std, V_spez) * 9;
U_spez
endfunction
%
%
% M A I N
%
%
begin_cputime = cputime();
global parameters;
% Arbeitsgas: ARGON
% U_mol = T * S_mol - R * T % molare Innere Energie
% R_S = R / M_Argon % spezifische Gaskonstante Argon
% U_S = T * S_S - R_S * T % spezifische Innere Energie Argon
% S_S = 3,875 % kJ/K pro kg % spezifische Entropie Argon
parameters.M_S = 0.03995; % kg/mol spezifische Masse für Argon
parameters.R_S = 8.3145e-3 / parameters.M_S; % kJ / kg * K spezifische Gaskonstante für Argon
parameters.S_Std = 3.876; % kJ / K spezifische Entropie Argon bei 1 bar und 25°C (siehe Joensson)
parameters.T_Std = 25 + 273; % Temperatur für Standard-Entropie
parameters.p_Std = 1.e5; % Druck für Standard-Entropie
parameters.C_p = 5 / 2; % isobare Wärmekapazität zweiatomiges Gas
parameters.C_V = 3 / 2; % isochore Wäremkapazität zweiatomiges Gas (Wasserstoff)
parameters.kappa = 5 / 3; % C_p / C_V = 7/5 % zweiatomiges Gas
% R = p * V / n * T
% R_S = V * p / T
% R_S = R / M_Argon
% U = S * T - p * V @ Masse x kg
% spezifische Referenzentropie im Punkt 1
% p * V * T = Const
% p * V = const. % isotherm
% p_1/p_2 = V_2/V_1 % des selben Gases
% p * V^kappa = const.
% p_1/p_2 = ( V_2 / V_1 ) ^ kappa
% PARAMETER
parameters.FrameRate = 20; % pro Sekunde
% parameters.FrameRate = 2; % Debug
parameters.Pause = 3; % in Sekunden
parameters.SequenzLaenge = 10;
parameters.FinalLaenge = 10;
parameters.Dimensions = "-S4800,2700"; % odd scale facotr
parameters.FontSize = 18;
parameters.PlotSize = 20;
% VOLUMEN
parameters.Faktor = 9.;
parameters.Volumen_1 = parameters.Faktor; % 9 * V_S spezifisches Volumen
parameters.Volumen_2 = 2.6;
parameters.Volumen_3 = 1.;
% Volumen_4 resultiert aus den anderen drei Werten
parameters.Temperatur_1_2 = 273 + 50; % 50°C
% ENTROPIE
% parameters.InnereEnergie_1_2 = 6.045; % Startwert % spezifische Innere Energie
spez_Entropie_4_1 = Berechne_SpezifischeEntropie(1., parameters.Temperatur_1_2);
parameters.Entropie_4_1 = spez_Entropie_4_1 * parameters.Faktor;
parameters.Druck_1 = Berechne_SpezifischenDruck(1., parameters.Temperatur_1_2);
parameters.Temperatur_3_4 = parameters.Temperatur_1_2 * (parameters.Volumen_2/parameters.Volumen_3)^(parameters.kappa - 1); % Isentrop
spez_Entropie_2_3 = Berechne_SpezifischeEntropie(parameters.Volumen_3/parameters.Volumen_1, parameters.Temperatur_3_4);
parameters.Entropie_2_3 = parameters.Faktor * spez_Entropie_2_3;
% DRUCK
parameters.Druck_2 = parameters.Druck_1 * parameters.Volumen_1 / parameters.Volumen_2;
parameters.Druck_3 = parameters.Druck_2 * (parameters.Volumen_2 / parameters.Volumen_3) ^ (parameters.kappa);
parameters.Temperatur_3_4 = parameters.Temperatur_1_2 * (parameters.Volumen_2/parameters.Volumen_3)^(parameters.kappa - 1); % Isentrop
parameters.Volumen_4 = Berechne_Volumen_4();
parameters.Druck_4 = parameters.Druck_1 * (parameters.Volumen_1 / parameters.Volumen_4) ^ (parameters.kappa);
spez_Entropie_2_3 = Berechne_SpezifischeEntropie(parameters.Volumen_2/parameters.Volumen_1, parameters.Temperatur_1_2); % Falsifikation
spez_Entropie_2_3 * parameters.Faktor
%Testberechnungen();
parameters
%
% Carnot-Kreisprozess
%
Zaehler = 0;
printf("Carnot_Process_1_2()\n");
Zaehler
Zaehler = Carnot_Process_1_2(Zaehler);
printf("Carnot_Process_2_3()\n");
Zaehler
Zaehler = Carnot_Process_2_3(Zaehler);
printf("Carnot_Process_3_4()\n");
Zaehler
Zaehler = Carnot_Process_3_4(Zaehler);
printf("Carnot_Process_4_1()\n");
Zaehler
Zaehler = Carnot_Process_4_1(Zaehler);
printf("Carnot_Process_Delta()\n");
Zaehler
Zaehler = Carnot_Delta(Zaehler);
Zaehler
%Hintergrund_Plot()
printf("Total cpu time: %f seconds\n", cputime()-begin_cputime);
printf("Finished\n");
Items portrayed in this file
depicts
19 June 2014
application/ogg
7effed8b78ef4ec74eca09c9419e56158f422d5b
2,736,713 byte
62 second
1,296 pixel
2,304 pixel
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 12:51, 19 June 2014 | 1 min 2 s, 2,304 × 1,296 (2.61 MB) | Menner | User created page with UploadWizard |
File usage
There are no pages that use this file.
Global file usage
The following other wikis use this file:
- Usage on de.wikipedia.org
Metadata
This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
If the file has been modified from its original state, some details may not fully reflect the modified file.
Software used |
|
---|