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
44 int n_rxn = model_data->n_rxn;
48 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
51 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
52 double *rxn_float_data =
53 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
56 int rxn_type = *(rxn_int_data++);
101 rxn_float_data, jac);
105 rxn_float_data, jac);
133 int n_rxn = model_data->n_rxn;
136 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
139 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
140 double *rxn_float_data =
141 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
144 int rxn_type = *(rxn_int_data++);
150 rxn_int_data, rxn_float_data);
166 rxn_int_data, rxn_float_data);
170 rxn_int_data, rxn_float_data);
178 rxn_int_data, rxn_float_data);
182 rxn_int_data, rxn_float_data);
190 rxn_int_data, rxn_float_data);
194 rxn_int_data, rxn_float_data);
198 model_data, deriv_ids, jac, rxn_int_data, rxn_float_data);
210 rxn_int_data, rxn_float_data);
226 int n_rxn = model_data->n_rxn;
229 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
232 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
233 double *rxn_float_data =
234 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
235 double *rxn_env_data =
236 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
239 int rxn_type = *(rxn_int_data++);
245 rxn_float_data, rxn_env_data);
257 rxn_float_data, rxn_env_data);
261 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
265 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
273 rxn_float_data, rxn_env_data);
277 rxn_float_data, rxn_env_data);
281 rxn_float_data, rxn_env_data);
285 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
289 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
293 model_data, rxn_int_data, rxn_float_data, rxn_env_data);
301 rxn_float_data, rxn_env_data);
305 rxn_float_data, rxn_env_data);
309 rxn_float_data, rxn_env_data);
321#ifdef CAMP_USE_SUNDIALS
323 realtype time_step) {
325 int n_rxn = model_data->n_rxn;
328 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
331 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
332 double *rxn_float_data =
333 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
334 double *rxn_env_data =
335 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
338 int rxn_type = *(rxn_int_data++);
344 rxn_int_data, rxn_float_data,
345 rxn_env_data, time_step);
349 rxn_float_data, rxn_env_data,
354 rxn_float_data, rxn_env_data,
359 rxn_int_data, rxn_float_data,
360 rxn_env_data, time_step);
364 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
369 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
374 rxn_float_data, rxn_env_data,
379 rxn_int_data, rxn_float_data,
380 rxn_env_data, time_step);
384 rxn_int_data, rxn_float_data,
385 rxn_env_data, time_step);
389 rxn_float_data, rxn_env_data,
394 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
399 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
404 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
409 rxn_float_data, rxn_env_data, time_step);
413 rxn_int_data, rxn_float_data,
414 rxn_env_data, time_step);
418 rxn_int_data, rxn_float_data,
419 rxn_env_data, time_step);
423 rxn_int_data, rxn_float_data,
424 rxn_env_data, time_step);
438#ifdef CAMP_USE_SUNDIALS
440 TimeDerivative time_deriv,
441 realtype time_step) {
443 int n_rxn = model_data->n_rxn;
446 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
449 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
450 double *rxn_float_data =
451 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
452 double *rxn_env_data =
453 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
456 int rxn_type = *(rxn_int_data++);
462 rxn_int_data, rxn_float_data,
463 rxn_env_data, time_step);
467 model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data,
481#ifdef CAMP_USE_SUNDIALS
482void rxn_calc_jac(ModelData *model_data, Jacobian jac, realtype time_step) {
484 int n_rxn = model_data->n_rxn;
487 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
490 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
491 double *rxn_float_data =
492 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
493 double *rxn_env_data =
494 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
497 int rxn_type = *(rxn_int_data++);
503 rxn_float_data, rxn_env_data,
508 rxn_float_data, rxn_env_data, time_step);
512 rxn_float_data, rxn_env_data, time_step);
516 rxn_float_data, rxn_env_data,
521 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
526 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
531 rxn_float_data, rxn_env_data, time_step);
535 rxn_float_data, rxn_env_data,
540 rxn_float_data, rxn_env_data,
545 rxn_float_data, rxn_env_data,
550 rxn_int_data, rxn_float_data,
551 rxn_env_data, time_step);
555 rxn_int_data, rxn_float_data,
556 rxn_env_data, time_step);
560 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
565 rxn_env_data, time_step);
569 rxn_float_data, rxn_env_data,
574 rxn_float_data, rxn_env_data,
579 rxn_float_data, rxn_env_data,
593#ifdef CAMP_USE_SUNDIALS
596 realtype time_step) {
598 int n_rxn = model_data->n_rxn;
601 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
604 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
605 double *rxn_float_data =
606 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
607 double *rxn_env_data =
608 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]);
611 int rxn_type = *(rxn_int_data++);
617 rxn_float_data, rxn_env_data,
622 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
627 model_data, jac, rxn_int_data, rxn_float_data, rxn_env_data,
632 rxn_float_data, rxn_env_data,
637 rxn_int_data, rxn_float_data,
638 rxn_env_data, time_step);
659 int n_env_param,
int *int_param,
660 double *float_param,
void *solver_data) {
661 ModelData *model_data =
662 (ModelData *)&(((SolverData *)solver_data)->model_data);
666 &(model_data->rxn_int_data
667 [model_data->rxn_int_indices[model_data->n_added_rxns]]);
668 double *rxn_float_data =
669 &(model_data->rxn_float_data
670 [model_data->rxn_float_indices[model_data->n_added_rxns]]);
673 model_data->rxn_int_indices[model_data->n_added_rxns + 1] =
675 model_data->rxn_int_indices[model_data->n_added_rxns];
676 model_data->rxn_float_indices[model_data->n_added_rxns + 1] =
677 n_float_param + model_data->rxn_float_indices[model_data->n_added_rxns];
678 model_data->rxn_env_idx[model_data->n_added_rxns + 1] =
679 model_data->rxn_env_idx[model_data->n_added_rxns] + n_env_param;
680 ++(model_data->n_added_rxns);
683 *(rxn_int_data++) = rxn_type;
686 for (; n_int_param > 0; --n_int_param) *(rxn_int_data++) = *(int_param++);
689 for (; n_float_param > 0; --n_float_param)
690 *(rxn_float_data++) = (double)*(float_param++);
692 model_data->n_rxn_env_data += n_env_param;
709 void *update_data,
void *solver_data) {
710 ModelData *model_data =
711 (ModelData *)&(((SolverData *)solver_data)->model_data);
714 model_data->grid_cell_rxn_env_data =
715 &(model_data->rxn_env_data[cell_id * model_data->n_rxn_env_data]);
718 int n_rxn = model_data->n_rxn;
721 for (; (*rxn_id) < n_rxn; (*rxn_id)++) {
724 &(model_data->rxn_int_data[model_data->rxn_int_indices[*rxn_id]]);
725 double *rxn_float_data =
726 &(model_data->rxn_float_data[model_data->rxn_float_indices[*rxn_id]]);
728 double *rxn_env_data =
729 &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[*rxn_id]]);
732 int rxn_type = *(rxn_int_data++);
737 if (rxn_type == update_rxn_type) {
741 rxn_float_data, rxn_env_data);
745 (
void *)update_data, rxn_int_data, rxn_float_data, rxn_env_data);
749 rxn_float_data, rxn_env_data);
753 rxn_float_data, rxn_env_data);
757 (
void *)update_data, rxn_int_data, rxn_float_data, rxn_env_data);
770 ModelData *model_data =
771 (ModelData *)&(((SolverData *)solver_data)->model_data);
774 int n_rxn = model_data->n_rxn;
776 printf(
"\n\nReaction data\n\nnumber of reactions: %d\n\n", n_rxn);
779 for (
int i_rxn = 0; i_rxn < n_rxn; i_rxn++) {
782 &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]);
783 double *rxn_float_data =
784 &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]);
787 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_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.
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.