14#include <camp/aero_rep_solver.h>
15#include <camp/aero_phase_solver.h>
17#include <camp/sub_model_solver.h>
24#define NUM_ADJACENT_PAIRS_ int_data[0]
26#define NUM_INT_PROP_ 1
27#define NUM_FLOAT_PROP_ 0
28#define NUM_ENV_PARAM_ 0
30#define DIFF_COEFF_INNER_(x) (float_data[(NUM_FLOAT_PROP_) + (x)])
31#define DIFF_COEFF_OUTER_(x) (float_data[(NUM_FLOAT_PROP_) + (NUM_ADJACENT_PAIRS_) + (x)])
32#define PHASE_ID_INNER_(x) (int_data[(NUM_INT_PROP_) + (x)]-1)
33#define PHASE_ID_OUTER_(x) (int_data[(NUM_INT_PROP_) + (NUM_ADJACENT_PAIRS_) + (x)]-1)
34#define AERO_SPEC_INNER_(x) (int_data[(NUM_INT_PROP_) + (2*NUM_ADJACENT_PAIRS_) + (x)]-1)
35#define AERO_SPEC_OUTER_(x) (int_data[(NUM_INT_PROP_) + (3*NUM_ADJACENT_PAIRS_) + (x)]-1)
36#define AERO_REP_ID_(x) (int_data[(NUM_INT_PROP_) + (4*NUM_ADJACENT_PAIRS_) + (x)]-1)
38#define DERIV_ID_INNER_(x) (int_data[(NUM_INT_PROP_) + (5*NUM_ADJACENT_PAIRS_) + (x)])
39#define DERIV_ID_OUTER_(x) (int_data[(NUM_INT_PROP_) + (6*NUM_ADJACENT_PAIRS_) + (x)])
58 double *rxn_float_data,
60 int *int_data = rxn_int_data;
61 double *float_data = rxn_float_data;
64 (
bool *)malloc(
sizeof(
bool) * model_data->n_per_cell_state_var);
65 if (aero_jac_elem == NULL) {
67 "\n\nERROR allocating space for 1D Jacobian structure array for "
68 "condensed phase diffusion reaction\n\n");
95 Jacobian jac,
int *rxn_int_data,
96 double *rxn_float_data) {
97 int *int_data = rxn_int_data;
98 double *float_data = rxn_float_data;
116 double *rxn_float_data,
117 double *rxn_env_data) {
118 int *int_data = rxn_int_data;
119 double *float_data = rxn_float_data;
120 double *env_data = model_data->grid_cell_env;
135#ifdef CAMP_USE_SUNDIALS
137 ModelData *model_data, TimeDerivative time_deriv,
int *rxn_int_data,
138 double *rxn_float_data,
double *rxn_env_data, realtype time_step) {
139 int *int_data = rxn_int_data;
140 double *float_data = rxn_float_data;
141 double *state = model_data->grid_cell_state;
142 double *env_data = model_data->grid_cell_env;
148 realtype layer_thickness_inner;
153 &layer_thickness_inner,
157 realtype layer_thickness_outer;
162 &layer_thickness_outer,
176 realtype volume_phase_inner;
185 realtype volume_phase_outer;
195 double rate_inner = (double)(eff_sa / volume_phase_inner);
196 double rate_outer = (double)(eff_sa / volume_phase_outer);
220#ifdef CAMP_USE_SUNDIALS
222 Jacobian jac,
int *rxn_int_data,
223 double *rxn_float_data,
224 double *rxn_env_data,
225 realtype time_step) {
239 double *rxn_float_data) {
240 int *int_data = rxn_int_data;
241 double *float_data = rxn_float_data;
243 printf(
"\n\nCondensed Phase Diffusion reaction\n");
251 printf(
"\n Aerosol representation id: %d",
AERO_REP_ID_(i));
void jacobian_register_element(Jacobian *jac, unsigned int dep_id, unsigned int ind_id)
void aero_rep_get_interface_surface_area__m2(ModelData *model_data, int aero_rep_idx, int aero_phase_idx_first, int aero_phase_idx_second, double *surface_area, double *partial_deriv)
Get the surface area of interfacial layer between two phases (m^2)
void aero_rep_get_layer_thickness__m(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *layer_thickness, double *partial_deriv)
Get the thickness of a particle layer (m)
void aero_rep_get_phase_volume__m3_m3(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *phase_volume, double *partial_deriv)
Get the volume of a specified phase in the corresponding layer.
#define PHASE_ID_OUTER_(x)
#define PHASE_ID_INNER_(x)
#define DIFF_COEFF_INNER_(x)
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.
#define DERIV_ID_INNER_(x)
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.
#define DERIV_ID_OUTER_(x)
#define NUM_ADJACENT_PAIRS_
#define AERO_SPEC_OUTER_(x)
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.
#define DIFF_COEFF_OUTER_(x)
#define AERO_SPEC_INNER_(x)
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.