Komponendi lisamine kasutaja defineeritud GUI-le
Harjutuse eesmärk on tutvuda uue komponendi lisamisega GUI-le. Liides ise on eelneval valmis tehtud.
- Laadida alla kataloog heatrod.tar.gz ja kopeerida see heatrod_modified nimeliseks kataloogiks.
- COMSOL Script-s lisada uus kataloog heatrod_modified otsinguteesse:
addpath &/heatrod_modified
Siin tähistab & kataloogi, kus heatrod_modified asub. - Käivitada GUI käsuga heatrod_gui.
Liides võimaldab kasutajal lahendada lihtsat soojuse ülekandumise probleemi. Geomeetria koosneb vardas olevast proovimaterjalist, mida iseloomustab soojusjuhtivustegur k. Proovi peal ja all on vaskplaat. Ülemise vaskplaadi pealispinda soojendab foolium, mis on soojusallikaks Q. Alumine vaskplaat on kontaktis veekanaliga. Tervet süsteemi (vaskplaat, proovimaterjali soojendav foolium ja veekanal) on ümbritsetud isolatsioonikihiga.
Kasutajal on võimalik muuta varda pikkust (Lsample) ja diameetrit (Dsample), samuti ka isolatsioonikihi paksust.
Tulemused kuvatake 2D-kuvana, kuigi probleem on oma iseloomult 2D-telgsümmeetriline.
Järgnevalt eeldatakse, et mudel on COMSOL Multiphysics-is eelnevalt loodud ja salvestatud m-failina. Terve GUI genereerimise detailidesse ei laskuta, vaadeldakse vaid ühte komponenti.
Harjutuses lisatakse GUI-le uus komponent, et kuvada soojusvoog vardas vektorkuvana.
Näidatakse kuidas:
- lisada raami sisse paneeli, nuppu või combo-kasti;
- lisada funktsiooni, mis ootab nupul klikkimist, et siis määratud funktsiooni täita;
- luua lisadialoogikasti, et mitte muuta raami kujundust liiga tihedaks;
- töödelda FEM-struktuuri andmeid mitme funktsiooniga.
- Avada fail heatrod_gui.m kataloogis heatrod_modified.
- Muuta panel5-ga seotud rida (100. rea järel) järgnevalt:
p5=panel; p5.setFill('horizontal'); p5.add(label('<html>T<sub>upper</sub> = 0 [K]','tag','Tup'),1,1); p5.add(label('<html>T<sub>lower</sub> = 0 [K]','tag','Tdn'),2,1);
%% Muudetud rida: Lisada siia nupp kuvatüübi muutmiseks
p5.addBorder('Results');
- Salvestada fail ja käivitada see. Kuna uuele nupule klikkides midagi ei juhtu (proovi ;), siis tuleb lisada funktsioon, mis reageeriks nupule klikkimisel.
- Lisada nupule “Plot type” reageeriv funktsioon 130. rea järele:
f1.get('tempradio').addActionListener('heatrod_al'); f1.get('fluxradio').addActionListener('heatrod_al'); f1.get('solvebutton').addActionListener('heatrod_al'); f1.get('defbutton').addActionListener('heatrod_al'); f1.get('geombutton').addActionListener('heatrod_al'); f1.get('imagebutton').addActionListener('heatrod_al');
%% Muudetud rida: funktsioon, mis nupule klikkides kutsub välja
%% funktsiooni heatrod_plottype
f1.get('plottypebutton').addActionListener('heatrod_plottype'); - Salvestada muudetud fail.
Järgnevalt tuleb kirjutada funktsioon heatrod_plottype, mis kutsutakse välja nupule “Plot type” klikkimisel. See funktsioon avab uue dialoogi, kus kasutaja saab valida kuvatüüpi (pinnakuva temperatuuri jaoks või vektorkuva soojusvoo jaoks). Defineeritakse ka kaks nuppu: üks soovitud kuva loomiseks, teine dialoogi sulgemiseks. - Anda käsureal käsk edit, et avada tekstiredaktor ning sisestada järgmised käsud:
function heatrod_plottype(event) %% Luua dialoog, mis sisaldab raamiinfot d1=dialog('plot type','parent',event.parent); %%defineerida globaalmuutuja fem, et selle struktuur oleks %%ligi\"a\"asetav ja muudetav global fem; d1.add(label('Plot type :'),1,1); %% Luua Combo box cb=combobox('items',{'Temperature','Flux'}, ... 'descr',{'Temperature','Flux'}, ... 'tag','combo'); %% Lisada combo-kast dialoogile d1.add(cb,1,2); %% Lisada kuvanupp d1.add(button('Plot','tag','plotbutton'),2,1); %% Lisada sulgemisnupp d1.add(button('Close','tag','closebutton'),2,2); d1.get('plotbutton').addActionListener('heatrod_plot'); d1.get('closebutton').addActionListener( 'heatrod_closedialog'); d1.show;
- Salvestada fail nimega heatrod_plottype.m.
Järgnevalt tuleb defineerida funktsioonid heatrod_closedialog ja heatrod_plot vastavalt dialoogi sulgemiseks ja soovitud tulemuse kuvamiseks. - Anna edit-käsk avamaks uut faili ja sisesta seal järgnevad käsud:
function heatrod_closedialog(event) dialog=event.parent; dialog.close
- Salvesta fail nimega heatrod_closedialog.m
- Sisesta uude faili järgmised käsud:
function heatrod_plot(event) %% Otsida v\"alja dialoogi meetod dlg=event.parent; %% Otsida v\"alja raami meetod frame=dlg.getParent; %% Defineerida globaalne fem-muutuja global fem; %% V6tta dialoogilt vastu info kuvat\"u\"ubi kohta plottype=dlg.get('combo').getSelectedIndex; parent=frame.get('axis').getHandle; cla(parent); %% kuvada lahend s\~oltuvalt kuvat\"u\"ubist switch plottype case 1 postplot(fem, ... 'tridata','T', ... 'trimap','jet(1024)', ... 'title','Surface: Temperature [K]', ... 'refine',3, ... 'parent',parent); set(parent,'title','Surface: Temperature [K]'); case 2 postplot(fem, ... 'arrowdata',{'fluxx','fluxy'}, ... 'title','Arrow: Heat flux [W/m<sup>2</sup>]', ... 'arrowxspacing',15, ... 'arrowyspacing',15, ... 'arrowtype','arrow', ... 'arrowstyle','proportional', ... 'parent',parent); set(parent,'title','Arrow: Heat flux [W/m<sup>2</sup>]'); end
- Salvestada fail nimega heatrod_plot.m.
Nagu näha, kasutab selles funktsioonis fem-struktuuri postplot-käsk. Kuna fem-struktuur on defineeritud teises funktsioonis, siis tuleb see defineerida globaalse muutujana, et sellele erinevate funktsioonides juurde pääseda. - Avada heatrod_geom. redigeerimiseks käsuga
edit heatrod_geom
- Muuda faili algust järgmiselt:
function heatrod_geom(f1) % HEATROD_GUI % version 1.3
%% Muudetud rida: defineerida fem-muutuja globaalsena
global fem;Lsample=f1.get('Lsample').getValue; Dsample=f1.get('Dsample').getValue; ziso=f1.get('ziso').getValue; ... ...
- Vajutada CTRL+S klahve, et fail salvestada.
- Teha sama failis heatrod_solve.m:
function heatrod_geom(f1) % HEATROD_GUI % version 1.3
%% Muudetud rida: defineerida fem-muutuja globaalsena
global fem;Lsample=f1.get('Lsample').getValue; Dsample=f1.get('Dsample').getValue; ziso=f1.get('ziso').getValue; ... ...
- Käivitada skript heatrod_gui.
|
Ülesanne 6: Lahendada probleem Lsample väärtuse 200 mm ja muude muutujate vaikeväärtuste jaoks. Esitada kuvad nii temperatuuri kui ka soojusvoo kohta. Millised on temperatuuride Tupper ja Tlower väärtused? Arvutada needsamad temperatuurid k väärtuste jaoks vahemikus [1,50:50:500] ja esitada sõltuvuste graafikud. |
|
This document was translated from LATEX by HEVEA.
Licensed under the GNU Free Documentation License