Quiet@Remove["Global`*"];(*mazu vsechny promenne a protoze kdyz nejsou, tak picuje, ergo (lat. "tudiz":-)) at je ticho*)
$HistoryLength=2;(*takhle si pamatuje posledni dva vystupy, jinak by si pamatovala vsechny a treba u 3D grafiky to muze zasirat pamet, tak tohle mam jako default: je spatnej programator potrebuje u takovychto uloh pouzivat vnirni pamet systemu vic, nez posledni jeden (tedy napr. pouziti "%"), potrebne veci jsou v promennych*)
SetDirectory[NotebookDirectory[]];(*casto pracuju s daty a tohle nastavi defaultni adresar ten, kde sidli tenhle notebook, neni to dlouhy, neskodi to a tak to proste kopiruju automaticky na zacatek toho co delam*)
SetAttributes[exp,{HoldAll,Listable}];(*usnadni exporty grafiky, mirne pokrocilejsi kod, kdyztak se zeptejte, pro pochopeni dalsiho program neni vuuubec podstatny, jak zrovna tohle funguje:-)*)
exp[co_]:=Module[{a,graf},a=ToString[Unevaluated[co]];graf:=Evaluate[co];Export[Evaluate[a<>".png"],graf,ImageResolution->300]];

(*tady zadefinuju, co se fakt menit nebude*)
c=4186.;(*s teckou na konci proto aby to byl typ Real a vystupy by byly Real, nechci zlomky, nejsem uchyl ani matematik a delam ted techniku a ne "vedu"*)
hustotaVody=1000.;
TcoolingTowerIn=60.;
TcoolingTowerOut=30.;(*tohle se menit muze, ale podle toho se nic optimalizovat nebude, chladicich vezi je pro dane vykony omezeny sortiment a dalsi duvody, kdyztak se zeptejte*)
TparaDoTurbiny=200.;(*je to spis jen info, my ji nebudeme ve vypoctu potrebovat, protoze nas zajima jeji merna entalpie a merna entropie a merny objem*)
TchladKZakaznikovi=5.;(*tohle se nemeni, protoze je to zadani*)
TchladOdZakaznika=10.;
Pchlad=3.0*(10^6) ;(*chladiciFaktor se muze menit, ale kdybychom chteli delat kejkle jako v diplomce H3 s promenlivym chladicim faktorem, bylo by to mnohem slozitejsi, navic to je min dulezite, nez u kompresorovych cerpadel atd. kdyztak se zeptejte*)
chladiciFaktor=1.6;(*vVodaMax se muze menit, ale pro dobre inzenyrske reseni staci pokus omyl, dame konzervativni hodnotu, o ktere nem rekli Kocarnici a tak*)
vVodaMax=5.;

(*ted vyresime nejjednodussi system, tedy bilanci okruhu chladu k zakaznikovi*)
rceClad=mSt*c*(TchladOdZakaznika-TchladKZakaznikovi)==Pchlad;
mSTeckouChlad=mSt/.Solve[rceClad][[1]];
Print["mSTeckouChlad= ",mSTeckouChlad," kg/s"];
VSteckouChlad=(mSTeckouChlad/hustotaVody);
Print["VSTeckouChlad= ",VSTeckouChlad," (m^3)/s"];
prurezChladMin=(VSteckouChlad/vVodaMax);
Print["prurezChladMin= ",prurezChladMin," (m^2)"];
DChladMin=Dchlad/.Solve[prurezChladMin==Pi*((Dchlad^2)/4)][[2]];(*pozdeji se pro podrobnejsi vypocet tlakovych ztrat zvoli skutecny prumer z vyrabene rady prumeru, samosebou klidne mensi, bude-li blizko vypoctene hodnoty a vetsi by byl daleko... proto jsme volili vVodaMax pomerne malou, abychom si takove veci mohli dovolit*)
Print["DChladMin= ",DChladMin*100," cm"];

(*ted musime vyresit vykonove bilance jadra systemu, tedy "TC" ve funkci chladnicky, chladici veze ("odpadni teplo"), pary a kondenzatu ("hnaci teplo") a vystupniho chladu *)
rceTC={POdpadnii==PHnacii+Pchlad,Pchlad==chladiciFaktor*PHnacii};
{POdpadni,PHnaci}={POdpadnii,PHnacii}/.Solve[rceTC][[1]];
Print["{POdpadni,PHnaci}= ",(10^(-6))*{POdpadni,PHnaci}," [{MW,MW}]"]

(*nyni je snadne vyresit okruh chladici veze, je to zcela stejne jako v pripade okruhu chladu k zakaznikovi, jen mame teploty TcoolingTowerIn a TcoolingTowerOut a POdpadni misto Pchlad atd... tady to delat nebudu, pokud byste to nezvladli, sups na teorii baletu:-)*)

(*http://www2.spiraxsarco.com/esc/SH_Properties.aspx*)

(*tak uz musime na tu turbinu... ale dam si cigaarko pred ni*)
hParaZElektrarny=2809.647*(10^3);(*mernou entropii potrebuju jenom abych dostal bod po expanzi po izoentrope*)
sParaZElektrarny=6.543*(10^3);(*tady kecam, ja to nevygoooglil:-), tedy to cervene ale firma to ma...*)
hParaZTurbinyIdeal=2350*(10^3);
termodynUcinnTurbiny=0.9;
rceTemodynUcinnost=((hParaZElektrarny-hParaZTurbReal)/(hParaZElektrarny-hParaZTurbinyIdeal))==termodynUcinnTurbiny;
hParaZTurbiny=hParaZTurbReal/.Solve[rceTemodynUcinnost][[1]];
ucinnostMechAElGen=0.95;
TeplotaKondenatuZTC=100;
hKondenzatZTC=c*TeplotaKondenatuZTC;
rceTurbina={mSteckouSteam*(hParaZElektrarny-hParaZTurbiny)*termodynUcinnTurbiny==Pmech,
Pel==ucinnostMechAElGen*Pmech,
PHnaci==mSteckouSteam*(hParaZTurbiny-hKondenzatZTC)
};
solTurbina=Solve[rceTurbina][[1]]
Print["Pel= ",(Pel/1000)/.solTurbina," kW, potreba pary= ",(3600/1000)*mSteckouSteam/.solTurbina," t/h"]

(*vypocet tlakovych ztrat*)
(*https://www.engineeringtoolbox.com/water-dynamic-kinematic-viscosity-d_596.html*)(*pro kinematickou viskozitu vody, drze ji ted vezmu jen pro 10°C*)
kinematickaViskozita=1.31*(10^(-6));(*(m^2)/s*)
DChlad=0.2;(*beru vyrabeny vyssi nez DChadMin*)
rychlostChlad=(VSteckouChlad/((Pi*(DChlad^2))/4));(*rychlost pro zvoleny vnitrni prumer potrubi*)
ReynoldsNumber=((rychlostChlad*DChlad)/kinematickaViskozita);
Print["Re= ",ReynoldsNumber," -"];
(*jiste pujde o turbulentni proudeni*)
(*soucinitele vezmu podle*)
(*http://fluid.itcmp.pwr.wroc.pl/~znmp/dydaktyka/fundam_FM/Lecture11_12.pdf*)(*rovnice 9  a Tab. 1, pro tazene trubky , jejich f znacim ksi*)
ϵ=0.0015;
ksi=0.11*((((ϵ/DChlad)+(68/ReynoldsNumber)))^0.25);
delkaPotrubi=200;(*vymyslim si, to se bere z map podle umisteni zarizeni*)
tlakZtrataTrenim=(1/2)*hustotaVody*ksi*(delkaPotrubi/DChlad)*(rychlostChlad^2);
Print["ΔpTreci= ",(tlakZtrataTrenim/1000)," kPa"];
pocetKolen=10;(*odhad*)
soucinitelLokalniTlakoveZtraty=0.2;(*viz minuly odkaz, Figure 4, hned prvni udaj*)
tlakZtrataKoleny=pocetKolen*(1/2)*hustotaVody*(rychlostChlad^2)*soucinitelLokalniTlakoveZtraty;
celkovaTlakovaZtrata=tlakZtrataTrenim+tlakZtrataKoleny;
Print["ΔpKolena= ",(tlakZtrataKoleny/1000)," kPa"];
Print["Δpcelkem= ",(celkovaTlakovaZtrata/1000)," kPa"];
ucinnostCerpadlaAPohonu=0.8;(*kvalifikovany odhad, v praxi se vezme podle udaju vyrobcu*)
vykonNaCelkovouZtratu=(celkovaTlakovaZtrata/ucinnostCerpadlaAPohonu)*VSteckouChlad;
Print["Prikon pohonu cerpadel v obvodu chladu= ",(vykonNaCelkovouZtratu/1000)," kW"](*poznamka: nezahrnulo jsme tlakovou ztratu vymeniku zakaznika, kterym od nas prebira chlad. Zakaznik ji musi bud rici, nebo si ridi sve prutoku svymi cerpadly*)