17#define TEMPERATURE_K_ env_data[0] 
   18#define PRESSURE_PA_ env_data[1] 
   20#define NUM_REACT_ int_data[0] 
   21#define NUM_PROD_ int_data[1] 
   22#define A_ float_data[0] 
   23#define B_ float_data[1] 
   24#define C_ float_data[2] 
   25#define D_ float_data[3] 
   26#define E_ float_data[4] 
   27#define CONV_ float_data[5] 
   28#define RATE_CONSTANT_ rxn_env_data[0] 
   29#define NUM_INT_PROP_ 2 
   30#define NUM_FLOAT_PROP_ 6 
   31#define NUM_ENV_PARAM_ 1 
   32#define REACT_(x) (int_data[NUM_INT_PROP_ + x] - 1) 
   33#define PROD_(x) (int_data[NUM_INT_PROP_ + NUM_REACT_ + x] - 1) 
   34#define DERIV_ID_(x) int_data[NUM_INT_PROP_ + NUM_REACT_ + NUM_PROD_ + x] 
   35#define JAC_ID_(x) int_data[NUM_INT_PROP_ + 2 * (NUM_REACT_ + NUM_PROD_) + x] 
   36#define YIELD_(x) float_data[NUM_FLOAT_PROP_ + x] 
   46  int *int_data = rxn_int_data;
 
   47  double *float_data = rxn_float_data;
 
   49  for (
int i_ind = 0; i_ind < 
NUM_REACT_; i_ind++) {
 
   50    for (
int i_dep = 0; i_dep < 
NUM_REACT_; i_dep++) {
 
   53    for (
int i_dep = 0; i_dep < 
NUM_PROD_; i_dep++) {
 
 
   70                              Jacobian jac, 
int *rxn_int_data,
 
   71                              double *rxn_float_data) {
 
   72  int *int_data = rxn_int_data;
 
   73  double *float_data = rxn_float_data;
 
   82  for (
int i_ind = 0; i_ind < 
NUM_REACT_; i_ind++) {
 
   83    for (
int i_dep = 0; i_dep < 
NUM_REACT_; i_dep++)
 
   86    for (
int i_dep = 0; i_dep < 
NUM_PROD_; i_dep++)
 
 
  104                                    double *rxn_float_data,
 
  105                                    double *rxn_env_data) {
 
  106  int *int_data = rxn_int_data;
 
  107  double *float_data = rxn_float_data;
 
  108  double *env_data = model_data->grid_cell_env;
 
 
  130#ifdef CAMP_USE_SUNDIALS 
  132                                      TimeDerivative time_deriv,
 
  133                                      int *rxn_int_data, 
double *rxn_float_data,
 
  134                                      double *rxn_env_data, 
double time_step) {
 
  135  int *int_data = rxn_int_data;
 
  136  double *float_data = rxn_float_data;
 
  137  double *state = model_data->grid_cell_state;
 
  138  double *env_data = model_data->grid_cell_env;
 
  142  for (
int i_spec = 0; i_spec < 
NUM_REACT_; i_spec++)
 
  143    rate *= state[
REACT_(i_spec)];
 
  148    for (
int i_spec = 0; i_spec < 
NUM_REACT_; i_spec++, i_dep_var++) {
 
  152    for (
int i_spec = 0; i_spec < 
NUM_PROD_; i_spec++, i_dep_var++) {
 
  157      if (-rate * 
YIELD_(i_spec) * time_step <= state[
PROD_(i_spec)]) {
 
 
  177#ifdef CAMP_USE_SUNDIALS 
  179                                    int *rxn_int_data, 
double *rxn_float_data,
 
  180                                    double *rxn_env_data, 
double time_step) {
 
  181  int *int_data = rxn_int_data;
 
  182  double *float_data = rxn_float_data;
 
  183  double *state = model_data->grid_cell_state;
 
  184  double *env_data = model_data->grid_cell_env;
 
  188  for (
int i_ind = 0; i_ind < 
NUM_REACT_; i_ind++) {
 
  191    for (
int i_spec = 0; i_spec < 
NUM_REACT_; i_spec++)
 
  192      if (i_spec != i_ind) rate *= state[
REACT_(i_spec)];
 
  194    for (
int i_dep = 0; i_dep < 
NUM_REACT_; i_dep++, i_elem++) {
 
  195      if (
JAC_ID_(i_elem) < 0) 
continue;
 
  199    for (
int i_dep = 0; i_dep < 
NUM_PROD_; i_dep++, i_elem++) {
 
  200      if (
JAC_ID_(i_elem) < 0) 
continue;
 
  203      if (-rate * state[
REACT_(i_ind)] * 
YIELD_(i_dep) * time_step <=
 
  204          state[
PROD_(i_dep)]) {
 
  206                           JACOBIAN_PRODUCTION, 
YIELD_(i_dep) * rate);
 
 
  221  int *int_data = rxn_int_data;
 
  222  double *float_data = rxn_float_data;
 
  224  printf(
"\n\nArrhenius reaction\n");
 
 
unsigned int jacobian_get_element_id(Jacobian jac, unsigned int dep_id, unsigned int ind_id)
void jacobian_add_value(Jacobian jac, unsigned int elem_id, unsigned int prod_or_loss, long double jac_contribution)
void jacobian_register_element(Jacobian *jac, unsigned int dep_id, unsigned int ind_id)
void rxn_arrhenius_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_arrhenius_update_ids(ModelData *model_data, int *deriv_ids, Jacobian jac, int *rxn_int_data, double *rxn_float_data)
Update the time derivative and Jacbobian array indices.
void rxn_arrhenius_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, double time_step)
Calculate contributions to the time derivative  from this reaction.
void rxn_arrhenius_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, double time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_arrhenius_update_env_state(ModelData *model_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data for new environmental conditions.
void rxn_arrhenius_print(int *rxn_int_data, double *rxn_float_data)
Print the Arrhenius reaction parameters.
void time_derivative_add_value(TimeDerivative time_deriv, unsigned int spec_id, long double rate_contribution)