//====================================================== // Java termodinamik paketi // Class yashava hava su buharı karışımının termodinamik özellikleri // Dr. Turhan Coban // EGE Universitesi // Makina Mühendisliği // eposta : turhan.coban@mail.ege.edu.tr // File Name : yashava // Bu dosya steam ve Gas1 sınıflarını kulanır // // ===================================================== 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.*; public class yashava { Gas1 a; steam s; final String u[]={"SI","EN"}; String unit; final double c=0.6219705; boolean SI=true; public yashava() { a=new Gas1("air"); s=new steam(); unit=u[0]; a.mole=false; } public void setUnit(boolean x) { if(x) {unit=u[0];} else {unit=u[1];} s.setUnit(x);a.SI=x; } public void setUnit(String x) { if(x.equals("EN")) {unit=u[1];SI=false;a.SI=false;} else {unit=u[0];SI=true;a.SI=true;}s.setUnit(x);} public double[] property1(String si, double v1, double v2, double P) { double aa[]=new double[14]; double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; if (si.equals("tdb_twb")) {aa=tdb_twb(v1,v2,P);} else if(si.equals("tdb_rh")) {aa=tdb_rh(v1,v2,P);} else if(si.equals("w_rh")) {aa=w_rh(v1,v2,P);} else if(si.equals("w_h")) {aa=w_h(v1,v2,P);} else if(si.equals("tdb_dos")) {aa=tdb_dos(v1,v2,P);} else if(si.equals("tdb_w")) {aa=tdb_w(v1,v2,P);} else if(si.equals("tdb_pv")) {aa=tdb_pv(v1,v2,P); } else if(si.equals("tdb_tdew")) {aa=tdb_tdew(v1,v2,P); } else if(si.equals("tdb_h")) {aa=tdb_h(v1,v2,P);} return aa; } public double[] property(String si, double v1, double v2, double P) { //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 double aa[]=new double[14]; double bb[]=new double[15]; double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; if (si.equals("tdb_twb")) {aa=tdb_twb(v1,v2,P);} else if(si.equals("tdb_rh")) {aa=tdb_rh(v1,v2,P);} else if(si.equals("w_rh")) {aa=w_rh(v1,v2,P);} else if(si.equals("w_h")) {aa=w_h(v1,v2,P);} else if(si.equals("tdb_dos")) {aa=tdb_dos(v1,v2,P);} else if(si.equals("tdb_w")) {aa=tdb_w(v1,v2,P);} else if(si.equals("tdb_pv")) {aa=tdb_pv(v1,v2,P); } else if(si.equals("tdb_tdew")) {aa=tdb_tdew(v1,v2,P); } else if(si.equals("tdb_h")) {aa=tdb_h(v1,v2,P);} for(int i=0;i= v1) {v2=v1;aa=tdb_rh(v1,1.0,P);return aa;} double sp[]=s.property("tx",v2,1.0);//doymuş buhar at yaş termometre temperatur //sp[0] p //sp[1] t //sp[2] v //sp[3] h //sp[4] u //sp[5] s double ws=c*sp[0]/(P-sp[0]); double hsg=sp[3]; double sp1[]=s.property("tx",v2,0.0);//doymuş sıvı at yaş termometre sıcaklığı double hsf=sp1[3]; double hsfg=hsg-hsf; double sp2[]=s.property("tx",v1,1.0);//doymuş buhar at kuru termometre temp. first iteration double pvs=sp2[0]; double t=sp2[1]; double hg=sp2[3]; //first iteration use hg(saturation) instead of hv(superheated) double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double ap2[]=a.property((v2+tt),P); double has=ap2[3]-ap1[3]; double w=(ws*hsfg-(ha-has))/(hg-hsf); double pv=w/c*P/(1.0+w/c); double Pa=P-pv; ap=a.property((v1+tt),P); double sp3[]=s.property("tp",v1,pv); double hv=sp3[3]; double sv=sp3[5]; w=(ws*hsfg-(ha-has))/(hv-hsf); pv=w/c*P/(1.0+w/c); Pa=P-pv; double tdb=v1; double sp4[]=s.property("tp",v1,pv); hv=sp4[3]; sv=sp4[5]; //çiğ noktası double sp5[]=s.property("px",pv,1.0); double tdp=sp5[1]; double rh=pv/pvs; ws=c*pvs/(P-pvs); double dos=w/ws; double h=ha+w*hv; double s=sa+w*sv; h=ha+w*hv; s=sa+w*sv; ws=c*pv/Pa; aa[0]=P; aa[1]=t; aa[2]=ap[2]; 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; return aa; } public double f_twb(double Tdb,double w0,double P,double Twb) { //basic yaş termometre definition function double aa[]=new double[14]; aa=tdb_w(Tdb,w0,P); double h1=aa[8]; double w1=aa[5]; aa=tdb_rh(Twb,1.0,P); double h2=aa[8]; double w2=aa[5]; double sp1[]=s.property("tx",Twb,0.0);//saturated water double hsf=sp1[3]; // saturated water at wet bub sıcaklığı return h1+(w2-w1)*hsf-h2; } public double twb(double tdb,double w0,double P) { // x in f(x)=0 bracket xl and xu is given // false position method // function should be supplied // defination of variables : // xl : lower guess // xu : upper guess // xr : root estimate // ea :approximate error // maxit : maximum iterations // iter : number of iteration double aa[]=new double[14]; aa=tdb_w(tdb,w0,P); //this bracket always satisfied double xl=aa[7]; double xu=tdb; double test; double xr=0; double es,ea; double fxl,fxr,fxu; int iter=0; int maxit=10; int sign1,sign2; es=0.0001; ea=1.1*es; fxu= f_twb(tdb,w0,P,xu); fxl= f_twb(tdb,w0,P,xl); fxr=1.0; //false position method iteration while((fxr>es)&&(iter0.9999) sp1=sp; else sp1=s.property("tp",v1,pv); double hg=sp1[3]; double Pa=P-pv; double ap[]=a.property((v1+tt),Pa); double ap1[]=a.property(tt,Pa); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double rh=v2; double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double h=ha+w*hv; double s=sa+w*sv; aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public double[] w_rh(double v1,double v2,double P) { //kuru termometre sıcaklığı and bağıl nem double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double w=v1; double rh=v2; double pv=w/c*P/(1.0+w/c); double pvs=pv/rh; double sp[]=s.property("px",pvs,1.0); double t=sp[1]; double sp1[]=s.property("tp",t,pv); double hv=sp1[3]; double sv=sp1[5]; double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double ws=c*pvs/(P-pvs); double Pa=P-pv; double ap[]=a.property((t+tt),Pa); double ap1[]=a.property(tt,Pa); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double dos=w/ws; double h=ha+w*hv; double s=sa+w*sv; aa[0]=P; aa[1]=t; aa[2]=ap[2]; 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; return aa; } public double[] w_h(double v1,double v2,double P) { //kuru termometre sıcaklığı and yaş termometre sıcaklığı double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double w=v1; double h=v2; if(w==0) { double pv=0; double Pa=P; double t0=h/1.005; double t1=t0+0.1; double ap[]=a.property((t0+tt),Pa); double ap1[]=a.property(tt,Pa); Cpa=ap[9]; //first guess for t; Cp=Cpa; double t=h/Cp; double ha=ap[3]-ap1[3]; double hv=0; double sa=ap[5]-ap1[5]; double tdp=t; double rh=0; double ws=0; double dos=0; double s=sa; aa[0]=P; aa[1]=t; aa[2]=ap[2]; 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]=0; aa[13]=w*hv; } else { double pv=w/c*P/(1.0+w/c); double Pa=P-pv; double sp[]=s.property("px",pv,1.0); double t0=sp[1]; System.out.println("to = "+t0); double t1=t0+0.1; hg0=sp[3]; double ap[]=a.property((t0+tt),Pa); double ap1[]=a.property(tt,Pa); Cpa=ap[9]; sp=s.property("tx",t1,1.0); double hg1=sp[3]; Cpw=(hg1-hg0)/0.1; //first guess for t; Cp=Cpa+w*Cpw; double t=(h-w*hg0+Cpw*t0*w)/Cp; ap=a.property((t+tt),Pa); Cpa=ap[9]; sp=s.property("tx",t,1.0); t0=t; hg0=sp[3]; System.out.println("t0=t"+t0); t1=t0+0.1; sp=s.property("tx",t1,1.0); hg1=sp[3]; Cpw=(hg1-hg0)/0.1; Cp=Cpa+w*Cpw; t=t=(h-w*hg0+Cpw*t0*w)/Cp; System.out.println("t last correction ="+t); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; sp=s.property("tp",t,pv); double hv=sp[3]; double sv=sp[5]; double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double sp1[]=s.property("tx",t,1.0); double pvs=sp1[0]; double rh=pv/pvs; double ws=c*pvs/(P-pvs); double dos=w/ws; double s=sa+w*sv; aa[0]=P; aa[1]=t; aa[2]=ap[2]; 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; } return aa; } public double[] tdb_dos(double v1,double v2,double P) { //kuru termometre sıcaklığı and degree of saturation double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double sp[]=s.property("tx",v1,1.0); double pvs=sp[0]; double ws=c*pvs/(P-pvs); double w=v2*ws; double pv=w/c*P/(1+w/c); double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double sp1[]; if(v2>0.9999) sp1=sp; else sp1=s.property("tp",v1,pv); double hg=sp1[3]; double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double rh=pv/pvs; double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double h=ha+w*hv; double s=sa+w*sv; double Pa=P-pv; ap=a.property((v1+tt),Pa); aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public double[] tdb_w(double v1,double v2,double P) { //kuru termometre sıcaklığı and degree of saturation double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; //w check : w can not be bigger than saturated air aa=tdb_rh(v1,1.0,P); if(v2>aa[5]) v2=aa[5]; //w can not be bigger than saturated air double sp[]=s.property("tx",v1,1.0); double pvs=sp[0]; double w=v2; double pv=w/c*P/(1.0+w/c); double rh=pv/pvs; double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double ws=c*pvs/(P-pvs); double sp1[]=s.property("tp",v1,pv); double hg=sp1[3]; double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double h=ha+w*hv; double s=sa+w*sv; double Pa=P-pv; ap=a.property((v1+tt),Pa); aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public double[] tdb_pv(double v1,double v2,double P) { //kuru termometre sıcaklığı and vapor pressure double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double sp[]=s.property("tx",v1,1.0); double pvs=sp[0]; double pv=v2; double w=c*pv/(P-pv); double rh=pv/pvs; double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double ws=c*pvs/(P-pvs); double sp1[]=s.property("tp",v1,pv); double hg=sp1[3]; double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double h=ha+w*hv; double s=sa+w*sv; double Pa=P-pv; ap=a.property((v1+tt),Pa); aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public double[] tdb_tdew(double v1,double v2,double P) { //kuru termometre sıcaklığı and vapor pressure double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double sp[]=s.property("tx",v1,1.0); double pvs=sp[0]; double sp1[]=s.property("tx",v2,1.0); double pv=sp1[0]; double tdp=v2; double w=c*pv/(P-pv); double rh=pv/pvs; double ws=c*pvs/(P-pvs); double sp2[]=s.property("tp",v1,pv); double hg=sp2[3]; double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double h=ha+w*hv; double s=sa+w*sv; double Pa=P-pv; ap=a.property((v1+tt),Pa); aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public double[] tdb_h(double v1,double v2,double P) { //kuru termometre sıcaklığı and vapor pressure double tt,Cpa,Cpw,hg0,Cp; if(a.SI){tt=273.15;} else {tt=459.67;}; double aa[]=new double[14]; double sp[]=s.property("tx",v1,1.0); double hg=sp[3]; double pvs=sp[0]; double ap[]=a.property((v1+tt),P); double ap1[]=a.property(tt,P); double ha=ap[3]-ap1[3]; double sa=ap[5]-ap1[5]; double h=v2; double w=(h-ha)/hg; double pv=w/c*P/(1.0+w/c); double rh=pv/pvs; double sp4[]=s.property("px",pv,1.0); double tdp=sp4[1]; double ws=c*pvs/(P-pvs); double sp1[]=s.property("tp",v1,pv); double dos=w/ws; double hv=sp1[3]; double sv=sp1[5]; double s=sa+w*sv; double Pa=P-pv; ap=a.property((v1+tt),Pa); aa[0]=P; aa[1]=v1; aa[2]=ap[2]; 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; return aa; } public String toString(String si, double v1, double v2, double P) { String s1[][]=toString1(si,v1,v2,P); String ss=""; for(int i=0;i<15;i++) {ss+=s1[i][0]+s1[i][1]+s1[i][2]+"\n";} return ss; } public String[][] toString1(String si, double v1, double v2, double P) { String s1[][]=new String[15][3]; s1[0][0]=" P,_basınç_________________ "; s1[1][0]="T,_kuru_termometre_sıcaklığı "; s1[2][0]="v,_kuru_hava_özgül_hacim___ "; s1[3][0]="Pv_su_buharı_kısmi_basıncı_ "; s1[4][0]="Pa_hava_kısmi_basıncı______ "; s1[5][0]="w,_özgül_nem___________ "; s1[6][0]="rh,_bağıl_nem____________ "; s1[7][0]="dos,doygunluk_derecesi_____ "; s1[8][0]="h_enthalpi_______________ "; s1[9][0]="s,_entropi________________ "; s1[10][0]="tdew,çiğ_noktası_sıcaklığı "; s1[11][0]="ha,_kuru_havanın_entalpisi_______ "; s1[12][0]="hv,_su_buharının_entalpisi____ "; s1[13][0]="hv*w,_duyulur_enthalpi______ "; s1[14][0]="T_yaş_hava_sıcaklığı______ "; if(SI) { s1[0][2]=" _bar_____________________ "; s1[1][2]="_derece_C________________ "; s1[2][2]="_m^3/kg__________________ "; s1[3][2]="_bar_____________________ "; s1[4][2]="_bar_____________________ "; s1[5][2]="_kg_buhar/kg_kuru_hava___ "; s1[6][2]="_________________________ "; s1[7][2]="_______________________ "; s1[8][2]="_KJ/kg_kuru_hava___________ "; s1[9][2]="_KJ/kg_kuru_hava_K_______ "; s1[10][2]="_deg_C__________________ "; s1[11][2]="_KJ/kg_kuru_hava__________ "; s1[12][2]="_KJ/kg_kuru_hava___________ "; s1[13][2]="_KJ/kg_kuru_hava___________ "; s1[14][2]="_derece_C_______________ "; } else { s1[0][2]=" lbf/in^2, psia "; s1[1][2]=" derece F "; s1[2][2]=" ft^3/lbmass kuru_hava "; s1[3][2]=" lbf/in^2, psia "; s1[4][2]=" lbf/in^2, psia "; s1[5][2]=" lbm vapor/lbm kuru_hava "; s1[6][2]=" "; s1[7][2]=" "; s1[8][2]=" BTU/lbmole kuru_hava "; s1[9][2]=" BTU/lbmole kuru_hava R "; s1[10][2]="derece F"; s1[11][2]=" BTU/lbmole kuru_hava "; s1[12][2]=" BTU/lbmole kuru_hava "; s1[13][2]=" BTU/lbmole kuru_hava "; s1[14][2]=" derece F "; } double pp[]=property(si,v1,v2,P); for(int i=0;i<15;i++) {s1[i][1]=toString(pp[i],23,14);} return s1; } 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