/************************************************************************* * File: aga10.h * Description: function prototypes and defines for aga10.cpp * Version: ver 1.7 2002.11.17 * Author: W.B. Peterson *Revisions: *Copyright (c) 2002 American Gas Association **************************************************************************/ #ifndef _AGA10_H #define _AGA10_H /* Windows-specific export macro and header #include */ #if WIN32 #define DllExport __declspec (dllexport) #include #else #define DllExport #endif /* other includes */ #include #include #include #include #include /* status codes */ #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 /* number of components */ #define NUMBEROFCOMPONENTS 21 /* maximum number of tries within search routines */ #define MAX_NUM_OF_ITERATIONS 100 /* default tolerance limits */ #define P_CHG_TOL 0.001 /* 0.001 Pa */ #define T_CHG_TOL 0.001 /* 0.001 of a Kelvin */ /* maximum allowable P & T */ const double P_MAX = 1.379e8 ; // maximum pressure (Pa) ~= 20,000 psi const double P_MIN = 0.0 ; // maximum pressure = 0 const double T_MAX = 473.15 ; // maximum temperature (K) ~= 392 F const double T_MIN = 143.0 ; // maximum temperature (K) ~= -200 F /* universal gas constant, in two configurations */ #define RGASKJ 8.314510e-3 /* in kJ mol^-1 K^-1 */ #define RGAS 8.314510 /* in J mol^-1 K^-1 */ /* the main data structure used by this library */ typedef struct tagAGA10STRUCT { /* corresponds to the control group in meter classes */ long lStatus ; /* calculation status */ bool bForceUpdate; /* signal to perform full calculation */ double adMixture[NUMBEROFCOMPONENTS] ; /* Composition in mole fraction */ double dPb ; /* Contract base Pressure (Pa) */ double dTb ; /* Contract base temperature (K) */ double dPf ; /* Absolute Pressure (Pa) */ double dTf ; /* Flowing temperature (K) */ // basic output from AGA 8 Detail method double dMrx ; /* mixture molar mass */ double dZb ; /* compressibility at contract base condition */ double dZf ; /* compressibility at flowing condition */ double dFpv ; /* supercompressibility */ double dDb ; /* molar density at contract base conditions (moles/dm3) */ double dDf ; /* molar density at flowing conditions (moles/dm3) */ double dRhob ; /* mass density at contract base conditions (kg/m3) */ double dRhof ; /* mass density at flowing conditions (kg/m3) */ double dRD_Ideal ; /* ideal gas relative density */ double dRD_Real ; /* real gas relative density */ // additional output double dHo ; /* ideal gas specific enthalpy */ double dH ; /* real gas specific enthalpy (J/kg) */ double dS ; /* real gas specific entropy (J/kg-mol.K)*/ double dCpi ; /* ideal gas constant pressure heat capacity (J/kg-mol.K)*/ double dCp ; /* real gas constant pressure heat capacity (J/kg-mol.K)*/ double dCv ; /* real gas constant volume heat capacity (J/kg-mol.K)*/ double dk ; /* ratio of specific heats */ double dKappa ; /* isentropic exponent, denoted with Greek letter kappa */ double dSOS ; /* speed of sound (m/s) */ double dCstar ; /* critical flow factor C* */ } AGA10STRUCT ; /* enumerations for tracking gas components */ enum gascomp{ XiC1=0, XiN2, XiCO2, XiC2, XiC3, XiH2O, XiH2S, XiH2, XiCO, XiO2, XiIC4, XiNC4, XiIC5, XiNC5, XiNC6, XiNC7, XiNC8, XiNC9, XiNC10, XiHe, XiAr } ; /* FUNCTION PROTOTYPES */ /* prototypes for initialization */ int AGA10_Init(void) ; /* initialize library */ int AGA10_UnInit(void) ; /* un-initialize library */ /* function prototype for basic VOS calculation */ double SOS(AGA10STRUCT *) ; /* function prototype for a C* calculation */ double Crit(AGA10STRUCT *, double) ; #endif