168 double *sub_model_float_data,
169 double *sub_model_env_data,
172 int *int_data = sub_model_int_data;
173 double *float_data = sub_model_float_data;
180 if (a_w < 0.0) a_w = 0.0;
181 if (a_w > 1.0) a_w = 1.0;
184 for (
int i_phase = 0; i_phase <
NUM_PHASE_; i_phase++) {
186 for (
int i_ion_pair = 0; i_ion_pair <
NUM_ION_PAIRS_; i_ion_pair++) {
197 for (
int i_ion_pair = 0; i_ion_pair <
NUM_ION_PAIRS_; i_ion_pair++) {
208 long double omega = 0.0;
209 for (
int j_ion_pair = 0; j_ion_pair <
NUM_ION_PAIRS_; ++j_ion_pair) {
210 if (i_ion_pair == j_ion_pair)
continue;
211 omega += (
long double)2.0 *
217 long double ln_gamma = 0.0;
220 for (
int i_inter = 0; i_inter <
NUM_INTER_(i_ion_pair); i_inter++) {
224 if ((a_w <=
MIN_RH_(i_ion_pair, i_inter) ||
225 a_w >
MAX_RH_(i_ion_pair, i_inter)) &&
226 !(a_w <= 0.0 &&
MIN_RH_(i_ion_pair, i_inter) <= 0.0))
233 long double ln_gamma_inter = 0.0;
234 for (
int i_B = 0; i_B <
NUM_B_(i_ion_pair, i_inter); i_B++) {
235 ln_gamma_inter +=
B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B);
240 if (i_ion_pair == j_ion_pair) {
242 ln_gamma += ln_gamma_inter;
251 ln_gamma += ln_gamma_inter *
CATION_N_(j_ion_pair) *
278 double *sub_model_float_data,
279 double *sub_model_env_data,
282 int *int_data = sub_model_int_data;
283 double *float_data = sub_model_float_data;
292 if (a_w < 0.0) a_w = 0.0;
293 if (a_w > 1.0) a_w = 1.0;
296 for (
int i_phase = 0; i_phase <
NUM_PHASE_; i_phase++) {
298 for (
int i_ion_pair = 0; i_ion_pair <
NUM_ION_PAIRS_; i_ion_pair++) {
309 for (
int i_ion_pair = 0; i_ion_pair <
NUM_ION_PAIRS_; i_ion_pair++) {
320 long double omega = 0.0;
321 for (
int j_ion_pair = 0; j_ion_pair <
NUM_ION_PAIRS_; ++j_ion_pair) {
322 if (i_ion_pair == j_ion_pair)
continue;
323 omega += (
long double)2.0 *
329 long double ln_gamma = 0.0;
332 for (
int i_inter = 0; i_inter <
NUM_INTER_(i_ion_pair); i_inter++) {
336 if ((a_w <=
MIN_RH_(i_ion_pair, i_inter) ||
337 a_w >
MAX_RH_(i_ion_pair, i_inter)) &&
338 !(a_w <= 0.0 &&
MIN_RH_(i_ion_pair, i_inter) <= 0.0))
345 long double ln_gamma_inter = 0.0;
346 for (
int i_B = 0; i_B <
NUM_B_(i_ion_pair, i_inter); i_B++) {
347 ln_gamma_inter +=
B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B);
352 if (i_ion_pair == j_ion_pair) {
354 ln_gamma += ln_gamma_inter;
363 ln_gamma += ln_gamma_inter *
CATION_N_(j_ion_pair) *
370 long double gamma_i = exp(ln_gamma);
373 for (
int i_inter = 0; i_inter <
NUM_INTER_(i_ion_pair); i_inter++) {
377 if ((a_w <=
MIN_RH_(i_ion_pair, i_inter) ||
378 a_w >
MAX_RH_(i_ion_pair, i_inter)) &&
379 !(a_w <= 0.0 &&
MIN_RH_(i_ion_pair, i_inter) <= 0.0))
386 long double ln_gamma_inter =
B_Z_(i_ion_pair, i_inter, 0);
387 long double d_ln_gamma_inter_d_water = 0.0;
388 for (
int i_B = 1; i_B <
NUM_B_(i_ion_pair, i_inter); i_B++) {
389 ln_gamma_inter +=
B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B);
390 d_ln_gamma_inter_d_water +=
391 B_Z_(i_ion_pair, i_inter, i_B) * i_B * pow(a_w, i_B - 1);
397 if (i_ion_pair == j_ion_pair) {
400 gamma_i * d_ln_gamma_inter_d_water;
412 gamma_i * ln_gamma_inter *
ANION_N_(j_ion_pair) /
417 gamma_i * ln_gamma_inter *
CATION_N_(j_ion_pair) /
423 d_ln_gamma_inter_d_water;
430 if (k_ion_pair == i_ion_pair)
continue;
434 -gamma_i * ln_gamma_inter *
CATION_N_(j_ion_pair) *
435 ANION_N_(j_ion_pair) / (omega * omega) * 2.0 *
441 -gamma_i * ln_gamma_inter *
CATION_N_(j_ion_pair) *
442 ANION_N_(j_ion_pair) / (omega * omega) * 2.0 *
void sub_model_PDFiTE_get_jac_contrib(int *sub_model_int_data, double *sub_model_float_data, double *sub_model_env_data, ModelData *model_data, realtype *J, double time_step)
Add contributions to the Jacobian from derivates calculated using the output of this sub model.