Vratislav Hlubucek - osobni stranka

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.