% Heat transfer in 2D
% Version 1.0

com.femlab.controls.FlLocale.showMissingResource(false);
f1=frame('COMSOL Multiphysics - Heat transfer in 2D');

p1=panel;
p1.setFill('horizontal');
p1.add(label('Width [m]:'),1,1);
p1.add(textfield(8,'text','1','tag','width'),1,2);
p1.add(label('Height [m]:'),2,1);
p1.add(textfield(8,'text','1','tag','height'),2,2);
p1.addVSeparator(4,3,2);
p1.add(button('Create Geometry','tag','geombutton'),4,2,'horizontal');
p1.addBorder('Geometry');

p2=panel;
p2.add(label('Element size:'),1,1);
p2.add(label('<html>'),2,1);
p2.add(combobox('items',{'Very fine','Fine','Normal',...
                         'Coarse','Very Coarse'},'tag','meshsize'),1,2,'horizontal');
p2.addVSeparator(3,3,1);
p2.add(button('Generate Mesh','tag','meshbutton'),4,2,'horizontal');
p2.addBorder('Mesh');
p2.get('meshsize').setSelectedIndex(3);

p12=panel;
p12.setFill('horizontal');
p12.add(p1,1,1,'horizontal');
p12.add(p2,1,2,'horizontal');
p12.packColumn(1,2);

p3=panel;
p3.setFill('horizontal');
p3.add(label('Type:'),1,1);
p3.add(combobox('items',{'Heat flux','Temperature','Thermal insulation'},...
    'tag','leftbc'),1,2,'horizontal');
p3.add(label('<html>Inward heat flux [W/m<sup>2</sup>]:'),2,1);
p3.add(label('<html>Heat transfer coeff. [W/m<sup>2</sup>,K]:'),3,1);
p3.add(label('Ext. temperature [K]:'),4,1);
p3.add(label('Temperature [K]:'),5,1);
p3.add(textfield(8,'text','','tag','lq'),2,2);
p3.add(textfield(8,'text','','tag','lh'),3,2);
p3.add(textfield(8,'text','','tag','lTinf'),4,2);
p3.add(textfield(8,'text','','tag','lT'),5,2);
p3.addVSeparator(4,6,1);
p3.addBorder('Left');

p5=panel;
p5.setFill('horizontal');
p5.add(combobox('items',{'Heat flux','Temperature','Thermal insulation'},...
    'tag','rightbc'),1,1,'horizontal');
p5.add(textfield(8,'text','','tag','rq'),2,1);
p5.add(textfield(8,'text','','tag','rh'),3,1);
p5.add(textfield(8,'text','','tag','rTinf'),4,1);
p5.add(textfield(8,'text','','tag','rT'),5,1);
p5.addVSeparator(4,6,1);
p5.addBorder('Right');

p35=panel;
p35.setFill('horizontal');
p35.add(p3,1,1,'horizontal');
p35.add(p5,1,2,'horizontal');
p35.packColumn(2,2);

p4=panel;
p4.setFill('horizontal');
p4.add(label('Type:'),1,1);
p4.add(combobox('items',{'Heat flux','Temperature','Thermal insulation'},...
    'tag','topbc'),1,2,'horizontal');
p4.add(label('<html>Inward heat flux [W/m<sup>2</sup>]:'),2,1);
p4.add(label('<html>Heat transfer coeff. [W/m<sup>2</sup>,K]:'),3,1);
p4.add(label('Ext. temperature [K]:'),4,1);
p4.add(label('Temperature [K]:'),5,1);
p4.add(textfield(8,'text','','tag','tq'),2,2);
p4.add(textfield(8,'text','','tag','th'),3,2);
p4.add(textfield(8,'text','','tag','tTinf'),4,2);
p4.add(textfield(8,'text','','tag','tT'),5,2);
p4.addVSeparator(4,6,1);
p4.addBorder('Top');

p6=panel;
p6.setFill('horizontal');
p6.add(combobox('items',{'Heat flux','Temperature','Thermal insulation'},...
    'tag','bottombc'),1,1,'horizontal');
p6.add(textfield(8,'text','','tag','bq'),2,1);
p6.add(textfield(8,'text','','tag','bh'),3,1);
p6.add(textfield(8,'text','','tag','bTinf'),4,1);
p6.add(textfield(8,'text','','tag','bT'),5,1);
p6.addVSeparator(4,6,1);
p6.addBorder('Bottom');

p46=panel;
p46.setFill('horizontal');
p46.add(p4,1,1,'horizontal');
p46.add(p6,1,2,'horizontal');
p46.packColumn(2,2);

sum=panel;
sum.setFill('horizontal');
sum.add(p35,1,1,'horizontal');
sum.add(p46,2,1,'horizontal');
sum.addBorder('Boundary conditions');
sum.packColumn(2,2);

p7=panel;
p7.add(label('Conductivity [W/(m,K)]:'),1,1);
p7.add(label('<html>Heat source [W/m<sup>3</sup>]:'),2,1);
p7.add(textfield(12,'text','40','tag','cond'),1,2);
p7.add(textfield(12,'text','0','tag','source'),2,2);
p7.add(label('Element order:'),3,1);
p7.add(combobox('items',{'Linear','Second order'},'tag','meshorder'),3,2,'horizontal');
p7.addVSeparator(12,4,1);
p7.add(button('Solve','tag','solvebutton'),5,2,'horizontal');
p7.addBorder('Solve');
p7.get('meshorder').setSelectedIndex(2);

p8=panel;
p8.setFill('horizontal');
p8.add(label('Surface data:'),1,1);
p8.add(combobox('items',{'Temperature','Heat Flux'},'tag','surfaceplot'),1,2,'horizontal');
p8.add(label('Height data:'),2,1);
p8.add(combobox('items',{'None','Temperature','Heat Flux'},'tag','heightplot'),2,2,'horizontal');
p8.add(label('Plot in:'),3,1);
p8.add(combobox('items',{'Main axis','Figure'},'tag','plotpos'),3,2,'horizontal');
p8.addVSeparator(4,4,1);
p8.add(button('Plot','tag','plotbutton'),5,2,'horizontal');
p8.addBorder('Plot');

p78=panel;
p78.setFill('horizontal');
p78.add(p7,1,1,'horizontal');
p78.add(p8,1,2,'horizontal');
p78.addVSeparator(4,2,1);
p78.packColumn(2,2);

p9=panel;
p9.setFill('horizontal');
p9.add(label('Default values:'),1,1);
p9.add(button('Default','tag','defbutton'),1,2);
p9.addBorder('Default');

logo=panel;
logo.add(label('tag','image','image',imageicon(which('logo.GIF'))),1,1);

% Add parameter panels to a panel called left
left=panel;
left.add(p12,1,1,'horizontal');
left.add(sum,2,1,'horizontal');
left.add(p78,3,1,'horizontal');
left.add(p9,4,1,'horizontal');
left.add(logo,5,1,'horizontal');

pref=left.getPreferredSize; 
left.setMinimumSize(pref(1),pref(2));

% Add left panel to the left and an axes to the right 
f1.add(left,1,1); 
f1.setWeight(1e6,1e6); 
f1.add(axes('tag','axis','size',[600 400]),1,2,'both'); 
f1.resetWeight;

%f1.add(axes('tag','axis'),2,2,2,1,'both');

f1.get('geombutton').addActionListener('gui2_al');
f1.get('meshbutton').addActionListener('gui2_al');
f1.get('solvebutton').addActionListener('gui2_al');
f1.get('plotbutton').addActionListener('gui2_al');
f1.get('defbutton').addActionListener('gui2_al');
f1.get('leftbc').addActionListener('gui2_al');
f1.get('rightbc').addActionListener('gui2_al');
f1.get('topbc').addActionListener('gui2_al');
f1.get('bottombc').addActionListener('gui2_al');

f1.show;

gui2_al(struct('source',{f1.get('defbutton')},'parent',{f1}));

