Zur Beschreibungsseite auf Commons

Datei:Animation Diagramm Carnotprozess.ogv

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Originaldatei(Ogg-Theora-Videodatei, Länge: 1 min 2 s, 2.304×1.296 Pixel, 353 kbps insgesamt, Dateigröße: 2,61 MB)

Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.

Zur Beschreibungsseite auf Commons


Beschreibung

Beschreibung
Deutsch: Animation zum Carnot-Prozess
Datum
Quelle Eigenes Werk
Urheber Menner

Lizenz

Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Creative Commons CC-Zero Diese Datei wird unter der Creative-Commons-Lizenz „CC0 1.0 Verzicht auf das Copyright“ zur Verfügung gestellt.
Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.

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");

Kurzbeschreibungen

Ergänze eine einzeilige Erklärung, was diese Datei darstellt.

In dieser Datei abgebildete Objekte

Motiv

application/ogg

7effed8b78ef4ec74eca09c9419e56158f422d5b

2.736.713 Byte

62 Sekunde

1.296 Pixel

2.304 Pixel

Dateiversionen

Klicke auf einen Zeitpunkt, um diese Version zu laden.

Version vomVorschaubildMaßeBenutzerKommentar
aktuell14:51, 19. Jun. 20141 min 2 s, 2.304 × 1.296 (2,61 MB)MennerUser created page with UploadWizard

Die folgende Seite verwendet diese Datei:

Metadaten