567 lines
16 KiB
C++
567 lines
16 KiB
C++
// AirState.cpp: implementation of the CAirState class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include "resource.h"
|
||
#include "AirState.h"
|
||
#include "math.h"
|
||
#ifdef _DEBUG
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[]=__FILE__;
|
||
#define new DEBUG_NEW
|
||
#endif
|
||
|
||
//***************************************************************************************************
|
||
// 绘焓湿图
|
||
//***************************************************************************************************
|
||
// 通过温度(T)计算饱合水蒸汽分压力(PQB), 经验式
|
||
double JS_PQB_FROM_T(double ttt)
|
||
{
|
||
double nRet(0);
|
||
double tt = ttt + 273.15;
|
||
if(ttt > 0 && ttt < 100){
|
||
double n1 = -5800.2206 / tt;
|
||
double n2 = -0.048640239 * tt;
|
||
double n3 = 0.41764768 * tt * tt * pow(0.1, 4);
|
||
double n4 = -0.14452093 * pow(tt, 3) * pow(0.1, 7);
|
||
double n5 = log(tt) * 6.5459673;
|
||
n1 = n1 + 1.3914993 + n2 + n3 + n4 + n5;
|
||
nRet = pow(2.718282, n1);
|
||
}
|
||
else{
|
||
double n1 = -5674.5359 / tt;
|
||
double n2 = -0.9677843 * tt * 0.01;
|
||
double n3 = tt * tt * 0.62215701 * pow(0.1, 6);
|
||
//double n4 = pow(tt, 3) * pow(0.1, 8) * 0.20747825;
|
||
double n4 = pow(tt, 3) * pow(0.1, 18) * 0.20747825; // modify by cq 2015-09-10 公式错误
|
||
double n5 = pow(tt, 4) * pow(0.1, 12) * -0.9484024;
|
||
double n6 = log(tt) * 4.1635019;
|
||
n1 = n1 + 6.3925247 + n2 + n3 + n4 + n5 + n6;
|
||
nRet = pow(2.718282, n1);
|
||
}
|
||
return nRet;
|
||
}
|
||
|
||
// 通过饱合水蒸汽分压力(PQB),相对湿度,大气压力计算含湿量
|
||
double JS_D(double pqba, double fai, double pair)
|
||
{
|
||
double nRet(0);
|
||
double n1 = 0.622 * fai * pqba;
|
||
double n2 = pair - fai * pqba;
|
||
nRet = n1 / n2;
|
||
return nRet;
|
||
}
|
||
|
||
// 通过饱合水蒸汽分压力(PQB),含湿量,大气压力计算相对湿度
|
||
double JS_FAI(double Pqb, double d, double B)
|
||
{
|
||
if(d < 0.00001)
|
||
d = 0.00001;
|
||
double nRet(0);
|
||
d = d / 1000;
|
||
nRet = (d * B) / ((0.622 * Pqb) + (d * Pqb));
|
||
return nRet;
|
||
}
|
||
|
||
// 通过大气压力,含湿量计算水蒸气分压力
|
||
double JS_PQ(double B, double d)
|
||
{
|
||
if(d < 0.00001)
|
||
d = 0.00001;
|
||
double nRet(0);
|
||
nRet = B / (d + 622) * d;
|
||
return nRet;
|
||
}
|
||
|
||
// 通过水蒸气分压力计算露点温度
|
||
double JS_TL(double Pq)
|
||
{
|
||
double nRet(0);
|
||
double y = log(Pq);
|
||
if(Pq > 611.17){
|
||
nRet = (-35.957 - 1.8726 * y) + y*y*1.1689;
|
||
}
|
||
else{
|
||
nRet = (-60.45 + 7.0322 * y) + y*y*0.37;
|
||
}
|
||
if(Pq <= 0)
|
||
nRet = 0;
|
||
return nRet;
|
||
}
|
||
|
||
|
||
// 通过水蒸气分压力,饱和水蒸气分压力计算相对湿度
|
||
double JS_FAIA(double pq, double pqb)
|
||
{
|
||
return pq/pqb;
|
||
}
|
||
|
||
// 通过含湿量,温度计算焓值
|
||
double JS_HAN(double t, double d)
|
||
{
|
||
if(d < 0.00001)
|
||
d = 0.00001;
|
||
double nRet(0);
|
||
d = d/1000;
|
||
nRet = (1.01 * t) + (2500 + 1.84 * t)* d;
|
||
return nRet;
|
||
}
|
||
|
||
// 通过饱和水蒸气分压力,相对湿度计算水蒸气分压力
|
||
double JS_PQA(double pqb, double fai)
|
||
{
|
||
return pqb*fai;
|
||
}
|
||
|
||
//功能:计算焓值
|
||
//返回值: 焓值kJ/kg
|
||
//参数: 大气压力,干球温度,相对湿度
|
||
double JS_E(double dbB,double dbD,double dbRH)
|
||
{
|
||
double Pqb = JS_PQB_FROM_T(dbD);
|
||
double Pq = dbRH * Pqb;
|
||
double d = 0.622 * (Pq / (dbB - Pq));
|
||
d *= 1000;
|
||
double i = JS_HAN(dbD,d);
|
||
return i;
|
||
}
|
||
|
||
//功能:计算湿球温度
|
||
//返回值: 湿球温度
|
||
//参数: 大气压力,焓值
|
||
double JS_W(double dbB,double dbE)
|
||
{
|
||
double ts = -1;
|
||
double ts_High,ts_Low;
|
||
for(int k=-40; k<=70; k+=10)
|
||
{
|
||
ts_Low = (double)k;
|
||
ts_High = ts_Low + 10;
|
||
double i_Low,i_High;
|
||
|
||
i_Low = JS_E(dbB,ts_Low,1.0);
|
||
i_High = JS_E(dbB,ts_High,1.0);
|
||
|
||
if(i_Low <= dbE && i_High >= dbE)
|
||
break;
|
||
}
|
||
double dbI = 0.0;
|
||
double dbDiff = 100.0;
|
||
for(double t=ts_Low; t<=ts_High; t+=0.05)
|
||
{
|
||
dbI = JS_E(dbB,t,1.0);
|
||
if(fabs(dbI - dbE) < dbDiff)
|
||
{
|
||
|
||
dbDiff = fabs(dbI - dbE);
|
||
ts = t;
|
||
}
|
||
}
|
||
return ts;
|
||
}
|
||
// 根据焓, 相对湿度,大气压 计算干球温度
|
||
// 因为 Ts nPqb 2个参数未知, 所以采用逼近法
|
||
double JS_T_i_FAI_B(double i, double fai, double B)
|
||
{
|
||
double tg = -1;
|
||
double tg_High,tg_Low;
|
||
for(int k=-40; k<=70; k+=10)
|
||
{
|
||
tg_Low = (double)k;
|
||
tg_High = tg_Low + 10;
|
||
double i_Low,i_High;
|
||
|
||
i_Low = JS_E(B,tg_Low,fai);
|
||
i_High = JS_E(B,tg_High,fai);
|
||
|
||
if(i_Low <= i && i_High >= i)
|
||
break;
|
||
}
|
||
double dlttg = tg_High - tg_Low;
|
||
int nCount = 0;
|
||
while (fabs(dlttg) > 1e-4 && nCount < 1000)
|
||
{
|
||
nCount++;
|
||
tg = tg_High - dlttg * (JS_E(B,tg_High,fai) - i) / (JS_E(B,tg_High,fai) - JS_E(B,tg_Low,fai));
|
||
tg_Low = tg_High;
|
||
tg_High = tg;
|
||
dlttg = tg_High - tg_Low;
|
||
}
|
||
return tg;
|
||
|
||
}
|
||
|
||
// 根据饱和水蒸气分压力, 计算干球温度
|
||
// 因为 是多次方程, 所以采用逼近法
|
||
double JS_T(double nPqb)
|
||
{
|
||
double t = -1.0;
|
||
double t_High,t_Low;
|
||
for(int k=-40; k<=70; k+=10)
|
||
{
|
||
t_Low = (double)k;
|
||
t_High = t_Low + 10;
|
||
double Pqb_Low,Pqb_High;
|
||
|
||
Pqb_Low = JS_PQB_FROM_T(t_Low);
|
||
Pqb_High = JS_PQB_FROM_T(t_High);
|
||
|
||
if(Pqb_Low <= nPqb && Pqb_High >= nPqb)
|
||
break;
|
||
}
|
||
double dltt = t_High - t_Low;
|
||
int nCount = 0;
|
||
while (fabs(dltt) > 1e-4)
|
||
{
|
||
t = t_High - dltt * ((JS_PQB_FROM_T(t_High) - nPqb) / (JS_PQB_FROM_T(t_High) - JS_PQB_FROM_T(t_Low)));
|
||
t_Low = t_High;
|
||
t_High = t;
|
||
dltt = t_High - t_Low;
|
||
nCount++;
|
||
if(nCount >= 1000)
|
||
{
|
||
if(fabs(JS_PQB_FROM_T(t_High) - nPqb) > fabs(JS_PQB_FROM_T(t_Low) - nPqb))
|
||
return t_Low;
|
||
else
|
||
return t_High;
|
||
}
|
||
}
|
||
return t;
|
||
}
|
||
|
||
// 根据大气压力, 干球温度,含湿量 , 计算密度
|
||
double JS_DENSITY(double B,double t,double d)
|
||
{
|
||
if(d < 0.00001)
|
||
d = 0.00001;
|
||
double density = 0.0;
|
||
|
||
double Pq = 0.0;
|
||
Pq = JS_PQ(B,d);
|
||
double T = t + 273.13;
|
||
density = (0.00348 * B - 0.00132 * Pq) / T;
|
||
return density;
|
||
}
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
CAirState::CAirState(double dbB)
|
||
{
|
||
m_dbB = 0.0;//大气压力
|
||
m_dbD = 0.0;//干球温度
|
||
m_dbDew = 0.0;//露点温度
|
||
m_dbW = 0.0;//湿球温度
|
||
m_dbRH = 0.0; //相对湿度(%): 0-1的一个小数
|
||
m_dbHR = 0.0;//含湿量 kg/kg
|
||
m_dbE = 0.0; //焓
|
||
m_dbWP = 0.0;//水蒸气分压力
|
||
m_dbSHR = 0.0;//饱和含湿量
|
||
m_dbSWP = 0.0;//饱和水蒸气分压力
|
||
m_dbDensity = 0.0;//密度
|
||
|
||
|
||
m_dbB = dbB;
|
||
SetD_RH(20,0.5);
|
||
}
|
||
|
||
CAirState::~CAirState()
|
||
{
|
||
|
||
}
|
||
|
||
void CAirState::SetD_W(double dbD,double dbW)
|
||
{
|
||
m_dbD = dbD; // 干球
|
||
m_dbW = dbW; // 湿球
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD); //计算 饱和水蒸气分压力(Pa)Pqb
|
||
double nPqbWet = JS_PQB_FROM_T(m_dbW);
|
||
double nDts = (621.98 * nPqbWet) / (m_dbB - nPqbWet);
|
||
m_dbHR = (2501 - 2.381 * m_dbW) * 0.001 * nDts - (m_dbD - m_dbW);
|
||
m_dbHR = m_dbHR / ((1.805 * m_dbD + 2501) - 4.186 * m_dbW) * 1000; //含湿量
|
||
m_dbE = 1.01*m_dbD + (2500 + 1.84 * m_dbD) * m_dbHR / 1000; //焓
|
||
m_dbWP = JS_PQ(m_dbB, m_dbHR); //水蒸气分压力(Pa)
|
||
m_dbRH = JS_FAI(m_dbSWP,m_dbHR, m_dbB); //计算相对湿度
|
||
m_dbDew = JS_TL(m_dbWP); //露点温度
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000; //饱和含湿量
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetD_Dew(double dbD,double dbDew)
|
||
{
|
||
m_dbD = dbD;
|
||
m_dbDew = dbDew;
|
||
m_dbWP = JS_PQB_FROM_T(m_dbDew);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbRH = JS_FAIA(m_dbWP, m_dbSWP);
|
||
m_dbHR = JS_D(m_dbSWP, m_dbRH, m_dbB) * 1000;
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetD_HR(double dbD,double dbHR)
|
||
{
|
||
m_dbD = dbD;
|
||
m_dbHR = dbHR;
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbRH = JS_FAI(m_dbSWP, m_dbHR, m_dbB);
|
||
m_dbWP = JS_PQ(m_dbB, m_dbHR);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetD_RH(double dbD,double dbRH)
|
||
{
|
||
m_dbRH = dbRH;
|
||
m_dbD = dbD;
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbWP = JS_PQA(m_dbSWP, m_dbRH);
|
||
m_dbHR = JS_D(m_dbSWP, m_dbRH, m_dbB) * 1000;
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetD_E(double dbD,double dbE)
|
||
{
|
||
m_dbE = dbE;
|
||
m_dbD = dbD;
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbHR= (m_dbE - 1.01 * m_dbD) / (2500 + 1.84*m_dbD) * 1000;
|
||
m_dbRH = JS_FAI(m_dbSWP, m_dbHR, m_dbB);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbWP = JS_PQA(m_dbSWP, m_dbRH);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetD_WP(double dbD,double dbWP)
|
||
{
|
||
m_dbWP = dbWP;
|
||
m_dbD = dbD;
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbRH = JS_FAIA(m_dbWP, m_dbSWP);
|
||
m_dbHR= JS_D(m_dbSWP, m_dbRH, m_dbB) * 1000;
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetW_Dew(double dbW,double dbDew)
|
||
{
|
||
m_dbDew = dbDew;
|
||
m_dbW = dbW;
|
||
m_dbWP = JS_PQB_FROM_T(dbDew);
|
||
double nPqbWet = JS_PQB_FROM_T(dbW);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbD = m_dbW + (nPqbWet - m_dbWP)/(0.000667*m_dbB);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbRH = JS_FAIA(m_dbWP, m_dbSWP);
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetW_RH(double dbW,double dbRH)
|
||
{
|
||
m_dbW = dbW;
|
||
m_dbRH =dbRH;
|
||
double nPqbWet = JS_PQB_FROM_T(m_dbW);
|
||
m_dbSHR = (nPqbWet * 0.622) / (m_dbB - nPqbWet);
|
||
m_dbE = 1.01*m_dbW + (2500 + 1.84 * m_dbW)*m_dbSHR;
|
||
m_dbD = JS_T_i_FAI_B(m_dbE, m_dbRH, m_dbB);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbHR = JS_D(m_dbSWP, m_dbRH, m_dbB) * 1000;
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbWP = JS_PQA(m_dbSWP, m_dbRH);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
void CAirState::SetW_HR(double dbW,double dbHR)
|
||
{
|
||
m_dbW = dbW;
|
||
m_dbHR = dbHR;
|
||
double nPqbWet = JS_PQB_FROM_T(m_dbW);
|
||
m_dbSHR = (nPqbWet * 0.622) / (m_dbB - nPqbWet);
|
||
m_dbE = 1.01*m_dbW + (2500 + 1.84 * m_dbW)*m_dbSHR;
|
||
m_dbWP = (m_dbHR/1000 * m_dbB)/(0.622+m_dbHR/1000);
|
||
m_dbD = (m_dbE - 2500 * m_dbHR / 1000) / (1.01 + 1.84 * m_dbHR / 1000);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbRH = JS_FAI(m_dbSWP, m_dbHR, m_dbB);
|
||
m_dbWP = JS_PQA(m_dbSWP, m_dbRH);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetW_WP(double dbW,double dbWP)
|
||
{
|
||
m_dbW = dbW;
|
||
m_dbWP = dbWP;
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
double nPqbWet = JS_PQB_FROM_T(m_dbW);
|
||
m_dbSHR = (nPqbWet * 0.622) / (m_dbB - nPqbWet);
|
||
m_dbE = 1.01*m_dbW + (2500 + 1.84 * m_dbW)*m_dbSHR;
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbD = (m_dbE - 2500 * m_dbHR / 1000) / (1.01 + 1.84 * m_dbHR / 1000);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbRH = JS_FAI(m_dbSWP, m_dbHR, m_dbB);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetE_Dew(double dbE,double dbDew)
|
||
{
|
||
m_dbDew = dbDew;
|
||
m_dbE = dbE;
|
||
m_dbWP = JS_PQB_FROM_T(m_dbDew);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbD = (m_dbE - 2500 * m_dbHR / 1000) / (1.01 + 1.84 * m_dbHR / 1000);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbRH = JS_FAI(m_dbSWP, m_dbHR, m_dbB);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetRH_Dew(double dbRH,double dbDew)
|
||
{
|
||
m_dbDew = dbDew;
|
||
m_dbRH = dbRH;
|
||
m_dbWP = JS_PQB_FROM_T(m_dbDew);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbSWP = m_dbWP / m_dbRH;
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbD = JS_T(m_dbSWP);
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetE_HR(double dbE,double dbHR)
|
||
{
|
||
m_dbE = dbE;
|
||
m_dbHR = dbHR;
|
||
m_dbWP = (m_dbHR/1000 * m_dbB)/(0.622+m_dbHR/1000);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbD = (m_dbE - 2500 * m_dbHR / 1000) / (1.01 + 1.84 * m_dbHR / 1000);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbRH = m_dbWP / m_dbSWP;
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetE_WP(double dbE,double dbWP)
|
||
{
|
||
m_dbE = dbE;
|
||
m_dbWP = dbWP;
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbD = (m_dbE - 2500 * m_dbHR / 1000) / (1.01 + 1.84 * m_dbHR / 1000);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbRH = m_dbWP / m_dbSWP;
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetHR_RH(double dbHR,double dbRH)
|
||
{
|
||
if(dbHR < 0.00001)
|
||
dbHR = 0.00001;
|
||
|
||
if(dbRH < 0.1) // mcl add. 防止太小,算 JS_T等值时,会发生除0
|
||
dbRH = 0.1;
|
||
|
||
m_dbHR = dbHR;
|
||
m_dbRH = dbRH;
|
||
m_dbWP = (m_dbHR/1000 * m_dbB)/(0.622+m_dbHR/1000);
|
||
m_dbSWP = m_dbWP / m_dbRH;
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbD = JS_T(m_dbSWP);
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetRH_WP(double dbRH,double dbWP)
|
||
{
|
||
m_dbRH = dbRH;
|
||
m_dbWP = dbWP;
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbSWP = m_dbWP / m_dbRH;
|
||
m_dbD = JS_T(m_dbSWP);
|
||
m_dbE = JS_HAN(m_dbD, m_dbHR);
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
void CAirState::SetRH_E(double dbRH,double dbE)
|
||
{
|
||
m_dbRH = dbRH;
|
||
m_dbE = dbE;
|
||
m_dbD = JS_T_i_FAI_B(dbE, dbRH, m_dbB);
|
||
m_dbSWP = JS_PQB_FROM_T(m_dbD);
|
||
m_dbWP = JS_PQA(m_dbSWP, dbRH);
|
||
m_dbDew = JS_TL(m_dbWP);
|
||
m_dbHR = (621.98 * m_dbWP) / (m_dbB - m_dbWP);
|
||
m_dbSHR = JS_D(m_dbSWP, 1, m_dbB) * 1000;
|
||
m_dbW = JS_W(m_dbB,m_dbE);
|
||
m_dbDensity = JS_DENSITY(m_dbB,m_dbD,m_dbHR);
|
||
}
|
||
|
||
CAirState& CAirState::operator = (const CAirState& other)
|
||
{
|
||
m_dbB = other.m_dbB;//大气压力
|
||
m_dbD = other.m_dbD;//干球温度
|
||
m_dbDew = other.m_dbDew;//露点温度
|
||
m_dbW = other.m_dbW;//湿球温度
|
||
m_dbRH = other. m_dbRH;//相对湿度(%): 0-1的一个小数
|
||
m_dbHR = other.m_dbHR;//含湿量
|
||
m_dbE = other.m_dbE ;//焓
|
||
m_dbWP = other.m_dbWP;//水蒸气分压力
|
||
m_dbSHR = other.m_dbSHR;//饱和含湿量
|
||
m_dbSWP = other.m_dbSWP;//饱和水蒸气分压力
|
||
m_dbDensity = other.m_dbDensity;//密度
|
||
|
||
return *this;
|
||
}
|
||
|
||
CString CAirState::GetNoticeText()
|
||
{
|
||
CString str;
|
||
CString sz;
|
||
sz.Format( _T("大气压力:|%0.0fPa"),m_dbB);
|
||
str += sz;
|
||
sz.Format(_T("\n干球温度:|%0.1f℃"),m_dbD);
|
||
str += sz;
|
||
sz.Format(_T("\n湿球温度:|%0.1f℃"),m_dbW);
|
||
str += sz;
|
||
sz.Format(_T("\n相对湿度:|%0.1f%%"),m_dbRH * 100.0);
|
||
str += sz;
|
||
sz.Format(_T("\n含 湿 量:|%0.1fg/kg"),m_dbHR);
|
||
str += sz;
|
||
sz.Format(_T("\n 焓 :|%0.1fkJ/kg"),m_dbE);
|
||
str += sz;
|
||
sz.Format(_T("\n露点温度:|%0.1f℃"),m_dbDew);
|
||
str += sz;
|
||
sz.Format(_T("\n密 度:|%0.1fkg/m^3"),m_dbDensity);
|
||
str += sz;
|
||
return str;
|
||
}
|