概要
上一章节分享了《基于Python的AGA8_92DC压缩因子计算方法》,本章节将分享基于Java的AGA8_92DC压缩因子计算方法。
整体架构流程
备注
Java类名 calculatorZ
技术细节
package calculatorZ;
import java.util.Scanner;
public class calculatorZ {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择计算方式:");
System.out.println("1. 使用预设组分计算Z因子");
System.out.println("2. 输入组分计算Z因子");
String choice = scanner.nextLine();
if (choice.equals("1")) {
System.out.print("请输入绝对压力(MPa):");
double JueDuiYaLi = scanner.nextDouble();
System.out.print("请输入温度(℃):");
double WenDu = scanner.nextDouble();
double Z = Z_CAL.Z_result_YuSheNG(JueDuiYaLi, WenDu);
System.out.printf("计算得到的Z因子为:%.6f%n", Z);
} else if (choice.equals("2")) {
System.out.print("请输入组分摩尔分数(用空格分隔,共21个组分):CH4 N2 CO2 C2H6 C3H8 H2O H2S H2 CO O2 iC4H10 nC4H10 iC5H12 nC5H12 nC6H14 nC7H16 nC8H18 nC9H20 nC10H22 He Ar\n");
String[] ZuFenStr = scanner.nextLine().split(" ");
double[] ZuFen = new double[21];
for (int i = 0; i < 21; i++) {
ZuFen[i] = Double.parseDouble(ZuFenStr[i]);
}
System.out.print("请输入绝对压力(MPa):");
double YaLi = scanner.nextDouble();
System.out.print("请输入温度(℃):");
double WenDu = scanner.nextDouble();
double Z = Z_CAL.Z_result_QiTq_NG(ZuFen, YaLi, WenDu);
System.out.printf("计算得到的Z因子为:%.6f%n", Z);
} else {
System.out.println("无效的选择,请重新运行程序并输入有效的选项。");
}
scanner.close();
}
}
class Z_CAL {
public static double Z_result_YuSheNG(double p, double WenDu) {
double TT = 0.0;
double D = 0.0;
double Z = 0.0;
double BMIX = 0.0;
// Gas compositions for example calculations 组分GB17747.2-2011第二部分 附录C 1#气样
double[] ex1 = {0.965, 0.003, 0.006, 0.018, 0.0045, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0010, 0.0010, 0.0005, 0.0003, 0.0007, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000};
MDP_Z.DCAGA(ex1);
TT = WenDu + 273.15;
double[] result = MDP_Z.DZOFPT(p, TT);
D = result[0];
Z = result[1];
BMIX = result[2];
return Z;
}
public static double Z_result_QiTq_NG(double[] ZuFen, double p, double WenDu) {
double TT = 0.0;
double D = 0.0;
double Z = 0.0;
double BMIX = 0.0;
MDP_Z.DCAGA(ZuFen);
TT = WenDu + 273.15;// Temperatures for example calculations 工况温度℃,需要转换成热力学温度;
double[] result = MDP_Z.DZOFPT(p, TT);
D = result[0];
Z = result[1];
BMIX = result[2];
return Z;
}
}
class MDP_Z {
static double[] A = { 0.153832600, 1.341953000, -2.998583000, -0.048312280, 0.375796500, -1.589575000, -0.053588470, 0.886594630, -0.710237040, -1.471722000,
1.321850350, -0.786659250, 0.2291290e-8, 0.157672400, -0.436386400, -0.044081590, -0.003433888, 0.032059050, 0.024873550, 0.073322790,
-0.001600573, 0.642470600, -0.416260100, -0.066899570, 0.279179500, -0.696605100, -0.002860589, -0.008098836, 3.150547000, 0.007224479,
-0.705752900, 0.534979200, -0.079314910, -1.418465000, -0.599905e-16, 0.105840200, 0.034317290, -0.007022847, 0.024955870, 0.042968180,
0.746545300, -0.291961300, 7.294616000, -9.936757000, -0.005399808, -0.243256700, 0.049870160, 0.003733797, 1.874951000, 0.002168144,
-0.658716400, 0.000205518, 0.009776195, -0.020487080, 0.015573220, 0.006862415, -0.001226752, 0.002850908 };
static double[] B = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9 };
static double[] C = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1 };
static double[] K = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 4, 4, 0, 0, 2, 2, 2, 4, 4, 4, 4, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 0, 0, 2, 2, 2, 4, 4, 0, 2, 2, 4, 4, 0, 2, 0, 2, 1, 2, 2, 2, 2 };
static double[] G = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0 };
static double[] Q = { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 };
static double[] F = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static double[] S = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static double[] W = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static double[] U = { 0.0, 0.5, 1.0, 3.5, -0.5, 4.5, 0.5, 7.5, 9.5, 6.0, 12.0, 12.5, -6.0, 2.0, 3.0, 2.0, 2.0, 11.0, -0.5, 0.5, 0.0, 4.0, 6.0, 21.0, 23.0, 22.0, -1.0, -0.5, 7.0,
-1.0, 6.0, 4.0, 1.0, 9.0, -13.0, 21.0, 8.0, -0.5, 0.0, 2.0, 7.0, 9.0, 22.0, 23.0, 1.0, 9.0, 3.0, 8.0, 23.0, 1.5, 5.0, -0.5, 4.0, 7.0, 3.0, 0.0, 1.0, 0.0 };
static double[] MI = { 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 };//M摩尔质量属于被约分掉了的中间量
static double[] EI = { 151.318300, 99.737780, 241.960600, 244.166700, 298.118300, 514.015600, 296.355000, 26.957940, 105.534800, 122.766700, 324.068900,
337.638900, 365.599900, 370.682300, 402.636293, 427.722630, 450.325022, 470.840891, 489.558373, 2.610111, 119.629900 };
static double[] KI = { 0.4619255, 0.4479153, 0.4557489, 0.5279209, 0.5837490, 0.3825868, 0.4618263, 0.3514916, 0.4533894, 0.4186954, 0.6406937,
0.6341423, 0.6738577, 0.6798307, 0.7175118, 0.7525189, 0.7849550, 0.8152731, 0.8437826, 0.3589888, 0.4216551 };
static double[] GI = { 0.000000, 0.027815, 0.189065, 0.079300, 0.141239, 0.332500, 0.088500, 0.034369, 0.038953, 0.021000, 0.256692,
0.281835, 0.332267, 0.366911, 0.289731, 0.337542, 0.383381, 0.427354, 0.469659, 0.000000, 0.000000 };
static double[] QI = { 0.0, 0.0, 0.69, 0.0, 0.0, 1.06775, 0.633276, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
static double[] FI = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
static double[] SI = { 0.0, 0.0, 0.0, 0.0, 0.0, 1.5822, 0.390, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
static double[] WI = { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
static double[][] EIJ = {
{ 1.000000, 0.971640, 0.960644, 1.000000, 0.994635, 0.708218, 0.931484, 1.170520, 0.990126, 1.000000, 1.019530, 0.989844, 1.002350, 0.999268, 1.107274, 0.880880, 0.880973, 0.881067, 0.881161, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.022740, 0.970120, 0.945939, 0.746954, 0.902271, 1.086320, 1.005710, 1.021000, 0.946914, 0.973384, 0.959340, 0.945520, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 0.925053, 0.960237, 0.849408, 0.955052, 1.281790, 1.500000, 1.000000, 0.906849, 0.897362, 0.726255, 0.859764, 0.855134, 0.831229, 0.808310, 0.786323, 0.765171, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.022560, 0.693168, 0.946871, 1.164460, 1.000000, 1.000000, 1.000000, 1.013060, 1.000000, 1.005320, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.034787, 1.000000, 1.000000, 1.000000, 1.004900, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.008692, 1.010126, 1.011501, 1.012821, 1.014089, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.100000, 1.000000, 1.300000, 1.300000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
static double[][] UIJ = {
{ 1.000000, 0.886106, 0.963827, 1.000000, 0.990877, 1.000000, 0.736833, 1.156390, 1.000000, 1.000000, 1.000000, 0.992291, 1.000000, 1.003670, 1.302576, 1.191904, 1.205769, 1.219634, 1.233498, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 0.835058, 0.816431, 0.915502, 1.000000, 0.993476, 0.408838, 1.000000, 1.000000, 1.000000, 0.993556, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 0.969870, 1.000000, 1.000000, 1.045290, 1.000000, 0.900000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.066638, 1.077634, 1.088178, 1.098291, 1.108021, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.065173, 1.000000, 0.971926, 1.616660, 1.000000, 1.000000, 1.250000, 1.250000, 1.250000, 1.250000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.028973, 1.033754, 1.038338, 1.042735, 1.046966, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
static double[][] KIJ = {
{ 1.000000, 1.003630, 0.995933, 1.000000, 1.007619, 1.000000, 1.000080, 1.023260, 1.000000, 1.000000, 1.000000, 0.997596, 1.000000, 1.002529, 0.982962, 0.983565, 0.982707, 0.981849, 0.980991, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 0.982361, 1.007960, 1.000000, 1.000000, 0.942596, 1.032270, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.008510, 1.000000, 1.000000, 1.007790, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.910183, 0.895362, 0.881152, 0.867520, 0.854406, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 0.986893, 1.000000, 0.999969, 1.020340, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.968130, 0.962870, 0.957828, 0.952441, 0.948338, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
static double[][] GIJ = {
{ 1.000000, 1.000000, 0.807653, 1.000000, 1.000000, 1.000000, 1.000000, 1.957310, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 0.982746, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 0.370296, 1.000000, 1.673090, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
{ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
static double RGAS = 8.31451e-3; // R = 8.31451kJ/(kmol·K)为气体摩尔常数
static double[] BI = new double[18]; // AGA8 状态方程
static double[] CNS = new double[58]; // AGA8 状态方程系数C*n 共有46 个(13≤n≤58)
static double K1 = 0.0;
public static void DCAGA(double[] XJ) {
int I, J, N;
double[] XI = new double[21];
double SUM = 0.0;
double U1 = 0.0;
double G1 = 0.0;
double Q1 = 0.0;
double F1 = 0.0;
double XIJ = 0.0;
double EIJ0 = 0.0;
double GIJ0 = 0.0;
double BN = 0.0;
for (J = 0; J < 21; J++) {
XI[J] = XJ[J];
}
// Normalize mole fractions
for (I = 0; I < 21; I++) {
SUM += XI[I];
}
for (I = 0; I < 21; I++) {
XI[I] /= SUM;
}
// Calculate molecular weight
RGAS = 8.31451e-3;
for (N = 0; N < 18; N++) {
BI[N] = 0.0;
}
K1 = 0.0;
for (I = 0; I < 21; I++) {
K1 += XI[I] * Math.pow(KI[I], 2.5); // B.11
U1 += XI[I] * Math.pow(EI[I], 2.5); // B.6
G1 += XI[I] * GI[I]; // B.7
Q1 += XI[I] * QI[I]; // B.8
F1 += XI[I] * XI[I] * FI[I]; // B.9
}
K1 *= K1; // B.11
U1 *= U1; // B.6
for (I = 0; I < 20; I++) {
for (J = I + 1; J < 21; J++) {
XIJ = XI[I] * XI[J];
if (XIJ != 0) {
K1 += 2.0 * XIJ * (Math.pow(KIJ[I][J], 5.0) - 1.0) * Math.pow(KI[I] * KI[J], 2.5); // B.11
U1 += 2.0 * XIJ * (Math.pow(UIJ[I][J], 5.0) - 1.0) * Math.pow(EI[I] * EI[J], 2.5); // B.6
G1 += XIJ * (GIJ[I][J] - 1.0) * (GI[I] + GI[J]); // B.7
}
}
}
for (I = 0; I < 21; I++) {
for (J = I; J < 21; J++) {
XIJ = XI[I] * XI[J];
if (XIJ != 0) {
if (I != J) {
XIJ *= 2;
}
EIJ0 = EIJ[I][J] * Math.sqrt(EI[I] * EI[J]); // B.3
GIJ0 = GIJ[I][J] * (GI[I] + GI[J]) / 2.0; // B.4
for (N = 0; N < 18; N++) {
BN = Math.pow(GIJ0 + 1.0 - G[N], G[N]) *
Math.pow(QI[I] * QI[J] + 1.0 - Q[N], Q[N]) *
Math.pow(Math.sqrt(FI[I] * FI[J]) + 1.0 - F[N], F[N]) *
Math.pow(SI[I] * SI[J] + 1.0 - S[N], S[N]) *
Math.pow(WI[I] * WI[J] + 1.0 - W[N], W[N]);
BI[N] += A[N] * XIJ * Math.pow(EIJ0, U[N]) * Math.pow(KI[I] * KI[J], 1.5) * BN; // B.2
}
}
}
}
K1 = Math.pow(K1, 0.2); // B.11
U1 = Math.pow(U1, 0.2); // B.6
for (N = 12; N < 58; N++) {
CNS[N] = Math.pow(G1 + 1.0 - G[N], G[N]) *
Math.pow(Q1 * Q1 + 1.0 - Q[N], Q[N]) *
Math.pow(F1 + 1.0 - F[N], F[N]) * A[N] * Math.pow(U1, U[N]); // B.5
}
}
public static double[] PZOFDT(double D, double T) {
double P = 0.0;
double Z = 0.0;
double BMIX = 0.0;
int N;
double DR = 0.0;
DR = D * K1 * K1 * K1; // (2)
BMIX = 0.0;
for (N = 0; N < 18; N++) {
BMIX += BI[N] * Math.pow(T, -U[N]); // B.1
}
Z = 1.0 + BMIX * D; // (1) B.10
for (N = 12; N < 18; N++) {
Z -= DR * CNS[N] * Math.pow(T, -U[N]); // (1) B.10
}
for (N = 12; N < 58; N++) {
Z += CNS[N] / Math.pow(T, U[N]) * (B[N] - C[N] * K[N] * Math.pow(DR, K[N])) *
Math.pow(DR, B[N]) * Math.exp(-C[N] * Math.pow(DR, K[N]));
}
P = D * RGAS * T * Z;
return new double[]{P, Z, BMIX};
}
public static double[] DZOFPT(double P, double T) {
int I;
double X1 = 0.000001;
double X2 = 40.0;
double X3 = 0.0;
double F = 0.0;
double F1 = 0.0;
double F2 = 0.0;
double F3 = 0.0;
double TOL = 0.5e-6; // 默认TOL(容差)0.5e-9
double D = 0.0;
double Z = 0.0;
double BMIX = 0.0;
// 初始计算
double[] result1 = PZOFDT(X1, T);
F1 = result1[0] - P;
double[] result2 = PZOFDT(X2, T);
F2 = result2[0] - P;
if (F1 * F2 >= 0) {
return new double[]{D, Z, BMIX};
}
// BEGIN ITERATING
for (I = 1; I <= 50; I++) {
// 使用False Position法获取点3
X3 = X1 - F1 * (X2 - X1) / (F2 - F1);
double[] result3 = PZOFDT(X3, T);
F3 = result3[0] - P;
// 使用Chamber's方法(二次解法)估计根
D = X1 * F2 * F3 / ((F1 - F2) * (F1 - F3)) +
X2 * F1 * F3 / ((F2 - F1) * (F2 - F3)) +
X3 * F1 * F2 / ((F3 - F1) * (F3 - F2));
if ((D - X1) * (D - X2) >= 0) {
D = (X1 + X2) / 2;
}
// 计算新的F值
double[] result4 = PZOFDT(D, T);
F = result4[0] - P;
if (Math.abs(F) <= TOL) {
double[] result5 = PZOFDT(D, T);
return new double[]{D, result5[1], result5[2]};
}
// 如果False Position法的根更接近,则丢弃二次解
if (Math.abs(F3) < Math.abs(F) && F * F3 > 0) {
if (F3 * F1 > 0) {
X1 = X3;
F1 = F3;
} else {
X2 = X3;
F2 = F3;
}
} else {
// 交换新的二次解值
if (F * F3 < 0) {
X1 = D;
F1 = F;
X2 = X3;
F2 = F3;
} else if (F3 * F1 > 0) {
X1 = D;
F1 = F;
} else {
X2 = D;
F2 = F;
}
}
}
return new double[]{D, Z, BMIX};
}
}
小结
计算结果(GBT17747.2-2011 附录C 1#气样)
GBT17747.2-2011 附录C 1#气样计算结果