11#include <camp/aero_rep_solver.h>
12#include <camp/aero_reps.h>
19#define AERO_REP_SINGLE_PARTICLE 1
20#define AERO_REP_MODAL_BINNED_MASS 2
34 int aero_phase_idx,
bool *jac_struct) {
35 int num_flagged_elem = 0;
38 int *aero_rep_int_data = &(
40 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
41 double *aero_rep_float_data =
42 &(model_data->aero_rep_float_data
43 [model_data->aero_rep_float_indices[aero_rep_idx]]);
46 int aero_rep_type = *(aero_rep_int_data++);
49 switch (aero_rep_type) {
52 model_data, aero_phase_idx, aero_rep_int_data, aero_rep_float_data,
57 model_data, aero_phase_idx, aero_rep_int_data, aero_rep_float_data,
61 return num_flagged_elem;
71 int n_aero_rep = model_data->n_aero_rep;
75 for (
int i_aero_rep = 0; i_aero_rep < n_aero_rep; i_aero_rep++) {
77 int *aero_rep_int_data = &(
79 ->aero_rep_int_data[model_data->aero_rep_int_indices[i_aero_rep]]);
80 double *aero_rep_float_data =
81 &(model_data->aero_rep_float_data
82 [model_data->aero_rep_float_indices[i_aero_rep]]);
85 int aero_rep_type = *(aero_rep_int_data++);
88 switch (aero_rep_type) {
91 aero_rep_int_data, aero_rep_float_data, state_flags);
95 aero_rep_int_data, aero_rep_float_data, state_flags);
107 int n_aero_rep = model_data->n_aero_rep;
111 for (
int i_aero_rep = 0; i_aero_rep < n_aero_rep; i_aero_rep++) {
113 int *aero_rep_int_data = &(
115 ->aero_rep_int_data[model_data->aero_rep_int_indices[i_aero_rep]]);
116 double *aero_rep_float_data =
117 &(model_data->aero_rep_float_data
118 [model_data->aero_rep_float_indices[i_aero_rep]]);
119 double *aero_rep_env_data =
120 &(model_data->grid_cell_aero_rep_env_data
121 [model_data->aero_rep_env_idx[i_aero_rep]]);
124 int aero_rep_type = *(aero_rep_int_data++);
127 switch (aero_rep_type) {
130 model_data, aero_rep_int_data, aero_rep_float_data,
148 int n_aero_rep = model_data->n_aero_rep;
152 for (
int i_aero_rep = 0; i_aero_rep < n_aero_rep; i_aero_rep++) {
154 int *aero_rep_int_data = &(
156 ->aero_rep_int_data[model_data->aero_rep_int_indices[i_aero_rep]]);
157 double *aero_rep_float_data =
158 &(model_data->aero_rep_float_data
159 [model_data->aero_rep_float_indices[i_aero_rep]]);
160 double *aero_rep_env_data =
161 &(model_data->grid_cell_aero_rep_env_data
162 [model_data->aero_rep_env_idx[i_aero_rep]]);
165 int aero_rep_type = *(aero_rep_int_data++);
168 switch (aero_rep_type) {
199 int aero_phase_idx,
double *layer_radius,
200 double *partial_deriv) {
202 int *aero_rep_int_data = &(
204 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
205 double *aero_rep_float_data =
206 &(model_data->aero_rep_float_data
207 [model_data->aero_rep_float_indices[aero_rep_idx]]);
208 double *aero_rep_env_data =
209 &(model_data->grid_cell_aero_rep_env_data
210 [model_data->aero_rep_env_idx[aero_rep_idx]]);
213 int aero_rep_type = *(aero_rep_int_data++);
216 switch (aero_rep_type) {
219 model_data, aero_phase_idx, layer_radius, partial_deriv, aero_rep_int_data,
220 aero_rep_float_data, aero_rep_env_data);
224 model_data, aero_phase_idx, layer_radius, partial_deriv, aero_rep_int_data,
225 aero_rep_float_data, aero_rep_env_data);
247 int aero_phase_idx,
double *radius,
248 double *partial_deriv) {
250 int *aero_rep_int_data = &(
252 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
253 double *aero_rep_float_data =
254 &(model_data->aero_rep_float_data
255 [model_data->aero_rep_float_indices[aero_rep_idx]]);
256 double *aero_rep_env_data =
257 &(model_data->grid_cell_aero_rep_env_data
258 [model_data->aero_rep_env_idx[aero_rep_idx]]);
261 int aero_rep_type = *(aero_rep_int_data++);
264 switch (aero_rep_type) {
267 model_data, aero_phase_idx, radius, partial_deriv, aero_rep_int_data,
268 aero_rep_float_data, aero_rep_env_data);
272 model_data, aero_phase_idx, radius, partial_deriv, aero_rep_int_data,
273 aero_rep_float_data, aero_rep_env_data);
294 int aero_phase_idx,
double *phase_volume,
295 double *partial_deriv) {
297 int *aero_rep_int_data = &(
299 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
300 double *aero_rep_float_data =
301 &(model_data->aero_rep_float_data
302 [model_data->aero_rep_float_indices[aero_rep_idx]]);
303 double *aero_rep_env_data =
304 &(model_data->grid_cell_aero_rep_env_data
305 [model_data->aero_rep_env_idx[aero_rep_idx]]);
308 int aero_rep_type = *(aero_rep_int_data++);
311 switch (aero_rep_type) {
314 model_data, aero_phase_idx, phase_volume, partial_deriv, aero_rep_int_data,
315 aero_rep_float_data, aero_rep_env_data);
319 model_data, aero_phase_idx, phase_volume, partial_deriv, aero_rep_int_data,
320 aero_rep_float_data, aero_rep_env_data);
344 int aero_phase_idx_first,
int aero_phase_idx_second,
345 double *surface_area,
double *partial_deriv) {
347 int *aero_rep_int_data = &(
349 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
350 double *aero_rep_float_data =
351 &(model_data->aero_rep_float_data
352 [model_data->aero_rep_float_indices[aero_rep_idx]]);
353 double *aero_rep_env_data =
354 &(model_data->grid_cell_aero_rep_env_data
355 [model_data->aero_rep_env_idx[aero_rep_idx]]);
358 int aero_rep_type = *(aero_rep_int_data++);
361 switch (aero_rep_type) {
364 model_data, aero_phase_idx_first, aero_phase_idx_second, surface_area,
365 partial_deriv, aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
369 model_data, aero_phase_idx_first, aero_phase_idx_second, surface_area,
370 partial_deriv, aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
386 int aero_phase_idx,
double *layer_thickness,
387 double *partial_deriv) {
389 int *aero_rep_int_data = &(
391 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
392 double *aero_rep_float_data =
393 &(model_data->aero_rep_float_data
394 [model_data->aero_rep_float_indices[aero_rep_idx]]);
395 double *aero_rep_env_data =
396 &(model_data->grid_cell_aero_rep_env_data
397 [model_data->aero_rep_env_idx[aero_rep_idx]]);
400 int aero_rep_type = *(aero_rep_int_data++);
403 switch (aero_rep_type) {
406 model_data, aero_phase_idx, layer_thickness, partial_deriv, aero_rep_int_data,
407 aero_rep_float_data, aero_rep_env_data);
411 model_data, aero_phase_idx, layer_thickness, partial_deriv, aero_rep_int_data,
412 aero_rep_float_data, aero_rep_env_data);
437 int aero_phase_idx,
double *number_conc,
438 double *partial_deriv) {
440 int *aero_rep_int_data = &(
442 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
443 double *aero_rep_float_data =
444 &(model_data->aero_rep_float_data
445 [model_data->aero_rep_float_indices[aero_rep_idx]]);
446 double *aero_rep_env_data =
447 &(model_data->grid_cell_aero_rep_env_data
448 [model_data->aero_rep_env_idx[aero_rep_idx]]);
451 int aero_rep_type = *(aero_rep_int_data++);
454 switch (aero_rep_type) {
457 model_data, aero_phase_idx, number_conc, partial_deriv,
458 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
462 model_data, aero_phase_idx, number_conc, partial_deriv,
463 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
479 int aero_phase_idx) {
481 int aero_conc_type = 0;
484 int *aero_rep_int_data = &(
486 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
487 double *aero_rep_float_data =
488 &(model_data->aero_rep_float_data
489 [model_data->aero_rep_float_indices[aero_rep_idx]]);
490 double *aero_rep_env_data =
491 &(model_data->grid_cell_aero_rep_env_data
492 [model_data->aero_rep_env_idx[aero_rep_idx]]);
495 int aero_rep_type = *(aero_rep_int_data++);
498 switch (aero_rep_type) {
501 aero_phase_idx, &aero_conc_type, aero_rep_int_data,
502 aero_rep_float_data, aero_rep_env_data);
506 aero_phase_idx, &aero_conc_type, aero_rep_int_data,
507 aero_rep_float_data, aero_rep_env_data);
510 return aero_conc_type;
533 int aero_rep_idx,
int aero_phase_idx,
534 double *aero_phase_mass,
535 double *partial_deriv) {
537 int *aero_rep_int_data = &(
539 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
540 double *aero_rep_float_data =
541 &(model_data->aero_rep_float_data
542 [model_data->aero_rep_float_indices[aero_rep_idx]]);
543 double *aero_rep_env_data =
544 &(model_data->grid_cell_aero_rep_env_data
545 [model_data->aero_rep_env_idx[aero_rep_idx]]);
548 int aero_rep_type = *(aero_rep_int_data++);
551 switch (aero_rep_type) {
554 model_data, aero_phase_idx, aero_phase_mass, partial_deriv,
555 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
559 model_data, aero_phase_idx, aero_phase_mass, partial_deriv,
560 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
587 double *aero_phase_avg_MW,
588 double *partial_deriv) {
590 int *aero_rep_int_data = &(
592 ->aero_rep_int_data[model_data->aero_rep_int_indices[aero_rep_idx]]);
593 double *aero_rep_float_data =
594 &(model_data->aero_rep_float_data
595 [model_data->aero_rep_float_indices[aero_rep_idx]]);
596 double *aero_rep_env_data =
597 &(model_data->grid_cell_aero_rep_env_data
598 [model_data->aero_rep_env_idx[aero_rep_idx]]);
601 int aero_rep_type = *(aero_rep_int_data++);
604 switch (aero_rep_type) {
607 model_data, aero_phase_idx, aero_phase_avg_MW, partial_deriv,
608 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
612 model_data, aero_phase_idx, aero_phase_avg_MW, partial_deriv,
613 aero_rep_int_data, aero_rep_float_data, aero_rep_env_data);
630 int n_float_param,
int n_env_param,
631 int *int_param,
double *float_param,
633 ModelData *model_data =
634 (ModelData *)&(((SolverData *)solver_data)->model_data);
637 int *aero_rep_int_data =
638 &(model_data->aero_rep_int_data
639 [model_data->aero_rep_int_indices[model_data->n_added_aero_reps]]);
640 double *aero_rep_float_data = &(
641 model_data->aero_rep_float_data
642 [model_data->aero_rep_float_indices[model_data->n_added_aero_reps]]);
645 model_data->aero_rep_int_indices[model_data->n_added_aero_reps + 1] =
648 ->aero_rep_int_indices[model_data->n_added_aero_reps];
649 model_data->aero_rep_float_indices[model_data->n_added_aero_reps + 1] =
651 model_data->aero_rep_float_indices[model_data->n_added_aero_reps];
652 model_data->aero_rep_env_idx[model_data->n_added_aero_reps + 1] =
653 model_data->aero_rep_env_idx[model_data->n_added_aero_reps] + n_env_param;
654 ++(model_data->n_added_aero_reps);
657 *(aero_rep_int_data++) = aero_rep_type;
660 for (; n_int_param > 0; --n_int_param)
661 *(aero_rep_int_data++) = *(int_param++);
664 for (; n_float_param > 0; --n_float_param)
665 *(aero_rep_float_data++) = (double)*(float_param++);
667 model_data->n_aero_rep_env_data += n_env_param;
679 int update_aero_rep_type,
void *update_data,
681 ModelData *model_data =
682 (ModelData *)&(((SolverData *)solver_data)->model_data);
685 model_data->grid_cell_aero_rep_env_data = &(
686 model_data->aero_rep_env_data[cell_id * model_data->n_aero_rep_env_data]);
689 int n_aero_rep = model_data->n_aero_rep;
692 for (; (*aero_rep_id) < n_aero_rep; (*aero_rep_id)++) {
694 int *aero_rep_int_data =
695 &(model_data->aero_rep_int_data
696 [model_data->aero_rep_int_indices[*aero_rep_id]]);
697 double *aero_rep_float_data =
698 &(model_data->aero_rep_float_data
699 [model_data->aero_rep_float_indices[*aero_rep_id]]);
700 double *aero_rep_env_data =
701 &(model_data->grid_cell_aero_rep_env_data
702 [model_data->aero_rep_env_idx[*aero_rep_id]]);
705 int aero_rep_type = *(aero_rep_int_data++);
710 if (aero_rep_type == update_aero_rep_type) {
711 switch (aero_rep_type) {
714 (
void *)update_data, aero_rep_int_data, aero_rep_float_data,
719 (
void *)update_data, aero_rep_int_data, aero_rep_float_data,
733 ModelData *model_data =
734 (ModelData *)&(((SolverData *)solver_data)->model_data);
737 int n_aero_rep = model_data->n_aero_rep;
740 "\n\nAerosol representation data\n\nnumber of aerosol "
741 "representations: %d\n\n",
745 for (
int i_aero_rep = 0; i_aero_rep < n_aero_rep; i_aero_rep++) {
747 int *aero_rep_int_data = &(
749 ->aero_rep_int_data[model_data->aero_rep_int_indices[i_aero_rep]]);
750 double *aero_rep_float_data =
751 &(model_data->aero_rep_float_data
752 [model_data->aero_rep_float_indices[i_aero_rep]]);
755 int aero_rep_type = *(aero_rep_int_data++);
758 switch (aero_rep_type) {
761 aero_rep_float_data);
bool aero_rep_modal_binned_mass_update_data(void *update_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update the aerosol representation data.
void aero_rep_modal_binned_mass_get_layer_thickness__m(ModelData *model_data, int aero_phase_idx, double *layer_thickness, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the thickness of a particle layer (m)
void aero_rep_modal_binned_mass_get_aero_phase_avg_MW__kg_mol(ModelData *model_data, int aero_phase_idx, double *aero_phase_avg_MW, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the average molecular weight in an aerosol phase ( )
void aero_rep_modal_binned_mass_get_number_conc__n_m3(ModelData *model_data, int aero_phase_idx, double *number_conc, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the particle number concentration ( )
void aero_rep_modal_binned_mass_update_state(ModelData *model_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update aerosol representation data for a new state.
void aero_rep_modal_binned_mass_get_aero_conc_type(int aero_phase_idx, int *aero_conc_type, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the type of aerosol concentration used.
void aero_rep_modal_binned_mass_update_env_state(ModelData *model_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update aerosol representation data for new environmental conditions.
void aero_rep_modal_binned_mass_print(int *aero_rep_int_data, double *aero_rep_float_data)
Print the mass-only modal/binned reaction parameters.
void aero_rep_modal_binned_mass_get_effective_radius__m(ModelData *model_data, int aero_phase_idx, double *radius, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the effective particle radius (m)
void aero_rep_modal_binned_mass_get_dependencies(int *aero_rep_int_data, double *aero_rep_float_data, bool *state_flags)
Flag elements on the state array used by this aerosol representation.
void aero_rep_modal_binned_mass_get_aero_phase_mass__kg_m3(ModelData *model_data, int aero_phase_idx, double *aero_phase_mass, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the total mass in an aerosol phase ( )
void aero_rep_modal_binned_mass_get_interface_surface_area__m2(ModelData *model_data, int aero_phase_idx_first, int aero_phase_idx_second, double *surface_area, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the effective particle surface area (m)
void aero_rep_modal_binned_mass_get_effective_layer_radius__m(ModelData *model_data, int aero_phase_idx, double *layer_radius, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the effective radius of a specified layer (m)
int aero_rep_modal_binned_mass_get_used_jac_elem(ModelData *model_data, int aero_phase_idx, int *aero_rep_int_data, double *aero_rep_float_data, bool *jac_struct)
Flag Jacobian elements used in calcualtions of mass and volume.
void aero_rep_modal_binned_mass_get_phase_volume__m3_m3(ModelData *model_data, int aero_phase_idx, double *phase_volume, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the phase volume (m³/m³)
int aero_rep_single_particle_get_used_jac_elem(ModelData *model_data, int aero_phase_idx, int *aero_rep_int_data, double *aero_rep_float_data, bool *jac_struct)
Flag Jacobian elements used in calcualtions of mass and volume.
void aero_rep_single_particle_get_aero_phase_avg_MW__kg_mol(ModelData *model_data, int aero_phase_idx, double *aero_phase_avg_MW, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the average molecular weight in an aerosol phase ( )
void aero_rep_single_particle_get_effective_radius__m(ModelData *model_data, int aero_phase_idx, double *radius, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the effective particle radius (m) Finds the radius of the largest layer in specified particle.
void aero_rep_single_particle_get_aero_conc_type(int aero_phase_idx, int *aero_conc_type, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the type of aerosol concentration used.
void aero_rep_single_particle_get_interface_surface_area__m2(ModelData *model_data, int aero_phase_idx_first, int aero_phase_idx_second, double *surface_area, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the surface area of specified particle layer (m)
void aero_rep_single_particle_print(int *aero_rep_int_data, double *aero_rep_float_data)
Print the Single Particle reaction parameters.
void aero_rep_single_particle_get_phase_volume__m3_m3(ModelData *model_data, int aero_phase_idx, double *phase_volume, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the volume of a specified phase in the corresponding layer.
void aero_rep_single_particle_update_env_state(ModelData *model_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update aerosol representation data for new environmental conditions.
void aero_rep_single_particle_get_layer_thickness__m(ModelData *model_data, int aero_phase_idx, double *layer_thickness, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the thickness of a particle layer (m)
bool aero_rep_single_particle_update_data(void *update_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update aerosol representation data.
void aero_rep_single_particle_get_dependencies(int *aero_rep_int_data, double *aero_rep_float_data, bool *state_flags)
Flag elements on the state array used by this aerosol representation.
void aero_rep_single_particle_get_aero_phase_mass__kg_m3(ModelData *model_data, int aero_phase_idx, double *aero_phase_mass, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the total mass in an aerosol phase ( )
void aero_rep_single_particle_get_effective_layer_radius__m(ModelData *model_data, int aero_phase_idx, double *layer_radius, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the effective radius of a specified layer (m)
void aero_rep_single_particle_get_number_conc__n_m3(ModelData *model_data, int aero_phase_idx, double *number_conc, double *partial_deriv, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Get the particle number concentration ( )
void aero_rep_single_particle_update_state(ModelData *model_data, int *aero_rep_int_data, double *aero_rep_float_data, double *aero_rep_env_data)
Update aerosol representation data for a new state.
int aero_rep_get_aero_conc_type(ModelData *model_data, int aero_rep_idx, int aero_phase_idx)
Check whether aerosol concentrations are per-particle or total for each phase.
int aero_rep_get_used_jac_elem(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, bool *jac_struct)
Flag Jacobian elements used to calculated mass, volume, etc.
void aero_rep_add_condensed_data(int aero_rep_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 for aerosol representations.
void aero_rep_get_effective_layer_radius__m(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *layer_radius, double *partial_deriv)
Get the effective radius of a specified layer, (m)
void aero_rep_free_update_data(void *update_data)
Free an update data object.
void aero_rep_get_aero_phase_mass__kg_m3(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *aero_phase_mass, double *partial_deriv)
Get the total mass of an aerosol phase in this representation ( )
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_update_env_state(ModelData *model_data)
Update the aerosol representations for new environmental conditions.
#define AERO_REP_MODAL_BINNED_MASS
void aero_rep_print_data(void *solver_data)
Print the aerosol representation data.
void aero_rep_update_state(ModelData *model_data)
Update the aerosol representations for a new state.
void aero_rep_get_aero_phase_avg_MW__kg_mol(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *aero_phase_avg_MW, double *partial_deriv)
Get the average molecular weight of an aerosol phase in this representation ( )
void aero_rep_update_data(int cell_id, int *aero_rep_id, int update_aero_rep_type, void *update_data, void *solver_data)
Update aerosol representation data.
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_number_conc__n_m3(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *number_conc, double *partial_deriv)
Get the particle number concentration ( )
void aero_rep_get_effective_radius__m(ModelData *model_data, int aero_rep_idx, int aero_phase_idx, double *radius, double *partial_deriv)
Get the effective particle radius, (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 AERO_REP_SINGLE_PARTICLE
void aero_rep_get_dependencies(ModelData *model_data, bool *state_flags)
Get state array elements used by aerosol representation functions.