  //options for string s: "tdb_twb"  kuru termometre - yaş termometre sıcaklığı
  //                      "tdb_rh"   kuru termometre sıcaklığı - bağıl nem
  //                      "tdb_w"    kuru termometre sıcaklığı - özgül nem
  //                      "tdb_tdew" kuru termometre sıcaklığı - çiğ noktası sıcaklığı
  //                      "tdb_pv"   kuru termometre sıcaklığı - su buharı basıncı
  //                      "tdb_dos"  kuru termometre sıcaklığı - degree of saturation
  //                      "tdb_h"    kuru termometre sıcaklığı - entalpi
  //                      "tdb_s"    kuru termometre sıcaklığı - entropi
  //                      "w_rh"     özgül nem    - bağıl humifdity
  //                      "w_h"      özgül nem    -  entalpi
  /*
  aa[0]=P;
  aa[1]=t;
  aa[2]=v;
  aa[3]=pv;
  aa[4]=Pa;
  aa[5]=w;
  aa[6]=rh;
  aa[7]=dos;
  aa[8]=h;
  aa[9]=s;
  aa[10]=tdp;
  aa[11]=ha;
  aa[12]=hv;
  aa[13]=w*hv;
  */
  //buhar opsiyonları
  //sp[0] p
  //sp[1] t
  //sp[2] v
  //sp[3] h
  //sp[4] u
  //sp[5] s
//cases of String s
// tv tp th tu ts tx
// pv    pt ph pu ps px
// vp    vt
public class yashavaprosesleri
{
yashava yh;
double P; //basınç
double A[][][]; //psikometrik tablo verisi
Plot pi;
double tmin,tmax;
String baslik[];

public yashavaprosesleri(double tmini,double tmaxi,double Pi)
{P=Pi;
yh=new yashava();
tmin=tmini;
tmax=tmaxi;
ps_plot_hazirla(tmin,tmax,P);
String baslik1[]={"Basınç bar","sıcaklık C","v kh özgül hacim m^3/kgkh","Pv_su_buharı_kısmi_basıncı bar","Pa_hava_kısmi_basıncı bar","w,_özgül nem kg su bah./kg kh",'\u03D5'+" bağıl nem","dos,doygunluk_derecesi","h enthalpi KJ/kgkh","s, entropi KJ/kgkh","tçn,çiğ noktası sıcaklığı derece C","ha,kuru havanın entalpisi KJ/kgkh","hv,su buharının entalpisi KJ/kgkh","hv*w,duyulur enthalpi KJ/kgkh","t_yaş_hava sıcaklığı derece C"};      
baslik=baslik1;
}

public void print(double a[][],String s)
{Text.print(a,baslik,s);}

public void print(double a[][],String baslik2[],String s)
{Text.print(a,baslik2,s);}


//======== Plot psikometrik diyagram ===========

     public static double[][][] ps_verisi(double tmin,double tmax,double P)
     {
	 //prepare pyschrometric chart data for pressure P
     yashava w=new yashava();
	 double aa[]=new double[14];  
     double bb[]=new double[14];  
	 f2 ff=new f2();
	 //double x1[][]=new double[62][51];
	 //double y1[][]=new double[62][51];
	 double A[][][]=new double[2][62][51];
     //initilise as a function plot
     int i,j;
     i=0;
     double h;
     for(double rh=0.1;rh<=1.0;rh+=0.1)
     {   j=0;
         for(double t=tmin;t<=tmax;t+=1.0)
         {
	     aa=w.property1("tdb_rh",t,rh,P);
	     h=aa[8];
	        if(rh>0.99) 
            { 
	        h=aa[8];
            A[0][11+j][0]=t;A[1][11+j][0]=aa[5];
            bb=w.property1("w_h",0.0,h,P);
            A[0][11+j][1]=bb[10];A[1][11+j][1]=0.0;
            }
	        A[0][i][j]=t;
            A[1][i][j]=aa[5];
	        j++;
            }
         i++;
     }	 
     return A;
     }
      
      public void ps_plot_hazirla(double tmin,double tmax,double P1)
      {
	  double x1[][]=new double[62][51];
	  double y1[][]=new double[62][51];
	  //double A[][][]=new double[2][62][51];
	  A=ps_verisi(tmin,tmax,P1);
	  for(int i=0;i<A[0].length;i++)
	   for(int j=0;j<A[0][0].length;j++)
	       {x1[i][j]=A[0][i][j];y1[i][j]=A[1][i][j];}
      pi=new Plot(x1,y1);
      String ss2="psikometrik diyagram "+P+" bar";
      pi.setPlabel(ss2);
      pi.setXlabel("T Kuru termometre sıcaklıgı derece C");
      pi.setYlabel("w mutlak nem kg nem/kg kuru hava");
      pi.setMinMax(tmin,tmax,0.0,0.05);
      pi.setXgrid(1);
      pi.setYgrid(1);
      }
      
      public void addData(double a1[][],int plottype,int red,int green,int blue)
      { double x1[]=new double[2];
        double y1[]=new double[2];
        x1[0]=a1[0][1];
        y1[0]=a1[0][5];
        x1[1]=a1[1][1];
        y1[1]=a1[1][5];
        pi.addData(x1,y1,plottype,red,green,blue);  
      }
      
      public void addData(double a1[],double a2[],int plottype,int red,int green,int blue)
      { double x1[]=new double[2];
        double y1[]=new double[2];
        x1[0]=a1[1];
        y1[0]=a1[5];
        x1[1]=a2[1];
        y1[1]=a2[5];
        pi.addData(x1,y1,plottype,red,green,blue);  
      }
      
      public void addData(double a1[],int plottype,int red,int green,int blue)
      { double x1[]=new double[1];
        double y1[]=new double[1];
        x1[0]=a1[1];
        y1[0]=a1[5];
        pi.addData(x1,y1,plottype,red,green,blue);  
      }
      
      public void ps_plot()
      {   pi.setMinMax(tmin,tmax,0,0.05);
	      pi.plot();
	  }
      
//=======================================

// PROSESLER
      
public double[][] kütlesel_karisim(double m1, double T1, double f1,
                          double m2, double T2, double f2)
{ // m1 kütlesel debi,    birinci kanal kg/s
  // T1 giriş sıcaklığı,  birinci kanal derece C
  // f1 giriş bağıl nemi, birinci kanal 0-1
  // m2 kütlesel debi,    ikinci kanal kg/s
  // T2 giriş sıcaklığı,  ikinci kanal derece C
  // f2 giriş bağıl nemi, ikinci kanal 0-1  
  //Birinci kanal
  double a1[]=yh.property("tdb_rh",T1,f1,P);                       
  double h1=a1[8];
  double w1=a1[5];
  //İkinci kanal
  double a2[]=yh.property("tdb_rh",T2,f2,P);                       
  double h2=a2[8];
  double w2=a2[5];
  //Çıkış kanalı
  double h3=(h1*m1+h2*m2)/(m1+m2);
  double w3=(w1*m1+w2*m2)/(m1+m2);
  double a3[]=yh.property( "w_h",w3,h3,P);
  double a[][]=new double[3][a1.length];
  a[0]=a1;     
  a[1]=a2;
  a[2]=a3;
  // Plot çiz
  // Birinci ikinci nokta arasına kalın mavi çizgi
  addData(a1,a2,5,0,0,255);
  //Birinci ikinci noktaya üçgen
  addData(a1,a2,24,0,0,255);
  // Çıkış kanalı
  addData(a3,30,255,0,0);
  ps_plot();
  print(a,"Karışım prosesi termodinamik değerler");
  String baslik2[]={"1. kanal m kg/s","2. kanal m kg/s","çıkış kanalı m kg/s","h, çıkış entalpisi KJ/kgkh","w, çıkış özgül nemi kgnem/kgkh"};
  double b[][]={{m1,m2,(m1+m2),a3[8],a3[5]}};
  print(b,baslik2,"Karışım prosesi çıktı değerleri");
  return a;
}

public double[][] hacimsel_karisim(double V1, double T1, double f1,
                                   double V2, double T2, double f2)
{ // V1 hacimsel debi,    birinci kanal m^3/saat
  // T1 giriş sıcaklığı,  birinci kanal derece C
  // f1 giriş bağıl nemi, birinci kanal 0-1
  // V2 hacimsel debi,    ikinci kanal m^3/saat
  // T2 giriş sıcaklığı,  ikinci kanal derece C
  // f2 giriş bağıl nemi, ikinci kanal 0-1  
  // Birinci kanal
  double a1[]=yh.property("tdb_rh",T1,f1,P);                       
  double h1=a1[8];
  double w1=a1[5];
  double m1=V1/a1[2]/3600.0;
  // İkinci kanal
  double a2[]=yh.property("tdb_rh",T2,f2,P);                       
  double h2=a2[8];
  double w2=a2[5];
  double m2=V2/a2[2]/3600.0;
  //Çıkış kanalı
  double h3=(h1*m1+h2*m2)/(m1+m2);
  double w3=(w1*m1+w2*m2)/(m1+m2);
  double a3[]=yh.property( "w_h",w3,h3,P);
  double a[][]=new double[3][a1.length];
  a[0]=a1;     
  a[1]=a2;
  a[2]=a3;
  // Plot çiz
  // Birinci ikinci nokta arasına kalın mavi çizgi
  addData(a1,a2,5,0,0,255);
  //Birinci ikinci noktaya üçgen
  addData(a1,a2,24,0,0,255);
  // Çıkış kanalı
  addData(a3,30,255,0,0);
  ps_plot();
  double V3=(m1+m2)*a3[2]*3600;
  print(a,"Karışım prosesi termodinamik değerler");
  String baslik2[]={"1. kanal m kg/s","1. kanal V m^3/h","2. kanal m kg/s","2. kanal V m^3/h","çıkış kanalı m kg/s","çıkış kanalı V m^3/h","h, çıkış entalpisi KJ/kgkh","w, çıkış özgül nemi kgnem/kgkh"};
  double b[][]={{m1,V1,m2,V2,(m1+m2),V3,a3[8],a3[5]}};
  print(b,baslik2,"Karışım prosesi çıktı değerleri");
  return a;
}
      
public double[][] sogutma(double m, double T1, double f1,double T2)
{ // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 çıkış sıcaklığı,  derece C  
 double Qsogutma=0;
 double myogusma=0;
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
 double a3[]=yh.property("w_rh",w1,1.0,P);
 double T3=a3[1];
 double h3=a3[8];
 double w3=a3[5];
 double h2;
 double a2[];
 double w2;
 if(T3<T2)
 {
 a2=yh.property("tdb_w",T2,w1,P);  
 addData(a1,a2,5,0,0,255);
 addData(a1,a2,24,0,0,255);                     
 h2=a2[8];
 w2=a2[5];
 }
 else
 {
 a2=yh.property("tdb_rh",T2,1.0,P); 
 addData(a1,a3,5,0,0,255); 
 addData(a2,a2,24,0,0,255);                   
 h2=a2[8];
 w2=a2[5]; 
 }
 Qsogutma=m*(h1-h2);
 myogusma=m*(w1-w2); 
 double a[][]=new double[3][a1.length];
 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
  ps_plot();
  print(a,"soğutma prosesi termodinamik değerler");
  String baslik2[]={"m kg/s","Q soğutma KW","m yoğuşma kg/s"};
  double b[][]={{m,Qsogutma,myogusma}};
  print(b,baslik2,"soğutma prosesi çıktı değerleri");
  return a;
}

public double[][] sogutma_nemalma_isitma(double m, double T1, double f1,double T2,double f2)
{ // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 çıkış sıcaklığı,  derece C
  // f2 çıkış bağıl nemi, 0-1  
 double Qsogutma=0;
 double Qisitma=0;
 double myogusma=0;
 
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
 
 double a2[]=yh.property("tdb_rh",T2,f2,P);                       
 double h2=a2[8];
 double w2=a2[5];
 
 double a3[]=yh.property("w_rh",w1,1.0,P);
 double T3=a3[1];
 double h3=a3[8];
 double w3=a3[5];
 
 double a4[]=yh.property("w_rh",w2,1.0,P);
 double T4=a4[1];
 double h4=a4[8];
 double w4=a4[5];
 
 Qsogutma=m*(h1-h4);
 Qisitma=m*(h2-h4);;
 myogusma=m*(w1-w2); 
 double a[][]=new double[4][a1.length];

 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
 a[3]=a4;
 addData(a1,a3,5,0,0,255);
 addData(a1,a3,24,0,0,255);
 addData(a2,a4,5,0,0,255);
 addData(a2,a4,24,0,0,255); 
 ps_plot(); 
  print(a,"soğutma - nem alma - ısıtma prosesi termodinamik değerler");
  String baslik2[]={"m kg/s","Q soğutma KW","Q ısıtma KW","m yoğuşma kg/s"};
  double b[][]={{m,Qsogutma,Qisitma,myogusma}};
  print(b,baslik2,"soğutma - nem alma - ısıtma prosesi çıktı değerleri");
  return a;
}

public double[][] sogutma_nemalma_karistirma(double m1, double T1, double f1,double m2,double T2)
{ // soğutma - nem alma - karıştırma prosesi
  // m1  soğutulan kütlesel debi, kg/s
  // T1  soğuma çevrimi giriş sıcaklığı,  derece C
  // f1  soğuma çevrimi giriş bağıl nemi, 0-1
  // m2  soğutulmıyan karışım kütlesel debi, kg/s
  // T2  soğuma çevrimi çıkış sıcaklığı,  derece C
  
 double Qsogutma=0;
 double Qisitma=0;
 double myogusma=0;
 
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
 
 double a2[]=yh.property("tdb_rh",T2,1.0,P);                       
 double h2=a2[8];
 double w2=a2[5];
 
 double a3[]=yh.property("w_rh",w1,1.0,P);
 double T3=a3[1];
 double h3=a3[8];
 double w3=a3[5];
 
 double h4=(m1*h1+m2*h2)/(m1+m2);
 double w4=(m1*w1+m2*w2)/(m1+m2);
 
 double a4[]=yh.property("w_h",w4,h4,P);
 double T4=a4[1];
 Qsogutma=m1*(h1-h2);
 Qisitma=m1*(h4-2);
 myogusma=m1*(w1-w4); 
 double a[][]=new double[4][a1.length];
 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
 a[3]=a4;
 addData(a1,a3,5,0,0,255);
 addData(a1,a3,24,0,0,255);
 addData(a2,a4,5,0,0,255);
 addData(a2,a4,24,0,0,255); 
 addData(a4,a1,5,255,0,0); 
 ps_plot(); 
  print(a,"soğutma-nem alma-karıştırma prosesi termodinamik değerler");
  String baslik2[]={"m kg/s","m baypass havası kg/s","Q soğutma KW","Q ısıtma KW","m yoğuşma kg/s"};
  double b[][]={{m1,m2,Qsogutma,Qisitma,myogusma}};
  print(b,baslik2,"soğutma - nem alma - karıştırma prosesi çıktı değerleri");
  return a;
}

public double[][] isitma(double m, double T1, double f1,double T2)
{ // Isıtma prosesi
  // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 çıkış sıcaklığı,  derece C  
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
 double a2[]=yh.property("tdb_w",T2,w1,P);
 double h2=a2[8];
 double w2=a2[5];
 double Qisitma=m*(h2-h1);
 double a[][]=new double[2][a1.length];
 addData(a1,a2,5,0,0,255);
 addData(a1,a2,24,0,0,255);
 ps_plot();
 a[0]=a1;
 a[1]=a2;
 print(a,"ısıtma prosesi termodinamik değerler");
 String baslik2[]={"m kg/s","Q ısıtma KW"};
  double b[][]={{m,Qisitma}};
  print(b,baslik2,"ısıtma prosesi çıktı değerleri");
  return a;
}

public double[][] isitma_nemlendirme(double m, double T1, double f1,double T2, double T3,double f3)
{ // Isıtma ve nemlendirme prosesi
  // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 ısıtma prosesi çıkış sıcaklığı derece C
  // T3 nemlendirma prosesi çıkış sıcaklığı,  derece C 
  // f3 nemlendirme prosesi çıkış bağıl nemi, 0-1
   
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
  
 double a2[]=yh.property("tdb_w",T2,w1,P);
 double h2=a2[8];
 double w2=a2[5];
 
 double a3[]=yh.property("tdb_rh",T3,f3,P);
 double h3=a3[8];
 double w3=a3[5];
   
 double Qisitma1=m*(h2-h1);
 double Qisitma2=m*(h3-h2);
 double Qisitma=Qisitma1+Qisitma2;
 double nemlendirme=m*(w3-w2);
 
 double a[][]=new double[3][a1.length];
 addData(a1,a2,5,0,0,255);
 addData(a1,a2,24,0,0,255);
 addData(a2,a3,5,0,0,255);
 addData(a2,a3,24,0,0,255); 
 ps_plot();
 
 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
 
  print(a,"ısıtma ve nemlendirme prosesi termodinamik değerler");
  String baslik2[]={"m kg/s","Q1 ısıtma KW","Q2 nemlendirme prosesinde ısıtma KW", "Q toplam ısıtma","nemlendirme kg/s"};
  double b[][]={{m,Qisitma1,Qisitma2,Qisitma,nemlendirme}};
  print(b,baslik2,"ısıtma ve nemlendirme prosesi çıktı değerleri");
  return a;
}
public double[][] isitma_adyabatiknemlendirme(double m, double T1, double f1,double T2, double T3)
{ // Isıtma ve nemlendirme prosesi
  // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 ısıtma prosesi çıkış sıcaklığı derece C
  // T3 adyabatik nemlendirma prosesi çıkış sıcaklığı,  derece C 

   
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double w1=a1[5];
  
 double a2[]=yh.property("tdb_w",T2,w1,P);
 double h2=a2[8];
 double w2=a2[5];
 double Twb2=a2[14];
 
 double a4[]=yh.property("tdb_rh",Twb2,1.0,P);                       
 double hh=a1[8];
 double w4=a1[5];
 
 if(T3<Twb2) T3=Twb2;
 double a3[]=yh.property("tdb_twb",T3,Twb2,P);
 double h3=a3[8];
 double h3a=a2[11];
 double w3=a2[5];
    
 double Qisitma=m*(h2-h1);
 double nemlendirme=m*(w3-w2);
 
 double a[][]=new double[3][a1.length];
 addData(a1,a2,5,0,0,255);
 addData(a1,a2,24,0,0,255);
 addData(a2,a3,5,0,0,255);
 addData(a3,24,0,0,255);
 addData(a3,a4,5,255,0,0);
 addData(a4,24,255,0,0);
 ps_plot();
 
 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
 
  print(a,"ısıtma ve adyabatik nemlendirme prosesi termodinamik değerler");
  String baslik2[]={"m kg/s","Q ısıtma KW","nemlendirme kg/s"};
  double b[][]={{m,Qisitma,nemlendirme}};
  print(b,baslik2,"ısıtma ve adyabatik nemlendirme prosesi çıktı değerleri");
  return a;
}
public double[][] adyabatik_sogutma(double m, double T1, double f1,double T2)
{ // Adyabatik soğutma
  // m  kütlesel debi,    kg/s
  // T1 giriş sıcaklığı,  derece C
  // f1 giriş bağıl nemi, 0-1
  // T2 çıkış sıcaklığı,   derece C 
  // f2 çıkış bağıl nemi,  0-1  
 double a1[]=yh.property("tdb_rh",T1,f1,P);                       
 double h1=a1[8];
 double h1a=a1[11];
 double w1=a1[5];
 double Twb=a1[14]; 
 double a3[]=yh.property("tdb_rh",Twb,1.0,P);                       
 double h3=a1[8];
 double w3=a1[5];
 if(T2<Twb) T2=Twb;
 double a2[]=yh.property("tdb_twb",T2,Twb,P);
 double h2=a2[8];
 double h2a=a2[11];
 double w2=a2[5];
 double Qsogutma=m*(h1a-h2a);
 double nemlendirme=m*(w2-w1);
 double a[][]=new double[3][a1.length];
 a[0]=a1;
 a[1]=a2;
 a[2]=a3;
 addData(a1,a2,5,0,0,255);
 addData(a1,a2,24,0,0,255);
 addData(a2,a3,5,255,0,0);
 addData(a3,24,255,0,0);
 ps_plot();
 print(a,"adyabatik soğutma prosesi termodinamik değerler");
 String baslik2[]={"m kg/s","Q duyulur soğutma KW","nemlendirme kg/s","çıkış sıcaklığı derece C","yaş hava sıcaklığı"};
  double b[][]={{m,Qsogutma,nemlendirme,T2,Twb}};
  print(b,baslik2,"adyabatik soğutma prosesi çıktı değerleri");
 return a;
}

}