Recent Posts

úterý 19. února 2013

Popis funkce vh_reseni

Reseni vodohospodarske zasobni funkce nadrze

Následující text mapuje kód funkce vh_reseni, tato funkce je využita ve skriptu zjišťujícím velikost nadlepšeného odtoku z nádrže pro jistou zabezpečenost. 

(Ke stažení zde.)


Reseni vodohospodarske zasobni funkce nadrze

function [ Pt,Po,por_mes,por_rok ] = vh_reseni( P,Vz,Qn )
% vh_reseni...program pro reseni vodohosp.zasobni funkce nadrze
% P...rada prumernych mesicnich prutoku [m^3/s]
% Vz...zasobni objem zadat v milionech [m^3]
% Qn...nadlepseny prutok [m^3/s]
% Moznost zadani pouze argumentu P, na zbytek se funkce zepta.
Zkontrolovani poctu vstupnich argumentu a jejich pripadne zjisteni
if nargin < 1
    error('Nezadan zadny vstupni argument') % zadny vstupni argument
end
if nargin <2
    Vz=input('Zadejte pozadovaný objem nadrze v milionech m^3 : ')*1e6
end
if nargin <3
    Qn=input('Zadejte nadlepseny prutok v [m^3/s]: ')
end
Vlastni reseni zasobni funkce nadrze
a=size(P);
mes=a(1,2);
rok=a(1,1);
k=0;
 
for i=1:rok
    for j=1:mes
        k=k+1;
        Q(k,1)=P(i,j);
    end
end
por=0;
Vt_minul=Vz;        % pocatecni podminka
konec=length(Q);
Vt=zeros(konec,1);
por_rok=0;          % citac poruchovych let
novy_rok=1;         % citac zacatku noveho roku
for b=1:konec
    if mod(b-1,12)==0   % zjisti zacatek noveho roku (zbytek po deleni)
        novy_rok=1;
    end
    Vt(b,1)=Vt_minul+(Q(b,1)-Qn)*3600*24*30.5;
    if Vt(b,1)>Vz       % omezuje nadrz, aby nepretekla
        Vt(b,1)=Vz;
    else
        if Vt(b,1)<0
        Vt(b,1)=0;      % omezeni objemu nadze zdola
        por=por+1;      % citac poruchovych mesicu
        if novy_rok==1
            por_rok=por_rok+1; % citac poruchovych let
            novy_rok=0;
        end
        end
    end
Vt_minul=Vt(b,1);    % vstupni hodnota zpet do rovnice
end
ZOBRAZENI VYSLEDKU
%Zabezpecenost podle doby trvani
Pt=(length(Q)-por-0.3)/(length(Q)+0.4)*100;
%Zabezpecenost podle doby opakovani
Po=(length(Q)/12-por_rok-0.3)/(length(Q)/12+0.4)*100;
por_mes=por;         % pocet poruchovych mesicu
por_rok=por_rok;     % pocet poruchovych roku
ZOBRAZENI GRAFU
%Vykresleni grafu prutoku
figure
plot(Q);
% Nastaveni grafu
xlabel('zacatky roku','VerticalAlignment','cap');
ylabel('prutok Q [m^3.s^{-1}');
title('Prubeh pritoku do nadrze','FontWeight','bold','FontSize',14);
mlabel=length(P)/12+1;
dlabel=round(mlabel/21);
dtick=dlabel*12;
mtick=length(P);
label=num2str((1:dlabel:mlabel)');
tick=(0:dtick:mtick);
set(gca,...
    'XTickLabel',{label},...
    'XTick',[tick],'XLim',[0 mtick],'FontSize',8);
NameFields=(strread(num2str(1:dlabel:mlabel),'%s'))';
XTick=tick;
xticklabel_rotate(XTick,45,NameFields,'interpreter','none');
 
% Vykresleni grafu prubehu objemu nadrze
figure
plot(Vt,'r -','linewidth',2);
% Nastaveni grafu
xlabel('zacatky roku','VerticalAlignment','cap');
ylabel('objem vody v nadrzi V [m^3]');
title('Objem vody v nádrzi','FontWeight','bold','FontSize',14);
label2=num2str((1:dlabel:mlabel)');
tick2=(0:dtick:mtick);
set(gca,...
    'XTickLabel',{label2},...
    'XTick',[tick2],'XLim',[0 mtick],'FontSize',8);
xticklabel_rotate(XTick,45,NameFields,'interpreter','none');
end