/*
 * The permission is granted to use the software as is and redistribute it in
 * its original and complete form. If you find this program useful and
 * publish results obtained by it, please cite the program as: Michael
 * Whitbeck, Desert Research Institute, 1991, "REACT - Program to solve
 * kinetic equations for chemical systems". Version 1.00, this code is
 * available from the authors or from Dr. Whitbeck.
 */

/*
 * print header information: options, parameters, species, rate constants and
 * reactions
 */

#include "rxn.h"

extern char    *species_word();

void
wr_header(reaction, y, num_species, num_reactions,
	  t, tout, stop, step, atol, rtol,
	  interval_factor_flag,
	  iopt, itol, istate, jt, itask,
	  iwork1, iwork2, iwork5, iwork6,
	  iwork7, iwork8, iwork9,
	  rwork1, rwork5, rwork6, rwork7
)
	RXN            *reaction;
	double         *y;
	int             num_species, num_reactions;
	double          t, tout, stop, step, atol[], rtol[];
	int             interval_factor_flag;
	int             iopt, itol, istate, jt, itask;
	int             iwork1, iwork2, iwork5, iwork6;
	int             iwork7, iwork8, iwork9;
	double          rwork1, rwork5, rwork6, rwork7;
{
	int             i, j;
	RXN            *pr;
	SPECIES        *ps;

	fprintf(stdout,
		"%15s%15s%15s%15s%15s\n",
		"t", "tout", "stop", "step", "int_fac_flag");
	fprintf(stdout,
		"%15.8e%15.8e%15.8e%15.8e%15d\n",
		t, tout, stop, step, interval_factor_flag);
	fprintf(stdout, "\n");
	fprintf(stdout,
		"%15s%15s%15s%15s\n",
		"tcrit", "h0", "hmax", "hmin");
	fprintf(stdout,
		"%15s%15s%15s%15s\n",
		"rwork1", "rwork5", "rwork6", "rwork7");
	fprintf(stdout,
		"%15.8e%15.8e%15.8e%15.8e\n",
		rwork1, rwork5, rwork6, rwork7);
	fprintf(stdout, "\n");
	fprintf(stdout,
		"%10s%10s%10s%10s%10s\n",
		"iopt", "itol", "istate", "jt", "itask");
	fprintf(stdout,
		"%10d%10d%10d%10d%10d\n",
		iopt, itol, istate, jt, itask);
	fprintf(stdout, "\n");
	fprintf(stdout,
		"%10s%10s%10s%10s%10s%10s%10s\n",
		"ml", "mu", "ixpr", "mxstep", "mxhnil", "mxordn", "mxords");
	fprintf(stdout,
		"%10s%10s%10s%10s%10s%10s%10s\n",
		"iwork1", "iwork2", "iwork5", "iwork6", "iwork7",
		"iwork8", "iwork9");
	fprintf(stdout,
		"%10d%10d%10d%10d%10d%10d%10d\n",
		iwork1, iwork2, iwork5, iwork6, iwork7, iwork8, iwork9);
	fprintf(stdout, "\n");
	fprintf(stdout, "%d reactions involving %d species\n",
		num_reactions, num_species);
	fprintf(stdout, "\n");
	fprintf(stdout,
		"\t rate constant\treaction\n");
	for (pr = reaction; pr != NULL; pr = pr->next) {
		fprintf(stdout, "%5d\t%14.6e\t", pr->id, pr->k);
		for (j = 0, ps = pr->reactant; ps != NULL; j++, ps = ps->next)
			fprintf(stdout, "%s%s ", j ? " + " : "", ps->name);
		fprintf(stdout, " -> ");
		for (j = 0, ps = pr->product; ps != NULL; j++, ps = ps->next)
			fprintf(stdout, "%s%s ", j ? " + " : "", ps->name);
		fprintf(stdout, "\n");
	}
	fprintf(stdout, "\n");
	fprintf(stdout,
		"%5s%15s%15s%15s%15s\n",
		"", "species", "y(t=0)", "atol", "rtol");
	for (i = 1; i <= num_species; i++)
		fprintf(stdout,
			"%5d%15s%15.4e%15.4e%15.4e\n",
			i, species_word(i), y[i], atol[i], rtol[i]);
	fprintf(stdout, "\n");
	fprintf(stdout, "%22s", "time");
	for (i = 1; i <= num_species; i++)
		fprintf(stdout, " %22s", species_word(i));
	fprintf(stdout, "\n");
	fflush(stdout);
}
