home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / biology / gsrc208a.zip / KINETIC2.C < prev    next >
C/C++ Source or Header  |  1993-07-15  |  9KB  |  237 lines

  1. #include "copyleft.h"
  2.  
  3. /*
  4.     GEPASI - a simulator of metabolic pathways and other dynamical systems
  5.     Copyright (C) 1989, 1992  Pedro Mendes
  6. */
  7.  
  8. /*************************************/
  9. /*                                   */
  10. /*      reaction rate equations      */
  11. /*                                   */
  12. /*          MICROSOFT C 6.00         */
  13. /*           QuickC/WIN 1.0          */
  14. /*             ULTRIX cc             */
  15. /*              GNU gcc              */
  16. /*                                   */
  17. /*   (include here compilers that    */
  18. /*   compiled GEPASI successfully)   */
  19. /*                                   */
  20. /*************************************/
  21.  
  22. #include <math.h>
  23. #include "globals.h"
  24. #include "globvar.h"
  25. #include "datab.h"
  26.  
  27. /*****************************************/
  28. /*                                       */
  29. /*              CONVENTIONS              */
  30. /*                                       */
  31. /* all functions take as arguments:      */
  32. /* double s[] - vector of concentrations */
  33. /* int r - the index of the reaction     */
  34. /*                                       */
  35. /*     all fuctions return a double.     */
  36. /*                                       */
  37. /*                                       */
  38. /*****************************************/
  39.  
  40.  
  41. /*                               */
  42. /* Alosteric Inhibition          */
  43. /* As in Hofmeyr & van der Merwe */
  44. /* CABIOS vol 2 243-249          */
  45. /*                               */
  46.  
  47. double alinh( double s[], int r )
  48.           /* eff[r][0] - substrate           */
  49.           /* eff[r][1] - product             */
  50.           /* eff[r][2] - inhibitor           */
  51.           /* params[r][0] - Km for substrate    */
  52.           /* params[r][1] - Km for product      */
  53.           /* params[r][2] - max forward vel.    */
  54.           /* params[r][3] - max reverse vel.    */
  55.           /* params[r][4] - inhibition constant */
  56.           /* params[r][5] - hill coeff (inhib)  */
  57. {
  58.  double nsb, npr;
  59.  
  60.  nsb = s[eff[r][0]]/params[r][0];
  61.  npr = s[eff[r][1]]/params[r][1];
  62.  return (nsb*params[r][2] - npr*params[r][3]) / (1 + nsb + npr + pow(s[eff[r][2]], params[r][5])/params[r][4]);
  63. }
  64.  
  65.  
  66.  
  67. /*                               */
  68. /* UNI-BI SEQUENTIAL             */
  69. /* ( A = P + Q )                 */
  70. /* functions deduced with reduce */
  71. /* file A-PQ.REQ                 */
  72. /*                               */
  73. double unibisa( double s[], int r )
  74.           /* eff[r][0] - A                   */
  75.           /* eff[r][1] - P                   */
  76.           /* eff[r][2] - Q                   */
  77.           /* params[r][0] - KA                  */
  78.           /* params[r][1] - KP                  */
  79.           /* params[r][2] - KQ                  */
  80.           /* params[r][3] - KPQ                 */
  81.           /* params[r][4] - max forward vel.    */
  82.           /* params[r][5] - max reverse vel.    */
  83. {
  84.  double na, np, npq;
  85.  
  86.  na  = s[eff[r][0]]/params[r][0];
  87.  np  = s[eff[r][1]]/params[r][1];
  88.  npq = s[eff[r][1]]*s[eff[r][2]]/params[r][3];
  89.  
  90.  return (na*params[r][4] - npq*params[r][5]) /
  91.         ( 1 +
  92.           na +
  93.           na*np*(1+params[r][4]*(1-params[r][1]*params[r][2]/params[r][3])/params[r][5]) +
  94.           npq +
  95.           np +
  96.           s[eff[r][2]]/params[r][2]
  97.         );
  98. }
  99.  
  100. double dunibisaa( double s[], int r, int e )
  101. {
  102.  double kpq2, kpkq, kpkpq, vrkpq, c;
  103.  
  104.  kpq2  = params[r][3]*params[r][3];
  105.  kpkq  = params[r][1]*params[r][2];
  106.  kpkpq = params[r][1]*params[r][3];
  107.  vrkpq = params[r][3]*params[r][5];
  108.  c     = (((kpkq-params[r][3])*params[r][4]-vrkpq)*params[r][2]*s[eff[r][1]]-params[r][5]*kpq2)*s[eff[r][0]]
  109.          -(s[eff[r][2]]+params[r][2])*s[eff[r][1]]*params[r][0]*vrkpq
  110.          -s[eff[r][2]]*params[r][0]*params[r][5]*kpkpq
  111.          -params[r][0]*params[r][5]*kpq2;
  112.  
  113.  return (s[eff[r][1]]*params[r][2]+params[r][3])*params[r][0]*params[r][5]*params[r][5]*params[r][3]*
  114.         (s[eff[r][1]]*s[eff[r][2]]*(params[r][3]*(params[r][4]+params[r][5])+params[r][4]*kpkq)+
  115.          s[eff[r][2]]*params[r][4]*kpkpq + kpq2*params[r][5] )
  116.         /
  117.         c*c ;
  118. }
  119.  
  120. double dunibisap( double s[], int r, int e )
  121. {
  122.  double kpq2, kpkq, kpkpq, vrkpq, c;
  123.  
  124.  kpq2  = params[r][3]*params[r][3];
  125.  kpkq  = params[r][1]*params[r][2];
  126.  kpkpq = params[r][1]*params[r][3];
  127.  vrkpq = params[r][3]*params[r][5];
  128.  c     = (((kpkq-params[r][3])*params[r][4]-vrkpq)*params[r][2]*s[eff[r][1]]-params[r][5]*kpq2)*s[eff[r][0]]
  129.          -(s[eff[r][2]]+params[r][2])*s[eff[r][1]]*params[r][0]*vrkpq
  130.          -s[eff[r][2]]*params[r][0]*params[r][5]*kpkpq
  131.          -params[r][0]*params[r][5]*kpq2;
  132.  
  133.  return - (s[eff[r][0]]*params[r][2]*params[r][4]+s[eff[r][2]]*params[r][0]*params[r][5])*params[r][5]*kpq2*
  134.           (s[eff[r][0]]*(params[r][3]*(params[r][4]+params[r][5])+params[r][4]*kpkq)+
  135.            s[eff[r][2]]*params[r][0]*params[r][5]*params[r][1] + params[r][0]*vrkpq )
  136.           /
  137.           c*c ;
  138. }
  139.  
  140.  
  141. double dunibisaq( double s[], int r, int e )
  142. {
  143.  double kpq2, kpkq, kpkpq, vrkpq, c;
  144.  
  145.  kpq2  = params[r][3]*params[r][3];
  146.  kpkq  = params[r][1]*params[r][2];
  147.  kpkpq = params[r][1]*params[r][3];
  148.  vrkpq = params[r][3]*params[r][5];
  149.  c     = (((kpkq-params[r][3])*params[r][4]-vrkpq)*params[r][2]*s[eff[r][1]]-params[r][5]*kpq2)*s[eff[r][0]]
  150.          -(s[eff[r][2]]+params[r][2])*s[eff[r][1]]*params[r][0]*vrkpq
  151.          -s[eff[r][2]]*params[r][0]*params[r][5]*kpkpq
  152.          -params[r][0]*params[r][5]*kpq2;
  153.  
  154.  return - (s[eff[r][1]]*params[r][2]+params[r][3])*params[r][0]*params[r][5]*params[r][5]*params[r][3]*
  155.           (s[eff[r][0]]*s[eff[r][1]]*(params[r][3]*(params[r][4]+params[r][5])+params[r][4]*kpkq)+
  156.            s[eff[r][0]]*params[r][4]*kpkpq + s[eff[r][1]]*params[r][0]*vrkpq )
  157.           /
  158.           c*c ;
  159. }
  160.  
  161.  
  162. /*                               */
  163. /* UNI-BI                        */
  164. /* ( A = 2P )                    */
  165. /* functions deduced with reduce */
  166. /* file A-PP.REQ                 */
  167. /*                               */
  168. double unibisb( double s[], int r )
  169.           /* eff[r][0] - A                   */
  170.           /* eff[r][1] - P                   */
  171.           /* params[r][0] - KA                  */
  172.           /* params[r][1] - KP                  */
  173.           /* params[r][2] - max forward vel.    */
  174.           /* params[r][3] - max reverse vel.    */
  175. {
  176.  double p2, vf2, vr_pl_2vf;
  177.  
  178.  p2        = s[eff[r][1]]*s[eff[r][1]];
  179.  vf2       = params[r][2]*params[r][2];
  180.  vr_pl_2vf = params[r][3] + 2*params[r][2];
  181.  
  182.  return 4*vf2*(vr_pl_2vf*s[eff[r][0]]*params[r][1]*params[r][1] - 2*p2*params[r][3]*params[r][0])
  183.         /
  184.         ( params[r][1]*( (s[eff[r][1]]*params[r][3]+4*params[r][2])*vr_pl_2vf*s[eff[r][0]]*params[r][1]
  185.                   + 4*vr_pl_2vf*params[r][2]*params[r][0]*params[r][1]
  186.                   + 8*(params[r][3]+params[r][2])*s[eff[r][1]]*params[r][2]*params[r][0]
  187.                  ) + 8*p2*vf2*params[r][0]
  188.         );
  189. }
  190.  
  191. double dunibisba( double s[], int r, int e )
  192. {
  193.  double p2, vf2, vr_pl_2vf, vf_pl_vr, kp2, p_pl_kp, c;
  194.  
  195.  p2        = s[eff[r][1]]*s[eff[r][1]];
  196.  vf2       = params[r][2]*params[r][2];
  197.  vr_pl_2vf = params[r][3] + 2*params[r][2];
  198.  vf_pl_vr  = params[r][2] + params[r][3];
  199.  kp2       = params[r][1]*params[r][1];
  200.  p_pl_kp   = s[eff[r][1]] + params[r][1];
  201.  c         = params[r][1]*( (s[eff[r][1]]*params[r][3]+4*params[r][2])*vr_pl_2vf*s[eff[r][0]]*params[r][1]
  202.                       + 4*vr_pl_2vf*params[r][2]*params[r][0]*params[r][1]
  203.                       + 8*vf_pl_vr*s[eff[r][1]]*params[r][2]*params[r][0]
  204.                    ) + 8*p2*vf2*params[r][0];
  205.  
  206.  return 8*(p2*s[eff[r][1]]*params[r][3]*params[r][3] + 2*params[r][2]*vf_pl_vr*(p2 + p_pl_kp*p_pl_kp))
  207.         *vr_pl_2vf*vf2*params[r][0]*kp2
  208.         / c*c;
  209. }
  210.  
  211. double dunibisbp( double s[], int r, int e )
  212. {
  213.  double p2, vf2, vr2, vr_pl_2vf, vf_pl_vr, kakp, vrvf, vfvr_big, c;
  214.  
  215.  p2        = s[eff[r][1]]*s[eff[r][1]];
  216.  vf2       = params[r][2]*params[r][2];
  217.  vr2       = params[r][3]*params[r][3];
  218.  vr_pl_2vf = params[r][3] + 2*params[r][2];
  219.  vf_pl_vr  = params[r][2] + params[r][3];
  220.  kakp      = params[r][0]*params[r][1];
  221.  vrvf      = params[r][2]*params[r][3];
  222.  vfvr_big  = vr2 + 3*vrvf + 2*vf2;
  223.  c         = params[r][1]*( (s[eff[r][1]]*params[r][3]+4*params[r][2])*vr_pl_2vf*s[eff[r][0]]*params[r][1]
  224.                       + 4*vr_pl_2vf*params[r][2]*kakp
  225.                       + 8*vf_pl_vr*s[eff[r][1]]*params[r][2]*params[r][0]
  226.                    ) + 8*p2*vf2*params[r][0];
  227.  
  228.  return -4*vf2*params[r][1]*( s[eff[r][0]]*s[eff[r][0]]*params[r][1]*params[r][1]*params[r][1]*params[r][3]*(vr2 + 4*params[r][2]*vf_pl_vr)
  229.                       + 2*s[eff[r][0]]*p2*kakp*vr2*vr_pl_2vf
  230.                       + 16*s[eff[r][0]]*s[eff[r][1]]*kakp*params[r][2]*vfvr_big
  231.                       + 8*s[eff[r][0]]*kakp*params[r][1]*params[r][2]*vfvr_big
  232.                       + 16*p2*params[r][0]*params[r][0]*vrvf*vf_pl_vr
  233.                       + 16*s[eff[r][1]]*kakp*params[r][0]*vrvf*vf_pl_vr
  234.                     )
  235.         / c*c ;
  236. }
  237.