Chemicko-inženýrský objektový model v Javě
Svět a zejména Evropa se v rámci globalizace standardizuje. Normuje se kde co
a důležité to je zejména v oblasti informatiky a výpočetní techniky, kde to
usnadňuje další bouřlivý rozvoj. Proč by chemické inženýrství mělo stát stranou?
Řada rysů a postupů je totiž obecná a společná všem chemicko-inženýrským výpočtům,
tak proč je nezařadit do standardizovaného objektového modelu, který se osvědčuje
u programovacích jazyků? Uživatel se jimi pak už nemusí do detailu zabývat, pouze
je deklaruje z knihoven a vytvoří své vlastní instance. Myslím si, že takový
objektově orientovaný model by měl být vytvářen zdola na základě praktických
potřeb nejlépe jako Open Source nebo akademická iniciativa, aby nepodléhal komercializaci.
Mohlo by se to stát tématem diplomových prací. Věřím, že se toho nějaká univerzita
ujme. Takový model pak může sloužit při výpočtech a modelování v různých moderních
programovacích jazycích C++, C#, Java nebo Visual Basic.
Existuje řada komerčních univerzálních simulačních programů jako Aspen, ChemCAD,
PRO/II, Fluent a další. Umožňují složité a komplexní simulace, ale mají také
své nevýhody. Vzhledem k jejich ceně v statisících korun jsou dostupné jen
malému počtu inženýrů a jejich proprietární struktura nebývá příliš dokumentovaná.
Jejich složitá obsluha představuje další dovednost. Navíc o velké simulační
programy tu nejde. Většina chemických inženýrů provádí a programuje své jednoduché
nebo střední výpočty sama v rámci studia nebo vývoje. Řadu opakovaných úkonů
spojených s definováním složek, směsi, parametrů proudů musí vždy provádět a
definovat znovu. Je to netvůrčí rutinní práce. A tady by právě mohl významně
pomoci základní objektový model. Zprvu by zahrnoval jen ty základní jednoduché
atributy chemických výpočtů jako definovat složky, vlastnosti, směs, proud.
Ale uživatel by se o ně už nemusel starat a pouze by k svému programu zahrnul
veřejně dostupnou dynamickou knihovnu .dll nebo .jar s těmito objekty. Tak jako
programátor deklaruje použití celočíselné nebo textové proměnné, inženýr bude
ve svém programu pouze deklarovat použití směsi, složek, proudů. Následně je naplní daty.
V následujícím odstavci jsem se pokusil ideově nastínit, jak by zárodek takového
objektového modelu mohl vypadat. Tučná kurzíva označuje Objekt a () pak pole,
jak obyčejné, tak pole objektů. Objekt Latka představuje chemické individuum
nebo charakteristickou složku směsi, popisovanou jak bodovými, tak teplotně
případně tlakově závislými údaji. Tyto závislé vlastnosti je dobré vyjádřit
formou objektu Vlast spolu se zapouzdřenými koeficienty korelačních vztahů
načítaných z databáze. Pole nebo kolekce látek pak vytváří základ vyššího objektu
Smes, který už také nese údaj o složení. Chemický inženýr dále pracuje s proudy,
které, kromě složení mají i určitou teplotu a tlak. Jsou topologicky orientovány,
a proto si zaslouží samostatný objekt Proud. Proudy mohou protékat přes různé
elementy odvozené od abstraktní třídy Element, jako trubka, ventily, zúžení apod.
Od abstraktního objektu Aparat jsou odvozeny konkrétní aparáty zahrnující proudy
a směsi jako mísič, tepelný výměník, reaktory, komprese, flash a podobně. Na
základě těchto základních (a možná ještě dalších) objektů je možné vytvářet další
objekty vázané k určitému typu aparátů nebo operací a jednoduše řešit menší a
střední chemicko-inženýrské úlohy.
Tuto verzi jsem naprogramoval v programovacím jazyce Java, který je ve velké míře
objektový a umožňuje využít zmiňovaných výhod.
Latka název, číslo, sumární vzorec, CAS, pole bodových vlastností,
pole vlastností Vlast()
Vlast název, konstanty teplotního rozvoje, typ korelačního vztahu,
meze platnosti, třída přesnosti
Smes název směsi, počet složek, pole s čísly složek, xhmot(), xmol(),
Latka() pole se složkami směsi
Proud název, číslo, hm. průtok, T,P, xhmot(), xmol(), č.apartátu
z kterého proud vychází, č.apartátu do kterého proud vstupuje, Smes - objekt s
údaji o složkách směsi
Aparat obecný aparát pracující s proudy může mít potomky:
Vymenik název, číslo, Proud_trubky, Proud_plast, parametry
trubkovnice, pláště výměníku, metody pak jako koef. prostupu, přestupu,
převedené teplo, tlaková ztráta
obdobně další aparáty
CSTRReaktor - ideálně míchaný reaktor
TrubReaktor - trubkový reaktor s výměnou tepla
BatchReaktor - vsádkový reaktor s výměnou tepla
Komprese/Škrcení - komprese či škrcení plynného proudu
Flash - flash směsi za ideálních podmínek
Kolona - SmithBrinkley short-cut
SmesovacIdeal
TepelnyVymenik - výměník tepla trubkový
elementy a armatury potrubí
Hierarchie objektů
Nejvyšším objektem je Schema, který představuje stromovou strukturu aparátů,
které jsou sekvenčně počítatelné (neobsahují refluxní proudy).
Z hlediska metod objektů, které představují vlastní funkčnost, to jsou jednak
servisní metody načtení a validace dat (set), jejich zobrazení (get) a jednak
vlastní zabezpečení funkcí. U objektu Smes výpočet jednotlivých fyzikálních
vlastností směsi pro zadané složení (xmol()), teplotu a tlak. U objektu CSTRReaktor
zahrnutí reakcí, jejich stechiometrie, přestupu tepla a výpočet výstupního
složení a podobně i u dalších modelů. Výhodné je samozřejmě využívat i nějakého
univerzálního modelu matematických numerických metod.
Zadání parametrů jednotlivých objektů je možné softwarově - přes konstruktory
nebo funkce typy set nebo interaktivně vyplňováním dat do vyskakovacích oken.
Voláním funkce obj.zadejParametryInteraktivne();
Slyším vaši námitku, že obecný model nemůže vyhovovat všem, protože každý si
potřebuje svůj výpočet specificky upravit vzhledem k svým potřebám. Ale i na
to objektový přístup pamatuje formou dědičnosti a přetížením metod.
Nevyhovuje-li vám třeba standardní objekt proudu nebo výměníku, vytvoříte si
vlastní odvozený, který se postará o většinu rutiny, a vy si pouze změníte
nebo přidáte potřebné parametry a změníte (tzv. přetížíte) nevhodné metody výpočtu.
To umožňuje, aby byl programový modul zároveň uzavřený a zároveň otevřený.
Uzavřený, že jeho uživatel nemusí ba někdy ani nemůže nic přidávat do rutinních
částí, kam by spíše mohl vnést náhodnou chybu, ale současně má možnost některé
pro něj nevhodné části změnit a upravit podle své potřeby. Dědičnost
objektů nám umožňuje:
• to, co bylo v základním objektu dobré bez dalšího úsilí ponechat
• to, co nám tam chybělo jednoduše dodat
• to, co se nám tam nelíbilo změnit
Typickým příkladem je třeba kondenzátor. Lze ho odvodit ze základního objektu
výměníku, tak, že zdědí většinu atributů, ale vytvoří se pro něj některé nové
proměnné a charakteristické metody výpočtu přestupu při kondenzaci, podchlazení
kondenzátu, problematika inertů a podobně. Obdobně v případě reaktorů, kolon i
dalších aparátů. Vytvoření objektově orientovaného modelu pro oblast chemického
inženýrství není tedy ani tak o vztazích jako o hierarchické struktuře. Zpočátku
by byl jen malý a jednoduchý, ale mohl by se dále rozrůstat. Konec konců k Matlabu
také existuje bezplatná alternativa Octave. Existence takovéto volně dostupné
knihovny by jistě usnadnila a zefektivnila výpočty. Cílem mého pokusu je vytvořit
základ, který by mohl být dále rozvíjen.
Z těchto stránek si můžete stáhnout zdrojový projekt CHIDat, který obsahuje
balíky fydat, cheminzlib a fydatlib, které obsahují základ objektového modelu.
V části fydat jsou i zkušební ladicí programy, které ilustrují použití
jednotlivých modulů. Projekt CHIDat byl odladěn v prostředí NetBeans v7.4 a
může být nekomerčně využíván a dále rozvíjen. Jedinou podmínkou je řádná citace
v rámci použití. Použití je jednoduché a zahrnuje deklaraci jednotlivých
objektů – modelů a vložit do nich data.
Struktura modelu a jednotlivé objekty a jejich metody jsou popsány v klasické
javovské dokumentaci generované pomocí javadoc, který naleznete v adresáři
CHIDat/dist/javadoc/. Je to html dokument zobrazitelný v prohlížečích.
Spouští se index.html.
Dokumentace CHIDat (červenec) 2014)
Projekt CHIDat ke stažení (verze červenec) 2014) .zip,vhodný pro NetBeans.
K projektu budete potřebovat tyto externí knihovny, které si stáhnete a začleníte do NetBeans.
Najdete je zde (zip nebo jar, čísla verzí berte s rezervou, už jsou i novější ) nebo vygooglíte:
jdom-2.0.5 (čtení xml)
jfreechart-1.0.13 (grafy)
knihovna jcommon-1.0.... by měla být součástí té jfreechart, jinak najděte samostatně.
Příklad zdrojového zkušebního programu: Zkušební výměník.pdf
Model i javadoc dokumentace jsou průběžně updatovány, proto sledujte poslední verze.
Uvítám komentáře na mail.