/*************************************************************************
* 文件: therm.h
* 描述: Therm类的头文件
*       具体实现请参见therm.cpp文件
* 版本: ver 1.7 2002.11.17
* 作者: W.B. Peterson
* 修订:
* 版权: (c) 2002 美国天然气协会
**************************************************************************/

#ifndef _THERM_H 
#define _THERM_H

#include "NGCal.h" 
#include "Detail.h"

// Therm类
typedef struct Therm {
    // 成员数据
    double dT;      // 当前温度，单位开尔文(K)
    double dP;      // 当前压力，单位帕斯卡(Pa)
    double dD;      // 摩尔密度，单位mol/dm3
    double dRho;    // 质量密度，单位kg/m3
    
    double dPdD;    // P对D的偏导数
    
    double dPdT;    // P对T的偏导数
    double dSi;     // 理想气体比熵，单位kJ/kg.K
    double dTold;   // 之前使用的温度
    
    double dMrxold; // 之前使用的混合物摩尔质量
    
    // 方法指针
    double (*CpiMolar)(struct Therm*, AGA10STRUCT*);
    void (*Run)(struct Therm*, AGA10STRUCT*, Detail*);
    double (*Ho)(struct Therm*, AGA10STRUCT*);
    double (*So)(struct Therm*, AGA10STRUCT*);
    void (*CprCvrHS)(struct Therm*, AGA10STRUCT*, Detail*);
    double (*H)(struct Therm*, AGA10STRUCT*, Detail*);
    double (*S)(struct Therm*, AGA10STRUCT*, Detail*);
    void (*HS_Mode)(struct Therm*, AGA10STRUCT*, Detail*, double, double, int);
} Therm;

// Therm类的构造函数和析构函数
Therm* Therm_construct(void);
void Therm_destruct(Therm* obj);

// Therm类使用的其他数据

// 使用 extern 声明变量
extern int GK_points;
extern double GK_root[5];
extern double GK_weight[5];
extern double ThermConstants[21][11];

// 热化学卡路里到焦耳的转换常数: 1 cal(IT) = 4.1840 J
extern double CalTH ;


// 系数索引的枚举
enum CoefficientList { 
    coefA = 0, 
    coefB, 
    coefC, 
    coefD, 
    coefE, 
    coefF, 
    coefG, 
    coefH, 
    coefI, 
    coefJ, 
    coefK 
};


#endif

