diff --git a/User/NG/Detail.c b/User/NG/Detail.c index ac35710..92392c6 100644 --- a/User/NG/Detail.c +++ b/User/NG/Detail.c @@ -10,31 +10,19 @@ Detail *Detail_Construct(void) { if (!pDetail) { return NULL; } - - memset(pDetail, 0, sizeof(Detail)); - - pDetail->iNCC = 0; - - for (int i = 0; i < NUMBEROFCOMPONENTS; i++) { pDetail->aiCID[i] = -1; } - - pDetail->dOldMixID = 0.0; pDetail->dOldPb = 0.0; pDetail->dOldTb = 0.0; pDetail->dOldPf = 0.0; pDetail->dOldTf = 0.0; - - for (int i = 0; i < NUMBEROFCOMPONENTS; i++) { pDetail->dXi[i] = 0.0; } - - if (Detail_table(pDetail) != 0) { free(pDetail); return NULL; @@ -48,26 +36,23 @@ void Detail_Destroy(Detail *pDetail) { } } -int Detail_compositionchange(Detail *pDetail, NGParSTRUCT *ptNGPar) { +int Detail_compositionchange(Detail *pDetail, const NGParSTRUCT *ptNGPar) { double dMixID = 0.0; - int i; - for (i = 0; i < NUMBEROFCOMPONENTS; i++) + for (int i = 0; i < NUMBEROFCOMPONENTS; i++) dMixID += ((i + 2) * ptNGPar->adMixture[i]); if (dMixID != pDetail->dOldMixID) { pDetail->dOldMixID = dMixID; - return true; - } else { - return false; + return 1; } + return 0; } void Detail_Run(Detail *pDetail, NGParSTRUCT *ptNGPar) { - int i; - bool bCompChange = Detail_compositionchange(pDetail, ptNGPar); + const int bCompChange = Detail_compositionchange(pDetail, ptNGPar); ptNGPar->bForceUpdate = ptNGPar->bForceUpdate || bCompChange; if (ptNGPar->bForceUpdate) { pDetail->iNCC = 0; - for (i = 0; i < NUMBEROFCOMPONENTS; i++) { + for (int i = 0; i < NUMBEROFCOMPONENTS; i++) { if (ptNGPar->adMixture[i] > 0.0) { pDetail->aiCID[pDetail->iNCC] = i; pDetail->dXi[pDetail->iNCC] = ptNGPar->adMixture[i]; @@ -77,9 +62,9 @@ void Detail_Run(Detail *pDetail, NGParSTRUCT *ptNGPar) { Detail_paramdl(pDetail); Detail_chardl(pDetail, ptNGPar); } - if ((fabs(ptNGPar->dPb - pDetail->dOldPb) > P_CHG_TOL) || - (fabs(ptNGPar->dTb - pDetail->dOldTb) > T_CHG_TOL) || - (ptNGPar->bForceUpdate)) { + if (fabs(ptNGPar->dPb - pDetail->dOldPb) > P_CHG_TOL || + fabs(ptNGPar->dTb - pDetail->dOldTb) > T_CHG_TOL || + ptNGPar->bForceUpdate) { pDetail->dP = ptNGPar->dPb * 1.0e-6; pDetail->dT = ptNGPar->dTb; Detail_temp(pDetail); @@ -91,13 +76,13 @@ void Detail_Run(Detail *pDetail, NGParSTRUCT *ptNGPar) { ptNGPar->dRhob = pDetail->dRhoTP; pDetail->dOldTb = ptNGPar->dTb; pDetail->dOldPb = ptNGPar->dPb; - ptNGPar->bForceUpdate = true; + ptNGPar->bForceUpdate = 1; } pDetail->dP = ptNGPar->dPf * 1.0e-6; pDetail->dT = ptNGPar->dTf; if ((fabs(ptNGPar->dTf - pDetail->dOldTf) > T_CHG_TOL) || (ptNGPar->bForceUpdate)) { Detail_temp(pDetail); - ptNGPar->bForceUpdate = true; + ptNGPar->bForceUpdate = 1; } if ((fabs(ptNGPar->dPf - pDetail->dOldPf) > P_CHG_TOL) || (ptNGPar->bForceUpdate)) { Detail_ddetail(pDetail, ptNGPar); @@ -112,7 +97,7 @@ void Detail_Run(Detail *pDetail, NGParSTRUCT *ptNGPar) { ptNGPar->dFpv = sqrt(ptNGPar->dZb / ptNGPar->dZf); } else { ptNGPar->lStatus = GENERAL_CALCULATION_FAILURE; - ptNGPar->bForceUpdate = false; + ptNGPar->bForceUpdate = 0; } } @@ -120,7 +105,6 @@ int Detail_table(Detail *pDetail) { if (!pDetail) { return -1; } - double adAn[58]; double adUn[58]; adAn[0] = 0.153832600; @@ -182,7 +166,6 @@ int Detail_table(Detail *pDetail) { adAn[56] = -0.001226752; adAn[57] = 0.002850908; - adUn[0] = 0.0; adUn[1] = 0.5; adUn[2] = 1.0; @@ -241,10 +224,8 @@ int Detail_table(Detail *pDetail) { adUn[55] = 0.0; adUn[56] = 1.0; adUn[57] = 0.0; - memcpy(pDetail->adAn, adAn, sizeof(adAn)); memcpy(pDetail->adUn, adUn, sizeof(adUn)); - for (int j = 0; j < NUMBEROFCOMPONENTS; j++) { for (int k = j; k < NUMBEROFCOMPONENTS; k++) { pDetail->adTable6Eij[j][k] = 1.0; @@ -387,7 +368,7 @@ int Detail_table(Detail *pDetail) { pDetail->adTable6Gij[2][3] = 0.370296; pDetail->adTable6Gij[2][5] = 1.673090; - double adTableHhvMol[4][NUMBEROFCOMPONENTS] = { + const double adTableHhvMol[4][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 @@ -406,7 +387,7 @@ int Detail_table(Detail *pDetail) { } }; memcpy(pDetail->adTableHhvMol, adTableHhvMol, sizeof(adTableHhvMol)); - double adTableLhvMol[4][NUMBEROFCOMPONENTS] = { + const double adTableLhvMol[4][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 @@ -429,24 +410,6 @@ int Detail_table(Detail *pDetail) { } void Detail_paramdl(Detail *pDetail) { - const double adTable5Mri[21] = { - 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 - }; - const double adTable5Ei[21] = { - 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 - }; - const double adTable5Ki[21] = { - 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 - }; - const double adTable5Gi[21] = { - 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 - }; for (int j = 0; j < NUMBEROFCOMPONENTS; j++) { pDetail->adTable5Qi[j] = 0.0; pDetail->adTable5Fi[j] = 0.0; @@ -461,10 +424,28 @@ void Detail_paramdl(Detail *pDetail) { pDetail->adTable5Si[6] = 0.3900; pDetail->adTable5Wi[5] = 1.0000; for (int j = pDetail->iNCC - 1; j >= 0; j--) { + const double adTable5Ki[21] = { + 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 + }; + const double adTable5Mri[21] = { + 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 + }; pDetail->dMri[j] = adTable5Mri[pDetail->aiCID[j]]; pDetail->dKi[j] = adTable5Ki[pDetail->aiCID[j]]; } for (int j = 0; j < pDetail->iNCC; j++) { + const double adTable5Gi[21] = { + 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 + }; + const double adTable5Ei[21] = { + 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 + }; pDetail->dGi[j] = adTable5Gi[pDetail->aiCID[j]]; pDetail->dEi[j] = adTable5Ei[pDetail->aiCID[j]]; } @@ -507,7 +488,8 @@ void Detail_chardl(Detail *pDetail, NGParSTRUCT *ptNGPar) ptNGPar->dLhvMol = 0.0; for (int i = 0; i < pDetail->iNCC; i++) { ptNGPar->dMrx += pDetail->dXi[i] * pDetail->dMri[i]; - switch (ptNGPar->dCbtj) { + switch (ptNGPar->dCbtj) + { case 2: ptNGPar->dHhvMol += pDetail->adTableHhvMol[0][i] * ptNGPar->adMixture[i]; ptNGPar->dLhvMol += pDetail->adTableHhvMol[0][i] * ptNGPar->adMixture[i]; @@ -520,6 +502,7 @@ void Detail_chardl(Detail *pDetail, NGParSTRUCT *ptNGPar) ptNGPar->dHhvMol += pDetail->adTableHhvMol[2][i] * ptNGPar->adMixture[i]; ptNGPar->dLhvMol += pDetail->adTableLhvMol[2][i] * ptNGPar->adMixture[i]; break; + default: ; } k2p5 += pDetail->dXi[i] * pow(pDetail->dKi[i], 2.5); u2p5 += pDetail->dXi[i] * pow(pDetail->dEi[i], 2.5); @@ -528,33 +511,33 @@ void Detail_chardl(Detail *pDetail, NGParSTRUCT *ptNGPar) pDetail->dF += pDetail->dXi[i] * pDetail->dXi[i] * pDetail->dFi[i]; for (int j = i; j < pDetail->iNCC; j++) { - double Xij = (i == j) ? pDetail->dXi[i] * pDetail->dXi[j] : 2.0 * pDetail->dXi[i] * pDetail->dXi[j]; + const double Xij = (i == j) ? pDetail->dXi[i] * pDetail->dXi[j] : 2.0 * pDetail->dXi[i] * pDetail->dXi[j]; if (pDetail->dKij[i][j] != 1.0) { - double term = pow(pDetail->dKi[i] * pDetail->dKi[j], 2.5); + const double term = pow(pDetail->dKi[i] * pDetail->dKi[j], 2.5); k5p0 += Xij * (pow(pDetail->dKij[i][j], 5.0) - 1.0) * term; } if (pDetail->dUij[i][j] != 1.0) { - double term = pow(pDetail->dEi[i] * pDetail->dEi[j], 2.5); + const double term = pow(pDetail->dEi[i] * pDetail->dEi[j], 2.5); u5p0 += Xij * (pow(pDetail->dUij[i][j], 5.0) - 1.0) * term; } if (pDetail->dGij[i][j] != 1.0) { - double avgG = (pDetail->dGi[i] + pDetail->dGi[j]) / 2.0; + const double avgG = (pDetail->dGi[i] + pDetail->dGi[j]) / 2.0; pDetail->dW += Xij * (pDetail->dGij[i][j] - 1.0) * avgG; } - double Eij = pDetail->dEij[i][j] * sqrt(pDetail->dEi[i] * pDetail->dEi[j]); - double Gij = pDetail->dGij[i][j] * (pDetail->dGi[i] + pDetail->dGi[j]) / 2.0; - double e0p5 = sqrt(Eij); - double e2p0 = Eij * Eij; - double e3p0 = Eij * e2p0; - double e3p5 = e3p0 * e0p5; - double e4p5 = Eij * e3p5; - double e6p0 = e3p0 * e3p0; - double e7p5 = e4p5 * Eij * e2p0; - double e9p5 = e7p5 * e2p0; - double e11p0 = e4p5 * e4p5 * e2p0; - double e12p0 = e11p0 * Eij; - double e12p5 = e12p0 * e0p5; - double s3 = Xij * pow(pow(pDetail->dKi[i], 3.0) * pow(pDetail->dKi[j], 3.0), 0.5); + const double Eij = pDetail->dEij[i][j] * sqrt(pDetail->dEi[i] * pDetail->dEi[j]); + const double Gij = pDetail->dGij[i][j] * (pDetail->dGi[i] + pDetail->dGi[j]) / 2.0; + const double e0p5 = sqrt(Eij); + const double e2p0 = Eij * Eij; + const double e3p0 = Eij * e2p0; + const double e3p5 = e3p0 * e0p5; + const double e4p5 = Eij * e3p5; + const double e6p0 = e3p0 * e3p0; + const double e7p5 = e4p5 * Eij * e2p0; + const double e9p5 = e7p5 * e2p0; + const double e11p0 = e4p5 * e4p5 * e2p0; + const double e12p0 = e11p0 * Eij; + const double e12p5 = e12p0 * e0p5; + const double s3 = Xij * pow(pow(pDetail->dKi[i], 3.0) * pow(pDetail->dKi[j], 3.0), 0.5); pDetail->adBcoef[0] += s3; pDetail->adBcoef[1] += s3 * e0p5; pDetail->adBcoef[2] += s3 * Eij; @@ -576,8 +559,8 @@ void Detail_chardl(Detail *pDetail, NGParSTRUCT *ptNGPar) } } - ptNGPar->dHhvMol = ptNGPar->dHhvMol / ptNGPar->dMrx; - ptNGPar->dLhvMol = ptNGPar->dLhvMol / ptNGPar->dMrx; + ptNGPar->dHhvMol = ptNGPar->dHhvMol ; + ptNGPar->dLhvMol = ptNGPar->dLhvMol ; for (int i = 0; i < 18; i++) { pDetail->adBcoef[i] *= pDetail->adAn[i]; @@ -589,20 +572,20 @@ void Detail_chardl(Detail *pDetail, NGParSTRUCT *ptNGPar) void Detail_bvir(Detail *pDetail) { pDetail->dB = pDetail->ddBdT = pDetail->dd2BdT2 = 0.0; - double t = pDetail->dT; - double t0p5 = sqrt(t); - double t2p0 = t * t; - double t3p0 = t * t2p0; - double t3p5 = t3p0 * t0p5; - double t4p5 = t * t3p5; - double t6p0 = t3p0 * t3p0; - double t11p0 = t4p5 * t4p5 * t2p0; - double t7p5 = t6p0 * t * t0p5; - double t9p5 = t7p5 * t2p0; - double t12p0 = t9p5 * t0p5 * t2p0; - double t12p5 = t12p0 * t0p5; - double t1p5 = t * t0p5; - double t4p0 = t2p0 * t2p0; + const double t = pDetail->dT; + const double t0p5 = sqrt(t); + const double t2p0 = t * t; + const double t3p0 = t * t2p0; + const double t3p5 = t3p0 * t0p5; + const double t4p5 = t * t3p5; + const double t6p0 = t3p0 * t3p0; + const double t11p0 = t4p5 * t4p5 * t2p0; + const double t7p5 = t6p0 * t * t0p5; + const double t9p5 = t7p5 * t2p0; + const double t12p0 = t9p5 * t0p5 * t2p0; + const double t12p5 = t12p0 * t0p5; + // double t1p5 = t * t0p5; + // double t4p0 = t2p0 * t2p0; double Bx[18]; Bx[0] = pDetail->adBcoef[0]; Bx[1] = pDetail->adBcoef[1] / t0p5; @@ -650,25 +633,22 @@ void Detail_bvir(Detail *pDetail) { void Detail_temp(Detail *pDetail) { Detail_bvir(pDetail); - double tr = pDetail->dT / pDetail->dU; - double tr0p5, tr1p5, tr2p0, tr3p0, tr4p0, tr5p0, tr6p0; - double tr7p0, tr8p0, tr9p0, tr11p0, tr13p0, tr21p0; - double tr22p0, tr23p0 ; - tr0p5 = sqrt(tr); - tr1p5 = tr * tr0p5; - tr2p0 = tr * tr; - tr3p0 = tr * tr2p0; - tr4p0 = tr * tr3p0; - tr5p0 = tr * tr4p0; - tr6p0 = tr * tr5p0; - tr7p0 = tr * tr6p0; - tr8p0 = tr * tr7p0; - tr9p0 = tr * tr8p0; - tr11p0 = tr6p0 * tr5p0; - tr13p0 = tr6p0 * tr7p0; - tr21p0 = tr9p0 * tr9p0 * tr3p0; - tr22p0 = tr * tr21p0; - tr23p0 = tr * tr22p0; + const double tr = pDetail->dT / pDetail->dU; + const double tr0p5 = sqrt(tr); + const double tr1p5 = tr * tr0p5; + const double tr2p0 = tr * tr; + const double tr3p0 = tr * tr2p0; + const double tr4p0 = tr * tr3p0; + const double tr5p0 = tr * tr4p0; + const double tr6p0 = tr * tr5p0; + const double tr7p0 = tr * tr6p0; + const double tr8p0 = tr * tr7p0; + const double tr9p0 = tr * tr8p0; + const double tr11p0 = tr6p0 * tr5p0; + const double tr13p0 = tr6p0 * tr7p0; + const double tr21p0 = tr9p0 * tr9p0 * tr3p0; + const double tr22p0 = tr * tr21p0; + const double tr23p0 = tr * tr22p0; pDetail->adFn[12] = pDetail->adAn[12] * pDetail->dF * tr6p0; pDetail->adFn[13] = pDetail->adAn[13] / tr2p0; @@ -720,30 +700,26 @@ void Detail_temp(Detail *pDetail) { } void Detail_ddetail(Detail *pDetail, NGParSTRUCT *ptNGPar) { - int imax, i; - double epsp, epsr, epsmin; - double x1, x2, x3, y1, y2, y3; - double delx, delprv, delmin, delbis, xnumer, xdenom, sgndel; - double y2my3, y3my1, y1my2, boundn; - imax = 150; - epsp = 1.e-6; - epsr = 1.e-6; - epsmin = 1.e-7; + double xnumer, xdenom; + const int imax = 150; pDetail->dRho = 0.0; Detail_braket(pDetail, ptNGPar); if (ptNGPar->lStatus == MAX_NUM_OF_ITERATIONS_EXCEEDED || ptNGPar->lStatus == NEGATIVE_DENSITY_DERIVATIVE) { return; } - x1 = pDetail->dRhoL; - x2 = pDetail->dRhoH; - y1 = pDetail->dPRhoL - pDetail->dP; - y2 = pDetail->dPRhoH - pDetail->dP; - delx = x1 - x2; - delprv = delx; - x3 = x1; - y3 = y1; - for (i = 0; i < imax; i++) { + double x1 = pDetail->dRhoL; + double x2 = pDetail->dRhoH; + double y1 = pDetail->dPRhoL - pDetail->dP; + double y2 = pDetail->dPRhoH - pDetail->dP; + double delx = x1 - x2; + double delprv = delx; + double x3 = x1; + double y3 = y1; + for (int i = 0; i < imax; i++) { + const double epsmin = 1.e-7; + const double epsr = 1.e-6; + const double epsp = 1.e-6; if (y2 * y3 > 0.0) { x3 = x1; y3 = y1; @@ -758,16 +734,16 @@ void Detail_ddetail(Detail *pDetail, NGParSTRUCT *ptNGPar) { y2 = y3; y3 = y1; } - delmin = epsmin * fabs(x2); - delbis = 0.5 * (x3 - x2); + const double delmin = epsmin * fabs(x2); + const double delbis = 0.5 * (x3 - x2); if (fabs(delprv) < delmin || fabs(y1) < fabs(y2)) { delx = delbis; delprv = delbis; } else { if (x3 != x1) { - y2my3 = y2 - y3; - y3my1 = y3 - y1; - y1my2 = y1 - y2; + const double y2my3 = y2 - y3; + const double y3my1 = y3 - y1; + const double y1my2 = y1 - y2; xdenom = -(y1my2) * (y2my3) * (y3my1); xnumer = x1 * y2 * y3 * (y2my3) + x2 * y3 * y1 * (y3my1) @@ -789,11 +765,11 @@ void Detail_ddetail(Detail *pDetail, NGParSTRUCT *ptNGPar) { return; } if (fabs(delx) < delmin) { - sgndel = delbis / fabs(delbis); + const double sgndel = delbis / fabs(delbis); delx = 1.0000009 * sgndel * delmin; delprv = delx; } - boundn = delx * (x2 + delx - x3); + const double boundn = delx * (x2 + delx - x3); if (boundn > 0.0) { delx = delbis; delprv = delbis; @@ -809,23 +785,21 @@ void Detail_ddetail(Detail *pDetail, NGParSTRUCT *ptNGPar) { } void Detail_braket(Detail *pDetail, NGParSTRUCT *ptNGPar) { - int imax, it; - double del, rhomax, videal; - double rho1, rho2, p1, p2; - imax = 200; - rho1 = 0.0; - p1 = 0.0; - rhomax = 1.0 / pDetail->dKp3; + double rho2; + const int imax = 200; + double rho1 = 0.0; + double p1 = 0.0; + double rhomax = 1.0 / pDetail->dKp3; if (pDetail->dT > 1.2593 * pDetail->dU) rhomax = 20.0 * rhomax; - videal = RGASKJ * pDetail->dT / pDetail->dP; + const double videal = RGASKJ * pDetail->dT / pDetail->dP; if (fabs(pDetail->dB) < (0.167 * videal)) { rho2 = 0.95 / (videal + pDetail->dB); } else { rho2 = 1.15 / videal; } - del = rho2 / 20.0; - for (it = 0; it < imax; it++) { + double del = rho2 / 20.0; + for (int it = 0; it < imax; it++) { if (rho2 > rhomax && ptNGPar->lStatus != MAX_DENSITY_IN_BRAKET_EXCEEDED) { ptNGPar->lStatus = MAX_DENSITY_IN_BRAKET_EXCEEDED; del = 0.01 * (rhomax - rho1) + (pDetail->dP / (RGASKJ * pDetail->dT)) / 20.0; @@ -833,7 +807,7 @@ void Detail_braket(Detail *pDetail, NGParSTRUCT *ptNGPar) { continue; } Detail_pdetail(pDetail, rho2); - p2 = pDetail->dPCalc; + const double p2 = pDetail->dPCalc; if (p2 > pDetail->dP) { pDetail->dRhoL = rho1; pDetail->dPRhoL = p1; @@ -856,7 +830,6 @@ void Detail_braket(Detail *pDetail, NGParSTRUCT *ptNGPar) { } ptNGPar->lStatus = MAX_NUM_OF_ITERATIONS_EXCEEDED; pDetail->dRho = rho2; - return; } void Detail_pdetail(Detail *pDetail, double dD) { @@ -864,20 +837,19 @@ void Detail_pdetail(Detail *pDetail, double dD) { } double Detail_zdetail(Detail *pDetail, double d) { - double D1, D2, D3, D4, D5, D6, D7, D8, D9, exp1, exp2, exp3, exp4; - D1 = pDetail->dKp3 * d; - D2 = D1 * D1; - D3 = D2 * D1; - D4 = D3 * D1; - D5 = D4 * D1; - D6 = D5 * D1; - D7 = D6 * D1; - D8 = D7 * D1; - D9 = D8 * D1; - exp1 = exp(-D1); - exp2 = exp(-D2); - exp3 = exp(-D3); - exp4 = exp(-D4); + const double D1 = pDetail->dKp3 * d; + const double D2 = D1 * D1; + const double D3 = D2 * D1; + const double D4 = D3 * D1; + const double D5 = D4 * D1; + const double D6 = D5 * D1; + const double D7 = D6 * D1; + const double D8 = D7 * D1; + const double D9 = D8 * D1; + const double exp1 = exp(-D1); + const double exp2 = exp(-D2); + const double exp3 = exp(-D3); + const double exp4 = exp(-D4); pDetail->dZ = 1.0 + pDetail->dB * d + pDetail->adFn[12] * D1 * (exp3 - 1.0 - 3.0 * D3 * exp3) + (pDetail->adFn[13] + pDetail->adFn[14] + pDetail->adFn[15]) * D1 * (exp2 - 1.0 - 2.0 * D2 * exp2) @@ -908,22 +880,19 @@ double Detail_zdetail(Detail *pDetail, double d) { } double Detail_dZdT(Detail *pDetail, double d) { - double tmp; - int i; - double D1, D2, D3, D4, D5, D6, D7, D8, exp1, exp2, exp3, exp4; - D1 = pDetail->dKp3 * d; - D2 = D1 * D1; - D3 = D2 * D1; - D4 = D3 * D1; - D5 = D4 * D1; - D6 = D5 * D1; - D7 = D6 * D1; - D8 = D7 * D1; - exp1 = exp(-D1); - exp2 = exp(-D2); - exp3 = exp(-D3); - exp4 = exp(-D4); - for (i = 12; i < 58; i++) { + const double D1 = pDetail->dKp3 * d; + const double D2 = D1 * D1; + const double D3 = D2 * D1; + const double D4 = D3 * D1; + const double D5 = D4 * D1; + const double D6 = D5 * D1; + const double D7 = D6 * D1; + const double D8 = D7 * D1; + const double exp1 = exp(-D1); + const double exp2 = exp(-D2); + const double exp3 = exp(-D3); + const double exp4 = exp(-D4); + for (int i = 12; i < 58; i++) { if (pDetail->adUn[i] && pDetail->adFn[i]) { pDetail->fx[i] = (pDetail->adFn[i] * pDetail->adUn[i] * D1) / pDetail->dT; } else { @@ -933,7 +902,7 @@ double Detail_dZdT(Detail *pDetail, double d) { pDetail->ddZdT = d * pDetail->ddBdT; if (pDetail->dF) pDetail->ddZdT += pDetail->fx[12] - (pDetail->fx[12] * (1.0 - 3.0 * D3) * exp3); - tmp = (1.0 - 2.0 * D2) * exp2; + double tmp = (1.0 - 2.0 * D2) * exp2; pDetail->ddZdT += (pDetail->fx[13] - (pDetail->fx[13] * tmp)); pDetail->ddZdT += pDetail->fx[14] - (pDetail->fx[14] * tmp); pDetail->ddZdT += pDetail->fx[15] - (pDetail->fx[15] * tmp); @@ -966,22 +935,19 @@ double Detail_dZdT(Detail *pDetail, double d) { } double Detail_d2ZdT2(Detail *pDetail, double d) { - double tmp; - int i; - double D1, D2, D3, D4, D5, D6, D7, D8, exp1, exp2, exp3, exp4; - D1 = pDetail->dKp3 * d; - D2 = D1 * D1; - D3 = D2 * D1; - D4 = D3 * D1; - D5 = D4 * D1; - D6 = D5 * D1; - D7 = D6 * D1; - D8 = D7 * D1; - exp1 = exp(-D1); - exp2 = exp(-D2); - exp3 = exp(-D3); - exp4 = exp(-D4); - for (i = 12; i < 58; i++) { + const double D1 = pDetail->dKp3 * d; + const double D2 = D1 * D1; + const double D3 = D2 * D1; + const double D4 = D3 * D1; + const double D5 = D4 * D1; + const double D6 = D5 * D1; + const double D7 = D6 * D1; + const double D8 = D7 * D1; + const double exp1 = exp(-D1); + const double exp2 = exp(-D2); + const double exp3 = exp(-D3); + const double exp4 = exp(-D4); + for (int i = 12; i < 58; i++) { if (pDetail->adUn[i] && pDetail->adFn[i]) { pDetail->fx[i] = (pDetail->adFn[i] * D1 * pDetail->adUn[i] * (pDetail->adUn[i] + 1.0)) / ( pDetail->dT * pDetail->dT); @@ -992,13 +958,13 @@ double Detail_d2ZdT2(Detail *pDetail, double d) { pDetail->dd2ZdT2 = d * pDetail->dd2BdT2; if (pDetail->dF) pDetail->dd2ZdT2 += pDetail->fx[12] - (pDetail->fx[12] * (1.0 - 3.0 * D3) * exp3); - tmp = (1.0 - 2.0 * D2) * exp2; + double tmp = (1.0 - 2.0 * D2) * exp2; pDetail->dd2ZdT2 += -pDetail->fx[13] + (pDetail->fx[13] * tmp); pDetail->dd2ZdT2 += -pDetail->fx[14] + (pDetail->fx[14] * tmp); pDetail->dd2ZdT2 += -pDetail->fx[15] + (pDetail->fx[15] * tmp); tmp = (1.0 - 4.0 * D4) * exp4; pDetail->dd2ZdT2 += -pDetail->fx[16] + (pDetail->fx[16] * tmp); - pDetail->dd2ZdT2 += -pDetail->fx[17] + (pDetail->fx[17] * tmp); + pDetail->dd2ZdT2 += -pDetail->fx[17] + pDetail->fx[17] * tmp; pDetail->dd2ZdT2 = pDetail->dd2ZdT2 + (pDetail->fx[18] + pDetail->fx[19]) * D1 * 2.0 + (pDetail->fx[21] + pDetail->fx[22]) * D1 * (2.0 - 2.0 * D2) * exp2 + (pDetail->fx[23] + pDetail->fx[24] + pDetail->fx[25]) * D1 * (2.0 - 4.0 * D4) * exp4 @@ -1026,21 +992,19 @@ double Detail_d2ZdT2(Detail *pDetail, double d) { double Detail_dZdD(Detail *pDetail, double d) { double temp, temp1, temp2, temp3; - int i; - double D1, D2, D3, D4, D5, D6, D7, D8, exp1, exp2, exp3, exp4; - D1 = pDetail->dKp3 * d; - D2 = D1 * D1; - D3 = D2 * D1; - D4 = D3 * D1; - D5 = D4 * D1; - D6 = D5 * D1; - D7 = D6 * D1; - D8 = D7 * D1; - exp1 = exp(-D1); - exp2 = exp(-D2); - exp3 = exp(-D3); - exp4 = exp(-D4); - for (i = 12; i < 58; i++) { + const double D1 = pDetail->dKp3 * d; + const double D2 = D1 * D1; + const double D3 = D2 * D1; + const double D4 = D3 * D1; + const double D5 = D4 * D1; + const double D6 = D5 * D1; + const double D7 = D6 * D1; + const double D8 = D7 * D1; + const double exp1 = exp(-D1); + const double exp2 = exp(-D2); + const double exp3 = exp(-D3); + const double exp4 = exp(-D4); + for (int i = 12; i < 58; i++) { pDetail->fx[i] = pDetail->adFn[i]; } pDetail->ddZdD = pDetail->dB / pDetail->dKp3; @@ -1156,11 +1120,10 @@ double Detail_dZdD(Detail *pDetail, double d) { return pDetail->ddZdD; } -void Detail_relativedensity(Detail *pDetail, NGParSTRUCT *ptNGPar) { - double dBX, dZa; +void Detail_relativedensity(const Detail *pDetail, NGParSTRUCT *ptNGPar) { const double dMWair = 28.96256; - dBX = -0.12527 + 5.91e-4 * ptNGPar->dTb - 6.62e-7 * ptNGPar->dTb * ptNGPar->dTb; - dZa = 1.0 + (dBX * pDetail->dP) / (RGASKJ * ptNGPar->dTb); + const double dBX = -0.12527 + 5.91e-4 * ptNGPar->dTb - 6.62e-7 * ptNGPar->dTb * ptNGPar->dTb; + const double dZa = 1.0 + (dBX * pDetail->dP) / (RGASKJ * ptNGPar->dTb); ptNGPar->dRD_Ideal = ptNGPar->dMrx / dMWair; ptNGPar->dRD_Real = ptNGPar->dRD_Ideal * (dZa / ptNGPar->dZb); } diff --git a/User/NG/Detail.h b/User/NG/Detail.h index c950c70..c9aedee 100644 --- a/User/NG/Detail.h +++ b/User/NG/Detail.h @@ -6,7 +6,6 @@ #define _DETAIL_H #include "NGCal.h" -#include typedef struct Detail { @@ -88,7 +87,7 @@ Detail *Detail_Construct(void); void Detail_Destroy(Detail *pDetail); -int Detail_compositionchange(Detail *pDetail, NGParSTRUCT *pAGA10); +int Detail_compositionchange(Detail *pDetail, const NGParSTRUCT *pAGA10); int Detail_table(Detail *pDetail); @@ -106,7 +105,7 @@ void Detail_pdetail(Detail *pDetail, double dRho); void Detail_ddetail(Detail *pDetail, NGParSTRUCT *pAGA10); -void Detail_relativedensity(Detail *pDetail, NGParSTRUCT *pAGA10); +void Detail_relativedensity(const Detail *pDetail, NGParSTRUCT *pAGA10); double Detail_zdetail(Detail *pDetail, double dRho); diff --git a/User/NG/FlowCal.c b/User/NG/FlowCal.c index c143513..c4c734a 100644 --- a/User/NG/FlowCal.c +++ b/User/NG/FlowCal.c @@ -3,6 +3,36 @@ // #include "NGCal.h" #include "FlowCal.h" +#include "math.h" + + + +double format_double(double value, int digits) { + // 处理默认位数(4位) + if (digits == 0) { + digits = 4; + } + + // 验证位数有效性 + if (digits < 1 || digits > 5) { + fprintf(stderr, "Error: Invalid digit value (must be 1-5 or 0 for default)\n"); + return NAN; // 返回 NaN 表示错误 + } + + char format_str[10]; + char buffer[50]; + double result; + + // 生成动态格式字符串(如 "%.4f") + snprintf(format_str, sizeof(format_str), "%%.%df", digits); + + // 格式化数值到字符串 + snprintf(buffer, sizeof(buffer), format_str, value); + + // 转换回 double + result = strtod(buffer, NULL); + return result; +} void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { @@ -50,6 +80,7 @@ void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { ptFlowPar->dPb_M = (101325); ptFlowPar->dTb_M = (293.15); break; + default: ; } double ngArray[NUMBEROFCOMPONENTS]; @@ -61,24 +92,24 @@ void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { Crit(ptNGPar, 0); - ptFlowPar->dFpv = ptNGPar->dFpv; + ptFlowPar->dFpv =format_double( ptNGPar->dFpv,4); - ptFlowPar->dOrificeD = ptFlowPar->dOrificeD * ( - 1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dOrificeMaterial) * (ptFlowPar->dTf - 293.15)); - ptFlowPar->dPipeD = ptFlowPar->dPipeD * (1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dPipeMaterial) * ( - ptFlowPar->dTf - 293.15)); - ptFlowPar->dBeta = ptFlowPar->dOrificeD / ptFlowPar->dPipeD; + ptFlowPar->dOrificeD =format_double( ptFlowPar->dOrificeD * ( + 1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dOrificeMaterial) * (ptFlowPar->dTf - 293.15)),2); + ptFlowPar->dPipeD =format_double( ptFlowPar->dPipeD * (1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dPipeMaterial) * ( + ptFlowPar->dTf - 293.15)),2); + ptFlowPar->dBeta =format_double( ptFlowPar->dOrificeD / ptFlowPar->dPipeD,4); - ptFlowPar->dE = calculateE(ptFlowPar->dBeta); - ptFlowPar->dFG = calculateFG(ptNGPar->dRD_Real); - ptFlowPar->dFT = calculateFT(ptFlowPar->dTb_M, ptFlowPar->dTf); + ptFlowPar->dE =format_double( calculateE(ptFlowPar->dBeta),4); + ptFlowPar->dFG =format_double( calculateFG(ptNGPar->dRD_Real),4); + ptFlowPar->dFT =format_double( calculateFT(ptFlowPar->dTb_M, ptFlowPar->dTf),4); - ptFlowPar->dKappa = calculateKappa(ptNGPar->dZf); - ptFlowPar->dDViscosity = Dlndjs(ptFlowPar->dPf / 1e6, ptFlowPar->dTf); - ptFlowPar->dDExpCoefficient = calculateEpsilon(ptFlowPar->dPf, ptFlowPar->dDp, - ptFlowPar->dBeta, ptFlowPar->dKappa); + ptFlowPar->dKappa =format_double( calculateKappa(ptNGPar->dZf),4); + ptFlowPar->dDViscosity =format_double( Dlndjs(ptFlowPar->dPf / 1e6, ptFlowPar->dTf),5); + ptFlowPar->dDExpCoefficient =format_double( calculateEpsilon(ptFlowPar->dPf, ptFlowPar->dDp, + ptFlowPar->dBeta, ptFlowPar->dKappa),4); double D = ptFlowPar->dPipeD / 1000.0; double d = ptFlowPar->dOrificeD / 1000.0; @@ -92,38 +123,25 @@ void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { double Qf_initial = (C_initial * ptFlowPar->dE * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4) * sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4)))); ptFlowPar->dVFlowf = Qf_initial; - - double tolerance = 1e-6; - int maxIter = 100; double currentC = C_initial; double currentReD = calculateReD(Qf_initial, D, ptNGPar->dRhof, ptFlowPar->dDViscosity); int iter = 0; double prevC = 0; - - do { + int maxIter = 100; prevC = currentC; - - currentC = calculateCd(beta, currentReD, ptFlowPar->dPipeD, ptFlowPar->dPtmode); - - double Qf = (currentC * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4) * sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4)))); ptFlowPar->dVFlowf = Qf; - - currentReD = calculateReD(Qf, D, ptNGPar->dRhof, ptFlowPar->dDViscosity); - iter++; if (iter > maxIter) { - fprintf(stderr, "δ\n"); + fprintf(stderr, "\n"); } } while (fabs(currentC - prevC) / currentC > tolerance); - - double K = calculateK(ptFlowPar->dPipeType); double G_me = calculateRoughnessFactor(ptFlowPar->dPipeD, K, currentC); double C_corrected = currentC * G_me; @@ -131,17 +149,11 @@ void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { ptFlowPar->dCd = C_corrected; ptFlowPar->dRoughNessPipe = G_me; ptFlowPar->dRnPipe = currentReD; - - double Qn = ptFlowPar->dVFlowf * (ptFlowPar->dFpv * ptFlowPar->dFpv * P1 / ptFlowPar->dPb_M) * (ptFlowPar->dTb_M) / Tf; ptFlowPar->dVFlowb = Qn; - - ptFlowPar->dMFlowb = ptFlowPar->dVFlowb * ptNGPar->dRhob; - - ptFlowPar->dEFlowb = ptFlowPar->dVFlowb * ptNGPar->dHhvMol; - + ptFlowPar->dEFlowb = ptFlowPar->dVFlowb * ptNGPar->dHhvMol*ptFlowPar->dPb_M*1e-6/RGASKJ/ptFlowPar->dTb_M; ptFlowPar->dVelocityFlow = ptFlowPar->dVFlowf / (M_PI * pow((ptFlowPar->dPipeD / 2000), 2)); } @@ -150,7 +162,7 @@ void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) { -double CaiLiaoPzxs(int tempCaiLiao) { +double CaiLiaoPzxs(const int tempCaiLiao) { double CaiLiaoPzxs = 0; switch (tempCaiLiao) { case 0: @@ -212,6 +224,7 @@ double CaiLiaoPzxs(int tempCaiLiao) { case 14: CaiLiaoPzxs = 17.2; break; + default: ; } return CaiLiaoPzxs; } @@ -318,7 +331,7 @@ double calculateKappa(double dZf) { double calculateReD(double Qf, double D, double rho, double mu) { - return (4 * Qf * rho) / (M_PI * D * mu); + return (4 * Qf * rho*1000) / (M_PI * D * mu); } @@ -379,7 +392,7 @@ double Dlndjs(double tempP_jy, double tempT) { double Dlndjs_Dlnd_P[11] = {0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - double s1, s2, ky, kx; + double ky, kx; int i, m = 0, n = 0; if (tempT < Dlndjs_Dlnd_T[0]) { @@ -421,7 +434,7 @@ double Dlndjs(double tempP_jy, double tempT) { kx = 0; } - s1 = Dlndjs_Dlnd_Data[m][n] + (Dlndjs_Dlnd_Data[m][n + 1] - Dlndjs_Dlnd_Data[m][n]) * ky; - s2 = Dlndjs_Dlnd_Data[m + 1][n] + (Dlndjs_Dlnd_Data[m + 1][n + 1] - Dlndjs_Dlnd_Data[m + 1][n]) * ky; + double s1 = Dlndjs_Dlnd_Data[m][n] + (Dlndjs_Dlnd_Data[m][n + 1] - Dlndjs_Dlnd_Data[m][n]) * ky; + double s2 = Dlndjs_Dlnd_Data[m + 1][n] + (Dlndjs_Dlnd_Data[m + 1][n + 1] - Dlndjs_Dlnd_Data[m + 1][n]) * ky; return (s1 + (s2 - s1) * kx) / 100000.0; } diff --git a/User/NG/NGCal.c b/User/NG/NGCal.c index 37ce5b1..759db4c 100644 --- a/User/NG/NGCal.c +++ b/User/NG/NGCal.c @@ -1,7 +1,7 @@ #include "NGCal.h" #include "Therm.h" #include "Detail.h" -#include "String.h" +#include "math.h" static Therm *ptTherm; static Detail *ptDetail; @@ -39,10 +39,6 @@ double SOS(NGParSTRUCT *ptNGPar) { } double Crit(NGParSTRUCT *ptNGPar, double dPlenumVelocity) { - double DH, DDH, S, H; - double tolerance = 1.0; - double R, P, T, Z; - int i; if (NULL == ptDetail || NULL == ptTherm) { NGCal_UnInit(); if (NGCal_NGCal != NGCal_Init(ptNGPar)) { @@ -54,18 +50,19 @@ double Crit(NGParSTRUCT *ptNGPar, double dPlenumVelocity) { Therm_Run(ptTherm, ptNGPar, ptDetail); - DH = (ptNGPar->dSOS * ptNGPar->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0; - S = ptNGPar->dS; - H = ptNGPar->dH; - R = ptNGPar->dRhof; - P = ptNGPar->dPf; - Z = ptNGPar->dZf; - T = ptNGPar->dTf; - DDH = 10.0; - for (i = 1; i < MAX_NUM_OF_ITERATIONS; i++) { - Therm_HS_Mode(ptTherm, ptNGPar, ptDetail, H - DH, S, true); + double DH = (ptNGPar->dSOS * ptNGPar->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0; + double S = ptNGPar->dS; + double H = ptNGPar->dH; + double R = ptNGPar->dRhof; + double P = ptNGPar->dPf; + double Z = ptNGPar->dZf; + double T = ptNGPar->dTf; + // DDH = 10.0; + for (int i = 1; i < MAX_NUM_OF_ITERATIONS; i++) { + double tolerance = 1.0; + Therm_HS_Mode(ptTherm, ptNGPar, ptDetail, H - DH, S, 1); Therm_Run(ptTherm, ptNGPar, ptDetail); - DDH = DH; + double DDH = DH; DH = (ptNGPar->dSOS * ptNGPar->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0; if (fabs(DDH - DH) < tolerance) break; } @@ -76,14 +73,13 @@ double Crit(NGParSTRUCT *ptNGPar, double dPlenumVelocity) { return ptNGPar->dCstar; } -double Cperf(NGParSTRUCT *ptNGPar) { - double k, root, exponent; - k = ptNGPar->dKappa; - root = 2.0 / (k + 1.0); - exponent = (k + 1.0) / (k - 1.0); +double Cperf(const NGParSTRUCT *ptNGPar) { + double k = ptNGPar->dKappa; + double root = 2.0 / (k + 1.0); + double exponent = (k + 1.0) / (k - 1.0); return (sqrt(k * pow(root, exponent))); } -double CRi(NGParSTRUCT *ptNGPar) { +double CRi(const NGParSTRUCT *ptNGPar) { return (Cperf(ptNGPar) / sqrt(ptNGPar->dZf)); } diff --git a/User/NG/NGCal.h b/User/NG/NGCal.h index 8a32fd5..bfa0869 100644 --- a/User/NG/NGCal.h +++ b/User/NG/NGCal.h @@ -1,20 +1,10 @@ /************************************************************************* * �ļ�: NGCal.h - **************************************************************************/ - -#ifndef _NGCal_H +#ifndef _NGCal_H #define _NGCal_H - - - - #include #include - -#include - - #define NORMAL 9000 #define NGCal_NGCal 9001 #define MEMORY_ALLOCATION_ERROR 9002 @@ -24,71 +14,49 @@ #define MAX_DENSITY_IN_BRAKET_EXCEEDED 9006 #define FLOW_CALC_ERROR 9007 #define FLOW_CALC_DIEDAI_ERROR 9008 - - - #define NUMBEROFCOMPONENTS 21 - - - +#define M_PI 3.1415926535897932 #define MAX_NUM_OF_ITERATIONS 100 - - #define P_CHG_TOL 0.001 #define T_CHG_TOL 0.001 - - #define P_MAX 1.379e8 #define P_MIN 0.0 #define T_MAX 473.15 #define T_MIN 143.0 - - #define RGASKJ 8.314510e-3 #define RGAS 8.314510 - - typedef struct tagNGParSTRUCT { - long lStatus; - int bForceUpdate; - double adMixture[21]; - int dCbtj; - double dPb; - double dTb; - double dPf; - double dTf; - - - double dMrx; - double dZb; - double dZf; - double dFpv; - double dDb; - double dDf; - double dRhob; - double dRhof; - double dRD_Ideal; - double dRD_Real; - - - double dHo; - double dH; - double dS; - double dCpi; - double dCp; - double dCv; - double dk; - double dKappa; - double dSOS; - double dCstar; - - - - double dHhvMol; - double dLhvMol; - - + long lStatus; + int bForceUpdate; + double adMixture[21]; + int dCbtj; + double dPb; + double dTb; + double dPf; + double dTf; + double dMrx; + double dZb; + double dZf; + double dFpv; + double dDb; + double dDf; + double dRhob; + double dRhof; + double dRD_Ideal; + double dRD_Real; + double dHo; + double dH; + double dS; + double dCpi; + double dCp; + double dCv; + double dk; + double dKappa; + double dSOS; + double dCstar; + double dHhvMol; + double dLhvMol; } NGParSTRUCT; diff --git a/User/NG/Therm.c b/User/NG/Therm.c index dc00f05..52a0c0d 100644 --- a/User/NG/Therm.c +++ b/User/NG/Therm.c @@ -259,7 +259,7 @@ void Therm_CprCvrHS(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail) { } -void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, bool bGuess) { +void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, int bGuess) { double s0 = S; double h0 = H; double t1, t2, tmin, tmax; diff --git a/User/NG/Therm.h b/User/NG/Therm.h index f31115a..47962a4 100644 --- a/User/NG/Therm.h +++ b/User/NG/Therm.h @@ -51,7 +51,7 @@ double Therm_So(Therm *therm, NGParSTRUCT *ptNGPar); void Therm_CprCvrHS(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail); -void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, bool bGuess); +void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, int bGuess); double Therm_H(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail); diff --git a/User/NG/main.c b/User/NG/main.c index e5eef4a..bb4093a 100644 --- a/User/NG/main.c +++ b/User/NG/main.c @@ -9,11 +9,11 @@ int main() { // 设置基本参数 flowParams.dPatm = 0.0981; // 标准大气压(bar) - flowParams.dPf = 4; // 压力(MPa) - flowParams.dPfType = 1; // 0=表压,1=绝压 + flowParams.dPf = 1.48; // 压力(MPa) + flowParams.dPfType = 0; // 0=表压,1=绝压 flowParams.dDp = 12.50; // 差压(kPa) - flowParams.dTf = 10; // 温度(°C) - flowParams.dCbtj = 0; // 参比条件类型(0=标准状态) + flowParams.dTf = 15; // 温度(°C) + flowParams.dCbtj = 1; // 参比条件类型(0=标准状态) // 设置管道参数 flowParams.dPipeD = 259.38; // 管道内径(mm) @@ -23,7 +23,7 @@ int main() { // 设置材料参数 flowParams.dPipeMaterial = 2; // 20号钢 - flowParams.dOrificeMaterial = 10; // 镍铬合金 + flowParams.dOrificeMaterial = 9; // 镍铬合金 // 设置天然气组分(示例: 95%甲烷,5%其他) // 初始化天然气组分数组(GB/T 21446-2008 典型示例组成) @@ -31,22 +31,21 @@ int main() { flowParams.dNG_Compents[i] = 0.0; // 先全部初始化为0 } - // 按照GB/T 21446-2008标准中典型天然气组分赋值(体积百分比) - flowParams.dNG_Compents[0] = 90.6724; // 甲烷(CH4) - flowParams.dNG_Compents[1] = 3.1284; // 氮气(N2) - flowParams.dNG_Compents[2] = 0.4676; // 二氧化碳(CO2) - flowParams.dNG_Compents[3] =4.5279; // 乙烷(C2H6) - flowParams.dNG_Compents[4] = 0.8280; // 丙烷(C3H8) + flowParams.dNG_Compents[0] = 92.47; // 甲烷(CH4) + flowParams.dNG_Compents[1] = 0.68; // 氮气(N2) + flowParams.dNG_Compents[2] = 1.75; // 二氧化碳(CO2) + flowParams.dNG_Compents[3] =3.5; // 乙烷(C2H6) + flowParams.dNG_Compents[4] = 0.98; // 丙烷(C3H8) flowParams.dNG_Compents[5] = 0.00; // 水(H2O) flowParams.dNG_Compents[6] = 0.00; // 硫化氢(H2S) flowParams.dNG_Compents[7] = 0.0; // 氢气(H2) flowParams.dNG_Compents[8] = 0.00; // 一氧化碳(CO) flowParams.dNG_Compents[9] = 0.00; // 氧气(O2) - flowParams.dNG_Compents[10] = 0.1037; // 异丁烷(i-C4H10) - flowParams.dNG_Compents[11] = 0.1563; // 正丁烷(n-C4H10) - flowParams.dNG_Compents[12] = 0.0321; // 异戊烷(i-C5H12) - flowParams.dNG_Compents[13] = 0.0443; // 正戊烷(n-C5H12) - flowParams.dNG_Compents[14] = 0.0393; // 己烷(C6H14) + flowParams.dNG_Compents[10] = 0.34; // 异丁烷(i-C4H10) + flowParams.dNG_Compents[11] = 0.22; // 正丁烷(n-C4H10) + flowParams.dNG_Compents[12] = 0.0; // 异戊烷(i-C5H12) + flowParams.dNG_Compents[13] = 0.06; // 正戊烷(n-C5H12) + flowParams.dNG_Compents[14] = 0.0; // 己烷(C6H14) flowParams.dNG_Compents[15] = 0.0; // 庚烷(C7H16) flowParams.dNG_Compents[16] = 0.0; // 辛烷(C8H18) flowParams.dNG_Compents[17] = 0.0; // 壬烷(C9H20) @@ -54,6 +53,55 @@ int main() { flowParams.dNG_Compents[19] = 0.0; // 氦气(He) flowParams.dNG_Compents[20] = 0.0; // 其他组分 + + // flowParams.dNG_Compents[0] = 88.36; // 甲烷(CH4) + // flowParams.dNG_Compents[1] = 0.68; // 氮气(N2) + // flowParams.dNG_Compents[2] = 1.57; // 二氧化碳(CO2) + // flowParams.dNG_Compents[3] =6.25; // 乙烷(C2H6) + // flowParams.dNG_Compents[4] = 2.4; // 丙烷(C3H8) + // flowParams.dNG_Compents[5] = 0.00; // 水(H2O) + // flowParams.dNG_Compents[6] = 0.00; // 硫化氢(H2S) + // flowParams.dNG_Compents[7] = 0.04; // 氢气(H2) + // flowParams.dNG_Compents[8] = 0.00; // 一氧化碳(CO) + // flowParams.dNG_Compents[9] = 0.00; // 氧气(O2) + // flowParams.dNG_Compents[10] = 0.15; // 异丁烷(i-C4H10) + // flowParams.dNG_Compents[11] = 0.35; // 正丁烷(n-C4H10) + // flowParams.dNG_Compents[12] = 0.05; // 异戊烷(i-C5H12) + // flowParams.dNG_Compents[13] = 0.1; // 正戊烷(n-C5H12) + // flowParams.dNG_Compents[14] = 0.01; // 己烷(C6H14) + // flowParams.dNG_Compents[15] = 0.0; // 庚烷(C7H16) + // flowParams.dNG_Compents[16] = 0.0; // 辛烷(C8H18) + // flowParams.dNG_Compents[17] = 0.0; // 壬烷(C9H20) + // flowParams.dNG_Compents[18] = 0.0; // 癸烷(C10H22) + // flowParams.dNG_Compents[19] = 0.04; // 氦气(He) + // flowParams.dNG_Compents[20] = 0.0; // 其他组分 + + + + // 按照GB/T 21446-2008标准中典型天然气组分赋值(体积百分比) + + // flowParams.dNG_Compents[0] = 90.6724; // 甲烷(CH4) + // flowParams.dNG_Compents[1] = 3.1284; // 氮气(N2) + // flowParams.dNG_Compents[2] = 0.4676; // 二氧化碳(CO2) + // flowParams.dNG_Compents[3] =4.5279; // 乙烷(C2H6) + // flowParams.dNG_Compents[4] = 0.8280; // 丙烷(C3H8) + // flowParams.dNG_Compents[5] = 0.00; // 水(H2O) + // flowParams.dNG_Compents[6] = 0.00; // 硫化氢(H2S) + // flowParams.dNG_Compents[7] = 0.0; // 氢气(H2) + // flowParams.dNG_Compents[8] = 0.00; // 一氧化碳(CO) + // flowParams.dNG_Compents[9] = 0.00; // 氧气(O2) + // flowParams.dNG_Compents[10] = 0.1037; // 异丁烷(i-C4H10) + // flowParams.dNG_Compents[11] = 0.1563; // 正丁烷(n-C4H10) + // flowParams.dNG_Compents[12] = 0.0321; // 异戊烷(i-C5H12) + // flowParams.dNG_Compents[13] = 0.0443; // 正戊烷(n-C5H12) + // flowParams.dNG_Compents[14] = 0.0393; // 己烷(C6H14) + // flowParams.dNG_Compents[15] = 0.0; // 庚烷(C7H16) + // flowParams.dNG_Compents[16] = 0.0; // 辛烷(C8H18) + // flowParams.dNG_Compents[17] = 0.0; // 壬烷(C9H20) + // flowParams.dNG_Compents[18] = 0.0; // 癸烷(C10H22) + // flowParams.dNG_Compents[19] = 0.0; // 氦气(He) + // flowParams.dNG_Compents[20] = 0.0; // 其他组分 + // flowParams.dNG_Compents[0] =96.5; // 甲烷(CH4) // flowParams.dNG_Compents[1] =0.30; // 氮气(N2) // flowParams.dNG_Compents[2] =0.6; // 二氧化碳(CO2) diff --git a/User/main.h b/User/NG/main.h similarity index 100% rename from User/main.h rename to User/NG/main.h diff --git a/User/main.c b/User/main.c deleted file mode 100644 index eb17474..0000000 --- a/User/main.c +++ /dev/null @@ -1,217 +0,0 @@ -/** - ********************************************************************* - * @file main.c - * @author liaodeyun - * @version V1.0 - * @date 2025-7-6 - * @brief RT-Thread 3.0 + STM32 Ȼ - ********************************************************************* - * @attention - * - * ʵƽ̨:Ұ H750 PRO STM32 - * ̳ :http://www.firebbs.cn - * Ա :https://fire-stm32.taobao.com - * - ********************************************************************** - */ - -/* -************************************************************************* -* ͷļ -************************************************************************* -*/ -#include "board.h" -#include "rtthread.h" - -#include -#include "NGCal.h" -#include "Therm.h" -#include "Detail.h" -#include "FlowCal.h" - -/* -************************************************************************* -* -************************************************************************* -*/ -/* ߳̿ƿ */ -static rt_thread_t OFlowCal_thread = RT_NULL; -static rt_thread_t key_thread = RT_NULL; -/* -************************************************************************* -* -************************************************************************* -*/ -static void OFlowCal_thread_entry(void* parameter); -static void key_thread_entry(void* parameter); - -/* -************************************************************************* -* main -************************************************************************* -*/ -/** - * @brief - * @param - * @retval - */ -int main(void) -{ - /* - * ӲʼRTTϵͳʼѾmain֮ǰɣ - * component.cļеrtthread_startup()ˡ - * mainУֻҪ̺̼߳߳ɡ - */ - rt_kprintf("һ[Ұ]-STM32H750Ȼʵ\n\n"); - rt_kprintf("K1̣߳K2ָ߳\n"); - OFlowCal_thread = /* ߳̿ƿָ */ - rt_thread_create( "OFlowCal", /* ߳ */ - OFlowCal_thread_entry, /* ߳ں */ - RT_NULL, /* ߳ں */ - 512, /* ߳ջС */ - 3, /* ̵߳ȼ */ - 20); /* ߳ʱƬ */ - - /* ̣߳ */ - if (OFlowCal_thread != RT_NULL) - rt_thread_startup(OFlowCal_thread); - else - return -1; - - key_thread = /* ߳̿ƿָ */ - rt_thread_create( "key", /* ߳ */ - key_thread_entry, /* ߳ں */ - RT_NULL, /* ߳ں */ - 512, /* ߳ջС */ - 2, /* ̵߳ȼ */ - 20); /* ߳ʱƬ */ - - /* ̣߳ */ - if (key_thread != RT_NULL) - rt_thread_startup(key_thread); - else - return -1; -} - -/* -************************************************************************* -* ̶߳ -************************************************************************* -*/ - -static void OFlowCal_thread_entry(void* parameter) -{ - - while (1) - { - - // ʼṹ - FlowParSTRUCT flowParams = {0}; - NGParSTRUCT ngParams = {0}; - - // û - flowParams.dPatm = 0.0981; // ׼ѹ(bar) - flowParams.dPf = 1.48; // ѹ(MPa) - flowParams.dPfType = 0; // 0=ѹ1=ѹ - flowParams.dDp = 12.50; // ѹ(kPa) - flowParams.dTf = 15.0; // ¶(C) - flowParams.dCbtj = 0; // α(0=׼״̬) - - // ùܵ - flowParams.dPipeD = 259.38; // ܵھ(mm) - flowParams.dOrificeD = 150.25; // װ׾(mm) - flowParams.dPipeType = 0; // ܵ - flowParams.dPtmode = 0; // ȡѹʽ(0=ȡѹ1=ǽȡѹ) - - // òϲ - flowParams.dPipeMaterial = 2; // 20Ÿ - flowParams.dOrificeMaterial = 10; // Ͻ - - // Ȼ(ʾ: 95%飬5%) - // ʼȻ(GB/T 21446-2008 ʾ) -for(int i=0; i