503 lines
15 KiB
C
503 lines
15 KiB
C
#include "NGCal.h"
|
||
#include "Therm.h"
|
||
#include "Detail.h"
|
||
#include "FlowCal.h"
|
||
#include "math.h"
|
||
|
||
void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||
{
|
||
|
||
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Pa
|
||
double tempPatm = ptFlowPar->dPatm*1000000;
|
||
//ѹ<><D1B9>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Pa
|
||
double tempPf = ptFlowPar->dPf*1000000;
|
||
|
||
//<2F><>ѹת<D1B9><D7AA><EFBFBD><EFBFBD>Pa
|
||
double tempDP = ptFlowPar->dDp*1000;
|
||
//<2F>¶<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>K
|
||
double tempTf = ptFlowPar->dTf+273.15;
|
||
|
||
if (ptFlowPar->dPfType == 0) //0<>DZ<EFBFBD>ѹ
|
||
{
|
||
ptFlowPar->dPf = tempPatm + tempPf;
|
||
ptNGPar ->dPf=tempPatm + tempPf;
|
||
} else {
|
||
ptFlowPar->dPf = tempPf;
|
||
ptNGPar->dPf=tempPf;
|
||
}
|
||
|
||
ptFlowPar->dDp = tempDP;
|
||
ptFlowPar->dTf = tempTf;
|
||
ptNGPar->dTf = tempTf;
|
||
ptNGPar->dCbtj=ptFlowPar->dCbtj;
|
||
|
||
switch (ptNGPar->dCbtj)
|
||
{
|
||
case 2:
|
||
ptNGPar->dPb=101325;
|
||
ptNGPar->dTb= 273.15;
|
||
ptFlowPar->dPb_M=(101325);
|
||
ptFlowPar->dTb_M=(273.15);
|
||
break;
|
||
case 1:
|
||
|
||
ptNGPar->dPb=(101325);
|
||
ptNGPar->dTb=( 288.15);
|
||
ptFlowPar->dPb_M=(101325);
|
||
ptFlowPar->dTb_M=(288.15);
|
||
break;
|
||
case 0:
|
||
|
||
ptNGPar->dPb=(101325);
|
||
ptNGPar->dTb=( 293.15);
|
||
ptFlowPar->dPb_M=(101325);
|
||
ptFlowPar->dTb_M=(293.15);
|
||
break;
|
||
}
|
||
|
||
double ngArray[NUMBEROFCOMPONENTS];
|
||
|
||
for (int i = 0; i <NUMBEROFCOMPONENTS; i++) {
|
||
|
||
ngArray[i] = ptFlowPar->dNG_Compents[i] / 100;
|
||
ptNGPar->adMixture[i] = ngArray[i];
|
||
|
||
}
|
||
Crit(ptNGPar,0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
|
||
|
||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>
|
||
ptFlowPar->dFpv=ptNGPar->dFpv;
|
||
|
||
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>
|
||
|
||
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->dE = calculateE(ptFlowPar->dBeta);
|
||
ptFlowPar->dFG = calculateFG(ptNGPar->dRD_Real);
|
||
ptFlowPar->dFT = calculateFT(ptFlowPar->dTb_M, ptFlowPar->dTf);
|
||
|
||
ptFlowPar->dKappa = calculateKappa(ptNGPar->dZf);
|
||
ptFlowPar->dDViscosity = Dlndjs(ptFlowPar->dPf/1e6, ptFlowPar->dTf);
|
||
ptFlowPar->dDExpCoefficient = calculateEpsilon(ptFlowPar->dPf, ptFlowPar->dDp,
|
||
ptFlowPar->dBeta, ptFlowPar->dKappa);
|
||
|
||
double D = ptFlowPar->dPipeD / 1000.0; // <20>ܵ<EFBFBD><DCB5>ھ<EFBFBD>(m)
|
||
double d = ptFlowPar->dOrificeD / 1000.0; // <20>װ<EFBFBD><EFBFBD>(m)
|
||
double beta = ptFlowPar->dBeta;
|
||
double P1 = ptFlowPar->dPf; // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>(Pa)
|
||
double deltaP = ptFlowPar->dDp; // <20><>ѹ(Pa)
|
||
double Tf = ptFlowPar->dTf;
|
||
|
||
// 2. <20><>ʼ<EFBFBD><CABC>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>㣨<EFBFBD><E3A3A8><EFBFBD><EFBFBD><EFBFBD>ʼC=0.6<EFBFBD><EFBFBD>
|
||
double C_initial = 0.6;
|
||
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; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||
|
||
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
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;
|
||
|
||
// 4. <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
||
do {
|
||
prevC = currentC;
|
||
|
||
// 4.1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>C<EFBFBD><43>GB/T 21446-2008 <20><>¼A<C2BC><41>
|
||
currentC = calculateCd(beta, currentReD, ptFlowPar->dPipeD, ptFlowPar->dPtmode);
|
||
|
||
// 4.2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double Qf = (currentC * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4)
|
||
* sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4))));
|
||
ptFlowPar->dVFlowf = Qf;
|
||
|
||
// 4.3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>
|
||
currentReD = calculateReD(Qf, D, ptNGPar->dRhof, ptFlowPar->dDViscosity);
|
||
|
||
iter++;
|
||
if (iter > maxIter) {
|
||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||
}
|
||
} while (fabs(currentC - prevC) / currentC > tolerance);
|
||
|
||
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>
|
||
// <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵֲڶ<D6B2><DAB6><EFBFBD><EFBFBD><EFBFBD>
|
||
double K = calculateK(ptFlowPar->dPipeType); // <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʹܵ<CAB9><DCB5><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||
double G_me = calculateRoughnessFactor(ptFlowPar->dPipeD, K, currentC);
|
||
double C_corrected = currentC * G_me;
|
||
|
||
ptFlowPar->dCd = C_corrected;
|
||
ptFlowPar->dRoughNessPipe = G_me;
|
||
ptFlowPar->dRnPipe = currentReD;
|
||
|
||
// 6. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(1)<29><>
|
||
double Qn = ptFlowPar->dVFlowf * (ptFlowPar->dFpv * ptFlowPar->dFpv * P1 / ptFlowPar->dPb_M)
|
||
* (ptFlowPar->dTb_M) / Tf;
|
||
ptFlowPar->dVFlowb = Qn;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ptFlowPar->dMFlowb = ptFlowPar->dVFlowb * ptNGPar->dRhob;
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ptFlowPar->dEFlowb = ptFlowPar->dVFlowb * ptNGPar->dHhvMol;
|
||
// <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ptFlowPar->dVelocityFlow = ptFlowPar->dVFlowf / (M_PI * pow((ptFlowPar->dPipeD / 2000), 2));
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
/// </summary>
|
||
/// <param name="tempCaiLiao"></param>
|
||
/// <returns></returns>
|
||
double CaiLiaoPzxs(int tempCaiLiao)
|
||
{
|
||
double CaiLiaoPzxs = 0;
|
||
// <20>װ<EFBFBD>ܵ<CDB9><DCB5><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||
// 0 A3<41><33>15<31>Ÿ<EFBFBD>
|
||
// 1 10 <20>Ÿ<EFBFBD>
|
||
// 2 20 <20>Ÿ<EFBFBD>
|
||
// 3 45 <20>Ÿ<EFBFBD>
|
||
// 4 1 Cr13?2Cr13
|
||
// 5 Cr17
|
||
// 6 12 CrMoV
|
||
// 7 10 CrMo910
|
||
// 8 Cr6SiMo
|
||
// 9 X20CrMoV121
|
||
// 10 1 Cr18Ni9Ti
|
||
// 11 <20><>̼ͨ<CDA8><CCBC>
|
||
// 12 <20><>ҵ<EFBFBD><D2B5>ͭ
|
||
// 13 <20><>ͭ
|
||
// 14 <20><>ͭ
|
||
switch (tempCaiLiao)
|
||
{
|
||
case 0:
|
||
CaiLiaoPzxs = 11.75;
|
||
break;
|
||
|
||
case 1:
|
||
CaiLiaoPzxs = 11.6;
|
||
break;
|
||
|
||
case 2:
|
||
CaiLiaoPzxs = 11.16;
|
||
break;
|
||
|
||
case 3:
|
||
CaiLiaoPzxs = 11.59;
|
||
break;
|
||
|
||
case 4:
|
||
CaiLiaoPzxs = 10.5;
|
||
break;
|
||
|
||
case 5:
|
||
CaiLiaoPzxs = 10.0;
|
||
break;
|
||
|
||
case 6:
|
||
CaiLiaoPzxs = 10.2;
|
||
break;
|
||
|
||
case 7:
|
||
CaiLiaoPzxs = 15.5;
|
||
break;
|
||
|
||
case 8:
|
||
CaiLiaoPzxs = 11.5;
|
||
break;
|
||
|
||
case 9:
|
||
CaiLiaoPzxs = 10.8;
|
||
break;
|
||
|
||
case 10:
|
||
CaiLiaoPzxs = 16.6;
|
||
break;
|
||
|
||
case 11:
|
||
CaiLiaoPzxs = 11.4;
|
||
break;
|
||
|
||
case 12:
|
||
CaiLiaoPzxs = 16.55;
|
||
break;
|
||
|
||
case 13:
|
||
CaiLiaoPzxs = 17.8;
|
||
break;
|
||
|
||
case 14:
|
||
CaiLiaoPzxs = 17.2;
|
||
break;
|
||
}
|
||
return CaiLiaoPzxs;
|
||
}
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD>Դֲڶ<D6B2> K (GB/T 21446-2008 <20><>¼C)
|
||
* @param dPipeType <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
|
||
* @return <20>ֲڶ<D6B2><DAB6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> K (<28><><EFBFBD><EFBFBD>4λС<CEBB><D0A1>)
|
||
*/
|
||
double calculateK(int dPipeType) {
|
||
double Jdccd;
|
||
switch (dPipeType) {
|
||
case 0:
|
||
Jdccd = 0.029;
|
||
break;
|
||
case 1:
|
||
case 2:
|
||
case 3:
|
||
Jdccd = 0.075;
|
||
break;
|
||
case 4:
|
||
Jdccd = 0.1;
|
||
break;
|
||
case 5:
|
||
Jdccd = 0.15;
|
||
break;
|
||
case 6:
|
||
Jdccd = 1;
|
||
break;
|
||
case 7:
|
||
Jdccd = 2.1;
|
||
break;
|
||
case 8:
|
||
Jdccd = 0.04;
|
||
break;
|
||
case 9:
|
||
Jdccd = 0.15;
|
||
break;
|
||
case 10:
|
||
Jdccd = 0.13;
|
||
break;
|
||
case 11:
|
||
Jdccd = 0.25;
|
||
break;
|
||
default:
|
||
// <20><><EFBFBD><EFBFBD>δ֪<CEB4><D6AA><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ѡ<EFBFBD><D1A1>
|
||
fprintf(stderr, "δ֪<EFBFBD>Ĺܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n", dPipeType);
|
||
return FLOW_CALC_ERROR;
|
||
}
|
||
return Jdccd;
|
||
}
|
||
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>ֲڶ<D6B2><DAB6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> G_me (GB/T 21446-2008 <20><>¼C)
|
||
* @param D_pipe <20>ܵ<EFBFBD><DCB5>ھ<EFBFBD> (mm)
|
||
* @param K <20><><EFBFBD>Դֲڶ<D6B2> (mm)
|
||
* @param C δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||
* @return <20>ֲڶ<D6B2><DAB6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> G_me (<28><><EFBFBD><EFBFBD>4λС<CEBB><D0A1>)
|
||
*/
|
||
double calculateRoughnessFactor(double D_pipe, double K, double C) {
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դֲڶ<D6B2> K/D
|
||
double K_over_D = K / D_pipe;
|
||
|
||
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||
if (K_over_D <= 0.0004) {
|
||
return 1.0000;
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double term = (K_over_D * 1e6) - 400; // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (term < 0) {
|
||
fprintf(stderr, "K/D <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>÷<EFBFBD>Χ\n");
|
||
return FLOW_CALC_ERROR;
|
||
}
|
||
|
||
double G_me = 1 + (0.011 / C) * sqrt(term);
|
||
return G_me; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1>
|
||
}
|
||
|
||
|
||
|
||
/**
|
||
* <20><><EFBFBD>㽥<EFBFBD><E3BDA5><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><CFB5>E<EFBFBD><45>GB/T 21446-2008 ʽ(8)<29><>
|
||
* @param beta ֱ<><D6B1><EFBFBD><EFBFBD>
|
||
* @return <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><CFB5>E
|
||
*/
|
||
double calculateE(double beta) {
|
||
return 1 / sqrt(1 - pow(beta, 4));
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><CFB5>FG<46><47>GB/T 21446-2008 ʽ(9)<29><>
|
||
* @param dRD_Real <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ܶ<EFBFBD>
|
||
* @return <20><><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><CFB5>FG
|
||
*/
|
||
double calculateFG(double dRD_Real) {
|
||
return 1 / sqrt(dRD_Real);
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5>FT<46><54>GB/T 21446-2008 ʽ(10)<29><>
|
||
* @param dTb_M <20>α<EFBFBD><CEB1>¶<EFBFBD>(K)
|
||
* @param dTf <20><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K)
|
||
* @return <20><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5>FT
|
||
*/
|
||
double calculateFT(double dTb_M, double dTf) {
|
||
return sqrt(dTb_M / dTf);
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ţ<EFBFBD>GB/T 21446-2008 ʽ(11)<29><>
|
||
* @param dPf <20><><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD>ѹ<EFBFBD><D1B9>(Pa)
|
||
* @param dDp <20><>ѹ(Pa)
|
||
* @param beta ֱ<><D6B1><EFBFBD><EFBFBD>
|
||
* @param dKappa <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>
|
||
*/
|
||
double calculateEpsilon(double dPf, double dDp, double beta, double dKappa) {
|
||
double tau = (dPf - dDp) / dPf; // ѹ<><D1B9><EFBFBD><EFBFBD>
|
||
double epsilon = 1 - (0.351 + 0.256 * pow(beta, 4) + 0.93 * pow(beta, 8)) * (1 - pow(tau, 1/dKappa));
|
||
return epsilon;
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ʣ<EFBFBD>GB/T 21446-2008 <20>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* @param dZf <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* @return <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>
|
||
*/
|
||
double calculateKappa(double dZf) {
|
||
// <20><><EFBFBD>ƹ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱȺ<C8B1>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double gamma = 1.3; // <20><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ȱȣ<C8B1>Cp/Cv<43><76>1.3<EFBFBD><EFBFBD>
|
||
double Z = dZf; // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||
double kappa = gamma / (1 - (gamma - 1) * (1 / Z - 1));
|
||
return kappa;
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>ReD<65><44>GB/T 21446-2008 ʽ(5)<29><>
|
||
* @param Qf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||
* @param D <20>ܵ<EFBFBD><DCB5>ھ<EFBFBD>(m)
|
||
* @param rho <20>ܶ<EFBFBD>(kg/m3)
|
||
* @param mu <20><><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3>(Pa<50><61>s)
|
||
* @return <20><>ŵ<EFBFBD><C5B5>
|
||
*/
|
||
double calculateReD(double Qf, double D, double rho, double mu) {
|
||
return (4 * Qf * rho) / (M_PI * D * mu);
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>C<EFBFBD><43>GB/T 21446-2008 <20><>¼A<C2BC><41>
|
||
* @param beta ֱ<><D6B1><EFBFBD><EFBFBD>
|
||
* @param ReD <20><>ŵ<EFBFBD><C5B5>
|
||
* @param D_mm <20>ܵ<EFBFBD><DCB5>ھ<EFBFBD>(mm)
|
||
* @param ptMode ȡѹ<C8A1><D1B9>ʽ
|
||
* @return <20><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>C
|
||
*/
|
||
double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||
double L1, L2;
|
||
// <20><><EFBFBD><EFBFBD>ȡѹ<C8A1><D1B9>ʽȷ<CABD><C8B7>L1/L2<4C><32><EFBFBD>ǽ<EFBFBD>ȡѹ<C8A1><D1B9>
|
||
switch (ptMode) {
|
||
case 1: // <20>ǽ<EFBFBD>ȡѹ
|
||
L1 = L2 = 0; // D<><44>λΪmm
|
||
break;
|
||
case 0: // <20><><EFBFBD><EFBFBD>ȡѹ
|
||
L1 = L2 = 25.4 / D_mm;
|
||
break;
|
||
case 2: // D-D/2ȡѹ
|
||
L1 = 1.0;
|
||
L2 = 0.47;
|
||
break;
|
||
default:
|
||
fprintf(stderr, "<EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>ȡѹ<EFBFBD><EFBFBD>ʽ: %d\n", ptMode);
|
||
return FLOW_CALC_ERROR;
|
||
}
|
||
|
||
double term1 = 0.5961 + 0.0261 * pow(beta, 2) - 0.216 * pow(beta, 8);
|
||
double term2 = 0.000521 * pow(1e6 * beta / ReD, 0.7);
|
||
double A = pow(19000 * beta / ReD, 0.8);
|
||
double term3 = (0.0188 + 0.0063 * A) * pow(beta, 3.5) * pow(1e6 / ReD, 0.3);
|
||
double term4 = (0.043 + 0.08 * exp(-10 * L1) - 0.123 * exp(-7 * L1))
|
||
* (1 - 0.11 * A) * pow(beta, 4) / (1 - pow(beta, 4));
|
||
double term5 = -0.031 * (2 * L2 / (1 - beta) - 0.8 * pow(2 * L2 / (1 - beta), 1.1))
|
||
* pow(beta, 1.3);
|
||
|
||
double Cd = term1 + term2 + term3 + term4 + term5;
|
||
|
||
// <20><EFBFBD><71.12mm<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (D_mm < 71.12) {
|
||
Cd += 0.011 * (0.75 - beta) * (2.8 - D_mm / 25.4);
|
||
}
|
||
return Cd;
|
||
}
|
||
|
||
/**
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>Ȧ<EFBFBD>
|
||
* @param tempP_jy ѹ<><D1B9>(MPa)
|
||
* @param tempT <20>¶<EFBFBD>(K)
|
||
* @return <20><><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3>(Pa<50><61>s)
|
||
*/
|
||
double Dlndjs(double tempP_jy, double tempT) {
|
||
double Dlndjs_Dlnd_Data[8][11] = {
|
||
{976, 991, 1014, 1044, 1073, 1114, 1156, 1207, 1261, 1331, 1405},
|
||
{1027, 1040, 1063, 1091, 1118, 1151, 1185, 1230, 1276, 1331, 1389},
|
||
{1071, 1082, 1106, 1127, 1149, 1180, 1211, 1250, 1289, 1335, 1383},
|
||
{1123, 1135, 1153, 1174, 1195, 1224, 1253, 1289, 1324, 1366, 1409},
|
||
{1167, 1178, 1196, 1216, 1236, 1261, 1287, 1318, 1350, 1385, 1421},
|
||
{1213, 1224, 1239, 1257, 1275, 1297, 1320, 1346, 1373, 1403, 1435},
|
||
{1260, 1270, 1281, 1297, 1313, 1333, 1352, 1374, 1396, 1424, 1451},
|
||
{1303, 1312, 1323, 1338, 1352, 1372, 1391, 1412, 1432, 1456, 1482}
|
||
};
|
||
|
||
double Dlndjs_Dlnd_T[8] = {
|
||
-15 + 273.15, 0 + 273.15, 15 + 273.15, 30 + 273.15,
|
||
45 + 273.15, 60 + 273.15, 75 + 273.15, 90 + 273.15
|
||
};
|
||
|
||
double Dlndjs_Dlnd_P[11] = {0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||
|
||
double s1, s2, ky, kx;
|
||
int i, m = 0, n = 0;
|
||
|
||
if (tempT < Dlndjs_Dlnd_T[0]) {
|
||
tempT = Dlndjs_Dlnd_T[0];
|
||
}
|
||
if (tempT > Dlndjs_Dlnd_T[7]) {
|
||
tempT = Dlndjs_Dlnd_T[7];
|
||
}
|
||
if (tempP_jy < Dlndjs_Dlnd_P[0]) {
|
||
tempP_jy = Dlndjs_Dlnd_P[0];
|
||
}
|
||
if (tempP_jy > Dlndjs_Dlnd_P[10]) {
|
||
tempP_jy = Dlndjs_Dlnd_P[10];
|
||
}
|
||
|
||
for (i = 0; i <= 6; i++) {
|
||
if (tempT >= Dlndjs_Dlnd_T[i] && tempT <= Dlndjs_Dlnd_T[i + 1]) {
|
||
m = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
for (i = 0; i <= 9; i++) {
|
||
if (tempP_jy >= Dlndjs_Dlnd_P[i] && tempP_jy <= Dlndjs_Dlnd_P[i + 1]) {
|
||
n = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (Dlndjs_Dlnd_P[n + 1] - Dlndjs_Dlnd_P[n] != 0) {
|
||
ky = (tempP_jy - Dlndjs_Dlnd_P[n]) / (Dlndjs_Dlnd_P[n + 1] - Dlndjs_Dlnd_P[n]);
|
||
} else {
|
||
ky = 0;
|
||
}
|
||
|
||
if (Dlndjs_Dlnd_T[m + 1] - Dlndjs_Dlnd_T[m] != 0) {
|
||
kx = (tempT - Dlndjs_Dlnd_T[m]) / (Dlndjs_Dlnd_T[m + 1] - Dlndjs_Dlnd_T[m]);
|
||
} else {
|
||
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;
|
||
return (s1 + (s2 - s1) * kx) / 100000.0;
|
||
}
|