//======================================================
// 
// Class Hybrit_Power_Plant
// Hazırlayan: Mehmet Aydın SOYDAŞ , öğrenci
// Danışman: Dr. Turhan Coban
// Ege University, School of Engineering, 
// Department of Mechanical Engineering
// Bornova İZMİR - TURKEY

import javax.swing.JOptionPane;


public class Hybrit_Power_Plant
{

	double W; 	// Santralden elde edilen net güç (MW cinsinden)
	double T_CSP_max=400;
	double max_delta_h;
	double h_in;
	double h_out;
	double q_net;  // ısı girdisi (KW)
	//double power_S;
	
	double minumum_boiler;
	
	double fi;  // Latitude - enlem açısı; kuzey yarım küre için pozitif, güney yarım küre için negatif (-90'< fi <90')
	double Lloc; // yerel boylam( Batı boylamları (+), doğu boylamları (-))
	double Lst; // standart saat boylamı( Batı boylamları (+), doğu boylamları (-))
	double H;   // deniz seviyesinden (km) olarak yükseklik
	int climate; // iklim türü
	double st;  // standart time - yerel saat zamanı (dakika)

	
	double m_r; // rankine çevriminin kütlesel debisi (kg/s)
	
	double w_max; //solar sistemden gelebilecek maksimum güç (W/m^2)
	double max_solar_field; // solar sistemin panel mahsimum alanı;
	
	steam b;
	
	public Hybrit_Power_Plant(double power, double enlem, double boylam, double ssboylamı, double yukseklik, int iklim)
	{
		W=power*1000;	   // Santralden elde edilen net güç (kW cinsinden) => girdi MW cinsinden olacak
		
		fi=enlem;	   // Latitude - enlem açısı; kuzey yarım küre için pozitif, güney yarım küre için negatif (-90'< fi <90')
		Lloc=boylam;   // yerel boylam( Batı boylamları (+), doğu boylamları (-))
		Lst=ssboylamı; // standart saat boylamı( Batı boylamları (+), doğu boylamları (-)) , Türkiye için -30 derece
		H=yukseklik;   // deniz seviyesinden (km) olarak yükseklik
		climate=iklim; // iklim türü
		
		// iklim==1 => Tropical		
		// iklim==2 => Midlatitude summer		
		// iklim==3 => Subarctic summer		
		// iklim==4 => Midlatitude winter
		
		
		b=new steam();
	}

	public void rankinearaısıtmalı_model(double t1,double P1, double Paraısıtma, double t3, double P4, double etaiti, double etaipi)
	{
		double n;
		
		/*   [][0]=" bars           =P :";
		     [][1]=" deg C          =T :";
		     [][2]=" m^3/kg         =v :";
		     [][3]=" KJ/kg          =h :";
		     [][4]=" KJ/kg          =u :";
		     [][5]=" KJ/kg          =s :";
		     [][6]=" kg vap/kg mix  =x :";
		     [][7]=" kg/m^3         =  :";		*/
		
		double m=1.0;
		rankinearaısıtmalı r=new rankinearaısıtmalı(m, t1, P1,  Paraısıtma, t3, P4, etaiti, etaipi);

		m_r=W/r.w_net();// rankine çevriminin kütlesel debisi (kg/s)
		
		
		h_in=r.degerler()[0][3];   // kazan giriş entalpisi
		h_out=r.degerler()[1][3];  // türbin giriş -kazan çıkış entalpisi
		q_net=(h_out-h_in)*m_r;  // toplam ısı girdisi (KW)
		
		
		double amax[]=b.property("tp",T_CSP_max,r.degerler()[1][0]);
		double amin[]=b.property("tp",r.degerler()[0][1],r.degerler()[0][0]);
		max_delta_h=amax[3]-amin[3];  //  (KJ/kg)
		  
		
	}
	
	public double day_sun(int day, int mounth, double standartTime, double ro, double field )// (KJ/s <=> KW)
	{
		double power_s;
		radoSUN r0=new radoSUN(fi, Lloc, Lst, H, climate);
		
		power_s=field*r0.CSP_APmodel( day, mounth, standartTime, ro)/1000; // (KJ/s <=> KW)
	
		return power_s;
	}
	
	public double day_boiler(int day, int mounth, double standartTime, double ro, double field )// (KJ/s <=> KW)
	{
		double power_b;
		radoSUN r1=new radoSUN(fi, Lloc, Lst, H, climate);
		
		power_b=q_net-day_sun( day,  mounth,  standartTime,  ro,  field ); // (KJ/s <=> KW)
		
		return power_b;
	}
	
	
	public double maks_field_system_solar(double ro)   // solar sistem için kurulabilecek alan (m^2)
	{
		radoSUN rm=new radoSUN(fi, Lloc, Lst, H, climate);
		w_max=rm.maximum_CSP_APmodel(ro)[2];  // (W/m^2)
	
		max_solar_field=(max_delta_h*m_r*1000)/(w_max);
		
		return max_solar_field;
	}

	public double average_year_S(double field,double ro)   // solar sistem için yıllık ortalama güç girdisi
	{
		radoSUN rm=new radoSUN(fi, Lloc, Lst, H, climate);
		double w_sun_ave_year=rm.average_year_CSP_APmodel(ro);  // (W/m^2)
		
			double average_S = w_sun_ave_year *field/1000; // (KW)
					
			
			return average_S;
	}
	
	
	public double average_year_b(double field,double ro)   // solar sistemin doğalgaz kısmı için yıllık ortalama güç girdisi 
	{
			
			double average_b = q_net-average_year_S(field,ro); // (KW)
			
			return average_b; // (KW)
	}

	
	public double yakıt_maliyet(double field,double ro)   // solar sistem için kurulabilecek alan (m^2)
	{
		
			double yakıt = 0.019047 ; // (TL/MJ) Doğalgaz için, "www.tesisat.com" sitesinden hesaplanarak alınmıştır.
			
			double yakıt_m = yakıt*average_year_b(field,ro)/1000;
			
		return yakıt_m; // (TL/s)
	}
	
		public double oran(double field, double ro)   // solar sistem için kurulabilecek alan (m^2)
	{
			
		double oran=average_year_S(field,ro)/average_year_b(field,ro);
		return oran;
	}
	
		public double yıllık_kazanc(double field, double ro)   // Solar sistem kullanıldığında Yıllık kazanç (TL/yıl)
	{
			
		double kazanc=yakıt_maliyet( 0, ro)*365*24*60*60-yakıt_maliyet( field, ro)*365*24*60*60;
		return kazanc;
	}
	
	/*
	public double total_maliyet(double year,double field,double ro) // toplam maliyet
	{
		radoSUN rm=new radoSUN(fi, Lloc, Lst, H, climate);
		double w_sun_ave_year=rm.average_year_CSP_APmodel(ro);  // (W/m^2)
		
			double average_S = w_sun_ave_year *field/1000; // (KW)
			
		double dolar=1.6081; // (TL/$) döviz kuru;
		double collector=103*field+average_S*185; // ($/m^2)  kolektörlerin birim fiyatı
		
		double yıllık_toplam_collector_maliyet = dolar*collector/year;
		double yıllık_yakıt_maliyet = yakıt_maliyet( field, ro)*365*24*60*60;
			
		double total_maliyet=yıllık_toplam_collector_maliyet+yıllık_yakıt_maliyet;//
		return total_maliyet;
	}
	*/
	
	public String cikti(double field,double ro)
{

String s="Sonuçlar\n";
s+="İstenilen güç çıktısı = "+W+" (kW) \n";
s+="Rankine güç çevriminin kütlesel debisi = "+m_r+" (kg/s) \n";
s+="ısı girdisi  q_net = "+q_net+" (kW) \n";
s+=" \n";
s+="Solar sistemden ortalama ısı girdisi  q_net = "+average_year_S( field, ro)+" (kW) \n";
s+="Yakıt Kazanından ortalama ısı girdisi  q_net = "+average_year_b( field, ro)+" (kW) \n";
s+="oran = "+oran( field, ro)+"  \n";
s+=" \n";
s+="Solar sistemden birim alandan soğurulabilecek max güç  w_max = "+w_max+"  (W/m^2) \n";
s+="maksimum güneş alanı = "+maks_field_system_solar( ro)+" m^2 \n";
s+="Solar sistemden birim alandan soğurulabilecek max güç= "+w_max*maks_field_system_solar( ro)/1000+" (kW) \n";
s+="Solar sistem kullanıldığında Yıllık kazanç = "+yıllık_kazanc( field, ro)+" TL/yıl  \n";
s+="Solar sistem kullanıldığında yüzde kazanç = %"+average_year_S( field, ro)*100/q_net+"  \n";

return s;
}
}