714 lines
21 KiB
C
714 lines
21 KiB
C
|
/*************************************************************************
|
|||
|
* <EFBFBD>ļ<EFBFBD>: therm.c
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<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><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
* ThermInit(), ThermDestroy(), Run(), coth(), CpiMolar(), Ho(), So(),
|
|||
|
* CprCvrHS(), HS_Mode(), H(), S()
|
|||
|
* <EFBFBD>汾: ver 1.7 2002.11.17
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: W.B. Peterson
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
* <EFBFBD><EFBFBD>Ȩ: (c) 2002 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
#include "NGCal.h"
|
|||
|
#include "Detail.h"
|
|||
|
#include "Therm.h"
|
|||
|
#include <math.h>
|
|||
|
#include <stdbool.h> // <20><><EFBFBD><EFBFBD>bool<6F><6C><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
|
|||
|
|
|||
|
// <20><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static void CprCvrHS(AGA10STRUCT *ptAGA10, Detail *ptD);
|
|||
|
static double H(AGA10STRUCT *ptAGA10, Detail *ptD);
|
|||
|
static double S(AGA10STRUCT *ptAGA10, Detail *ptD);
|
|||
|
static void HS_Mode(AGA10STRUCT *ptAGA10, Detail *ptD, double H_target, double S_target, bool bGuess);
|
|||
|
|
|||
|
double CalTH = 4.1840;
|
|||
|
|
|||
|
// <20><>˹<EFBFBD><CBB9><EFBFBD>ֵĸ<D6B5><C4B8><EFBFBD>Ȩ<EFBFBD><C8A8>
|
|||
|
double GK_root[5] = {
|
|||
|
0.14887433898163121088,
|
|||
|
0.43339539412924719080,
|
|||
|
0.67940956829902440263,
|
|||
|
0.86506336668898451073,
|
|||
|
0.97390652851717172008
|
|||
|
};
|
|||
|
|
|||
|
double GK_weight[5] = {
|
|||
|
0.29552422471475286217,
|
|||
|
0.26926671930999634918,
|
|||
|
0.21908636251598204295,
|
|||
|
0.14945134915058059038,
|
|||
|
0.066671344308688137179
|
|||
|
};
|
|||
|
|
|||
|
// <20><><EFBFBD>û<EFBFBD><C3BB>ֵ<EFBFBD><D6B5><EFBFBD>
|
|||
|
int GK_points = 5;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1>ʺ<EFBFBD><CABA>صķ<D8B5><C4B7>̳<EFBFBD><CCB3><EFBFBD>
|
|||
|
double ThermConstants[NUMBEROFCOMPONENTS][11] = {
|
|||
|
{-29776.4, 7.95454, 43.9417, 1037.09, 1.56373, 813.205, -24.9027, 1019.98,-10.1601, 1070.14,-20.0615},
|
|||
|
{-3495.34, 6.95587, 0.272892, 662.738,-0.291318,-680.562, 1.78980, 1740.06, 0.0, 100.0, 4.49823},
|
|||
|
{ 20.7307, 6.96237, 2.68645, 500.371,-2.56429,-530.443, 3.91921, 500.198, 2.13290, 2197.22, 5.81381},
|
|||
|
{-37524.4, 7.98139, 24.3668, 752.320, 3.53990, 272.846, 8.44724, 1020.13,-13.2732, 869.510,-22.4010},
|
|||
|
{-56072.1, 8.14319, 37.0629, 735.402, 9.38159, 247.190, 13.4556, 1454.78,-11.7342, 984.518,-24.0426},
|
|||
|
{-13773.1, 7.97183, 6.27078, 2572.63, 2.05010, 1156.72, 0.0, 100.0, 0.0, 100.0, -3.24989},
|
|||
|
{-10085.4, 7.94680,-0.08380, 433.801, 2.85539, 843.792, 6.31595, 1481.43,-2.88457, 1102.23,-0.51551},
|
|||
|
{-5565.60, 6.66789, 2.33458, 2584.98, .749019, 559.656, 0.0, 100.0, 0.0, 100.0, -7.94821},
|
|||
|
{-2753.49, 6.95854, 2.02441, 1541.22, .096774, 3674.81, 0.0, 100.0, 0.0, 100.0, 6.23387},
|
|||
|
{-3497.45, 6.96302, 2.40013, 2522.05, 2.21752, 1154.15, 0.0, 100.0, 0.0, 100.0, 9.19749},
|
|||
|
{-72387.0, 17.8143, 58.2062, 1787.39, 40.7621, 808.645, 0.0, 100.0, 0.0, 100.0, -44.1341},
|
|||
|
{-72674.8, 18.6383, 57.4178, 1792.73, 38.6599, 814.151, 0.0, 100.0, 0.0, 100.0, -46.1938},
|
|||
|
{-91505.5, 21.3861, 74.3410, 1701.58, 47.0587, 775.899, 0.0, 100.0, 0.0, 100.0, -60.2474},
|
|||
|
{-83845.2, 22.5012, 69.5789, 1719.58, 46.2164, 802.174, 0.0, 100.0, 0.0, 100.0, -62.2197},
|
|||
|
{-94982.5, 26.6225, 80.3819, 1718.49, 55.6598, 802.069, 0.0, 100.0, 0.0, 100.0, -77.5366},
|
|||
|
{-103353., 30.4029, 90.6941, 1669.32, 63.2028, 786.001, 0.0, 100.0, 0.0, 100.0, -92.0164},
|
|||
|
{-109674., 34.0847, 100.253, 1611.55, 69.7675, 768.847, 0.0, 100.0, 0.0, 100.0, -106.149},
|
|||
|
{-122599., 38.5014, 111.446, 1646.48, 80.5015, 781.588, 0.0, 100.0, 0.0, 100.0, -122.444},
|
|||
|
{-133564., 42.7143, 122.173, 1654.85, 90.2255, 785.564, 0.0, 100.0, 0.0, 100.0, -138.006},
|
|||
|
{ 0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0 },
|
|||
|
{ 0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0 }
|
|||
|
};
|
|||
|
|
|||
|
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>
|
|||
|
static double dSi = 0.0;
|
|||
|
static double dTold = 0.0;
|
|||
|
static double dMrxold = 0.0;
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ThermInit
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: Ĭ<EFBFBD>Ϲ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
void ThermInit(void)
|
|||
|
{
|
|||
|
// <20><>ʼ<EFBFBD><CABC>3<EFBFBD><33><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
|||
|
dSi = 0.0;
|
|||
|
dTold = 0.0;
|
|||
|
dMrxold = 0.0;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ThermDestroy
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
void ThermDestroy(void)
|
|||
|
{
|
|||
|
// <20><EFBFBD>̬<EFBFBD><CCAC>Դ<EFBFBD><D4B4>Ҫ<EFBFBD>ͷ<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: coth
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double x
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ho<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
* <EFBFBD><EFBFBD>ע: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Therm<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ֻ<EFBFBD>DZ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* C<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**************************************************************************/
|
|||
|
double coth(double x)
|
|||
|
{
|
|||
|
return cosh(x)/sinh(x);
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Run
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10, Detail *ptD
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>п<EFBFBD><EFBFBD><EFBFBD>; SOS<EFBFBD><EFBFBD>k<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
void Run(AGA10STRUCT *ptAGA10, Detail *ptD)
|
|||
|
{
|
|||
|
// <20>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
double c, x, y, z;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AGA 8(1994)<29><>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>еĻ<D0B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Detail_Run(ptD, ptAGA10);
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD>Z<EFBFBD><5A>D<EFBFBD><44>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
Detail_dZdD(ptD, ptAGA10->dDf);
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cv, cp, <20><><EFBFBD>ʺͱ<CABA><CDB1><EFBFBD>
|
|||
|
CprCvrHS(ptAGA10, ptD);
|
|||
|
|
|||
|
// <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>
|
|||
|
ptAGA10->dk = ptAGA10->dCp / ptAGA10->dCv;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>c<EFBFBD><63>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ڵ<EFBFBD><DAB5><EFBFBD>
|
|||
|
x = ptAGA10->dk * RGAS * 1000.0 * ptAGA10->dTf;
|
|||
|
y = ptAGA10->dMrx;
|
|||
|
z = ptAGA10->dZf + ptAGA10->dDf * ptD->ddZdD;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>c<EFBFBD><63><EFBFBD><EFBFBD>SOS^2
|
|||
|
c = (x / y) * z;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dSOS = sqrt(c);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>ϵ<EFBFBD>ͬ<EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>3.2<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
ptAGA10->dKappa = (c * ptAGA10->dRhof) / ptAGA10->dPf;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CpiMolar
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶨ѹĦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/mol-K)<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>Aly, Lee, McFall<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><EFBFBD>̡<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>Ӧ<EFBFBD>ô<EFBFBD><EFBFBD>Ȼ<EFBFBD>ѧ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>(th)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
double CpiMolar(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
double Cp = 0.0;
|
|||
|
double Cpx;
|
|||
|
double DT, FT, HT, JT;
|
|||
|
double Dx, Fx, Hx, Jx;
|
|||
|
double T;
|
|||
|
int i;
|
|||
|
|
|||
|
// Ϊ<><CEAA><EFBFBD>߿ɶ<DFBF><C9B6>ԣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>T
|
|||
|
T = ptAGA10->dTf;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ֵı<D6B5><C4B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Ũ<EFBFBD><C5A8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (ptAGA10->adMixture[i] <= 0.0) continue;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>Ϊ<EFBFBD><CEAA>
|
|||
|
Cpx = 0.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
|||
|
DT = ThermConstants[i][coefD] / T;
|
|||
|
FT = ThermConstants[i][coefF] / T;
|
|||
|
HT = ThermConstants[i][coefH] / T;
|
|||
|
JT = ThermConstants[i][coefJ] / T;
|
|||
|
|
|||
|
// ʹ<><CAB9><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Dx = DT/sinh(DT);
|
|||
|
Fx = FT/cosh(FT);
|
|||
|
Hx = HT/sinh(HT);
|
|||
|
Jx = JT/cosh(JT);
|
|||
|
|
|||
|
Cpx += ThermConstants[i][coefB];
|
|||
|
Cpx += ThermConstants[i][coefC] * Dx * Dx;
|
|||
|
Cpx += ThermConstants[i][coefE] * Fx * Fx;
|
|||
|
Cpx += ThermConstants[i][coefG] * Hx * Hx;
|
|||
|
Cpx += ThermConstants[i][coefI] * Jx * Jx;
|
|||
|
|
|||
|
// ʹ<>õ<EFBFBD>ǰĦ<C7B0><C4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
|
|||
|
Cpx *= ptAGA10->adMixture[i];
|
|||
|
|
|||
|
// <20><><EFBFBD>˹<EFBFBD><CBB9>ӵ<D7BC><D3B5>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
Cp += Cpx;
|
|||
|
}
|
|||
|
|
|||
|
// <20><>cal(th)/mol-Kת<4B><D7AA>ΪJ/mol-K
|
|||
|
Cp *= CalTH;
|
|||
|
|
|||
|
return Cp;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Ho
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg)
|
|||
|
* <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>Ӧ<EFBFBD>ô<EFBFBD><EFBFBD>Ȼ<EFBFBD>ѧ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>(th)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
double Ho(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
double H = 0.0;
|
|||
|
double Hx;
|
|||
|
double DT, FT, HT, JT;
|
|||
|
double cothDT, tanhFT, cothHT, tanhJT;
|
|||
|
double T;
|
|||
|
int i;
|
|||
|
|
|||
|
// Ϊ<><CEAA><EFBFBD>߿ɶ<DFBF><C9B6>ԣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>T
|
|||
|
T = ptAGA10->dTf;
|
|||
|
|
|||
|
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Ũ<EFBFBD><C5A8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (ptAGA10->adMixture[i] <= 0.0) continue;
|
|||
|
|
|||
|
Hx = 0.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
|||
|
DT = ThermConstants[i][coefD] / T;
|
|||
|
FT = ThermConstants[i][coefF] / T;
|
|||
|
HT = ThermConstants[i][coefH] / T;
|
|||
|
JT = ThermConstants[i][coefJ] / T;
|
|||
|
|
|||
|
cothDT = coth(DT);
|
|||
|
tanhFT = tanh(FT);
|
|||
|
cothHT = coth(HT);
|
|||
|
tanhJT = tanh(JT);
|
|||
|
|
|||
|
Hx += ThermConstants[i][coefA];
|
|||
|
Hx += ThermConstants[i][coefB] * T;
|
|||
|
Hx += ThermConstants[i][coefC] * ThermConstants[i][coefD] * cothDT;
|
|||
|
Hx -= ThermConstants[i][coefE] * ThermConstants[i][coefF] * tanhFT;
|
|||
|
Hx += ThermConstants[i][coefG] * ThermConstants[i][coefH] * cothHT;
|
|||
|
Hx -= ThermConstants[i][coefI] * ThermConstants[i][coefJ] * tanhJT;
|
|||
|
|
|||
|
// ʹ<>õ<EFBFBD>ǰĦ<C7B0><C4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
|
|||
|
Hx *= ptAGA10->adMixture[i];
|
|||
|
|
|||
|
// <20><><EFBFBD>˹<EFBFBD><CBB9>ӵ<D7BC><D3B5>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
H += Hx;
|
|||
|
}
|
|||
|
|
|||
|
// <20><>cal(th)/g-molת<6C><D7AA>ΪkJ/kg-mol
|
|||
|
H *= CalTH;
|
|||
|
|
|||
|
// <20><>kJ/kg-molת<6C><D7AA>ΪJ/kg
|
|||
|
H /= ptAGA10->dMrx;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>J/kg
|
|||
|
return H * 1.e3;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: So
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg-K)
|
|||
|
* <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>Ӧ<EFBFBD>ô<EFBFBD><EFBFBD>Ȼ<EFBFBD>ѧ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>(th)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
double So(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
double S = 0.0;
|
|||
|
double Sx;
|
|||
|
double DT, FT, HT, JT;
|
|||
|
double cothDT, tanhFT, cothHT, tanhJT;
|
|||
|
double sinhDT, coshFT, sinhHT, coshJT;
|
|||
|
double T;
|
|||
|
int i;
|
|||
|
|
|||
|
// Ϊ<><CEAA><EFBFBD>߿ɶ<DFBF><C9B6>ԣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>T
|
|||
|
T = ptAGA10->dTf;
|
|||
|
|
|||
|
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Ũ<EFBFBD><C5A8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (ptAGA10->adMixture[i] <= 0.0) continue;
|
|||
|
|
|||
|
Sx = 0.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
|||
|
DT = ThermConstants[i][coefD] / T;
|
|||
|
FT = ThermConstants[i][coefF] / T;
|
|||
|
HT = ThermConstants[i][coefH] / T;
|
|||
|
JT = ThermConstants[i][coefJ] / T;
|
|||
|
|
|||
|
cothDT = coth(DT);
|
|||
|
tanhFT = tanh(FT);
|
|||
|
cothHT = coth(HT);
|
|||
|
tanhJT = tanh(JT);
|
|||
|
|
|||
|
sinhDT = sinh(DT);
|
|||
|
coshFT = cosh(FT);
|
|||
|
sinhHT = sinh(HT);
|
|||
|
coshJT = cosh(JT);
|
|||
|
|
|||
|
Sx += ThermConstants[i][coefK];
|
|||
|
Sx += ThermConstants[i][coefB] * log(T);
|
|||
|
Sx += ThermConstants[i][coefC] * (DT * cothDT - log(sinhDT));
|
|||
|
Sx -= ThermConstants[i][coefE] * (FT * tanhFT - log(coshFT));
|
|||
|
Sx += ThermConstants[i][coefG] * (HT * cothHT - log(sinhHT));
|
|||
|
Sx -= ThermConstants[i][coefI] * (JT * tanhJT - log(coshJT));
|
|||
|
|
|||
|
// ʹ<>õ<EFBFBD>ǰĦ<C7B0><C4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
|
|||
|
Sx *= ptAGA10->adMixture[i];
|
|||
|
|
|||
|
// <20><><EFBFBD>˹<EFBFBD><CBB9>ӵ<D7BC><D3B5>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
S += Sx;
|
|||
|
}
|
|||
|
|
|||
|
// <20><>cal(th)/mol-Kת<4B><D7AA>ΪkJ/kg mol-K
|
|||
|
S *= CalTH;
|
|||
|
|
|||
|
// <20><>kJ/kg mol-Kת<4B><D7AA>ΪkJ/kg-K
|
|||
|
S /= ptAGA10->dMrx;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>J/kg-K
|
|||
|
return S * 1.e3;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CprCvrHS
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10, Detail *ptD
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>Ч<EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Cp, Cv, H<EFBFBD><EFBFBD>S
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
void CprCvrHS(AGA10STRUCT *ptAGA10, Detail *ptD)
|
|||
|
{
|
|||
|
double Cvinc, Cvr, Cpr;
|
|||
|
double Hinc;
|
|||
|
double Sinc;
|
|||
|
double Smixing;
|
|||
|
double Cp, Si;
|
|||
|
double a, b, x;
|
|||
|
int i;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
|||
|
Cvinc = 0.0;
|
|||
|
Hinc = 0.0;
|
|||
|
Sinc = 0.0;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Smixing = 0.0;
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Cp
|
|||
|
Cp = CpiMolar(ptAGA10);
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dHo = Ho(ptAGA10);
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Si = So(ptAGA10);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶨ѹ<E5B6A8><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kgK)
|
|||
|
ptAGA10->dCpi = (Cp * 1000.0) / ptAGA10->dMrx;
|
|||
|
|
|||
|
// <20><>D=0<><30>D=D<><44><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Gauss-Kronrod<6F><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < GK_points; i++)
|
|||
|
{
|
|||
|
// <20><>+<2B><><EFBFBD><EFBFBD><EFBFBD>괦<EFBFBD><EAB4A6><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
x = ptAGA10->dDf * (1.0 + GK_root[i]) / 2.0;
|
|||
|
|
|||
|
// <20><>D<EFBFBD><44><EFBFBD><EFBFBD>ȡZ
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
// <20><>+<2B><><EFBFBD><EFBFBD><EFBFBD>괦<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD>ף<EFBFBD>Ӧ<EFBFBD><D3A6>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
|||
|
Cvinc += GK_weight[i] * (2.0 * ptD->ddZdT + ptAGA10->dTf * ptD->dd2ZdT2) / x;
|
|||
|
Sinc += GK_weight[i] * (ptD->dZ + ptAGA10->dTf * ptD->ddZdT - 1.0) / x;
|
|||
|
|
|||
|
// <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD>괦<EFBFBD><EAB4A6><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
x = ptAGA10->dDf * (1.0 - GK_root[i]) / 2.0;
|
|||
|
|
|||
|
// <20><>D<EFBFBD><44><EFBFBD><EFBFBD>ȡZ
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
// <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A>T<EFBFBD><54>һ<EFBFBD>Ͷ<D7BA><CDB6><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
// <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD>괦<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD>ף<EFBFBD>Ӧ<EFBFBD><D3A6>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
|||
|
Cvinc += GK_weight[i] * (2.0 * ptD->ddZdT + ptAGA10->dTf * ptD->dd2ZdT2) / x;
|
|||
|
Sinc += GK_weight[i] * (ptD->dZ + ptAGA10->dTf * ptD->ddZdT - 1.0) / x;
|
|||
|
}
|
|||
|
|
|||
|
// <20><>Z<EFBFBD><5A>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ȫĦ<C8AB><C4A6><EFBFBD>ܶ<EFBFBD>
|
|||
|
Detail_zdetail(ptD, ptAGA10->dDf);
|
|||
|
Detail_dZdT(ptD, ptAGA10->dDf);
|
|||
|
Detail_d2ZdT2(ptD, ptAGA10->dDf);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>CvĦ<76><C4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Cvr = Cp - RGAS * (1.0 + ptAGA10->dTf * Cvinc * 0.5 * ptAGA10->dDf);
|
|||
|
|
|||
|
// Cp<43><70><EFBFBD>м<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
a = (ptAGA10->dZf + ptAGA10->dTf * ptD->ddZdT);
|
|||
|
b = (ptAGA10->dZf + ptAGA10->dDf * ptD->ddZdD);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Ħ<EFBFBD><C4A6>Cp<43><70><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7>̣<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Cpr = Cvr + RGAS * ((a * a)/b);
|
|||
|
|
|||
|
// <20><>Ħ<EFBFBD><C4A6><EFBFBD><EFBFBD>ת<D7BC><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Cpr /= ptAGA10->dMrx;
|
|||
|
Cvr /= ptAGA10->dMrx;
|
|||
|
|
|||
|
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|||
|
ptAGA10->dCv = Cvr * 1000.0; // <20><>joules/kgKת<4B><D7AA>Ϊkilojoules/kgK
|
|||
|
ptAGA10->dCp = Cpr * 1000.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dH = ptAGA10->dHo + 1000.0 * RGAS * ptAGA10->dTf *
|
|||
|
(ptAGA10->dZf - 1.0 - ptAGA10->dTf * Hinc * 0.5 * ptAGA10->dDf) / ptAGA10->dMrx;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
|||
|
{
|
|||
|
if (ptAGA10->adMixture[i] > 0.0) // <20><><EFBFBD><EFBFBD>log(0)
|
|||
|
Smixing += ptAGA10->adMixture[i] * log(ptAGA10->adMixture[i]);
|
|||
|
}
|
|||
|
Smixing *= RGAS;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dS = Si - Smixing - 1000.0 * RGAS *
|
|||
|
(log(ptAGA10->dPf/101325.0) - log(ptAGA10->dZf) + Sinc * 0.5 * ptAGA10->dDf) / ptAGA10->dMrx;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: HS_Mode
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10, Detail *ptD, double H_target, double S_target, bool bGuess
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: void
|
|||
|
* Ŀ<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><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
* <EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>C*ʱ<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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>֪<EFBFBD><EFBFBD>P<EFBFBD><EFBFBD>T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bGuess<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfalse<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в²<EFBFBD>P<EFBFBD><EFBFBD>T<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>)<EFBFBD><EFBFBD>
|
|||
|
* ͨ<EFBFBD><EFBFBD>AGA10STRUCT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD><EFBFBD>T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bGuess = true<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>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>졣
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
void HS_Mode(AGA10STRUCT *ptAGA10, Detail *ptD, double H_target, double S_target, bool bGuess)
|
|||
|
{
|
|||
|
double s0, s1, s2, t0, t1, t2, tmin, tmax;
|
|||
|
double h0, h1, h2, p0, p1, p2, px, pmin, pmax;
|
|||
|
double delta1, delta2;
|
|||
|
double tolerance = 0.001; // <20><><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>(<28><><EFBFBD><EFBFBD>H<EFBFBD><48>S<EFBFBD><53><EFBFBD><EFBFBD>)
|
|||
|
int i, j;
|
|||
|
|
|||
|
// s0<73><30>h0<68><30><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>
|
|||
|
s0 = S_target;
|
|||
|
h0 = H_target;
|
|||
|
|
|||
|
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ptAGA10<31>ṩ<EFBFBD><E1B9A9><EFBFBD><EFBFBD>δ֪
|
|||
|
if (bGuess)
|
|||
|
{
|
|||
|
t1 = ptAGA10->dTf;
|
|||
|
px = ptAGA10->dPf;
|
|||
|
pmax = px * 2.0;
|
|||
|
pmin = px * 0.1;
|
|||
|
tmax = t1 * 1.5;
|
|||
|
tmin = t1 * 0.67;
|
|||
|
}
|
|||
|
else // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
t1 = 273.15;
|
|||
|
px = 1013250.0; // 10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
|||
|
pmax = P_MAX;
|
|||
|
pmin = 10000.0; // 10 kPa
|
|||
|
tmax = T_MAX;
|
|||
|
tmin = T_MIN;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>¶Ȳ<C2B6>
|
|||
|
t2 = t1 + 10.0;
|
|||
|
|
|||
|
// <20><>ʼ˫<CABC><CBAB><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><54>P
|
|||
|
// <20>ó<EFBFBD>ʼ<EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
|||
|
Detail_Run(ptD, ptAGA10);
|
|||
|
|
|||
|
// h1<68>Ǹ<EFBFBD><C7B8><EFBFBD>h<EFBFBD><68>h@Tf, Pf֮<66><D6AE><EFBFBD>IJ<EFBFBD>
|
|||
|
h1 = H(ptAGA10, ptD) - h0;
|
|||
|
|
|||
|
// <20><>ѭ<EFBFBD><D1AD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㶨<EFBFBD>ʵ<EFBFBD>t2
|
|||
|
for (i = 0; i < MAX_NUM_OF_ITERATIONS; i++)
|
|||
|
{
|
|||
|
ptAGA10->dTf = t2;
|
|||
|
p1 = px; // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
p2 = px * 0.1; // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>0.1<EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dPf = p1;
|
|||
|
Detail_Run(ptD, ptAGA10);
|
|||
|
s1 = S(ptAGA10, ptD) - s0;
|
|||
|
|
|||
|
// <20><>ѭ<EFBFBD><D1AD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㶨<EFBFBD>ص<EFBFBD>p2
|
|||
|
for (j = 0; j < MAX_NUM_OF_ITERATIONS; j++)
|
|||
|
{
|
|||
|
ptAGA10->dPf = p2;
|
|||
|
Detail_Run(ptD, ptAGA10);
|
|||
|
s2 = S(ptAGA10, ptD) - s0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵı<C7B5><C4B1><EFBFBD><EFBFBD>仯
|
|||
|
delta2 = fabs(s1 - s2) / s0;
|
|||
|
|
|||
|
// <20>㹻<EFBFBD>ӽ<EFBFBD>?
|
|||
|
if (delta2 < tolerance) break;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊp2
|
|||
|
p0 = p2;
|
|||
|
p2 = (p1 * s2 - p2 * s1) / (s2 - s1);
|
|||
|
|
|||
|
// <20><><EFBFBD>鸺ѹ<E9B8BA><D1B9>ǯ<EFBFBD>Ƶ<EFBFBD>pmin<69><6E>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ȫ
|
|||
|
if (p2 <= pmin)
|
|||
|
{
|
|||
|
p2 = pmin;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B4B4BD>˲<EFBFBD><CBB2><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
if (p2 >= pmax) p2 = pmax;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ֵ
|
|||
|
p1 = p0;
|
|||
|
s1 = s2;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (j >= MAX_NUM_OF_ITERATIONS)
|
|||
|
ptAGA10->lStatus = MAX_NUM_OF_ITERATIONS_EXCEEDED;
|
|||
|
|
|||
|
// <20>ڲ²<DAB2><C2B2><EFBFBD>P<EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
h2 = H(ptAGA10, ptD) - h0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵı<C7B5><C4B1><EFBFBD><EFBFBD>仯
|
|||
|
delta1 = fabs(h1 - h2) / h0;
|
|||
|
|
|||
|
// <20>㹻<EFBFBD>ӽ<EFBFBD>?
|
|||
|
if (delta1 < tolerance && i > 0) break;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊt2
|
|||
|
t0 = t2;
|
|||
|
t2 = (t1 * h2 - t2 * h1) / (h2 - h1);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B4B4BD>˲<EFBFBD><CBB2><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5>¶<EFBFBD>
|
|||
|
if (t2 >= tmax) t2 = tmax;
|
|||
|
|
|||
|
// <20><><EFBFBD>б<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t2
|
|||
|
if (t2 <= tmin)
|
|||
|
{
|
|||
|
t2 = t0 + 10.0;
|
|||
|
ptAGA10->dTf = t2;
|
|||
|
Detail_Run(ptD, ptAGA10);
|
|||
|
h2 = H(ptAGA10, ptD) - h0;
|
|||
|
}
|
|||
|
|
|||
|
t1 = t0;
|
|||
|
h1 = h2;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (i >= MAX_NUM_OF_ITERATIONS)
|
|||
|
ptAGA10->lStatus = MAX_NUM_OF_ITERATIONS_EXCEEDED;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: H
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10, Detail *ptD
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
double H(AGA10STRUCT *ptAGA10, Detail *ptD)
|
|||
|
{
|
|||
|
double Hinc;
|
|||
|
double x;
|
|||
|
int i;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Hinc = 0.0;
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dHo = Ho(ptAGA10);
|
|||
|
|
|||
|
// <20><>D=0<><30>D=D<><44><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Gauss-Kronrod<6F><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < GK_points; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A>T<EFBFBD><54>һ<EFBFBD>Ͷ<D7BA><CDB6><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
x = ptAGA10->dDf * (1.0 + GK_root[i]) / 2.0;
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
|||
|
if (i == 10) break;
|
|||
|
|
|||
|
x = ptAGA10->dDf * (1.0 - GK_root[i]) / 2.0;
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
|||
|
}
|
|||
|
|
|||
|
Detail_zdetail(ptD, ptAGA10->dDf);
|
|||
|
Detail_dZdT(ptD, ptAGA10->dDf);
|
|||
|
Detail_d2ZdT2(ptD, ptAGA10->dDf);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dH = ptAGA10->dHo + 1000.0 * RGAS * ptAGA10->dTf *
|
|||
|
(ptAGA10->dZf - 1.0 - ptAGA10->dTf * Hinc * 0.5 * ptAGA10->dDf) / ptAGA10->dMrx;
|
|||
|
|
|||
|
return ptAGA10->dH;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: S
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AGA10STRUCT *ptAGA10, Detail *ptD
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: double
|
|||
|
* Ŀ<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>:
|
|||
|
**************************************************************************/
|
|||
|
double S(AGA10STRUCT *ptAGA10, Detail *ptD)
|
|||
|
{
|
|||
|
double Sinc;
|
|||
|
double Smixing;
|
|||
|
double x;
|
|||
|
int i;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Sinc = 0.0;
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Smixing = 0.0;
|
|||
|
|
|||
|
// <20><>D=0<><30>D=D<><44><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Gauss-Kronrod<6F><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < GK_points; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A>T<EFBFBD><54>һ<EFBFBD>Ͷ<D7BA><CDB6><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
x = ptAGA10->dDf * (1.0 + GK_root[i]) / 2.0;
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
Sinc += GK_weight[i] * (ptD->dZ + ptAGA10->dTf * ptD->ddZdT - 1.0) / x;
|
|||
|
if (i == 10) break;
|
|||
|
|
|||
|
x = ptAGA10->dDf * (1.0 - GK_root[i]) / 2.0;
|
|||
|
Detail_zdetail(ptD, x);
|
|||
|
Detail_dZdT(ptD, x);
|
|||
|
Detail_d2ZdT2(ptD, x);
|
|||
|
|
|||
|
Sinc += GK_weight[i] * (ptD->dZ + ptAGA10->dTf * ptD->ddZdT - 1.0) / x;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>dZdT<64><54>d2ZdT2
|
|||
|
Detail_zdetail(ptD, ptAGA10->dDf);
|
|||
|
Detail_dZdT(ptD, ptAGA10->dDf);
|
|||
|
Detail_d2ZdT2(ptD, ptAGA10->dDf);
|
|||
|
|
|||
|
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶Ȼ<C2B6><C8BB><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD>仯ʱ
|
|||
|
if (ptAGA10->dTf != dTold || ptAGA10->dMrx != dMrxold)
|
|||
|
{
|
|||
|
dSi = So(ptAGA10);
|
|||
|
dTold = ptAGA10->dTf;
|
|||
|
dMrxold = ptAGA10->dMrx;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
|||
|
{
|
|||
|
if (ptAGA10->adMixture[i] > 0.0) // <20><><EFBFBD><EFBFBD>log(0)
|
|||
|
Smixing += ptAGA10->adMixture[i] * log(ptAGA10->adMixture[i]);
|
|||
|
}
|
|||
|
Smixing *= RGAS;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dS = dSi - Smixing - 1000.0 * RGAS *
|
|||
|
(log(ptAGA10->dPf/101325.0) - log(ptAGA10->dZf) + Sinc * 0.5 * ptAGA10->dDf) / ptAGA10->dMrx;
|
|||
|
|
|||
|
return ptAGA10->dS;
|
|||
|
}
|