#ifndef thermo_h #define thermo_h #include "equilibrium.h" #include "const.h" /* MACRO: Number of symbol in the symbol table */ #define N_SYMB 102 /*************************************************************** TYPE: Structure to hold information of species contain in the thermo data file ****************************************************************/ typedef struct _thermo { char name[19]; char comments[57]; int nint; /* number of different temperature interval */ char id[7]; /* identification code */ int elem[5]; int coef[5]; state_t state; double weight; /* molecular weight */ float heat; /* heat of formation at 298.15 K (J/mol) */ double dho; /* HO(298.15) - HO(0) */ float range[4][2]; /* temperature range */ int ncoef[4]; /* number of coefficient for Cp0/R */ int ex[4][8]; /* exponent in empirical equation */ double param[4][9]; /* for species with data at only one temperature */ /* especially condensed */ float temp; float enth; } thermo_t; /*************************************************************** TYPE: Structure to hold information of species contain in the propellant data file ****************************************************************/ typedef struct _propellant { char name[120]; /* name of the propellant */ int elem[6]; /* element in the molecule (atomic number) max 6 */ int coef[6]; /* stochiometric coefficient of this element (0 for none) */ float heat; /* heat of formation in Joule/gram */ float density; /* density in g/cubic cm */ } propellant_t; extern propellant_t *propellant_list; extern thermo_t *thermo_list; extern const float molar_mass[]; extern const char symb[][3]; extern unsigned long num_thermo; extern unsigned long num_propellant; /************************************************************* FUNCTION: Search in the field name of thermo_list and return the value of the found item. PARAMETER: A string corresponding to what we search, example: "CO2" COMMENTS: If nothing is found, it return -1 AUTHOR: Antoine Lefebvre modification bye Mark Pinese **************************************************************/ int thermo_search(char *str); int propellant_search(char *str); int atomic_number(char *symbole); int propellant_search_by_formula(char *str); /************************************************************* FUNCTION: Return the enthalpy of the molecule in thermo_list[sp] at the temperature T in K. (Ho/RT) PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: It use the parametric form explain in the documentation to compute the value from the data read in the file thermo.dat AUTHOR: Antoine Lefebvre **************************************************************/ double enthalpy_0(int sp, float T); /************************************************************* FUNCTION: Return the entropy of the molecule in thermo_list[sp] at the temperature T in K. (So/RT) PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: It use the parametric form explain in the documentation to compute the value from the data read in the file thermo.dat AUTHOR: Antoine Lefebvre **************************************************************/ double entropy_0(int sp, float T); double entropy(int sp, state_t st, double ln_nj_n, float T, float P); /************************************************************* FUNCTION: Return the specific heat (Cp) of the molecule in thermo_list[sp] at the temperature T in K. (Cp/RT) PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: It use the parametric form explain in the documentation to compute the value from the data read in the file thermo.dat AUTHOR: Antoine Lefebvre **************************************************************/ double specific_heat_0(int sp, float T); double mixture_specific_heat_0(equilibrium_t *e, double temp); /************************************************************* FUNCTION: Return true if the thermochemical data are define for this temperature. PARAMETER: The same as for entropy COMMENTS: It is useful to determine if a specie is present at a given temperature. AUTHOR: Antoine Lefebvre **************************************************************/ int temperature_check(int sp, float T); double transition_temperature(int sp, float T); /************************************************************* FUNCTION: Return the variation of enthalpy of the molecule in thermo_list[sp] between the temperature T in K and 298.15 K. PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: It call enthalpy(...) for the enthalpy at temperature T and use the field heat of thermo_t for the enthalpy at 298.15 AUTHOR: Antoine Lefebvre **************************************************************/ double delta_enthalpy(int sp, float T); double propellant_enthalpy(equilibrium_t *e); double product_enthalpy(equilibrium_t *e); double product_entropy(equilibrium_t *e); double propellant_mass(equilibrium_t *e); int compute_density(composition_t *c); /************************************************************* FUNCTION: Return the gibbs free energy of the molecule in thermo_list[sp] at temperature T. (uo/RT) PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: g = H - ST where H is the enthalpy, T the temperature and S the entropy. **************************************************************/ double gibbs_0(int sp, float T); /************************************************************* FUNCTION: Return the gibbs free energy of the molecule in thermo_list[sp] at temperature T, pressure P. (u/RT) PARAMETER: sp is the position in the array of the molecule T is the temperature in K COMMENTS: g = uo + ln(nj/n) + ln(P) for gazes g = uo for condensed AUTHOR: Antoine Lefebvre **************************************************************/ //double gibbs(int sp, state_t st, double nj, double n, float T, float P); double gibbs(int sp, state_t st, double nj_n_n, float T, float P); /*************************************************************** FUNCTION: Return the heat of formation of a propellant in kJ/mol ****************************************************************/ double heat_of_formation(int molecule); /************************************************************* FUNCTION: Return the molar mass of a propellant (g/mol) PARAMETER: molecule is the number in propellant_list **************************************************************/ double propellant_molar_mass(int molecule); double propellant_mass(equilibrium_t *e); #endif