Generated Code

The following is c code generated by the CellML API from this CellML file. (Back to language selection)

The raw code is available.

/*
   There are a total of 13 entries in the algebraic variable array.
   There are a total of 7 entries in each of the rate and state variable arrays.
   There are a total of 41 entries in the constant variable array.
 */
/*
 * VOI is time in component environment (millisecond).
 * CONSTANTS[40] is F_SE in component F_SE (newton).
 * CONSTANTS[0] is cT in component F_SE (dimensionless).
 * CONSTANTS[1] is kT in component F_SE (dimensionless).
 * CONSTANTS[2] is LT_r in component F_SE (dimensionless).
 * CONSTANTS[3] is LT in component user_defined_constants (dimensionless).
 * CONSTANTS[4] is F_max in component user_defined_constants (newton).
 * ALGEBRAIC[1] is F_PE1 in component F_PE1 (dimensionless).
 * CONSTANTS[5] is c1 in component F_PE1 (dimensionless).
 * CONSTANTS[6] is k1 in component F_PE1 (dimensionless).
 * CONSTANTS[7] is L_r1 in component F_PE1 (dimensionless).
 * CONSTANTS[8] is eta in component F_PE1 (millisecond).
 * STATES[0] is L in component L (dimensionless).
 * CONSTANTS[9] is L_max in component user_defined_constants (dimensionless).
 * STATES[1] is V in component V (first_order_rate_constant).
 * ALGEBRAIC[4] is F_PE2 in component F_PE2 (dimensionless).
 * CONSTANTS[10] is c2 in component F_PE2 (dimensionless).
 * CONSTANTS[11] is k2 in component F_PE2 (dimensionless).
 * CONSTANTS[12] is L_r2 in component F_PE2 (dimensionless).
 * ALGEBRAIC[5] is FL in component FL (dimensionless).
 * CONSTANTS[13] is beta in component FL (dimensionless).
 * CONSTANTS[14] is omega in component FL (dimensionless).
 * CONSTANTS[15] is rho in component FL (dimensionless).
 * ALGEBRAIC[6] is FV in component FV (dimensionless).
 * CONSTANTS[16] is av0 in component FV (dimensionless).
 * CONSTANTS[17] is av1 in component FV (dimensionless).
 * CONSTANTS[18] is av2 in component FV (dimensionless).
 * CONSTANTS[19] is cv0 in component FV (dimensionless).
 * CONSTANTS[20] is cv1 in component FV (dimensionless).
 * CONSTANTS[21] is bv in component FV (first_order_rate_constant).
 * CONSTANTS[22] is V_max in component FV (first_order_rate_constant).
 * ALGEBRAIC[7] is Af in component Af (dimensionless).
 * CONSTANTS[23] is af in component Af (dimensionless).
 * CONSTANTS[24] is nf0 in component Af (dimensionless).
 * CONSTANTS[25] is nf1 in component Af (dimensionless).
 * CONSTANTS[26] is nf in component Af (dimensionless).
 * STATES[2] is Y in component Y (dimensionless).
 * STATES[3] is S in component S (dimensionless).
 * STATES[4] is f_eff in component rise_and_fall_time (dimensionless).
 * STATES[5] is L_eff in component L_eff (dimensionless).
 * ALGEBRAIC[8] is F0 in component F0 (dimensionless).
 * ALGEBRAIC[11] is F_CE in component F_CE (newton).
 * ALGEBRAIC[12] is F_total in component F_total (newton).
 * CONSTANTS[27] is T_L in component L_eff (millisecond).
 * CONSTANTS[28] is T_s in component S (millisecond).
 * CONSTANTS[29] is as1 in component S (dimensionless).
 * CONSTANTS[30] is as2 in component S (dimensionless).
 * ALGEBRAIC[0] is as_ in component S (dimensionless).
 * CONSTANTS[31] is c_Y in component Y (dimensionless).
 * CONSTANTS[32] is V_Y in component Y (first_order_rate_constant).
 * CONSTANTS[33] is T_Y in component Y (millisecond).
 * STATES[6] is f_int in component rise_and_fall_time (dimensionless).
 * ALGEBRAIC[9] is df_eff_dt in component rise_and_fall_time (first_order_rate_constant).
 * ALGEBRAIC[10] is T_f in component rise_and_fall_time (millisecond).
 * CONSTANTS[34] is T_f1 in component rise_and_fall_time (millisecond).
 * CONSTANTS[35] is T_f2 in component rise_and_fall_time (millisecond).
 * CONSTANTS[36] is T_f3 in component rise_and_fall_time (millisecond).
 * CONSTANTS[37] is T_f4 in component rise_and_fall_time (millisecond).
 * CONSTANTS[38] is f_env in component user_defined_constants (dimensionless).
 * CONSTANTS[39] is mass in component V (kilogram).
 * ALGEBRAIC[2] is V0 in component V0 (first_order_rate_constant).
 * ALGEBRAIC[3] is L0 in component L0 (dimensionless).
 * RATES[5] is d/dt L_eff in component L_eff (dimensionless).
 * RATES[3] is d/dt S in component S (dimensionless).
 * RATES[2] is d/dt Y in component Y (dimensionless).
 * RATES[6] is d/dt f_int in component rise_and_fall_time (dimensionless).
 * RATES[4] is d/dt f_eff in component rise_and_fall_time (dimensionless).
 * RATES[1] is d/dt V in component V (first_order_rate_constant).
 * RATES[0] is d/dt L in component L (dimensionless).
 */
void
initConsts(double* CONSTANTS, double* RATES, double *STATES)
{
CONSTANTS[0] = 27.8;
CONSTANTS[1] = 0.0047;
CONSTANTS[2] = 0.964;
CONSTANTS[3] = 0.02;
CONSTANTS[4] = 23;
CONSTANTS[5] = 23;
CONSTANTS[6] = 0.046;
CONSTANTS[7] = 1.17;
CONSTANTS[8] = 0.001;
STATES[0] = 0.15;
CONSTANTS[9] = 0.13;
STATES[1] = 0.09314;
CONSTANTS[10] = 23;
CONSTANTS[11] = 0.046;
CONSTANTS[12] = 1.17;
CONSTANTS[13] = 1.55;
CONSTANTS[14] = 0.75;
CONSTANTS[15] = 2.12;
CONSTANTS[16] = -1.53;
CONSTANTS[17] = 0;
CONSTANTS[18] = 0;
CONSTANTS[19] = -5.7;
CONSTANTS[20] = 9.18;
CONSTANTS[21] = 0.69;
CONSTANTS[22] = -9.15;
CONSTANTS[23] = 0.56;
CONSTANTS[24] = 2.1;
CONSTANTS[25] = 3.3;
CONSTANTS[26] = 1;
STATES[2] = 1;
STATES[3] = 1;
STATES[4] = 0;
STATES[5] = 0.1497;
CONSTANTS[27] = 0.088;
CONSTANTS[28] = 43;
CONSTANTS[29] = 1.76;
CONSTANTS[30] = 0.96;
CONSTANTS[31] = 0.35;
CONSTANTS[32] = 0.1;
CONSTANTS[33] = 200;
STATES[6] = 0;
CONSTANTS[34] = 0.35;
CONSTANTS[35] = 0.1;
CONSTANTS[36] = 200;
CONSTANTS[37] = 200;
CONSTANTS[38] = 1;
CONSTANTS[39] = 0.005;
CONSTANTS[40] =  CONSTANTS[0]*CONSTANTS[4]*CONSTANTS[1]*log(exp((CONSTANTS[3] - CONSTANTS[2])/CONSTANTS[1])+1.00000);
}
void
computeRates(double VOI, double* CONSTANTS, double* RATES, double* STATES, double* ALGEBRAIC)
{
RATES[2] = (1.00000 - ( CONSTANTS[31]*(1.00000 - exp(- fabs(STATES[1])/CONSTANTS[32]))+STATES[2]))/CONSTANTS[33];
RATES[0] = STATES[1];
ALGEBRAIC[0] = (STATES[4]<0.100000 ? CONSTANTS[29] : CONSTANTS[30]);
RATES[3] = (ALGEBRAIC[0] - STATES[3])/CONSTANTS[28];
ALGEBRAIC[7] = 1.00000 - exp(- pow(( STATES[2]*STATES[3]*STATES[4])/( CONSTANTS[23]*CONSTANTS[26]), CONSTANTS[26]));
RATES[5] = pow(STATES[0] - STATES[5], 3.00000)/( CONSTANTS[27]*(1.00000 - ALGEBRAIC[7]));
rootfind_0(VOI, CONSTANTS, RATES, STATES, ALGEBRAIC, pret);
RATES[6] = (CONSTANTS[38] - STATES[6])/ALGEBRAIC[10];
RATES[4] = ALGEBRAIC[9];
ALGEBRAIC[1] =  CONSTANTS[5]*CONSTANTS[6]*log(exp((STATES[0]/CONSTANTS[9] - CONSTANTS[7])/CONSTANTS[6])+1.00000)+ CONSTANTS[8]*STATES[1];
ALGEBRAIC[4] =  CONSTANTS[10]*(exp( CONSTANTS[11]*(STATES[0] - CONSTANTS[12])) - 1.00000);
ALGEBRAIC[5] = exp(- pow(fabs((pow(STATES[0], CONSTANTS[13]) - 1.00000)/CONSTANTS[14]), CONSTANTS[15]));
ALGEBRAIC[6] = (STATES[1]<=0.00000 ? (CONSTANTS[22] - STATES[1])/(CONSTANTS[22]+ (CONSTANTS[19]+ CONSTANTS[20]*STATES[0])*STATES[1]) : (CONSTANTS[21] -  (CONSTANTS[16]+ CONSTANTS[17]*STATES[0]+ CONSTANTS[18]*pow(STATES[0], 2.00000))*STATES[1])/(CONSTANTS[21]+STATES[1]));
ALGEBRAIC[8] =  ALGEBRAIC[7]*(ALGEBRAIC[5]+ALGEBRAIC[6]+ALGEBRAIC[4])+ALGEBRAIC[1];
ALGEBRAIC[11] =  ALGEBRAIC[8]*CONSTANTS[4];
ALGEBRAIC[12] = CONSTANTS[40] - ALGEBRAIC[11];
RATES[1] = ALGEBRAIC[12]/( 1.00000*CONSTANTS[39]);
}
void
computeVariables(double VOI, double* CONSTANTS, double* RATES, double* STATES, double* ALGEBRAIC)
{
ALGEBRAIC[0] = (STATES[4]<0.100000 ? CONSTANTS[29] : CONSTANTS[30]);
ALGEBRAIC[7] = 1.00000 - exp(- pow(( STATES[2]*STATES[3]*STATES[4])/( CONSTANTS[23]*CONSTANTS[26]), CONSTANTS[26]));
ALGEBRAIC[1] =  CONSTANTS[5]*CONSTANTS[6]*log(exp((STATES[0]/CONSTANTS[9] - CONSTANTS[7])/CONSTANTS[6])+1.00000)+ CONSTANTS[8]*STATES[1];
ALGEBRAIC[4] =  CONSTANTS[10]*(exp( CONSTANTS[11]*(STATES[0] - CONSTANTS[12])) - 1.00000);
ALGEBRAIC[5] = exp(- pow(fabs((pow(STATES[0], CONSTANTS[13]) - 1.00000)/CONSTANTS[14]), CONSTANTS[15]));
ALGEBRAIC[6] = (STATES[1]<=0.00000 ? (CONSTANTS[22] - STATES[1])/(CONSTANTS[22]+ (CONSTANTS[19]+ CONSTANTS[20]*STATES[0])*STATES[1]) : (CONSTANTS[21] -  (CONSTANTS[16]+ CONSTANTS[17]*STATES[0]+ CONSTANTS[18]*pow(STATES[0], 2.00000))*STATES[1])/(CONSTANTS[21]+STATES[1]));
ALGEBRAIC[8] =  ALGEBRAIC[7]*(ALGEBRAIC[5]+ALGEBRAIC[6]+ALGEBRAIC[4])+ALGEBRAIC[1];
ALGEBRAIC[11] =  ALGEBRAIC[8]*CONSTANTS[4];
ALGEBRAIC[12] = CONSTANTS[40] - ALGEBRAIC[11];
ALGEBRAIC[2] = STATES[1]/CONSTANTS[9];
ALGEBRAIC[3] = STATES[0]/CONSTANTS[9];
}

void objfunc_0(double *p, double *hx, int m, int n, void *adata)
{
  struct rootfind_info* rfi = (struct rootfind_info*)adata;
#define VOI rfi->aVOI
#define CONSTANTS rfi->aCONSTANTS
#define RATES rfi->aRATES
#define STATES rfi->aSTATES
#define ALGEBRAIC rfi->aALGEBRAIC
#define pret rfi->aPRET
  ALGEBRAIC[9] = p[0];
  ALGEBRAIC[10] = p[1];
  hx[0] = ALGEBRAIC[9] - (STATES[6] - STATES[4])/ALGEBRAIC[10];
  hx[1] = ALGEBRAIC[10] - (ALGEBRAIC[9]>=0.00000 ?  CONSTANTS[34]*pow(STATES[0], 2.00000)+ CONSTANTS[35]*CONSTANTS[38] : (CONSTANTS[36]+ CONSTANTS[37]*ALGEBRAIC[7])/STATES[0]);
#undef VOI
#undef CONSTANTS
#undef RATES
#undef STATES
#undef ALGEBRAIC
#undef pret
}
void rootfind_0(double VOI, double* CONSTANTS, double* RATES,
double* STATES, double* ALGEBRAIC, int* pret)
{
  static double p[2] = {0.1,0.1};
  double bp[2], work[LM_DIF_WORKSZ(2, 2)];
  struct rootfind_info rfi;
  rfi.aVOI = VOI;
  rfi.aCONSTANTS = CONSTANTS;
  rfi.aRATES = RATES;
  rfi.aSTATES = STATES;
  rfi.aALGEBRAIC = ALGEBRAIC;
  rfi.aPRET = pret;
  do_levmar(objfunc_0, p, bp, work, pret, 2, &rfi);
  ALGEBRAIC[9] = p[0];
  ALGEBRAIC[10] = p[1];
}