| 1749 | *****************************************************************/ |
| 1750 | |
| 1751 | static void CVSetBDF(CVodeMem cv_mem) |
| 1752 | { |
| 1753 | real alpha0, alpha0_hat, xi_inv, xistar_inv, hsum; |
| 1754 | int i,j; |
| 1755 | |
| 1756 | l[0] = l[1] = xi_inv = xistar_inv = ONE; |
| 1757 | for (i=2; i <= q; i++) l[i] = ZERO; |
| 1758 | alpha0 = alpha0_hat = -ONE; |
| 1759 | hsum = h; |
| 1760 | if (q > 1) { |
| 1761 | for (j=2; j < q; j++) { |
| 1762 | hsum += tau[j-1]; |
| 1763 | xi_inv = h / hsum; |
| 1764 | alpha0 -= ONE / j; |
| 1765 | for(i=j; i >= 1; i--) l[i] += l[i-1]*xi_inv; |
| 1766 | /* The l[i] are coefficients of product(1 to j) (1 + x/xi_i) */ |
| 1767 | } |
| 1768 | |
| 1769 | /* j = q */ |
| 1770 | alpha0 -= ONE / q; |
| 1771 | xistar_inv = -l[1] - alpha0; |
| 1772 | hsum += tau[q-1]; |
| 1773 | xi_inv = h / hsum; |
| 1774 | alpha0_hat = -l[1] - xi_inv; |
| 1775 | for (i=q; i >= 1; i--) l[i] += l[i-1]*xistar_inv; |
| 1776 | } |
| 1777 | |
| 1778 | CVSetTqBDF(cv_mem, hsum, alpha0, alpha0_hat, xi_inv, xistar_inv); |
| 1779 | } |
| 1780 | |
| 1781 | /****************** CVSetTqBDF ************************************ |
| 1782 | |