
/*************************************************************************
* File	:	detail.h	
* Description:	Header file for the 'Detail' class
*		See 'detail.cpp' for the implementation.
* Version	:	ver 1.7	2002.11.17
* Author	:	W.B. Peterson
*Revisions:
*Copyright (c) 2002  American Gas Association
**************************************************************************/

#ifndef _DETAIL_H #define _DETAIL_H

#include "aga10.h"

class Detail

{
private:

// member data

int iNCC ;	// number of components

int aiCID[21] ;	// component IDs
//five history variables are used to improve efficiency during repeated calculations double dOldMixID ; // mixture ID from previous calc

double dOldPb ; // Pb from previous calc double dOldTb ; // Tb from previous calc double dOldPf ; // Pf from previous calc double dOldTf ; // Tf from previous calc

//EOS parameters from table 4, column 1

double adAn[58] ; double adUn[58] ;

// characterization parameters from table 5

double dMri[21] ;	// molecular weight of ith component

double dEi[21] ; // characteristic energy parameter for ith component double dKi[21] ; // size parameter for ith component - m^3/kg-mol ^1/3 double dGi[21] ; // orientation parameter

double dQi[21] ; // quadrupole parameter double dFi[21] ; // high temperature parameter
double dSi[21] ;	// dipole parameter

double dWi[21] ;	// association parameter

double dEij[21][21] ; // virial coefficient energy binary interaction parm double dUij[21][21] ; // binary interaction parameter for conformal energy double dKij[21][21] ; // binary interaction parameter for size
double dGij[21][21] ;	// binary interaction parameter for orientation

double adTable6Eij[21][21] ; // Table 6 constants double adTable6Uij[21][21] ; // Table 6 constants double adTable6Kij[21][21] ; // Table 6 constants double adTable6Gij[21][21] ; // Table 6 constants

double adTable5Qi[21] ; // table 5 constants double adTable5Fi[21] ; // table 5 constants double adTable5Si[21] ; // table 5 constants double adTable5Wi[21] ; // table 5 constants

double dXi[21] ;	// mole fraction of component i

double dPCalc ;	// pressure calculated by pdetail()

double dT ;	// current temperature

double dP ;	// current pressure

double dRhoTP ;	// molar density at T & P

double dB ;	// 2nd virial coefficient, B
double adBcoef[18] ;	// 18 coefficients to calculate B
double adFn[58] ;	// function for coefficients of density

double fx[58] ;	// modified coefficients used for 3 derivs

double dU ;	// mixture energy parameter

double dKp3 ;	// mixture size parameter ^3
double dW ;	// mixture orientation parameter

double dQp2 ;	// mixture quadrupole parameter ^2

double dF ;	// high temperature parameter

double dRho ;	// molar density

double dRhoL ;	// low density used in braket function
double dRhoH ;	// high density used in braket function

double dPRhoL ; // low pressure used in braket function double dPRhoH ; // high pressure used in braket function

// private class methods

bool compositionchange(AGA10STRUCT *) ; // compares new composition to old
void table() ;	// sets up Table 4 and 6 characterization parms

void paramdl() ;	// Table 5 and binary interaction parms
void chardl(AGA10STRUCT *) ;	// calculates composition dependent quantities
void bvir() ;	// calculates the 2nd virial coefficient
void temp() ;	// calculates temperature dependent quantities

void braket(AGA10STRUCT *) ;	// brackets density solutions

void pdetail(double) ;	// calculates pressure as a function of P and T
void ddetail(AGA10STRUCT *) ;	// calculates a density, given pressure & temperature
void relativedensity(AGA10STRUCT *) ; // calculates mass density

protected:

public:

Detail(void) ; // default constructor ~Detail() ; // default destructor

//public functions to support advanced fluid property calculations double zdetail(double) ; // calculates compressibility factor
double dZdT(double) ; // calculates 1st partial derivative of Z wrt T double d2ZdT2(double) ; // calculates 2st partial derivative of Z wrt T double dZdD(double) ; // calculates 1st partial derivative of Z wrt D

//public variables also used for advanced fluid property calculations

double dZ ;	// current compressibility
double ddZdT ;	// first partial derivative of Z wrt T

double dd2ZdT2 ;	// second partial derivative of Z wrt T
double ddZdD ;	// first partial derivative of Z wrt molar density
double ddBdT ;	// first partial derivative of B wrt T
double dd2BdT2 ;	// second partial derivative of B wrt T

// the Run() command launches a full calculation sequence void Run(AGA10STRUCT *) ;

} ;

#endif
