203 lines
5.2 KiB
C
203 lines
5.2 KiB
C
|
/*************************************************************************
|
|||
|
* <EFBFBD>ļ<EFBFBD>: aga10.c
|
|||
|
* <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>Detail<EFBFBD><EFBFBD>Therm<EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
* AGA10_Init(), AGA10_UnInit(), SOS(), Crit(), Cperf(), CRi()
|
|||
|
* <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 "Therm.h"
|
|||
|
#include "Detail.h"
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ָ<EFBFBD>룺һ<EBA3BA><D2BB>Therm<72><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Detail<69><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static Therm *ptTherm;
|
|||
|
static Detail *ptDetail;
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : AGA10_Init()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : int
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>⣻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
int NGCal_Init(void)
|
|||
|
{
|
|||
|
ptDetail = (Detail *)malloc(sizeof(Detail));
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>ܶȵĶ<C8B5><C4B6><EFBFBD>
|
|||
|
if (NULL == ptDetail )
|
|||
|
{
|
|||
|
return MEMORY_ALLOCATION_ERROR;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD>ʵĶ<CAB5><C4B6><EFBFBD>
|
|||
|
ptTherm = (Therm *)malloc(sizeof(Therm));
|
|||
|
if (NULL == ptTherm )
|
|||
|
{
|
|||
|
return MEMORY_ALLOCATION_ERROR;
|
|||
|
}
|
|||
|
|
|||
|
return AGA10_INITIALIZED;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : AGA10_UnInit()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : int
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>⣻ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
int NGCal_UnInit(void)
|
|||
|
{
|
|||
|
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
|
|||
|
if (ptDetail) free( ptDetail);
|
|||
|
if (ptTherm) free (ptTherm);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : SOS()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ָ<EFBFBD><EFBFBD><EFBFBD>ⲿAGA10<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : double
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
double SOS(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1>ʼ<EFBFBD><CABC>
|
|||
|
if (NULL == ptDetail || NULL == ptTherm)
|
|||
|
{
|
|||
|
NGCal_UnInit();
|
|||
|
NGCal_Init();
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶȺ<DCB6><C8BA><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>
|
|||
|
ptTherm->Run(ptTherm,ptAGA10, ptDetail);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC>㲻<EFBFBD><E3B2BB><EFBFBD><EFBFBD>C*<2A><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA>
|
|||
|
ptAGA10->dCstar = 0.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return ptAGA10->dSOS;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : Crit()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ָ<EFBFBD><EFBFBD><EFBFBD>ⲿAGA10<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>ָ<EFBFBD>롢Detail<EFBFBD><EFBFBD>Therm<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>ֵ : double
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>C*
|
|||
|
* <EFBFBD><EFBFBD> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
double Crit(AGA10STRUCT *ptAGA10, double dPlenumVelocity)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
double DH, DDH, S, H;
|
|||
|
double tolerance = 1.0;
|
|||
|
double R, P, T, Z;
|
|||
|
int i;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
if (NULL == ptDetail || NULL == ptTherm)
|
|||
|
{
|
|||
|
NGCal_UnInit();
|
|||
|
if (AGA10_INITIALIZED != NGCal_Init())
|
|||
|
{
|
|||
|
ptAGA10->lStatus = MEMORY_ALLOCATION_ERROR;
|
|||
|
return 0.0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ܶȺ<DCB6><C8BA><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>
|
|||
|
ptTherm->Run(ptTherm,ptAGA10, ptDetail);
|
|||
|
|
|||
|
// DH<44>Ǵӹܵ<D3B9><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ䣻<CAB1><E4A3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵij<C7B5>ʼ<EFBFBD>²<EFBFBD>ֵ
|
|||
|
DH = (ptAGA10->dSOS * ptAGA10->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǹı<C7B8><C4B1><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
S = ptAGA10->dS;
|
|||
|
H = ptAGA10->dH;
|
|||
|
R = ptAGA10->dRhof;
|
|||
|
P = ptAGA10->dPf;
|
|||
|
Z = ptAGA10->dZf;
|
|||
|
T = ptAGA10->dTf;
|
|||
|
|
|||
|
// <20><>DH<44><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
DDH = 10.0;
|
|||
|
|
|||
|
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>¶Ⱥ<C2B6><C8BA><EFBFBD><EFBFBD>٣<EFBFBD>
|
|||
|
// <20>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>㶨<EFBFBD>ʡ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>100<30><30><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>
|
|||
|
for (i = 1; i < MAX_NUM_OF_ITERATIONS; i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>S<EFBFBD><53>P<EFBFBD><50>T
|
|||
|
ptTherm->HS_Mode(ptTherm,ptAGA10, ptDetail, H - DH, S, true);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>SOS
|
|||
|
ptTherm->Run(ptTherm,ptAGA10, ptDetail);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>DH<44><48><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
DDH = DH;
|
|||
|
|
|||
|
// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>DH
|
|||
|
DH = (ptAGA10->dSOS * ptAGA10->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ﵽ<EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
|||
|
if (fabs(DDH - DH) < tolerance) break;
|
|||
|
}
|
|||
|
|
|||
|
// C*<2A><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Cperf<72><66>CRi<52><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptAGA10->dCstar = (ptAGA10->dRhof * ptAGA10->dSOS) / sqrt(R * P * Z);
|
|||
|
|
|||
|
// <20>ָ<EFBFBD>ԭʼ<D4AD>ܵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
|||
|
ptAGA10->dPf = P;
|
|||
|
ptAGA10->dTf = T;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Իָ<D4BB>Ϊ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ptTherm->Run(ptTherm,ptAGA10, ptDetail);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return ptAGA10->dCstar;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : Cperf()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ָ<EFBFBD><EFBFBD><EFBFBD>ⲿAGA10<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : double
|
|||
|
* <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> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
double Cperf(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
double k, root, exponent;
|
|||
|
k = ptAGA10->dKappa;
|
|||
|
root = 2.0 / (k + 1.0);
|
|||
|
exponent = (k + 1.0) / (k - 1.0);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C*i
|
|||
|
return(sqrt(k * pow(root, exponent)));
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : CRi()
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ָ<EFBFBD><EFBFBD><EFBFBD>ⲿAGA10<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : double
|
|||
|
* <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>CRi
|
|||
|
* <EFBFBD><EFBFBD> :
|
|||
|
**************************************************************************/
|
|||
|
|
|||
|
double CRi(AGA10STRUCT *ptAGA10)
|
|||
|
{
|
|||
|
return (Cperf(ptAGA10) / sqrt(ptAGA10->dZf));
|
|||
|
}
|
|||
|
|