11#define CAMP_DEBUG_SPEC_ 118
13#include <camp/rxn_solver.h>
19#define RXN_ARRHENIUS 1
21#define RXN_CMAQ_H2O2 3
22#define RXN_CMAQ_OH_HNO3 4
23#define RXN_PHOTOLYSIS 5
24#define RXN_HL_PHASE_TRANSFER 6
25#define RXN_AQUEOUS_EQUILIBRIUM 7
26#define RXN_SIMPOL_PHASE_TRANSFER 10
27#define RXN_CONDENSED_PHASE_ARRHENIUS 11
28#define RXN_FIRST_ORDER_LOSS 12
29#define RXN_EMISSION 13
30#define RXN_WET_DEPOSITION 14
31#define RXN_TERNARY_CHEMICAL_ACTIVATION 15
32#define RXN_WENNBERG_TUNNELING 16
33#define RXN_WENNBERG_NO_RO2 17
34#define RXN_CONDENSED_PHASE_PHOTOLYSIS 18
36#define RXN_CONDENSED_PHASE_DIFFUSION 20
45 int n_rxn = model_data->n_rxn;
49 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
52 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
53 double *rxn_float_data =
54 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
57 int rxn_type = *(rxn_int_data++);
102 rxn_float_data, jac);
106 rxn_float_data, jac);
110 rxn_float_data, jac);
138 int n_rxn = model_data->n_rxn;
141 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
144 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
145 double *rxn_float_data =
146 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
149 int rxn_type = *(rxn_int_data++);
155 rxn_int_data, rxn_float_data);
171 rxn_int_data, rxn_float_data);
175 rxn_int_data, rxn_float_data);
183 rxn_int_data, rxn_float_data);
187 rxn_int_data, rxn_float_data);
195 rxn_int_data, rxn_float_data);
199 rxn_int_data, rxn_float_data);
203 rxn_int_data, rxn_float_data);
207 model_data, deriv_ids, jac, rxn_int_data, rxn_float_data);
219 rxn_int_data, rxn_float_data);
235 int n_rxn = model_data->n_rxn;
238 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
241 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
242 double *rxn_float_data =
243 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
244 double *rxn_env_data =
245 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
248 int rxn_type = *(rxn_int_data++);
254 rxn_float_data, rxn_env_data);
266 rxn_float_data, rxn_env_data);
270 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
274 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
282 rxn_float_data, rxn_env_data);
286 rxn_float_data, rxn_env_data);
290 rxn_float_data, rxn_env_data);
294 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
298 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
302 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
306 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
314 rxn_float_data, rxn_env_data);
318 rxn_float_data, rxn_env_data);
322 rxn_float_data, rxn_env_data);
334#ifdef CAMP_USE_SUNDIALS
336 realtype time_step) {
338 int n_rxn = model_data->n_rxn;
341 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
344 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
345 double *rxn_float_data =
346 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
347 double *rxn_env_data =
348 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
351 int rxn_type = *(rxn_int_data++);
357 rxn_int_data, rxn_float_data,
358 rxn_env_data, time_step);
362 rxn_float_data, rxn_env_data,
367 rxn_float_data, rxn_env_data,
372 rxn_int_data, rxn_float_data,
373 rxn_env_data, time_step);
377 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
382 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
387 rxn_float_data, rxn_env_data,
392 rxn_int_data, rxn_float_data,
393 rxn_env_data, time_step);
397 rxn_int_data, rxn_float_data,
398 rxn_env_data, time_step);
402 rxn_float_data, rxn_env_data,
407 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
412 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
417 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
422 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
427 rxn_float_data, rxn_env_data, time_step);
431 rxn_int_data, rxn_float_data,
432 rxn_env_data, time_step);
436 rxn_int_data, rxn_float_data,
437 rxn_env_data, time_step);
441 rxn_int_data, rxn_float_data,
442 rxn_env_data, time_step);
456#ifdef CAMP_USE_SUNDIALS
458 TimeDerivative time_deriv,
459 realtype time_step) {
461 int n_rxn = model_data->n_rxn;
464 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
467 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
468 double *rxn_float_data =
469 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
470 double *rxn_env_data =
471 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
474 int rxn_type = *(rxn_int_data++);
480 rxn_int_data, rxn_float_data,
481 rxn_env_data, time_step);
485 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
499#ifdef CAMP_USE_SUNDIALS
500void rxn_calc_jac(ModelData *model_data, Jacobian jac, realtype time_step) {
502 int n_rxn = model_data->n_rxn;
505 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
508 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
509 double *rxn_float_data =
510 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
511 double *rxn_env_data =
512 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
515 int rxn_type = *(rxn_int_data++);
521 rxn_float_data, rxn_env_data,
526 rxn_float_data, rxn_env_data, time_step);
530 rxn_float_data, rxn_env_data, time_step);
534 rxn_float_data, rxn_env_data,
539 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
544 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
549 rxn_float_data, rxn_env_data, time_step);
553 rxn_float_data, rxn_env_data,
558 rxn_float_data, rxn_env_data,
563 rxn_float_data, rxn_env_data,
568 rxn_int_data, rxn_float_data,
569 rxn_env_data, time_step);
573 rxn_int_data, rxn_float_data,
574 rxn_env_data, time_step);
578 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
583 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
588 rxn_env_data, time_step);
592 rxn_float_data, rxn_env_data,
597 rxn_float_data, rxn_env_data,
602 rxn_float_data, rxn_env_data,
616#ifdef CAMP_USE_SUNDIALS
619 realtype time_step) {
621 int n_rxn = model_data->n_rxn;
624 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
627 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
628 double *rxn_float_data =
629 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
630 double *rxn_env_data =
631 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
634 int rxn_type = *(rxn_int_data++);
640 rxn_float_data, rxn_env_data,
645 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
650 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
655 rxn_float_data, rxn_env_data,
660 rxn_int_data, rxn_float_data,
661 rxn_env_data, time_step);
682 int n_env_param,
int *int_param,
683 double *float_param,
void *solver_data) {
684 ModelData *model_data =
685 (ModelData *)&(((SolverData *)solver_data)->model_data);
689 &(model_data->rxn_int_data
690 [model_data->rxn_int_indices[model_data->n_added_rxns]]);
691 double *rxn_float_data =
692 &(model_data->rxn_float_data
693 [model_data->rxn_float_indices[model_data->n_added_rxns]]);
696 model_data->rxn_int_indices[model_data->n_added_rxns + 1] =
698 model_data->rxn_int_indices[model_data->n_added_rxns];
699 model_data->rxn_float_indices[model_data->n_added_rxns + 1] =
700 n_float_param + model_data->rxn_float_indices[model_data->n_added_rxns];
701 model_data->rxn_env_idx[model_data->n_added_rxns + 1] =
702 model_data->rxn_env_idx[model_data->n_added_rxns] + n_env_param;
703 ++(model_data->n_added_rxns);
706 *(rxn_int_data++) = rxn_type;
709 for (; n_int_param > 0; --n_int_param) *(rxn_int_data++) = *(int_param++);
712 for (; n_float_param > 0; --n_float_param)
713 *(rxn_float_data++) = (double)*(float_param++);
715 model_data->n_rxn_env_data += n_env_param;
732 void *update_data,
void *solver_data) {
733 ModelData *model_data =
734 (ModelData *)&(((SolverData *)solver_data)->model_data);
737 model_data->grid_cell_rxn_env_data =
738 &(model_data->rxn_env_data[cell_id * model_data->n_rxn_env_data]);
741 int n_rxn = model_data->n_rxn;
744 for (; (*rxn_id) < n_rxn; (*rxn_id)++) {
747 &(model_data->rxn_int_data[model_data->rxn_int_indices[*rxn_id]]);
748 double *rxn_float_data =
749 &(model_data->rxn_float_data[model_data->rxn_float_indices[*rxn_id]]);
751 double *rxn_env_data =
752 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[*rxn_id]]);
755 int rxn_type = *(rxn_int_data++);
760 if (rxn_type == update_rxn_type) {
764 rxn_float_data, rxn_env_data);
768 (
void *)update_data, rxn_int_data, rxn_float_data, rxn_env_data);
772 rxn_float_data, rxn_env_data);
776 rxn_float_data, rxn_env_data);
780 (
void *)update_data, rxn_int_data, rxn_float_data, rxn_env_data);
793 ModelData *model_data =
794 (ModelData *)&(((SolverData *)solver_data)->model_data);
797 int n_rxn = model_data->n_rxn;
799 printf(
"\n\nReaction data\n\nnumber of reactions: %d\n\n", n_rxn);
802 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
805 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
806 double *rxn_float_data =
807 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
810 int rxn_type = *(rxn_int_data++);
void rxn_CMAQ_H2O2_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_CMAQ_H2O2_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_CMAQ_H2O2_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_CMAQ_H2O2_print(int *rxn_int_data, double *rxn_float_data)
Print the CMAQ_H2O2 reaction parameters.
void rxn_CMAQ_H2O2_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_CMAQ_H2O2_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_CMAQ_OH_HNO3_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_CMAQ_OH_HNO3_print(int *rxn_int_data, double *rxn_float_data)
Print the CMAQ_OH_HNO3 reaction parameters.
void rxn_CMAQ_OH_HNO3_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_CMAQ_OH_HNO3_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_CMAQ_OH_HNO3_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_CMAQ_OH_HNO3_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_HL_phase_transfer_print(int *rxn_int_data, double *rxn_float_data)
Print the Phase Transfer reaction parameters.
void rxn_HL_phase_transfer_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_HL_phase_transfer_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_HL_phase_transfer_get_used_jac_elem(ModelData *model_data, int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_HL_phase_transfer_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_HL_phase_transfer_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_SIMPOL_phase_transfer_get_used_jac_elem(ModelData *model_data, int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_SIMPOL_phase_transfer_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_SIMPOL_phase_transfer_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_SIMPOL_phase_transfer_print(int *rxn_int_data, double *rxn_float_data)
Print the Phase Transfer reaction parameters.
void rxn_SIMPOL_phase_transfer_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_SIMPOL_phase_transfer_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_aqueous_equilibrium_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_aqueous_equilibrium_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_aqueous_equilibrium_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_aqueous_equilibrium_print(int *rxn_int_data, double *rxn_float_data)
Print the Aqueous Equilibrium reaction parameters.
void rxn_aqueous_equilibrium_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_aqueous_equilibrium_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_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 rxn_condensed_phase_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 f(t,y) from this reaction.
void rxn_condensed_phase_arrhenius_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_condensed_phase_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_condensed_phase_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_condensed_phase_arrhenius_print(int *rxn_int_data, double *rxn_float_data)
Print the Condensed Phase Arrhenius reaction parameters.
void rxn_condensed_phase_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_condensed_phase_diffusion_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_condensed_phase_diffusion_print(int *rxn_int_data, double *rxn_float_data)
Print the Phase Transfer reaction parameters.
void rxn_condensed_phase_diffusion_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_condensed_phase_diffusion_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_condensed_phase_diffusion_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_condensed_phase_diffusion_get_used_jac_elem(ModelData *model_data, int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_condensed_phase_photolysis_print(int *rxn_int_data, double *rxn_float_data)
Print the Condensed Phase photolysis reaction parameters.
void rxn_condensed_phase_photolysis_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 f(t,y) from this reaction.
void rxn_condensed_phase_photolysis_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_condensed_phase_photolysis_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_condensed_phase_photolysis_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_condensed_phase_photolysis_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.
bool rxn_condensed_phase_photolysis_update_data(void *update_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data.
void rxn_emission_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_emission_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_emission_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_emission_print(int *rxn_int_data, double *rxn_float_data)
Print the reaction parameters.
bool rxn_emission_update_data(void *update_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data.
void rxn_emission_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_emission_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_first_order_loss_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_first_order_loss_print(int *rxn_int_data, double *rxn_float_data)
Print the reaction parameters.
void rxn_first_order_loss_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_first_order_loss_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_first_order_loss_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_first_order_loss_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.
bool rxn_first_order_loss_update_data(void *update_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data.
void rxn_photolysis_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
bool rxn_photolysis_update_data(void *update_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data.
void rxn_photolysis_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_photolysis_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_photolysis_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_photolysis_print(int *rxn_int_data, double *rxn_float_data)
Print the Photolysis reaction parameters.
void rxn_photolysis_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_update_ids(ModelData *model_data, int *deriv_ids, Jacobian jac)
Update the time derivative and Jacobian array ids.
void rxn_calc_deriv_specific_types(ModelData *model_data, TimeDerivative time_deriv, realtype time_step)
Calculate the time derivative for only some specific types.
#define RXN_CONDENSED_PHASE_PHOTOLYSIS
#define RXN_WENNBERG_TUNNELING
#define RXN_AQUEOUS_EQUILIBRIUM
void rxn_calc_jac_specific_types(ModelData *model_data, Jacobian jac, realtype time_step)
Calculate the Jacobian for only some specific types.
void rxn_add_condensed_data(int rxn_type, int n_int_param, int n_float_param, int n_env_param, int *int_param, double *float_param, void *solver_data)
Add condensed data to the condensed data block of memory.
#define RXN_CONDENSED_PHASE_DIFFUSION
void rxn_print_data(void *solver_data)
Print the reaction data.
void rxn_free_update_data(void *update_data)
Free an update data object.
void rxn_get_used_jac_elem(ModelData *model_data, Jacobian *jac)
Get the Jacobian elements used by a particular reaction.
#define RXN_FIRST_ORDER_LOSS
#define RXN_WENNBERG_NO_RO2
#define RXN_TERNARY_CHEMICAL_ACTIVATION
void rxn_update_env_state(ModelData *model_data)
Update reaction data for new environmental state.
#define RXN_CONDENSED_PHASE_ARRHENIUS
void rxn_calc_jac(ModelData *model_data, Jacobian jac, realtype time_step)
Calculate the Jacobian.
void rxn_update_data(int cell_id, int *rxn_id, int update_rxn_type, void *update_data, void *solver_data)
Update reaction data.
#define RXN_SIMPOL_PHASE_TRANSFER
#define RXN_HL_PHASE_TRANSFER
void rxn_calc_deriv(ModelData *model_data, TimeDerivative time_deriv, realtype time_step)
Calculate the time derivative .
#define RXN_WET_DEPOSITION
void rxn_surface_get_used_jac_elem(ModelData *model_data, int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_surface_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_surface_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_surface_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_surface_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_surface_print(int *rxn_int_data, double *rxn_float_data)
Print the surface reaction parameters.
void rxn_ternary_chemical_activation_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_ternary_chemical_activation_print(int *rxn_int_data, double *rxn_float_data)
Print the Ternary Chemical Activation reaction parameters.
void rxn_ternary_chemical_activation_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_ternary_chemical_activation_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_ternary_chemical_activation_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_ternary_chemical_activation_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_troe_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.
void rxn_troe_print(int *rxn_int_data, double *rxn_float_data)
Print the Troe reaction parameters.
void rxn_troe_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_troe_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_troe_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_troe_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_wennberg_no_ro2_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_wennberg_no_ro2_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_wennberg_no_ro2_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_wennberg_no_ro2_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_wennberg_no_ro2_print(int *rxn_int_data, double *rxn_float_data)
Print the Wennberg NO + RO2 reaction parameters.
void rxn_wennberg_no_ro2_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_wennberg_tunneling_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_wennberg_tunneling_print(int *rxn_int_data, double *rxn_float_data)
Print the Wennberg tunneling reaction parameters.
void rxn_wennberg_tunneling_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_wennberg_tunneling_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_wennberg_tunneling_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_wennberg_tunneling_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_wet_deposition_get_used_jac_elem(int *rxn_int_data, double *rxn_float_data, Jacobian *jac)
Flag Jacobian elements used by this reaction.
void rxn_wet_deposition_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_wet_deposition_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_wet_deposition_calc_deriv_contrib(ModelData *model_data, TimeDerivative time_deriv, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the time derivative from this reaction.
void rxn_wet_deposition_print(int *rxn_int_data, double *rxn_float_data)
Print the reaction parameters.
bool rxn_wet_deposition_update_data(void *update_data, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data)
Update reaction data.
void rxn_wet_deposition_calc_jac_contrib(ModelData *model_data, Jacobian jac, int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, realtype time_step)
Calculate contributions to the Jacobian from this reaction.