179 lines
9.9 KiB
C#
179 lines
9.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace NG_Tools
|
|
{
|
|
public class GB11062
|
|
{
|
|
|
|
int iNCC;// number of components
|
|
int[] aiCID = new int[21];// component IDs
|
|
double[] dXi = new double[21];// mole fraction of component i
|
|
Detail ptDetail;
|
|
public GB11062()
|
|
{
|
|
|
|
ptDetail = new Detail();
|
|
for (int i = 0; i < NG_Cal.NUMBEROFCOMPONENTS; i++) dXi[i] = 0;
|
|
|
|
|
|
}// Detail()
|
|
public void Run(ref NG_Cal.GasPropsSTRUCT ptAGA10)
|
|
{
|
|
int i;
|
|
// Check for gas composition change
|
|
ptAGA10.bForceUpdate = (ptAGA10.bForceUpdate || ptDetail.compositionchange(ref ptAGA10));
|
|
// assign component IDs and values
|
|
if (ptAGA10.bForceUpdate)
|
|
{
|
|
iNCC = -1;
|
|
for (i = 0; i < NG_Cal.NUMBEROFCOMPONENTS; i++)
|
|
{
|
|
if (ptAGA10.adMixture[i] > 0.0)
|
|
{
|
|
iNCC = iNCC + 1;
|
|
aiCID[iNCC] = i;
|
|
dXi[iNCC] = ptAGA10.adMixture[i];
|
|
}
|
|
}
|
|
iNCC = iNCC + 1;
|
|
//calculate composition dependent quantities; ported from original
|
|
//FORTRAN functions paramdl() and chardl()
|
|
GasPropsCal(ref ptAGA10);
|
|
}
|
|
}
|
|
|
|
void GasPropsCal(ref NG_Cal.GasPropsSTRUCT ptAGA10)
|
|
{
|
|
double[] adTableMri = new double[NG_Cal.NUMBEROFCOMPONENTS] { 16.0430, 28.0135, 44.0100, 30.0700, 44.0970, 18.0153, 34.0820, 2.0159, 28.0100, 31.9988, 58.1230, 58.1230, 72.1500, 72.1500, 86.1770, 100.2040, 114.2310, 128.2580, 142.2850, 4.0026, 39.9480 };
|
|
double[] adTablePc = new double[NG_Cal.NUMBEROFCOMPONENTS] { 4.604, 3.399, 7.382, 4.88, 4.249, 22.118, 9.005, 1.297, 3.499, 5.081, 3.648, 3.797, 3.381, 3.369, 3.012, 2.736, 2.486, 0, 0, 0.2275, 4.876 };
|
|
double[] adTableTc = new double[NG_Cal.NUMBEROFCOMPONENTS] { 190.55, 126.1, 304.19, 305.43, 369.82, 647.3, 373.5, 33.2, 132.92, 154.7, 408.13, 425.16, 460.39, 469.6, 507.4, 540.2, 568.76, 0, 0, 5.2, 150.82 };
|
|
double[] adTableBzsx = new double[NG_Cal.NUMBEROFCOMPONENTS] { 15, 0, 0, 13, 9.5, 0, 45.5, 74.2, 74.2, 0, 8.4, 8.4, 8.3, 8.3, 7.7, 7.0, 0, 0, 0, 0, 0 };
|
|
double[] adTableBzxx = new double[NG_Cal.NUMBEROFCOMPONENTS] { 5.0, 0, 0, 2.9, 2.1, 0, 4.3, 4.0, 12.5, 0, 1.8, 1.8, 1.4, 1.4, 1.2, 1.0, 0.96, 0, 0, 0, 0 };
|
|
double[,] adTableZn = new double[3, NG_Cal.NUMBEROFCOMPONENTS]
|
|
{{0.9976,0.9995,0.9933,0.99,0.9789,0.93,0.99,1.0006,0.9993,0.999,0.958,0.9572,0.9377,0.918,0.892,0.83,0.742,0.613,0.434,1.0005,0.999},
|
|
{0.998,0.9997,0.9944,0.9915,0.9821,0.945,0.99,1.0006,0.9995,0.9992,0.968,0.965,0.948,0.937,0.913,0.866,0.802,0.71,0.584,1.0005,0.9992},
|
|
{0.9981,0.9997,0.9944,0.992,0.9834,0.952,0.99,1.0006,0.9996,0.9993,0.971,0.9682,0.953,0.945,0.919,0.876,0.817,0.735,0.623,1.0005,0.9993}};
|
|
double[,] adTableSqrtbj = new double[3, NG_Cal.NUMBEROFCOMPONENTS]
|
|
{{0.049,0.0224,0.0819,0.1,0.1453,0.2646,0.1,-0.004,0.0265,0.0316,0.2049,0.2069,0.251,0.2864,0.3286,0.4123,0.5079,0.6221,0.7523,0.0006,0.0316},
|
|
{0.0447,0.0173,0.0748,0.0922,0.1338,0.2345,0.1,-0.0048,0.0224,0.0283,0.1789,0.1871,0.228,0.251,0.295,0.3661,0.445,0.5385,0.645,0.0002,0.0283},
|
|
{0.0436,0.0173,0.0728,0.0894,0.1288,0.2191,0.1,-0.0051,0.02,0.0265,0.1703,0.1783,0.2168,0.2345,0.2846,0.3521,0.4278,0.5148,0.614,0,0.0265}};
|
|
double[,] adTableHhvMol = new double[4, NG_Cal.NUMBEROFCOMPONENTS]
|
|
{{892.97,0,0,1564.34,2224.01,45.074,562.94,286.63,282.8,0,2874.2,2883.82,3535.98,3542.89,4203.23,4862.87,5522.4,6182.91,6842.69,0,0},
|
|
{891.56,0,0,1562.14,2221.1,44.433,562.38,286.15,282.91,0,2870.58,2879.76,3531.68,3538.6,4198.24,4857.18,5516.01,6175.82,6834.9,0,0},
|
|
{891.09,0,0,1561.41,2220.13,44.224,562.19,285.99,282.95,0,2869.38,2878.57,3530.24,3537.17,4196.58,4855.29,5513.88,6173.46,6832.31,0,0},
|
|
{890.63,0,0,1560.69,2219.17,44.016,562.01,285.83,282.98,0,2868.2,2877.4,3528.83,3535.77,4194.95,4853.43,5511.8,6171.15,6829.77,0,0}};
|
|
double[,] adTableLhvMol = new double[4, NG_Cal.NUMBEROFCOMPONENTS]
|
|
{{802.82,0,0,1429.12,2043.71,0,517.87,241.56,282.8,0,2648.83,2658.45,3265.54,3272.45,3887.71,4502.28,5116.73,5732.17,6346.88,0,0},
|
|
{802.69,0,0,1428.84,2043.37,0,517.95,241.72,282.91,0,2648.42,2657.6,3265.08,3272,3887.21,4501.72,5116.11,5731.49,6346.14,0,0},
|
|
{802.65,0,0,1428.74,2043.23,0,517.97,241.76,282.95,0,2648.26,2657.45,3264.89,3271.83,3887.01,4501.49,5115.87,5731.22,6345.85,0,0},
|
|
{802.6,0,0,1428.64,2043.11,0,517.99,241.81,282.98,0,2648.12,2657.32,3264.73,3271.67,3886.84,4501.3,5115.66,5730.99,6345.59,0,0}};
|
|
|
|
int i;
|
|
|
|
double dMair = 28.9626;
|
|
double dZair = 0;
|
|
|
|
for (i = 0; i < NG_Cal.NUMBEROFCOMPONENTS; i++)
|
|
{
|
|
if (ptAGA10.adMixture[i] != 0)
|
|
{
|
|
ptAGA10.Pc += adTablePc[i] * ptAGA10.adMixture[i];
|
|
ptAGA10.TC += adTableTc[i] * ptAGA10.adMixture[i];
|
|
if (adTableBzsx[i] != 0)
|
|
{
|
|
ptAGA10.Bzsx += ptAGA10.adMixture[i] / adTableBzsx[i];
|
|
ptAGA10.Bzxx += ptAGA10.adMixture[i] / adTableBzxx[i];
|
|
}
|
|
|
|
if (i >= 10 & i <= 18)
|
|
{
|
|
ptAGA10.C4j += ptAGA10.adMixture[i] * adTableMri[i];
|
|
}
|
|
if (i >= 12 & i <= 18)
|
|
{
|
|
ptAGA10.C5j += ptAGA10.adMixture[i] * adTableMri[i];
|
|
}
|
|
if (i >= 14 & i <= 18)
|
|
{
|
|
ptAGA10.C6j += ptAGA10.adMixture[i] * adTableMri[i];
|
|
}
|
|
if (i == 3)
|
|
{
|
|
ptAGA10.C2 += ptAGA10.adMixture[i] * adTableMri[i];
|
|
}
|
|
|
|
switch (ptAGA10.dCbtj)
|
|
{
|
|
case 2:
|
|
ptAGA10.dZb11062 += adTableSqrtbj[0, i] * ptAGA10.adMixture[i];
|
|
dZair = 0.99941;
|
|
break;
|
|
case 1:
|
|
ptAGA10.dZb11062 += adTableSqrtbj[1, i] * ptAGA10.adMixture[i];
|
|
|
|
dZair = 0.99958;
|
|
break;
|
|
case 0:
|
|
ptAGA10.dZb11062 += adTableSqrtbj[2, i] * ptAGA10.adMixture[i];
|
|
|
|
dZair = 0.99963;
|
|
break;
|
|
}
|
|
|
|
switch (ptAGA10.dCbtj_E)
|
|
{
|
|
case 0:
|
|
|
|
ptAGA10.dHhvMol += adTableHhvMol[0, i] * ptAGA10.adMixture[i];
|
|
ptAGA10.dLhvMol += adTableLhvMol[0, i] * ptAGA10.adMixture[i];
|
|
|
|
break;
|
|
case 1:
|
|
ptAGA10.dHhvMol += adTableHhvMol[1, i] * ptAGA10.adMixture[i];
|
|
ptAGA10.dLhvMol += adTableLhvMol[1, i] * ptAGA10.adMixture[i];
|
|
break;
|
|
case 2:
|
|
ptAGA10.dHhvMol += adTableHhvMol[2, i] * ptAGA10.adMixture[i];
|
|
ptAGA10.dLhvMol += adTableLhvMol[2, i] * ptAGA10.adMixture[i];
|
|
break;
|
|
case 3:
|
|
ptAGA10.dHhvMol += adTableHhvMol[3, i] * ptAGA10.adMixture[i];
|
|
ptAGA10.dLhvMol += adTableLhvMol[3, i] * ptAGA10.adMixture[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
ptAGA10.Bzsx = ptAGA10.Bzsx == 0 ? 0 : 1 / ptAGA10.Bzsx;
|
|
ptAGA10.Bzxx = ptAGA10.Bzxx == 0 ? 0 : 1 / ptAGA10.Bzxx;
|
|
|
|
|
|
ptAGA10.dZb11062 = 1 - ptAGA10.dZb11062 * ptAGA10.dZb11062;
|
|
ptAGA10.dHhvm = ptAGA10.dHhvMol / ptAGA10.dMrx;
|
|
ptAGA10.dLhvm = ptAGA10.dLhvMol / ptAGA10.dMrx;
|
|
ptAGA10.dHhvv = ptAGA10.dHhvMol * ptAGA10.dPb / ptAGA10.dTb / 8314.510 / ptAGA10.dZb11062;
|
|
ptAGA10.dLhvv = ptAGA10.dLhvMol * ptAGA10.dPb / ptAGA10.dTb / 8314.510 / ptAGA10.dZb11062;
|
|
ptAGA10.dRD_Ideal11062 = ptAGA10.dMrx / dMair;
|
|
ptAGA10.dRD_Real11062 = ptAGA10.dRD_Ideal11062 * dZair / ptAGA10.dZb11062;
|
|
|
|
ptAGA10.dRhob11062 = ptAGA10.dMrx * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.dRhof11062 = ptAGA10.dMrx * ptAGA10.dPf / 8314.51 / ptAGA10.dTf / ptAGA10.dZf;
|
|
ptAGA10.dWobbeIndex = ptAGA10.dHhvv / Math.Sqrt(ptAGA10.dRD_Real11062);
|
|
ptAGA10.C3j = ptAGA10.C4j + ptAGA10.adMixture[4] * adTableMri[4];
|
|
ptAGA10.C2j = ptAGA10.C3j + ptAGA10.adMixture[3] * adTableMri[3];
|
|
ptAGA10.C3C4 = ptAGA10.adMixture[4] * adTableMri[4] + ptAGA10.adMixture[10] * adTableMri[10] + ptAGA10.adMixture[11] * adTableMri[11];
|
|
ptAGA10.TotalC = ptAGA10.C2j + ptAGA10.adMixture[0] * adTableMri[0];
|
|
|
|
ptAGA10.TotalC = ptAGA10.TotalC * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C2 = ptAGA10.C2 * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C3C4 = ptAGA10.C3C4 * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C2j = ptAGA10.C2j * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C3j = ptAGA10.C3j * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C4j = ptAGA10.C4j * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C5j = ptAGA10.C5j * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
ptAGA10.C6j = ptAGA10.C6j * ptAGA10.dPb / 8314.51 / ptAGA10.dTb / ptAGA10.dZb11062;
|
|
|
|
}
|
|
}
|
|
} |