/*************************************************************************
* 文件:	aga10.h
* 描述:	aga10.c的函数原型和定义
* 版本:	ver 1.7	2002.11.17
* 作者:	W.B. Peterson
* 修订:
* 版权 (c) 2002  美国天然气协会
**************************************************************************/

#ifndef _AGA10_H 
#define _AGA10_H

 

/* 其他包含文件 */ 
#include <stdio.h>
#include <stdlib.h>
 
#include <math.h>

/* 状态码 */        
#define NORMAL              9000
#define AGA10_INITIALIZED   9001
#define MEMORY_ALLOCATION_ERROR      9002
#define GENERAL_CALCULATION_FAILURE  9003
#define MAX_NUM_OF_ITERATIONS_EXCEEDED 9004
#define NEGATIVE_DENSITY_DERIVATIVE 9005
#define MAX_DENSITY_IN_BRAKET_EXCEEDED 9006

/* 组分数 */        
#define NUMBEROFCOMPONENTS 21    

/* 搜索例程中的最大尝试次数 */
#define MAX_NUM_OF_ITERATIONS 100

/* 默认容差限制 */                
#define P_CHG_TOL 0.001 /* 0.001 Pa */            
#define T_CHG_TOL 0.001 /* 0.001 开尔文 */        

/* 最大允许P和T */                
#define P_MAX    1.379e8  /* 最大压力(Pa) ~= 20,000 psi */
#define P_MIN    0.0      /* 最小压力 = 0 */    
#define T_MAX    473.15   /* 最高温度(K) ~= 392 F */
#define T_MIN    143.0    /* 最低温度(K) ~= -200 F */

/* 通用气体常数，两种配置 */    
#define RGASKJ  8.314510e-3 /* 单位: kJ mol^-1 K^-1 */    
#define RGAS    8.314510    /* 单位: J mol^-1 K^-1 */    

/* 本库使用的主要数据结构 */    
typedef struct tagAGA10STRUCT                    
{    
    long lStatus;           /* 计算状态 */    
    int bForceUpdate;       /* 执行完整计算的信号 */
    double adMixture[NUMBEROFCOMPONENTS]; /* 摩尔分数组成 */
	  int dCbtj;              /* 参比条件   0  101.325MPa 20℃；1:101325MPa，15℃；2:101325MPa，0℃ */   
    double dPb;             /* 合同基准压力(Pa) */
    double dTb;             /* 合同基准温度(K) */
    double dPf;             /* 绝对压力(Pa) */    
    double dTf;             /* 流动温度(K) */    
    
    /* AGA 8 Detail方法的基本输出 */        
    double dMrx;            /* 混合物摩尔质量 */    
    double dZb;             /* 合同基准条件下的压缩系数 */
    double dZf;             /* 流动条件下的压缩系数 */
    double dFpv;            /* 超压缩系数 */    
    double dDb;             /* 合同基准条件下的摩尔密度(moles/dm3) */
    double dDf;             /* 流动条件下的摩尔密度(moles/dm3) */
    double dRhob;           /* 合同基准条件下的质量密度(kg/m3) */
    double dRhof;           /* 流动条件下的质量密度(kg/m3) */
    double dRD_Ideal;       /* 理想气体相对密度 */
    double dRD_Real;        /* 真实气体相对密度 */
    
    /* 附加输出 */                    
    double dHo;             /* 理想气体比焓 */
    double dH;              /* 真实气体比焓(J/kg) */
    double dS;              /* 真实气体比熵(J/kg-mol.K) */
    double dCpi;            /* 理想气体定压热容(J/kg-mol.K) */
    double dCp;             /* 真实气体定压热容(J/kg-mol.K) */
    double dCv;             /* 真实气体定容热容(J/kg-mol.K) */
    double dk;              /* 比热比 */    
    double dKappa;          /* 等熵指数，用希腊字母kappa表示 */
    double dSOS;            /* 声速(m/s) */    
    double dCstar;          /* 临界流系数C* */    
		
		/*11062 计算高位发热量和低位发热量*/
		
		double dHhvMol;         /*高位摩尔发热量*/
		double dLhvMol;         /*低位摩尔发热量*/
		
		
} AGA10STRUCT;

/* 用于跟踪气体组分的枚举 */
enum gascomp {
    XiC1=0, XiN2, XiCO2, XiC2, XiC3,
    XiH2O, XiH2S, XiH2, XiCO, XiO2, 
    XiIC4, XiNC4, XiIC5, XiNC5, XiNC6, 
    XiNC7, XiNC8, XiNC9, XiNC10, XiHe, XiAr 
};

/* 函数原型 */

/* 初始化函数原型 */
 int AGA10_Init(void);   /* 初始化库 */
 int AGA10_UnInit(void); /* 反初始化库 */

/* 基本VOS计算的函数原型 */ 
 double SOS(AGA10STRUCT *);

/* C*计算的函数原型 */ 
 double Crit(AGA10STRUCT *, double);

#endif
