File:Animation Diagramm Carnotprozess.ogv
Original file (Ogg Theora video file, length 1 min 2 s, 2,304 × 1,296 pixels, 353 kbps, file size: 2.61 MB)
Captions
Captions
Summary
[edit]DescriptionAnimation Diagramm Carnotprozess.ogv |
Deutsch: Animation zum Carnot-Prozess |
Date | |
Source | Own work |
Author | Menner |
Licensing
[edit]![]() ![]() |
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
[edit]Required tools:
- GNU octave with GNU plot
- png2yuv
- unix shell
- ffmpeg2theora
batch_processing
[edit]#!/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
[edit]#!/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");
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 (talk | contribs) | User created page with UploadWizard |
You cannot overwrite this file.
File usage on Commons
There are no pages that use this file.
Transcode status
Update transcode statusFile usage on other wikis
The following other wikis use this file:
- Usage on de.wikipedia.org
Metadata
This file contains additional information such as Exif metadata which may have been added by the digital camera, scanner, or software program used to create or digitize it. If the file has been modified from its original state, some details such as the timestamp may not fully reflect those of the original file. The timestamp is only as accurate as the clock in the camera, and it may be completely wrong.
Software used |
---|