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)


Wikimedia Commons Logo This free media file is from Wikimedia Commons. Its description page is included below.

Summary

Description
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:
Creative Commons CC-Zero 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.

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

Captions

Add a one-line explanation of what this file represents

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/TimeThumbnailDimensionsUserComment
current12:51, 19 June 20141 min 2 s, 2,304 × 1,296 (2.61 MB)MennerUser created page with UploadWizard

There are no pages that use this file.

Global file usage

The following other wikis use this file:

Metadata