/* * hslab.java * * Created on July 31, 2000, 5:25 PM */ /** * * @author Seung Young Park * @version 1.1 */ import javax.swing.*; import javax.swing.event.*; import javax.swing.border.Border; import java.lang.Math; import java.lang.String; import java.util.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; public class hslab extends javax.swing.JApplet { /** Creates new form hslab */ public hslab() { initComponents (); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. */ private void initComponents () {//GEN-BEGIN:initComponents jTextPane3 = new javax.swing.JTextPane (); jTextPane4 = new javax.swing.JTextPane (); jTextPane5 = new javax.swing.JTextPane (); jTextPane6 = new javax.swing.JTextPane (); jTextPane7 = new javax.swing.JTextPane (); jTextPane8 = new javax.swing.JTextPane (); jTextPane9 = new javax.swing.JTextPane (); TinitText = new javax.swing.JTextField (); TslabText = new javax.swing.JTextField (); SpaceText = new javax.swing.JTextField (); TcondText = new javax.swing.JTextField (); DensiText = new javax.swing.JTextField (); HcapaText = new javax.swing.JTextField (); TimePassed = new javax.swing.JTextField (); graphArea = new javax.swing.JPanel (); ClearButton = new javax.swing.JButton (); StartButton = new javax.swing.JButton (); lslab = new javax.swing.JPanel (); rslab = new javax.swing.JPanel (); jLabel1 = new javax.swing.JLabel (); getContentPane ().setLayout (new AbsoluteLayout ()); setBackground (java.awt.Color.gray); jTextPane3.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane3.setText ("Initial Slab Temperature [C]"); getContentPane ().add (jTextPane3, new AbsoluteConstraints (10, 50, 220, 30)); jTextPane4.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane4.setText ("Slab Surface Temperature for Time > 0 [C]"); getContentPane ().add (jTextPane4, new AbsoluteConstraints (10, 90, 220, 30)); jTextPane5.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane5.setText ("Half-Width of Slabs [cm]"); getContentPane ().add (jTextPane5, new AbsoluteConstraints (10, 130, 220, 30)); jTextPane6.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane6.setText ("Thermal Conductivity [cal/cm.sec.K]"); getContentPane ().add (jTextPane6, new AbsoluteConstraints (10, 170, 220, 30)); jTextPane7.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane7.setText ("Density [g/cm3]"); getContentPane ().add (jTextPane7, new AbsoluteConstraints (10, 210, 220, 30)); jTextPane8.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane8.setText ("Heat Capacity [cal/g.K]"); getContentPane ().add (jTextPane8, new AbsoluteConstraints (10, 250, 220, 30)); jTextPane9.setFont (new java.awt.Font ("Arial", 0, 10)); jTextPane9.setText ("Time required for centerline temperature to reach 0.99 X (slab surface temperature) [min]"); getContentPane ().add (jTextPane9, new AbsoluteConstraints (10, 300, 490, 30)); TinitText.setName (""); TinitText.setText ("70.0"); getContentPane ().add (TinitText, new AbsoluteConstraints (240, 50, 40, 30)); TslabText.setText ("100.0"); getContentPane ().add (TslabText, new AbsoluteConstraints (240, 90, 40, 30)); SpaceText.setText ("10.0"); getContentPane ().add (SpaceText, new AbsoluteConstraints (240, 130, 40, 30)); TcondText.setText ("0.8"); getContentPane ().add (TcondText, new AbsoluteConstraints (240, 170, 40, 30)); DensiText.setText ("2.0"); DensiText.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { DensiTextActionPerformed (evt); } } ); getContentPane ().add (DensiText, new AbsoluteConstraints (240, 210, 40, 30)); HcapaText.setText ("1.0"); getContentPane ().add (HcapaText, new AbsoluteConstraints (240, 250, 40, 30)); TimePassed.setPreferredSize (new java.awt.Dimension(7, 15)); TimePassed.setText (" "); getContentPane ().add (TimePassed, new AbsoluteConstraints (510, 300, 70, 30)); graphArea.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black)); graphArea.setBackground (java.awt.Color.white); getContentPane ().add (graphArea, new AbsoluteConstraints (310, 50, 250, 230)); ClearButton.setFont (new java.awt.Font ("Dialog", 0, 12)); ClearButton.setText ("Clear"); ClearButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseReleased (java.awt.event.MouseEvent evt) { ClearButtonMouseReleased (evt); } } ); getContentPane ().add (ClearButton, new AbsoluteConstraints (300, 350, 280, 30)); StartButton.setFont (new java.awt.Font ("Dialog", 0, 12)); StartButton.setText ("Start"); StartButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseReleased (java.awt.event.MouseEvent evt) { StartButtonMouseReleased (evt); } } ); getContentPane ().add (StartButton, new AbsoluteConstraints (10, 350, 280, 30)); lslab.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black)); lslab.setBackground (java.awt.Color.red); getContentPane ().add (lslab, new AbsoluteConstraints (290, 50, 20, 230)); rslab.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black)); rslab.setBackground (java.awt.Color.red); getContentPane ().add (rslab, new AbsoluteConstraints (560, 50, 20, 230)); jLabel1.setText ("Heating of a Finite Slab"); jLabel1.setForeground (java.awt.Color.black); jLabel1.setFont (new java.awt.Font ("Dialog", 1, 14)); getContentPane ().add (jLabel1, new AbsoluteConstraints (210, 0, 200, 40)); }//GEN-END:initComponents private void DensiTextActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DensiTextActionPerformed // Add your handling code here: }//GEN-LAST:event_DensiTextActionPerformed private void ClearButtonMouseReleased (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_ClearButtonMouseReleased // mouse event is release of the button float width = graphArea.getWidth(); float height = graphArea.getHeight(); float org_x = graphArea.getX(); float org_y = graphArea.getY(); Graphics g = getGraphics(); g.setColor(Color.white); g.fillRect( (int)org_x, (int)org_y, (int)width, (int)height ); graphArea.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black, 1)); lslab.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black, 1)); lslab.setBackground (java.awt.Color.red); rslab.setBorder (new javax.swing.border.LineBorder(java.awt.Color.black, 1)); rslab.setBackground (java.awt.Color.red); TimePassed.setText(""); // Add your handling code here: }//GEN-LAST:event_ClearButtonMouseReleased private void StartButtonMouseReleased (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_StartButtonMouseReleased float Tr = 0; // reduced temperature = (T1-T)/(T1-T0) float Ti = 0; float Ts = 0; float b = 0; float k = 0; float rho= 0; float Cp = 0; float fTemp = 0; float fTime = 10; float fY = 0; float fYnew = 0; float Trnew = 0; float Tr_middle = 0; boolean flag_time = true; boolean flag_y = true; float width = graphArea.getWidth()-3; float height = graphArea.getHeight()-5; float org_x = graphArea.getX()+2; float org_y = graphArea.getY()+2; try { Ti = Float.valueOf(TinitText.getText()).floatValue(); Ts = Float.valueOf(TslabText.getText()).floatValue(); b = Float.valueOf(SpaceText.getText()).floatValue(); k = Float.valueOf(TcondText.getText()).floatValue(); rho = Float.valueOf(DensiText.getText()).floatValue(); Cp = Float.valueOf(HcapaText.getText()).floatValue(); } catch (Exception ex) { System.out.println("Malformatted number!"); } Graphics g = getGraphics(); g.setColor(Color.red); while(flag_time) { float n = (float)0.1; fY = 0; Tr = Tcalculate(Ti,Ts,b,k,rho,Cp,fTime,fY); TimePassed.setText(""+fTime/60); while(flag_y) { fYnew = n*b; // n determines the smoothness of the curve Trnew = Tcalculate(Ti,Ts,b,k,rho,Cp,fTime,fY); g.drawLine( (int)(org_x+0.5*width*(1+fY/b)), (int)(org_y+height*(1-Tr)), (int)(org_x+0.5*width*(1+fYnew/b)), (int)(org_y+height*(1-Trnew)) ); //symmetry drawing g.drawLine( (int)(org_x+0.5*width*(1-fY/b)), (int)(org_y+height*(1-Tr)), (int)(org_x+0.5*width*(1-fYnew/b)), (int)(org_y+height*(1-Trnew)) ); if (fYnew >= b) { flag_y = false; } fY = fYnew; Tr = Trnew; n = n + (float)0.01; } // check for 99% heat transfer Tr_middle = Tcalculate(Ti,Ts,b,k,rho,Cp,fTime,0); if ((Tr_middle*(Ts-Ti)+Ti) >= (float)0.99*Ts) { flag_time = false; } fTime = fTime + (float)30.0; // increment of time by 30 seconds (0.5 minute) flag_y = true; } // Add your handling code here: Font f1 = new Font("Arial",Font.PLAIN,10); g.setFont(f1); g.setColor(Color.black); g.drawString("Time Step = 30 seconds",(int)(org_x+width/2),(int)(org_y+height/2)); }//GEN-LAST:event_StartButtonMouseReleased // The temperature calculation methods public float Tcalculate( float Ti, float Ts, float b, float k, float rho, float Cp, float time, float y ) { float Sumo = 0; float Sum = 0; float pi = (float)3.14; float alpha = k/(rho*Cp); int n = 0; boolean flag = true; while ( flag ) { Sum = Sumo + (float) ( Math.pow(-1,n)/((n+0.5)*pi) * Math.exp( -(n+0.5)*(n+0.5)*pi*pi*alpha*time/(b*b) ) * Math.cos( (n+0.5)*pi*y/b ) ); if ( Math.abs(Sum-Sumo) < 1.E-5 ) { flag = false; } Sumo = Sum; n = n + 1; } return (1-2*Sum); // return (T-T0)/(T1-T0) } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextPane jTextPane3; private javax.swing.JTextPane jTextPane4; private javax.swing.JTextPane jTextPane5; private javax.swing.JTextPane jTextPane6; private javax.swing.JTextPane jTextPane7; private javax.swing.JTextPane jTextPane8; private javax.swing.JTextPane jTextPane9; private javax.swing.JTextField TinitText; private javax.swing.JTextField TslabText; private javax.swing.JTextField SpaceText; private javax.swing.JTextField TcondText; private javax.swing.JTextField DensiText; private javax.swing.JTextField HcapaText; private javax.swing.JTextField TimePassed; private javax.swing.JPanel graphArea; private javax.swing.JButton ClearButton; private javax.swing.JButton StartButton; private javax.swing.JPanel lslab; private javax.swing.JPanel rslab; private javax.swing.JLabel jLabel1; // End of variables declaration//GEN-END:variables }