Komponendi lisamine kasutaja defineeritud GUI-le

Kompuuterfüüsika II Praktikumid Comsol Multiphysics Skriptimine ja graafilise kasutajaliidese disainimine

Harjutuse eesmärk on tutvuda uue komponendi lisamisega GUI-le. Liides ise on eelneval valmis tehtud.

  1. Laadida alla kataloog heatrod.tar.gz ja kopeerida see heatrod_modified nimeliseks kataloogiks.
  2. COMSOL Script-s lisada uus kataloog heatrod_modified otsinguteesse:
    	addpath &/heatrod_modified
    	
    Siin tähistab & kataloogi, kus heatrod_modified asub.
  3. 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.
  1. Avada fail heatrod_gui.m kataloogis heatrod_modified.
  2. 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');
    	
  3. Salvestada fail ja käivitada see. Kuna uuele nupule klikkides midagi ei juhtu (proovi ;), siis tuleb lisada funktsioon, mis reageeriks nupule klikkimisel.
  4. 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');
  5. 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.
  6. 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;
    	
  7. Salvestada fail nimega heatrod_plottype.m.

    Järgnevalt tuleb defineerida funktsioonid heatrod_closedialog ja heatrod_plot vastavalt dialoogi sulgemiseks ja soovitud tulemuse kuvamiseks.
  8. Anna edit-käsk avamaks uut faili ja sisesta seal järgnevad käsud:
    	function heatrod_closedialog(event)
    	dialog=event.parent;
    	dialog.close
    	
  9. Salvesta fail nimega heatrod_closedialog.m
  10. 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
    	
  11. 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.
  12. Avada heatrod_geom. redigeerimiseks käsuga
    	edit heatrod_geom
    	
  13. 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;
    	...
    	...
    	
  14. Vajutada CTRL+S klahve, et fail salvestada.
  15. 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;
    	...
    	...
    	
  16. 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