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.net.*;
import java.util.*;

public class SK1
{
//değişken tanımı
//P : atmosfer basıncı bar
//Q : çekilen ısı enerjisi KW
//T[0]: hava giriş (atmosfer) sıcaklığı
//f0: hava giriş (atmosfer) sanal nem 0-1
//T[1]: hava çıkış sıcaklığı
//f1: hava çıkış sanal nem 0-1
//ma: hava debisi kg/s
//m2: enerji çekiş ısı değiştirgeci debisi
//T[2]: enerji çekiş ısı değiştirgeci giriş (sistem çıkış) sıcaklığı derece C
//T[3]: enerji çekiş ısı değiştirgeci çıkış (sistem giriş) sıcaklığı derece C
//T[4]: soğumuş soğutma kulesi sıcaklığı derece C
//T[5]: soğutma kulesi sıcaklığı ısı değiştirgeci çıkışı derece C
//m5  : soğutma kulesi su çıkış debisi kg/s
//T[6]: besleme suyu sıcaklığı derece C
//m6  : besleme suyu debisi kg/s
//T[7]: soğutma kulesi giriş sıcaklığı derece C
yashava yh;
steamT st;
public SKData rd;
String SKName;
double T[];
double f[];
double w[];
double h[];
double Twb[];
double v[];
double ma,m2,m4,m5,m6;
double Q;
double Qd;
double A;
//ma kuru hava debisi
//m2 ısı değiştirici kapalı su debisi
//m6 besleme suyu debisi
//m5 soğutma kulesi açık su giriş debisi
//m4 soğutma kulesi su ıkş debisi
public SK1(String SKNamei,double P,double T0,double f0,double T1,double f1,
double T2,double T3,double T4,double T7)
{
String SKName=SKNamei;	
readSK(SKName);
Q=rd.Qd;
	
yh=new yashava();
st=new steamT();

T=new double[9];
f=new double[2];
w=new double[2];
h=new double[9];
v=new double[9];
Twb=new double[2];
hesapla(P,T0,f0,T1,f1,T2,T3,T4,T7);
}

public SK1(String SKNamei)
{
String SKName=SKNamei;	
readSK(SKName);
Q=rd.Qd;	
yh=new yashava();
st=new steamT();
T=new double[9];
f=new double[2];
w=new double[2];
h=new double[9];
v=new double[9];
double T0=24.0;
double f0=0.5;
double T1=26.0;
double f1=0.9;
double T2=34.0;
double T3=29.0;
double T4=22.0;
double T7=27.0;
Twb=new double[2];
double P=1.01325;
hesapla(P,T0,f0,T1,f1,T2,T3,T4,T7);	
}

public SK1(String SKNamei,double P)
{
String SKName=SKNamei;	
readSK(SKName);
Q=rd.Qd;	
yh=new yashava();
st=new steamT();
T=new double[9];
f=new double[2];
w=new double[2];
h=new double[9];
v=new double[9];
v=new double[9]; 
double T0=24.0;
double f0=0.5;
double T1=26.0;
double f1=0.9;
double T2=34.0;
double T3=29.0;
double T4=22.0;
double T7=27.0;
Twb=new double[2];
hesapla(P,T0,f0,T1,f1,T2,T3,T4,T7);
}

public void hesapla(double P,double T0,double f0,double T1,double f1,double T2,double T3,double T4,double T7)
{
double a[]=new double[15];
double b[]=new double[9];
a=yh.property("tdb_rh",T0,f0,P);
T[0]=a[1];
v[0]=a[2];
w[0]=a[5];
h[0]=a[8];
f[0]=f0;
Twb[0]=a[14];//sistemdeki en düşük sıcaklık
a=yh.property("tdb_rh",T1,f1,P);
T[1]=a[1];
v[1]=a[2];
w[1]=a[5];
h[1]=a[8];
f[1]=f1;
Twb[1]=a[14];


if(T4<Twb[0])T4=Twb[0];

T[4]=T4;
b=st.property("tp",T4,P);
h[4]=b[3];
v[4]=b[2];

T[6]=T[4];
h[6]=h[4];
v[6]=v[4];
ma=Q/(h[1]-h[0]-(w[1]-w[0]));
m6=ma*(w[1]-w[0]);

T[5]=T4;
h[5]=h[4];
v[5]=v[4];

T[7]=T7;
b=st.property("tp",T7,P);
h[7]=b[3];
v[7]=b[2];

T[2]=T2;
b=st.property("tp",T2,P);
h[2]=b[3];
v[2]=b[2];

T[3]=T3;
b=st.property("tp",T3,P);
h[3]=b[3];
v[3]=b[2];

m5=Q/(h[7]-h[5]);
m2=Q/(h[2]-h[3]);
m4=m5-m6;
double dT1,dT2,dTln;
dT1=(T[2]-T[7]);
dT2=(T[3]-T[5]);
if(dT1==dT2) dTln=dT1;
else dTln=(dT1-dT2)/Math.log(dT1/dT2);
double Um=2.0;//KW/m^2K
A=Q/Um/dTln;
}

public double[] cikti()
{double a[]=new double[33];
 for(int i=0;i<=7;i++) {a[i+10]=T[i];a[i+20]=h[i];}
 a[0]=Q;
 a[1]=A;
 a[2]=ma;
 a[3]=ma*v[0]*3600;
 a[4]=m2;
 a[5]=m2*v[2]*3600;
 a[6]=m5;
 a[7]=m5*v[5]*3600;
 a[8]=m6;
 a[9]=m6*v[6]*3600;;
 a[18]=Twb[0];
 a[19]=Twb[16];
 a[28]=w[0];
 a[29]=w[1];
 a[30]=f[0];
 a[31]=f[1];
 a[32]=Q/4.187*3600.0;
 return a;
}

public String[][] abc()
{String a[]=new String[33];
 for(int i=0;i<=7;i++) {a[i+11]=toString(T[i],10,2);a[i+21]=toString(h[i],10,2);}
 a[0]=toString(Q,10,2);
 a[1]=toString((Q/4.187*3600.0),10,0);
 a[2]=toString(A,10,2);
 a[3]=toString(ma,10,2);
 a[4]=toString(ma*v[0]*3600,10,2);
 a[5]=toString(m2,10,2);
 a[6]=toString(m2*v[2]*3600,10,2);
 a[7]=toString(m5,10,2);
 a[8]=toString(m5*v[5]*3600,10,2);
 a[9]=toString(m6,10,4);
 a[10]=toString(m6*v[6]*3600,10,4);
 a[19]=toString(Twb[0],10,2);
 a[20]=toString(Twb[1],10,2);
 a[29]=toString(w[0],10,6);
 a[30]=toString(w[1],10,6);
 a[31]=toString(f[0],10,2);
 a[32]=toString(f[1],10,2);
 String b[][]=new String[33][3];
 b[0][0]="  Q ısı kapasitesi ";
 b[1][0]="  Q ısı kapasitesi "; 
 b[2][0]="  A ısı değiştirgeci boru alanı "; 
 b[3][0]="  ma hava debisi "; 
 b[4][0]="  Va hava debisi "; 
 b[5][0]="  m2 ısı değiştirgeci kullanım tarafı su debisi ";
 b[6][0]="  V2 ısı değiştirgeci kullanım tarafı su debisi ";
 b[7][0]="  m5 soğutma kulesi çıkış debisi ";
 b[8][0]="  V5 soğutma kulesi çıkış debisi ";
 b[9][0]="  m6 soğutma kulesi besleme suyu debisi ";
 b[10][0]="  V6 soğutma kulesi besleme suyu debisi ";
 b[11][0]="  T0 hava girişi sıcaklığı ";
 b[12][0]="  T1 hava çıkışı sıcaklığı ";
 b[13][0]="  T2 ısı değiştirgeci girişi sıcaklığı ";
 b[14][0]="  T3 ısı değiştirgeci çıkışı sıcaklığı ";
 b[15][0]="  T4 Soğutma kulesi su çıkışı sıcaklığı ";
 b[16][0]="  T5 S K su çıkışı+bes.suyu karışımı sıcaklığı ";
 b[17][0]="  T6 Soğutma kulesi besleme suyu sıcaklığı ";
 b[18][0]="  T7 Soğutma kulesi su giriş sıcaklığı ";
 b[19][0]="  Twb0 soğutma kulesi giriş yaş hava sıcaklığı ";
 b[20][0]="  Twb1 soğutma kulesi çıkış yaş hava sıcaklığı ";
 b[21][0]="  h0 hava girişi entalpi ";
 b[22][0]="  h1 hava çıkışı entalpi ";
 b[23][0]="  h2 ısı değiştirgeci girişi entalpi ";
 b[24][0]="  h3 ısı değiştirgeci çıkışı entalpi ";
 b[25][0]="  h4 Soğutma kulesi su çıkışı entalpi ";
 b[26][0]="  h5 Soğutma kulesi su çıkışı entalpi ";
 b[27][0]="  h6 Soğutma kulesi besleme suyu entalpi ";
 b[28][0]="  h7 Soğutma kulesi su girişi entalpi "; 
 b[29][0]="  w0 soğutma kulesi giriş mutlak nem ";
 b[30][0]="  w1 soğutma kulesi çıkış mutlak nem "; 
 b[31][0]="  f0 soğutma kulesi giriş bağıl nem ";
 b[32][0]="  f1 soğutma kulesi çıkış bağıl nem "; 
 for(int i=0;i<33;i++) b[i][1]=a[i];
 b[0][2]=" KW";
 b[1][2]=" KCal/h";
 b[2][2]=" m^2";
 b[3][2]=" kg/s";
 b[4][2]=" m^3/h";
 b[5][2]=" kg/s";
 b[6][2]=" m^3/h";
 b[7][2]=" kg/s";
 b[8][2]=" m^3/h";
 b[9][2]=" kg/s";
 b[10][2]=" m^3/h";
 b[11][2]=" derece C";
 b[12][2]=" derece C";
 b[13][2]=" derece C";
 b[14][2]=" derece C";
 b[15][2]=" derece C";
 b[16][2]=" derece C";
 b[17][2]=" derece C";
 b[18][2]=" derece C";
 b[19][2]=" derece C";
 b[20][2]=" derece C"; 
 b[21][2]=" KJ/kg   ";
 b[22][2]=" KJ/kg   ";
 b[23][2]=" KJ/kg   ";
 b[24][2]=" KJ/kg   ";
 b[25][2]=" KJ/kg   ";
 b[26][2]=" KJ/kg   ";
 b[27][2]=" KJ/kg   ";
 b[28][2]=" KJ/kg   ";
 b[29][2]=" kg su buharı/kg kuru hava";
 b[30][2]=" kg su buharı/kg kuru hava";
 b[31][2]=" ";
 b[32][2]=" ";
  return b;
}

public String readSK(String SKName)
{
String s="";
Vector gi=new Vector();
rd=new SKData("YTO-RKSK-02",0.66666,23.26,0.91,0.75);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-03",0.8333,34.89,1.38,0.75);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-04",1.16666,46.522,1.73,1.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}   

rd=new SKData("YTO-RKSK-05",1.33333,58.152,2.60,1.5);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}
   
rd=new SKData("YTO-RKSK-06",1.86666,81.4138,3.0,2.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-07",2.4,104.675,4.28,2.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-08",3.0667,133.75,5.17,3.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-09",3.75,162.8278,5.85,3.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-1",4.5,195.3933,8.94,3.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-2",9.0,327.98,15.74,6.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-3",11.25,409.39,19.84,6.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-4",13.5,538.49,24.64,9.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-5",15.27,622.23,28.64,9.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-6",18.0,751.33,35.44,12.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}
   
rd=new SKData("YTO-RKSK-7",21.3333,837.4,39.44,16.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-8",22.5,964.173,45.84,15.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}
      
rd=new SKData("YTO-RKSK-9",26.67,1046.75,49.84,20.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}

rd=new SKData("YTO-RKSK-10",32.0,1256.1,60.61,24.0);
try{gi.addElement(rd);} catch(ArrayIndexOutOfBoundsException e) 
   {System.out.println("Array Index Out Of Bounds Exception");}
   
         int i;
Enumeration n1=gi.elements();
while(n1.hasMoreElements())
{
   rd=(SKData)n1.nextElement();
   s+=rd.SKName+" ";
   if (rd.SKName.equals(SKName)) {break;}
}
return s;
}

public String[] SKisimler()
{ //Soğutma kulesi isimlerini boyutlu String değişken seti olarak verir
  String s1=SKName;;String s2=readSK("null");readSK(s1);
  StringTokenizer token;
  token=new StringTokenizer(s2);
  String st[]=new String[token.countTokens()];
    int i=0;
    while(token.hasMoreTokens())
    {
    st[i++]=new String((String)token.nextToken());
    }
return st;    
}
   public static String toString(double left, int w, int d)
   // converts a double to a string with given width and decimals.
   {
	NumberFormat df=NumberFormat.getInstance(Locale.US);
	df.setMaximumFractionDigits(d);
    df.setMinimumFractionDigits(d);
    df.setGroupingUsed(false);
    String s = df.format(left);
    while (s.length() < w)
      s = " " + s;
    if (s.length() > w)
    {
        s = "";
        for (int i=0; i<w; i++)
          s = s + "-";
    }
    return s;
    } 
}