static int res(realtype t, N_Vector yy, N_Vector yd, N_Vector res, void *userdata) { UserData data; realtype k1, k2, k3, k4; realtype K, klA, Ks, pCO2, H; realtype y1, y2, y3, y4, y5, y6; realtype yd1, yd2, yd3, yd4, yd5; realtype r1, r2, r3, r4, r5, Fin; data = (UserData) userdata; k1 = data->k1; k2 = data->k2; k3 = data->k3; k4 = data->k4; K = data->K; klA = data->klA; Ks = data->Ks; pCO2 = data->pCO2; H = data->H; y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3); y4 = Ith(yy,4); y5 = Ith(yy,5); y6 = Ith(yy,6); yd1 = Ith(yd,1); yd2 = Ith(yd,2); yd3 = Ith(yd,3); yd4 = Ith(yd,4); yd5 = Ith(yd,5); r1 = k1 * RPowerI(y1,4) * RSqrt(y2); r2 = k2 * y3 * y4; r3 = k2/K * y1 * y5; r4 = k3 * y1 * y4 * y4; r5 = k4 * y6 * y6 * RSqrt(y2); Fin = klA * ( pCO2/H - y2 ); Ith(res,1) = yd1 + TWO*r1 - r2 + r3 + r4; Ith(res,2) = yd2 + HALF*r1 + r4 + HALF*r5 - Fin; Ith(res,3) = yd3 - r1 + r2 - r3; Ith(res,4) = yd4 + r2 - r3 + TWO*r4; Ith(res,5) = yd5 - r2 + r3 - r5; Ith(res,6) = Ks*y1*y4 - y6; return(0); }
static realtype MaxError(N_Vector y, realtype t) { long int i, j, k; realtype *ydata, er, ex=ZERO, yt, maxError=ZERO, ifact_inv, jfact_inv=ONE; if (t == ZERO) return(ZERO); ydata = NV_DATA_S(y); if (t <= THIRTY) ex = exp(-TWO*t); for (j = 0; j < P2_MESHY; j++) { ifact_inv = ONE; for (i = 0; i < P2_MESHX; i++) { k = i + j * P2_MESHX; yt = RPowerI(t,i+j) * ex * ifact_inv * jfact_inv; er = ABS(ydata[k] - yt); if (er > maxError) maxError = er; ifact_inv /= (i+1); } jfact_inv /= (j+1); } return(maxError); }