//======================================================
// Termodinamik-nümerik analiz paketleri
// Kimyasal denge
// Dr. Turhan Coban
// EGE Üniversitesi Mühendislik Fakultesi, Makina Bölümü
// turhan.coban@ege.edu.tr
// =====================================================


import java.lang.Integer;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
import java.util.Locale;
import java.text.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
//import java.io.*;
//import Plot2D2;
//import PlotShapesSW;
//import BasicWindowMonitor;

public class gibbsTable extends JApplet implements ActionListener,ItemListener
{
     String g[];
     double gn[];
     double Tfuel;
     double Tair;
     double Texhaust;
     double excess_air;
     double QKW; //istenilen ısı çıkışı
     double nair,nair_tamyanma;
     boolean Higher_heating_value;	
  JPanel panel[];
  JTextArea output;
  JTextField hhv_lhv;
  boiler k1;
  JButton b1;
  JCheckBox hhv;//higher heating value chech
  JTextArea hhv_out;//higher heating value check result
  girdiP1 gp1;
  String state[]={"   Üst ısıl değer            ","   Alt ısıl değer             "}; 
   
    public void yakit_sec()
    {
    Object[] o=new Object[]{"Dizel","Doğal gaz","LPG","biogaz"};
    String name=(String)JOptionPane.showInputDialog(null,"Yakıt karışımı seçiniz : ",
    "Yakıt seçimi",JOptionPane.QUESTION_MESSAGE,null,o,"Dizel");
    if(name.equals("Dizel"))
    {
	String g1[]={"c9h20",
"c10h22",
"c11h24",
"c12h26",
"c13h28",
"c14h30",
"c15h32",
"c16h34",
"c17h36",
"c18h38",
"c19h40",
"c20h42",
"c11h16",
"c12h18",
"c13h20",
"c14h22",
"c15h24",
"c16h26",
"c17h28",
"c18h30",
"c10h8",
"c11h10",
"c12h12",
"c13h14",
"c14h16"};
double gn1[]={0.01715,
0.03079,
0.05964,
0.09655,
0.1960,
0.1780,
0.08319,
0.03902,
0.01837,
0.00865,
0.00409,
0.001978,
0.00328,
0.004556,
0.005626,
0.005495,
0.005206,
0.005367,
0.002328,
0.001463,
0.04248,
0.08293,
0.05228,
0.03410,
0.02103};
g=g1;
gn=gn1;
	}
else if(name.equals("Doğal gaz"))
{
String g1[]={"ch4","c2h6","c3h8","co2","h2","co","h2o"};
double gn1[]={0.908,0.059,0.006,0.018,0.0,0.0,0.0}; 
g=g1;
gn=gn1;
}
else if(name.equals("LPG"))
{
// c3h8 0.3
// c4h10 0.7
String g1[]={"c3h8","c4h10","co2","h2","co","h2o"};
double gn1[]={0.3,0.7,0,0,0,0}; 
g=g1;
gn=gn1;
}
else if(name.equals("biogaz"))
{
// h2 0.116
// co 0.174
// ch4 0.082
// co2 0.131
// n2 0.382
String g1[]={"h2","co","ch4","co2","n2","h2","co","h2o"};
double gn1[]={0.116,0.174,0.082,0.131,0.382,0,0,0}; 
g=g1;
gn=gn1;
}
else
{
String g1[]={"ch4","c2h6","c3h8","co2","h2","co","h2o"};
double gn1[]={0.908,0.059,0.006,0.018,0.0,0.0,0.0}; 
g=g1;
gn=gn1;
}
}
   public String setArea()
   {
	double nyakit=k1.V_NM3_h(QKW); 
	double myakit=k1.m_kg_h(QKW,Tfuel,1.01325);     
    String s="";  
    s+="    Program : Dr. Turhan Çoban, \n";
    s+="    Ege Üniversitesi, Mühendislik Bilimleri Fak., Makina Bölümü\n";
    s+="    e-posta : turhan.coban@ege.edu.tr\n";
    s+="    =======================================================\n";
    s+="    1 kmol yakıt için ısı enerjisi çıktısı Q="+k1.Qi()+" KJ/kmol yakıt\n";
    s+="    Yakıtın ısıl değeri Q_maksimum ="+k1.Qmax()+" KJ/kmol yakıt\n";
    s+="    kazan verimi Q/Qmaksimum= "+k1.efficiency()+"\n";  
    double m1=k1.m_kg_h(QKW,Tfuel,1.01325);
    s+="    Yakıt giriş sıcaklığı   = "+Tfuel+" derece K\n";
    s+="    Hava giriş sıcaklığı    = "+Tair+" derece K\n";
    s+="    Baca çıkış sıcaklığı    = "+Texhaust+" derece K\n";
    s+="    hava fazlalık katsayısı = "+excess_air+"\n";
    s+="    istenilen ısıl çıktı    = "+QKW+" kW = "+QKW*859.8041557+"kCal/saat\n"; 
    s+="    hacimsel yakıt debisi   = "+nyakit+" Nm^3/h\n";
    s+="    kütlesel yakıt debisi   = "+myakit+" kg/h\n";
    s+="    yakıtın molekül ağırlığı= "+k1.M_fuel()+"kg/kmol\n"; 
    s+="    hacimsel tam hava yanma hava debisi     = "+nyakit*k1.nair_stoichiometric+"Nm^3/h\n";
    s+="    oransal tam yanma oksijen katsayısı     = "+k1.nair_stoichiometric/(1.0+79.0/21.0)+"kmol/kmol yakıt\n";
    s+="    hacimsel gerçek yanma hava debisi       = "+nyakit*k1.nair+" Nm^3/h\n";
    s+="    oransal gerçek yanma oksijen katsayısı  = "+k1.nair/(1.0+79.0/21.0)+"kmol/kmol yakıt\n";
    s+="    hava /yakıt oranı       = "+k1.kg_air_to_kg_fuel()+"  kg hava/kg yakıt \n";
    s+="    hava /yakıt oranı       = "+k1.kmol_air_to_kmol_fuel()+"kmol air/kmol fuel \n";
    s+="    Adyabatik alev sıcaklığı= "+k1.Ti(g,gn,Tfuel,Tair,excess_air,false,0.0)+" derece K";
    s+="    \n";
    s+="    "+k1.fuel(); 
    s+="    "+k1.air(); 
    s+="    "+k1.exhaust();
    s+="    "+k1.dry_exhaust();
    s+="    "+k1.denklem();     
    return s;
   }

	
    public void init()
    {      
      JTabbedPane jtp=new JTabbedPane();
	  b1=new JButton("Kazan verimini hesaplamak için basınız");
	  b1.addActionListener(this);
      hhv=new JCheckBox("Üst ısıl değer ? ",true); 
      hhv.addItemListener(this);     
      JPanel panel[]=new JPanel[2];
      panel[0]= new JPanel(new BorderLayout());
      panel[1]= new JPanel(new FlowLayout());
      yakit_sec();
      Tfuel=298.0;//K
      Tair=298.0;//K
      Texhaust=162.5+298.0;//K
      excess_air=1.08;
      QKW=2816.0085875737277;
      Higher_heating_value=true;//üst ısıl değer üzerinden analiz
      
      String s1[]={"yakıt sıcaklığı, Tyakıt",
                   "hava sıcaklığı, Thava",
                   "Eksoz gazları sıcaklığı , Teksoz",
                   "hava fazlalık katsayısı",
                   "istenilen kazan ısı çıktısı"};
     String s2[]={"derece K",
                   "derece K",
                   "derece K",
                   " 0..1..",
                   "KW"};
     double t[]={Tfuel,Tair,Texhaust,excess_air,QKW};
     gp1=new girdiP1(g,gn,s1,s2,t,"Kazan verim analizi girdi sayfası");              
     k1=new boiler(gp1.gas,gp1.ngas_percent,Tfuel,Tair,Texhaust,excess_air,Higher_heating_value); 
     output=new JTextArea(setArea()); 
     output.setFont(new Font("TimesRoman",Font.BOLD,14));
     setLayout(new BorderLayout(5,5));
     panel[0].add(gp1,BorderLayout.NORTH); 
     hhv_lhv=new JTextField(state[0]);
     hhv_lhv.setFont(new Font("TimesRoman",Font.BOLD,14));                      
     panel[1].add(hhv); 
     panel[1].add(hhv_lhv);     
     panel[0].add(panel[1],BorderLayout.CENTER); 
     panel[0].add(b1,BorderLayout.SOUTH);
     JScrollPane skrolPane=new JScrollPane(panel[0]);
     jtp.addTab("giriş paneli",skrolPane);     
     jtp.addTab("çıktı paneli",new JScrollPane(output));
     add(jtp);            
    }

    public void actionPerformed(ActionEvent e)
    {
    if (e.getSource()==b1)
    {
      double a[]=gp1.readText();
      double np[]=gp1.readNgas();
      String sg[]=gp1.readgas();
      gn=np;
      g=sg;
      Tfuel=a[0];//K
      Tair=a[1];//K
      Texhaust=a[2];//K
      excess_air=a[3];
      QKW=a[4];
      k1.set_boiler(gp1.gas,gn,Tfuel,Tair,Texhaust,excess_air,Higher_heating_value);
      output.setText(setArea());
    }
    repaint();
  }
              
public void itemStateChanged(ItemEvent e)
{   if(e.getSource()==hhv)
    { if(e.getStateChange()==ItemEvent.SELECTED)
        {Higher_heating_value=true;
        hhv_lhv.setText(state[0]);
        }
      else
        {Higher_heating_value=false;
        hhv_lhv.setText(state[1]);
        }
    }
    double a[]=gp1.readText();
     Tfuel=a[0];//K
     Tair=a[1];//K
     Texhaust=a[2];//K
     excess_air=a[3];
     QKW=a[4];
     k1.set_boiler(gp1.gas,gp1.ngas_percent,Tfuel,Tair,Texhaust,excess_air,Higher_heating_value);
    output.setText(setArea());
    repaint();
}  
    public static void main(String s[])
    {
        //main program
	    JFrame f = new JFrame("Kazan verimi");
       f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    JApplet applet = new boilerTable();
        f.getContentPane().add("Center", applet);
        applet.init();
        f.pack();
        f.setSize(new Dimension(1000,600));
        f.setVisible(true);
    }    
 }

