Anda di halaman 1dari 13

/**

* Gaussian dispersion Model


* This model run in java language which it calculates the concentration of NO f
rom the plume at different dime dimesions .
* In addition it determines the maximum concentration using both methods, the m
aximum distance at which the Cmax occurs and the dispersion coefficient.
* @author (Mohamad Jaafar Sannan)
* @version (a version number or a date)
*/
public class Gaussion_Dispersion_Model
{
// instance variables - replace the example below with your own
public double a,d,n,f,c,A1,B1,C1,D1;
/**
* Constructor for objects of class Gaussion_Dispersion_Model
*/
public Gaussion_Dispersion_Model( double N,double A , double C,double D, dou
ble F,double a1 ,double b1,double c1, double d1 )
{
a = A;
c = C;
d = D;
n = N;
f = F;
A1 = a1;
B1 = b1;
C1 = c1;
D1 = d1;
}
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return
the sum of x and y
*/
public Gaussion_Dispersion_Model values_of_constant (double distance,String s
)
{
double a,c,d,n,f;
if (s.compareTo("A")==0&& distance<=1000){
n =0.15;
a = 213;
c = 440.8;
d = 1.941;
f = 9.27;
A1 = -1.0563;
B1 = -2.7153;
C1 = 0.1261;
D1 = 0;
}
else if (s.compareTo("A")==0&& distance>=1000 ){

a = 213;
n =0.15;
c = 459.7;
d = 2.094;
f = -9.6;
A1 = -1.0563;
B1 = -2.7153;
C1 = 0.1261;
D1 = 0;
}
else if(s.compareTo("B")==0&& distance<=1000 ){
n =0.15;
a = 156;
c = 106.6;
d = 1.149;
f = 3.3;
A1 = -1.8060;
B1 = -2.1912;
C1 = 0.0389;
D1 = 0;
}
else if (s.compareTo("B")==0&& distance>=1000 ){
a = 156;
n =0.15;
c = 108.2;
d = 1.098;
f = 2;
A1 = -1.8060;
B1 = -2.1912;
C1 = 0.0389;
D1 = 0;
}
else if (s.compareTo("C")==0&& distance<=1000 ){
n =0.2;
a = 104;
c = 61;
d = 0.911;
f = 0;
A1 = -1.9748;
B1 = -1.9980;
C1 = 0;
D1 = 0;
}
else if (s.compareTo("C")==0&& distance>=1000 ){
n =0.2;
a = 104;
c = 61;
d = 0.911;
f = 0;
A1 = -1.9748;
B1 = -1.9980;
C1 = 0;

D1 = 0;
}
else if(
n
a
c
d
f

s.compareTo("D")==0&& distance<=1000 ){
=0.25;
= 68;
= 33.2;
= 0.725;
= -1.7;
A1 = -2.5302;
B1 = -1.5610;
C1 = -0.0934;
D1 = 0;

}
else if (s.compareTo("D")==0& distance>=1000) {
n =0.25;
a = 68;
c = 44.5;
d = 0.516;
f = -13;
A1 = -2.5302;
B1 = -1.5610;
C1 = -0.0934;
D1 = 0;
}
else if (s.compareTo("E")==0&& distance<=1000){
n =0.4;
a = 50.5;
c = 22.8;
d = 0.678;
f =-1.3;
A1 = -1.4496;
B1 = -2.5910;
C1 = 0.2181;
D1 = -0.0343;
}
else if( s.compareTo("E")==0&& distance>=1000) {
a = 50.5;
n =0.4;
c = 55.4;
d = 0.305;
f = -34;
A1 = -1.4496;
B1 = -2.5910;
C1 = 0.2181;
D1 = -0.0343;
}
else if(
n
a
c
d
f

s.compareTo("F")==0&& distance<=1000){
=0.6;
= 34;
= 14.35;
= 0.740;
= -0.35;

A1
B1
C1
D1

=
=
=
=

-1.0488;
-3.2252;
0.4977;
-0.0765;

}
else if (s.compareTo("F")==0&& distance>=1000 ){
a = 34;
n =0.6;
c = 62.6;
d = 0.180;
f = -48.6;
A1 = -1.0488;
B1 = -3.2252;
C1 = 0.4977;
D1 = -0.0765;
}
else {
a
n
c
d
f
}

=
=
=
=
=

2;
2;
2;
2;
2;

return new Gaussion_Dispersion_Model (n ,a ,c, d , f, A1 ,B1, C1 ,D1);


}
public double Concentration(double Average_wind_speed_10, double H, double d
x,double y,double z,double n,double Q)
{
double sdy = a*Math.pow(dx,0.894);
double sdz = (c*Math.pow(dx,d)+f);
double Average_wind_speed_H = Average_wind_speed_10 * Math.pow(H/10 ,n);
double k = Q /(2*Math.PI*Average_wind_speed_H*sdy*sdz);
double
double
double
double
return

p1 = (-Math.pow(y,2)/(2*Math.pow(sdy,2)));
p2 = Math.exp(- Math.pow((z-H),2)/(2*Math.pow(sdz,2)));
p3 = Math.exp(-Math.pow((z+H),2)/(2*Math.pow(sdz,2)));
concentration = k*( Math.exp(p1))*(p2 + p3);
concentration;

}
public double Concentration_Max_turmer (double H,double Average_wind_speed_1
0,double Q,double n)
{
double u = Math.exp(A1 + (B1*Math.log(H))+ (C1*(Math.pow(Math.log(H),2
)))+(D1*(Math.pow(Math.log(H),3))));
double Average_wind_speed_H = ((Average_wind_speed_10) * (Math.pow(H/10
,n)));

double CMax_turmer =(Q*u/Average_wind_speed_H);


return CMax_turmer;
}

public double Concentration_Max_chart(double H,double Average_wind_speed_10,


double Q,double n)
{
double Average_wind_speed_H = (Average_wind_speed_10)*( Math.pow((H/10
) ,n));
double sdz_chart = (H/Math.sqrt(2));
double x_from_sdz_chart = Math.exp((1/d)*Math.log((sdz_chart-f)/c));
double sdy_chart = (a * Math.pow (x_from_sdz_chart,0.894));
double CMax_Chart =((0.1171*Q)/(Average_wind_speed_H *sdz_chart*sdy_ch
art));
return CMax_Chart;
}
public double Xmax(double H,double x ,String clas)
{
// double Average_wind_speed_H = (Average_wind_speed_10)*( Math.pow((H/10)
,n));
// double variable =( Q/(Math.PI*Average_wind_speed_H*A1*C1*Math.pow(dx,
B1+D1)));
// double Maximum_distance = variable * Math.exp(-((B1+D1)*Math.log(2440.6
/dx))/2*B1);
double a=0, b=0, c=0, d=0;
if (100< x && x<=500 && clas.compareTo("A")==0 )
{
if (x<10000)
{ a = 0.0383;
b =1.281;
c = 0.495;
d = 0.873;
}
else
{
a = 0.0383;
b =1.281;
c =0.606;
d = 0.851;
}
}
else if (100< x && x<=500 && clas.compareTo("B")==0 )
{
if (x<10000)
{ a = 0.1393;
b = 0.9467;
c = 0.310;
d = 0.897;
}
else
{
a = 0.1393;
b = 0.9467;
c =0.523;

d = 0.840;
}
}
else if (100< x && x<=500 && clas.compareTo("C")==0)
{
if (x<10000)
{a = 0.1120;
b = 0.9100;
c = 0.197;
d = 0.908;
}
else
{
a = 0.1120;
b = 0.9100;
c =0.285;
d = 0.867;
}
}
else if (100< x && x<=500 && clas.compareTo("D")==0)
{
if (x<10000)
{a = 0.0856;
b = 0.8650;
c = 0.122;
d = 0.916;
}
else
{
a = 0.0856;
b = 0.8650;
c =0.193;
d = 0.865;
}
}
else if (100< x && x<=500 && clas.compareTo("E")==0)
{
if (x<10000)
{a = 0.1094;
b = 0.7657;
c = 0.0934;
d = 0.912;
}
else
{
a = 0.1094;
b = 0.7657;
c =0.141;
d = 0.868;
}
}
else if (100< x && x<=500 && clas.compareTo("F")==0)
{
if (x<10000)
{a = 0.5645;
b = 0.8050;
c = 0.0625;
d = 0.911;
}

else
{
a = 0.5645;
b = 0.8050;
c =0.0800;
d = 0.884;
}
}
else if (500< x && x<=5000 && clas.compareTo("A")==0)
{
if (x<10000)
{a = 0.0002539;
b = 2.089;
c = 0.495;
d = 0.873;
}
else
{
a = 0.0002539;
b = 2.089;
c =0.606;
d = 0.851;
}
}
else if (500< x && x<=5000 && clas.compareTo("B")==0)
{
if (x<10000)
{a = 0.04936;
b = 1.114;
c = 0.310;
d = 0.897;
}
else
{
a = 0.04936;
b = 1.114;
c =0.523;
d = 0.840;
}
}
else if (500< x && x<=5000 && clas.compareTo("C")==0)
{
if (x<10000)
{a = 0.1014;
b = 0.926;
c = 0.197;
d = 0.908;
}
else
{
a = 0.1014;
b = 0.926;
c =0.285;
d = 0.867;
}
}
else if (500< x && x<=5000 && clas.compareTo("D")==0)
{
if (x<10000)
{a = 0.2591;

b = 0.6869;
c = 0.122;
d = 0.916;
}
else
{
a = 0.2591;
b = 0.6869;
c =0.193;
d = 0.865;
}
}
else if (500< x && x<=5000 && clas.compareTo("E")==0)
{
if (x<10000)
{a = 0.2452;
b = 0.6358;
c = 0.0934;
d = 0.912;
}
else
{
a = 0.2452;
b = 0.6358;
c =0.141;
d = 0.868;
}
}
else if (500< x && x<=5000 && clas.compareTo("F")==0)
{
if (x<10000)
{a = 0.1930;
b = 0.63072;
c = 0.0625;
d = 0.911;
}
else
{
a = 0.1930;
b = 0.63072;
c =0.0800;
d = 0.884;
}
}
else if (5000< x && clas.compareTo("A")==0)
{
if (x<10000)
{a = 0.0002539;
b = 2.089;
c = 0.495;
d = 0.873;
}
else
{
a = 0.0002539;
b = 2.089;
c =0.606;
d = 0.851;
}
}

else if (5000< x
{
if (x<10000)
{a = 0.04936;
b = 1.114;
c = 0.310;
d = 0.897;
}
else
{
a = 0.04936;
b = 1.114;
c =0.523;
d = 0.840;
}
}
else if (5000< x
{
if (x<10000)
{a = 0.1154;
b = 0.9109;
c = 0.197;
d = 0.908;
}
else
{
a = 0.1154;
b = 0.9109;
c =0.285;
d = 0.867;
}
}
else if (5000< x
{
if (x<10000)
{a = 0.7368;
b = 0.5642;
c = 0.122;
d = 0.916;
}
else
{
a = 0.7368;
b = 0.5642;
c =0.193;
d = 0.865;
}
}
else if (5000< x
{
if (x<10000)
{a = 0.9204;
b = 0.4805;
c = 0.0934;
d = 0.912;
}
else
{
a = 0.9204;
b = 0.4805;

&& clas.compareTo("B")==0)

&& clas.compareTo("C")==0)

&& clas.compareTo("D")==0)

&& clas.compareTo("E")==0)

c =0.141;
d = 0.868;
}
}
else if (5000< x && clas.compareTo("F")==0)
{
if (x<10000)
{a = 1.505;
b = 0.3662;
c = 0.0625;
d = 0.911;
}
else
{
a = 1.505;
b = 0.3662;
c =0.0800;
d = 0.884;
}
}
//double sdz_chart = (H/Math.sqrt(2));
// double x_from_sdz_chart = Math.exp((1/2*d)*Math.log((sdz_chart-f)/c));
//double Maximum_distance = Math.pow(((B1*Math.pow(H,2))/(Math.pow(A1,2)*
(A1+B1))), (1/(2*B1)));///
double
double
double
double
return

xx = Math.pow(H,2);
y =Math.pow(a,2);
z = (b*xx)/(y*(d+b));
u = Math.pow(z,(1/(2*b)));
u ;

public double Effective_Stack_Height (double H,double Average_wind_speed_10,


double Q,double n,char windClass )
{
double Average_wind_speed_H = Average_wind_speed_10 * Math.pow(H/10 ,n);
double Cmax = 0.7 * Math.max( Concentration_Max_turmer( H,Average_wind_sp
eed_10, Q, n),Concentration_Max_chart( H,Average_wind_speed_10, Q,n));
double sigmaYsigmaZ= (0.1171*Q)/(Average_wind_speed_H*Cmax);

// dispersion coefficients table


int numberOfEntries = 29;
double[][] table = {
{0.1, 27*14, 0,0,0,0,0}, // 3abbe lal class B, C
, D, E, F
{0.15, 39*20,0,0,0,0,0}, // 3abbe lal class B, C
, D, E, F
{0.2, 51*29, 37*20, 25*14, 16*9, 12*6, 8*4},
{0.25, 62*39, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{0.3, 73*52, 0,0,0,0,0}, // 3abbe lal class B, C
, D, E, F

{0.35, 83*67, 0,0,0,0,0}, // 3abbe lal class B,


C, D, E, F
{0.4, 94*84, 69*40, 46*26, 30*15, 22*11, 15*7},
{0.45, 104*103, 0,0,0,0,0}, // 3abbe lal class B
, C, D, E, F
{0.5, 115*124, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{0.55, 124*147, 0,0,0,0,0}, // 3abbe lal class B
, C, D, E, F
{0.6, 135*173, 99*63, 66*38, 43*21, 32*15, 22*9}
,
{0.7, 155*230, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{0.8, 174*295, 128*86, 85*50, 56*27, 41*18, 28*1
2},
{0.9, 194*369, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{1, 213*450, 156*110, 104*61, 68*31, 50*22, 34*1
4},
{1.5, 306*1064, 0,0,0,0,0}, // 3abbe lal class B
, C, D, E, F
{2, 396*1953, 290*234, 193*115, 126*51, 94*34, 6
3*22},
{3, 569*4578, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{4, 736*8369, 539*498, 359*216, 235*78, 174*51,
117*32},
{5, 897*13360, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{6, 1057*19575, 0,0,0,0,0}, // 3abbe lal class B
, C, D, E, F
{7, 1213*27037, 0,0,0,0,0}, // 3abbe lal class B
, C, D, E, F
{8, 1367*35763, 1001*1063, 667*406, 436*117, 324
*70, 218*42},
{10, 1669*57069, 0,0,0,0,0}, // 3abbe lal class
B, C, D, E, F
{12, 1964*83604, 0,0,0,0,0}, // 3abbe lal class
B, C, D, E, F
{14, 2254*147, 0,0,0,0,0}, // 3abbe lal class B,
C, D, E, F
{16, 2540*115460, 1860*2274, 1240*763, 811*173,
602*95, 405*55},
{18, 2822*195431, 0,0,0,0,0}, // 3abbe lal class
B, C, D, E, F
{20, 3101*243677, 2271*2904, 1514*934, 990*196,
735*104, 495*59}
};
// get number of column to select from based on wind class (A, B
, C, D, E or F)
int column;
switch(windClass) {
case 'A' :
column = 1;
break;
case 'B' :
column = 2;
break;
case 'C' :

column
break;
case 'D' :
column
break;
case 'E' :
column
break;
case 'F' :
column
break;
default :
return
};

= 3;
= 4;
= 5;
= 6;
-999;

// find index 'index' such that 'sigmaYsigmaZ[index] < sigmaYsig


maZ < sigmaYsigmaZ[index+1]'
int index = 0;
for(int i=0; i<numberOfEntries; i++) {
index = sigmaYsigmaZ > table[i][column] ? i : index;
if(sigmaYsigmaZ < table[i][column])
break;
}
// perform interpolation or extrapolation
double x;
double[] xi = new double[numberOfEntries];
double[] yi = new double[numberOfEntries];
for(int i=0; i<numberOfEntries; i++) {
yi[i] = table[i][0];
xi[i] = table[i][column];
}
if (sigmaYsigmaZ < table[0][column])
x = table[0][0];
// interpolation
else if (index < numberOfEntries-1){
//System.out.println(table[index][0] + (table[index+1][0
] - table[index][0]) * ((sigmaYsigmaZ - table[index][column]) / (table[index+1][
column] - table[index][column])));
x = spline(xi, yi, index, sigmaYsigmaZ);}
// extrapolation
else
x = table[index-1][0] + ((sigmaYsigmaZ - table[index-1][
column]) / (table[index][column] - table[index-1][column])) * (table[index][0] table[index-1][0]);
System.out.println("x: "+ x );
double sdtz = (c*Math.pow(x,d)+f);
System.out.println("sdtz : "+ sdtz );
double StackHeight_optimized = Math.sqrt(2)*sdtz ;
return StackHeight_optimized ;
//.......................................................................
..............................
}
public double spline(double[] x, double[] y, int index, double val){
int n = x.length - 1;
double[] a = y;

double[] b = new double[n];


double[] d = new double[n];
double[] h = new double[n];
for(int i=0; i<n; i++)
h[i] = x[i+1] - x[i];
double[] alfa = new double[n];
for(int i=1; i<n; i++)
alfa[i] = (3/h[i])*(a[i+1]-a[i]) - (3/h[i-1])*(a[i]-a[i1]);
double[] c = new double[n+1];
double[] l = new double[n+1];
double[] mu = new double[n+1];
double[] z = new double[n+1];
l[0] = 1;
mu[0] = 0;
z[0] = 0;
for(int i=1; i<n; i++) {
l[i] = 2*(x[i+1]-x[i]) - h[i-1]*mu[i-1];
mu[i] = h[i]/l[i];
z[i] = (alfa[i] - h[i-1]*z[i-1])/l[i];
}
l[n] = 1;
z[n] = 0;
c[n] = 0;
for(int j=n-1; j>=0; j--) {
c[j] = z[j] - mu[j]*c[j+1];
b[j] = ((a[j+1]-a[j])/h[j]) -h[j]*(c[j+1]+2*c[j])/3;
d[j] = (c[j+1] - c[j]) / (3*h[j]);
}
return a[index] + b[index]*(val-x[index]) + c[index]*Math.pow((v
al-x[index]), 2) + d[index]*Math.pow((val-x[index]), 3);
}

Anda mungkin juga menyukai