public class rankine
{
// steam snıfını kullanır
// çağrı
// steam b=new steam();
// double a[]=b.property("tp",30.0,1.01325);
// girdi parametreleri
// termodinamik set "tv" "tp" "th" "tu" "ts"tx"
//                  "pv" "pt" "ph" "pu" "ps" "px"
// çıkış parametreleri(a) a[0]=P a[1]=T a[2]=V a[3]=h
// a[4]u a[5]=s a[6]=x
double T[];
double P[];
double h[];
double s[];
double x[];
double etait,etaip;
double etacevrim;
double m;
double Wt,Wp,W;
double Qkazan,Qyogusturucu;
steam b;
double c1[][];
double c3[][];
public rankine(double mi,double t1,double P1, double P2, double etaiti, double etaipi)
{
m=mi;
b=new steam();
T=new double[9];
P=new double[9];
h=new double[9];
s=new double[9];
x=new double[9];
T[1]=t1;
P[1]=P1;
P[2]=P2;
etait=etaiti;
etaip=etaipi;
c1=new double[2][20];
c3=new double[2][20];
} 
public void cevrimhesabi()
{
// Türbin girişi
double a1[]=b.property("tp",T[1],P[1]);
h[1]=a1[3];
s[1]=a1[5];
// isentropik Türbin çıkışı
s[0]=s[1];
P[0]=P[2];
double a0[]=b.property("ps",P[0],s[0]);
T[0]=a0[1];
h[0]=a0[3];
// gerçek türbin çıkışı
h[2]=h[1]-etait*(h[1]-h[0]);
double a2[]=b.property("ph",P[2],h[2]);
T[2]=a2[1];
x[2]=a2[6];
s[2]=a2[5];
// yoğuşturucu çıkışı
P[3]=P[2];
x[3]=0.0;
double a3[]=b.property("px",P[3],x[3]);
T[3]=a3[1];	
h[3]=a3[3];
s[3]=a3[5];

// isentropik pompa
P[5]=P[1];
s[5]=s[3];
double a5[]=b.property("ps",P[5],s[5]);
h[5]=a5[3];
s[5]=a5[5];
// gerçek pompa
h[4]=h[3]+(h[5]-h[3])/etaip;
P[4]=P[1];
double a4[]=b.property("ph",P[4],h[4]);
T[4]=a4[1];
s[4]=a4[5];
// kazan kaynama  bölgesi girişi
P[6]=P[1];
x[6]=0.0;
double a6[]=b.property("px",P[6],x[6]);
T[6]=a6[1];
s[6]=a6[5];
// kazan kızgın buhar bölgesi girişi
P[7]=P[1];
x[7]=1.0;
double a7[]=b.property("px",P[7],x[7]);
T[7]=a7[1];
s[7]=a7[5];
// yoğuşturucu kızgın buhar bölgesi çıkışı
P[8]=P[2];
x[8]=1.0;
double a8[]=b.property("px",P[8],x[8]);
T[8]=a8[1];
s[8]=a8[5];

if(s[2]>s[8])
{double dt1=(T[2]-T[8])/19;
double t=T[8];
for(int i=0;i<20;i++)
{double b8[]=b.property("tp",t,P[8]);
c3[0][i]=b8[5];c3[1][i]=b8[1];t+=dt1;
}
}
double dt=(T[1]-T[7])/19;
double t=T[7];
for(int i=0;i<20;i++)
{double b7[]=b.property("tp",t,P[7]);
c1[0][i]=b7[5];c1[1][i]=b7[1];t+=dt;
}
Wt=m*(h[1]-h[2]);
Wp=m*(h[4]-h[3]);
W=Wt-Wp;
Qkazan=m*(h[1]-h[4]);
Qyogusturucu=m*(h[2]-h[3]);
etacevrim=W/Qkazan;
}

public String cikti()
{
cevrimhesabi();
String s="Basit Rankine çevrimi\n";
s+=" çevrim verimi    = "+etacevrim+"\n";
s+=" Türbin çıkışı    = "+Wt+" kW\n";
s+=" Pompa girişi     = "+Wp+" kW\n";	
s+=" Net iş çıkışı    = "+W +" kW\n";
s+=" Kazan ısı girişi = "+Qkazan +" kW\n";
s+=" Yoğuşturucu ısı çıkışı = "+Qyogusturucu +" kW\n";
s+=" h1 türbin girişi = "+h[1] +" kJ/kg\n";
s+=" h2 türbin çıkışı = "+h[2] +" kJ/kg\n";
s+=" h3 yoğuşturucu çıkışı = "+h[3] +" kJ/kg\n";
s+=" h4 pompa çıkışı = "+h[4] +" kJ/kg\n";
return s;
}

public double[][] TS1()
{
double a[][]=Text.readDoubleT("steam.txt");
return a;
}	
	
public double[][] TS()
{
double a[][]=new double[2][201];
double tc=b.Tc-273.15;
double dt=(tc-10.0)/100.0;
int i=0;
double t;
for(t=10.0;t<=tc;t+=dt)
{double a1[]=b.property("tx",t,0.0);
 a[1][i]=t;
 a[0][i]=a1[5];
 i++;
}
double a3[]=b.property("tx",tc,1.0);
 a[1][i]=t;
 a[0][i]=a3[5];
 i++;
for(t=tc;t>=10;t-=dt)
{double a2[]=b.property("tx",t,1.0);
 a[1][i]=t;
 a[0][i]=a2[5];
 i++;
}
return a;	
}

public void plot()
{
 Plot pp=new Plot(TS1());
 double t1[]={T[1],T[2]};
 double t2[]={T[8],T[3],T[4],T[6],T[7]};
 double s1[]={s[1],s[2]};
 double s2[]={s[8],s[3],s[4],s[6],s[7]};

 pp.addData(s1,t1);
 pp.addData(c1[0],c1[1]);
 pp.addData(s2,t2);
 if(s[2]>s[8])
 { pp.addData(c3[0],c3[1]);}

 pp.setPlabel("Rankine Çevrimi");
 pp.setYlabel("T, derece C");
 pp.setXlabel("s entropi kJ/kgK");
 pp.plot();
}

}