import java.io.*;
import javax.swing.*;
import static java.lang.Math.*;

public class rankine_cevrimi_tez

{
double T[];
double P[];
double v[];
double h[];
double s[];
double x[];
double Wnet;
double Wnet1;
double Wturbin1;
double Wturbin2;
double Wturbin;
double Wpompa;
double Qin;
double Qout;
double etacevrim;
double m;
double w;
double m1;
double Qsolar;
double Qgiren;
	double GZ;        //Güneş zamanı
	double B;
	double E;         //Zaman düzeltme faktörü
	double Lst,Lloc;   //Standar saat boylamı ve boylam
	double n;        //Gün sayısı
	double fi;        //Enlem açısı
	double omega;     //Saat açısı
	double delta;    //Deklinasyon açısı
	double beta;     //Eğim açısı
	double gama;     //Yüzey azimut açısı
	double teta;     //Geliş açısı
	double costeta;
	double costetaz;
	double tetaz;     //Zenit açısı
	double Gsc;     //Güneş sabiti
	double H0;      //Yatay bir yüzeye atmosfer dışında gelen günlük ışınım
	double Kt;     //Aylık ortalama açıklık göstergesi
	double H;       //Aylık ortalama günlük toplam güneş ışınımı
	double Hd;
	double Hb;
	double Ht;      //Bir gün boyunca gelen toplam güneş ışınımı
	double cosomegas;
	double omegas;     //Güneş doğuş(-) / batış(+) açısı
	double omegass;    //Ayın ortalama günü için eğik yüzeydeki güneş doğuş açısı
	double A1;      //Eğik yüzeye gelen ortalama günlük direkt ışınım
	double A2;     //Yatay yüzeye gelen günlük direkt ışınım
	double Rb;     //Eğik yüzeye gelen ortalama günlük direkt ışınımın, yatay yüzeye gelene oranı
	double ro;     //Yerin yansıtma katsayısı
	double Gan;    //yılın n'inci günü gelen atmosfer dışı ışınım
	double TAUb;   //yeryüzündeki doğrudan ışınım atmosfer dışındaki ışınıma oranı
	double a0,a1,k,a00,a11,kk;
	double Gd;   // yatay bir yüzeye gelen yaygın ışınım
	double TAUd;    //Yatay bir yüzeye gelen yaygın ışınımın atmosfer dışındaki ışınıma oranı
	double Gcnb;   // dik bir yüzey için açık gün doğrudan ışınım şiddeti
	double Gcb;    // yatay yüzeye gelen doğrudan ışınım şiddeti
	double Gt;    //toplma ışınım şiddeti
	
	double D,d,L,Dp,UL,Dk,Ar,Aa,F1,F11,FR,my,Tfi,Thava,Ta,Qu;
	double Thi,Tho,Tci,Tco,Cpy,Cps,ms,Qısı;
	double Di,hi,ho,deltaTlm,U;
	double NuD,ReD,ks,Müs;
	
steam st;
public rankine_cevrimi_tez (double w,double T1,double T3,double P1,double P3,double P4,double etat1,double etat2,double etap,double enlem,double günsayısı,double eğimaçısı,double YSZ)
{st=new steam();
 P=new double[11];
 T=new double[11];
 v=new double[11];
 h=new double[11];
 s=new double[11];
 x=new double[11];
 
 // Güneş Işınımı Hesapaları
    beta=eğimaçısı;
	n=günsayısı;
	fi=enlem;
	
	gama=0.0; //yüzey azimut açısı için optimum değer 0'dır
	Gsc=1367.0;
	ro=0.2;
	
	//B'nin hesaplanması
	B=(n-1)*360/365;
	
	//Zaman düzeltme faktörü
	E=229.2*(0.000075+0.001868*Math.cos(B*Math.PI/180)-0.032077*Math.sin(B*Math.PI/180)-0.014615*Math.cos(2*B*Math.PI/180)-0.04089*Math.sin(2*B*Math.PI/180));
	
	//Güneş Zamanı
	Lst=-45.0;
	Lloc=-27.5;
	GZ=YSZ+((4*(Lst-Lloc)+E)/60);
	
	//Yer değiştirme saat açısı 
	omega=15*(GZ-12);
	
	//deklinasyon açısının hesaplanması
delta=23.45*Math.sin((284+n)*2*Math.PI/365);

//doğuş(-) / batış(+) açısı
cosomegas=-1*Math.tan(fi*Math.PI/180)*Math.tan(delta*Math.PI/180);
omegas=Math.acos(cosomegas)*180/Math.PI;
 
//geliş açısının hesaplanması
//costeta=(Math.sin(delta*Math.PI/180)*Math.sin(fi*Math.PI/180)*Math.sin(beta*Math.PI/180))-(Math.sin(delta*Math.PI/180)*Math.cos(fi*Math.PI/180)*Math.sin(beta*Math.PI/180)*Math.cos(gama*Math.PI/180))+(Math.cos(delta*Math.PI/180)*Math.cos(fi*Math.PI/180)*Math.cos(beta*Math.PI/180)*Math.cos(omega*Math.PI/180))+(Math.cos(delta*Math.PI/180)*Math.sin(fi*Math.PI/180)*Math.sin(beta*Math.PI/180)*Math.cos(gama*Math.PI/180)*Math.cos(omega*Math.PI/180))+(Math.cos(delta*Math.PI/180)*Math.sin(beta*Math.PI/180)*Math.sin(gama*Math.PI/180)*Math.sin(omega*Math.PI/180));
//teta=Math.acos(costeta*Math.PI/180)*180/Math.PI;

// yatay bir yüzey için zenith açısı
costetaz=Math.cos(delta*Math.PI/180)*Math.cos(fi*Math.PI/180)*Math.cos(omega*Math.PI/180)+Math.sin(delta*Math.PI/180)*Math.sin(beta*Math.PI/180);
tetaz=Math.acos(costetaz)*180/Math.PI;

// yılın n'inci günü gelen atmosfer dışı ışınım
Gan=Gsc*(1+0.033*Math.cos(360.0*n/365.0*Math.PI/180));
 
a00=0.4237-0.00821*(6-0.01)*(6-0.01);
a11=0.5055-0.00595*(6.5-0.01)*(6.5-0.01);
kk=0.2711-0.01858*(2.5-0.01)*(2.5-0.01);

a0=0.97*a00;
a1=0.99*a11;
k=1.02*kk;

//yeryüzündeki doğrudan ışınım atmosfer dışındaki ışınıma oranı
TAUb=a0+a1*Math.exp(k/Math.cos(tetaz*Math.PI/180));
//a0+a1*Math.exp(k/Math.cos(tetaz*Math.PI/180))

// dik bir yüzey için açık gün doğrudan ışınım şiddeti
Gcnb=Gan*TAUb;

// yatay yüzeye gelen doğrudan ışınım şiddeti
Gcb=Gan*TAUb*Math.cos(tetaz*Math.PI/180);

//Yatay bir yüzeye gelen yaygın ışınımın atmosfer dışındaki ışınıma oranı
TAUd=(0.271-0.294*TAUb)*Math.cos(tetaz*Math.PI/180);

//yatay bir yüzeye gelen yaygın ışınım
Gd=Gan*TAUd;
 
A1=(Math.cos((fi-beta)*(Math.PI/180))*Math.cos(delta*(Math.PI/180))*Math.cos(omega*Math.PI/180))+(Math.sin((fi-beta)*Math.PI/180)*Math.sin(delta*Math.PI/180));
A2=Math.cos(fi*Math.PI/180)*Math.cos(delta*Math.PI/180)*Math.cos(omega*Math.PI/180)+Math.sin(fi*Math.PI/180)*Math.sin(delta*Math.PI/180) ;
Rb=A1/A2;

// toplam ışınım şiddeti
Gt=Gcb*Rb+Gd*((1+Math.cos(beta*Math.PI/180))/2)+(Gcb+Gd)*ro*((1-Math.cos(beta*Math.PI/180))/2) ;


// Parabolik kollektör analizi

D=0.06;  //iç çap (m)
d=0.09;  //dış çap (m)
L=10*3000;    //uzunluk (m)
Dp=2.5;  //genişlik (m)
UL=3.5;  //toplam kayıp katsayısı
Dk=0.05; //duvar kalınlığı
my=50.0;   //solar akışkanın debisi
Tfi=200;  //ortalama yutucu boru sıcaklığı
Thava=20; //atmosfer sıcaklığı

// alan hesabı
Ar=Math.PI*D*L;
Aa=(Dp-d)*L;
//F' kollektör verim faktörü
F1=(1/UL)/((1/UL)+(D/(Gcb*Dk))+(D/(2*k)*Math.log(D/Dk)));

//F'' kollektör akış faktörü
F11=2+(my*2533.14)/(Ar*UL*F1)*(1-Math.exp((Ar*UL*F1)/(my*2533.14)));
FR=F1*F11;

//Faydalı ısı kazancı
Qu=FR*Aa*(Gcb-(Ar/Aa)*UL*(Tfi-Thava));

//Akışkan sıcaklığı artışı Ta
Ta=Qu/(my*2533.14);
 

 //1 noktası türbin1 girişi
 T[1]=T1;
 P[1]=P1;
 double a1[]=st.property("tp",T[1],P[1]);
 v[1]=a1[2];
 h[1]=a1[3];
 s[1]=a1[5];
 
 //2i=7 isentropik türbin1 çıkışı
 s[7]=s[1];
 P[7]=P3;
 double a2i[]=st.property("ps",P[7],s[7]);
 T[7]=a2i[1];
 h[7]=a2i[3];
 v[7]=a2i[2];
 
 //2 noktası türbin1 çıkışı
 h[2]=h[1]-etat1*(h[1]-h[7]);
 P[2]=P3;
 double a2[]=st.property("ph",P[2],h[2]);
 T[2]=a2[1];
 v[2]=a2[2];
 s[2]=a2[5];
 
 //3 noktası türbin2 girişi
 T[3]=T3;
 P[3]=P3;
 double a3[]=st.property("tp",T[3],P[3]);
 v[3]=a3[2];
 h[3]=a3[3];
 s[3]=a3[5];
 
 //4i=5 isentropik türbin2 çıkışı
 P[5]=P4;
 s[5]=s[3];
 double a5[]=st.property("ps",P[5],s[5]);
 T[5]=a5[1];
 v[5]=a5[2];
 h[5]=a5[3];
 
 //4 noktası türbin2 çıkışı
 h[4]=h[3]-etat2*(h[3]-h[5]);
 P[4]=P4;
 double a4[]=st.property("ph",P[4],h[4]);
 T[4]=a4[1];
 v[4]=a4[2];
 s[4]=a4[5];
 
 //6 noktası kondenser çıkışı
 P[6]=P4;
 x[6]=0.0615;
 double a6[]=st.property("px",P[6],x[6]);
 T[6]=a6[1];
 v[6]=a6[2];
 h[6]=a6[3];
 s[6]=a6[5];
 
 //0 noktası kondenser sıvılaşma başlangıç x=1
 P[0]=P4;
 x[0]=1.0;
 double a0[]=st.property("px",P[0],x[0]);
 T[0]=a0[1];
 v[0]=a0[2];
 h[0]=a0[3];
 s[0]=a0[5];
 
 //9i=8 pompa isentropik çıkış
 P[8]=P1;
 s[8]=s[6];
 double a8[]=st.property("ps",P[8],s[8]);
 T[8]=a8[1];
 v[8]=a8[2];
 h[8]=a8[3];
 
 //9 pompa çıkışı
 h[9]=h[6]+(h[8]-h[6])/etap;
 P[9]=P1;
 double a9[]=st.property("ph",P[9],h[9]);
 T[9]=a9[1];
 v[9]=a9[2];
 s[9]=a9[5];
 
 // Isı Değiştirici Hesabı
Tho=70.0;   //çıkış sıcaklığı (Kabul)
Thi=Ta+Tho;  //giriş sıcaklığı (Tasarlanan)
Tci=T[9];   //çevrimdeki su giriş sıcaklığı
Cpy=2533.14; //ısı transfer yağı özgül ısısı
Cps=4187.0;  //suyun özgül ısısı
//ky=0.132;   //ısı iletim katsayısı ısı transfer yağı
ks=0.625;   //ısı iletim katsayısı su
ms=59.09;     //suyun kütlesel debisi
//Müy=0.0325; 
Müs=0.000715;
//Pr;4.85

//sıcak akışkanın enerji dengesi
Qısı=my*Cpy*(Thi-Tho);
//24367540.2
//Tco çıkış sıcaklığı
Tco=(Qısı/(ms*Cps))+Tci;

U=1/((1/hi)+(1/ho));

 
 //10 noktası kazana giriş
 T[10]=Tco;
 s[10]=s[9];
 double a10[]=st.property("ts",T[10],s[10]);
 h[10]=a10[3];
 v[10]=a10[2];
 
 //Termodinamik hesaplar
 m=(w*3600*1000.0)/((h[1]-h[2])+(h[3]-h[4])-(h[10]-h[6]));
 Wturbin1=m*(h[1]-h[2]);
 Wturbin2=m*(h[3]-h[4]);
 Wpompa=m*(h[10]-h[6]);
 Wturbin=Wturbin1+Wturbin2;
 Wnet=(Wturbin-Wpompa);
 Wnet1=Wnet/3600;
 Qin=m/3600*((h[1]-h[10])+(h[3]-h[2]));
 Qout=m*(h[4]-h[6])/3600;
 etacevrim=Wnet1/Qin;
 //m1=Wpompa/(h[9]-h[6]);
 Qsolar=59.09*(h[1]-h[10]);
 Qgiren=59.09*(h[1]-h[9]);


String s1="Yatay Yüzeye Gelen Direkt Işınım (Gcb)="+Gcb+"  W/m^2\n"+
"Yatay Yüzeye Gelen Yaygın Işınım (Gd)="+Gd+"  W/m^2\n"+
"Toplam Işınım Şiddeti (Gt)="+Gt+"  W/m^2\n"+
"Net İş="+Wnet1+"  kW\n"+
"Verim="+etacevrim+"  \n"+
"Kazandan Giren Isı="+Qgiren+"  kW\n"+
"Solar Sistem Destekli Kazandan Giren Isı="+Qsolar+"  kW\n\nSolar Sistem Analizi\n"+
//"Yoğuşturucudan atılan ısı="+Qout+"\n"+
//"omega="+omega+"\n"+
"Toplam Kollektöre Gelen Doğrudan Işınım="+Gcb+"  W/m^2\n"+
"Faydalı (Kullanılabilir) Işınım (Qu)="+Qu/Aa+"  W/m^2\n"+
"Solar Sistem Yansıtıcı Alanı="+Aa+"  m^2\n"+
"Yutucu Boru Uzunluğu="+L+"  m\n"+
"Solar Sistemin Sağladığı Sıcaklık Artışı Delta(T) ="+Ta+"  C\n\nIsı Değiştirici Analizi\n"+
//"deltaTlm="+deltaTlm+"\n"+
//"U="+U+"\n"+
//"fi="+fi+"\n"+
//"Gan="+Gan+"\n"+
//"ısı değiştirici Q="+Qısı+"\n"+
"Isı Transfer Yağı Giriş Sıcaklığı Thi="+Thi+"  C\n"+
"Isı Transfer Yağı Çıkış Sıcaklığı Tho="+Tho+"  C\n"+
"Çevrimdeki Suyun Giriş Sıcaklığı Tci="+Tci+"  C\n"+
"Çevrimdeki Suyun Çıkış Sıcaklığı Tco="+Tco;
//"T9="+T[9]+"\n"+
//"F11="+F11+"\n"+
//"Qu="+Qu+"\n"+
//"tetaz="+tetaz;




  JOptionPane.showMessageDialog(null,s1,"Hibrit Santral Analizi", JOptionPane.PLAIN_MESSAGE);


}
}
