R. J. Dev. Kwan eb05416991 Initial commit of "Rocket Workbench".
Taken from sources in CVS at:
    https://sourceforge.net/projects/rocketworkbench/

Sources extracted in two steps:
1. Pull entire project tree into a subdir "rwb" via "rsync":
    rsync -a a.cvs.sourceforge.net::cvsroot/rocketworkbench/ rwb/.
2. Export sources:
    export CVSROOT=$(pwd)/rwb
    SUBDIRS="analyser cpropep cpropep-web CVSROOT data libcompat libcpropep libnum libsimulation libthermo prop rocketworkbench rockflight"
    mkdir rwbx; cd rwbx
    cvs export -D now ${SUBDIRS}

After this (and some backups for safety), the directory content was
added to a Git repo:
    git init .
    git add *
2021-01-20 15:50:36 -08:00

157 lines
5.0 KiB
C

#ifndef equilibrium_h
#define equilibrium_h
/* equilibrium.h - Calculation of Complex Chemical Equilibrium */
/* $Id: equilibrium.h,v 1.1 2000/10/13 19:24:31 antoine Exp $ */
/* Copyright (C) 2000 */
/* Antoine Lefebvre <antoine.lefebvre@polymtl.ca> */
/* Mark Pinese <pinese@cyberwizards.com.au> */
/* */
/* Licensed under the GPLv2 */
#include "compat.h"
#include "type.h"
#define GRAM_TO_MOL(g, sp) g/propellant_molar_mass(sp)
#define _min(a, b, c) __min( __min(a, b), c)
#define _max(a, b, c) __max( __max(a, b), c)
extern int global_verbose;
/***************************************************************
FUNCTION PROTOTYPE SECTION
****************************************************************/
int set_verbose(equilibrium_t *e, int v);
/************************************************************
FUNCTION: This function search for all elements present in
the composition and fill the list with the
corresponding number.
PARAMETER: e is of type equilibrium_t and hold the information
about the propellant composition.
COMMENTS: It fill the member element in equilibrium_t
DATE: February 6, 2000
AUTHOR: Antoine Lefebvre
**************************************************************/
int list_element(equilibrium_t *e);
int reset_element_list(equilibrium_t *e);
int list_product(equilibrium_t *e);
/***************************************************************
FUNCTION: This function initialize the equilibrium structure.
The function allocate memory for all the structure
it need. It is important to call dealloc_equilibrium
after.
AUTHOR: Antoine Lefebvre
DATE: February 27, 2000
****************************************************************/
int initialize_equilibrium(equilibrium_t *e);
/***************************************************************
FUNCTION: Dealloc what have been allocated by
initialize_equilibrium
***************************************************************/
int dealloc_equilibrium(equilibrium_t *e);
int reset_equilibrium(equilibrium_t *e);
int copy_equilibrium(equilibrium_t *dest, equilibrium_t *src);
int compute_thermo_properties(equilibrium_t *e);
/***************************************************************
FUNCTION: Set the state at which we want to compute the
equilibrium.
PARAMETER: e is a pointer to an equilibrium_t structure
T is the temperature in deg K
P is the pressure in atm
AUTHOR: Antoine Lefebvre
****************************************************************/
int set_state(equilibrium_t *e, double T, double P);
/***************************************************************
FUNCTION: Add a new molecule in the propellant
PARAMETER: e is a pointer to the equilibrium_t structure
sp is the number of the molecule in the list
mol is the quantity in mol
AUTHOR: Antoine Lefebvre
****************************************************************/
int add_in_propellant(equilibrium_t *e, int sp, double mol);
/***************************************************************
FUNCTION: Return the stochiometric coefficient of an element
in a molecule. If the element isn't present, it return 0.
COMMENTS: There is a different function for the product and for the
propellant.
AUTHOR: Antoine Lefebvre
****************************************************************/
int product_element_coef(int element, int molecule);
//int propellant_element_coef(int element, int molecule);
/***************************************************************
FUNCTION: This function fill the matrix in function of the data
store in the structure equilibrium_t. The solution
of this matrix give corresction to initial estimate.
COMMENTS: It use the theory explain in
"Computer Program for Calculation of Complex Chemical
Equilibrium Compositions, Rocket Performance, Incident
and Reflected Shocks, and Chapman-Jouguet Detonations"
by Gordon and McBride
AUTHOR: Antoine Lefebvre
****************************************************************/
//#ifdef TRUE_ARRAY
//int fill_equilibrium_matrix(double *matrix, equilibrium_t *e, problem_t P);
int fill_matrix(double *matrix, equilibrium_t *e, problem_t P);
//#else
//int fill_equilibrium_matrix(double **matrix, equilibrium_t *e, problem_t P);
//int fill_matrix(double **matrix, equilibrium_t *e, problem_t P);
//#endif
/****************************************************************
FUNCTION: This function compute the equilibrium composition at
at specific pressure/temperature point. It use fill_matrix
to obtain correction to initial estimate. It correct the
value until equilibrium is obtain.
AUTHOR: Antoine Lefebvre
******************************************************************/
int equilibrium(equilibrium_t *equil, problem_t P);
double product_molar_mass(equilibrium_t *e);
#endif