/** * This function determines if the bond breaks given the deviation from equilibrium length * Equation: kr = kr0 * exp (gamma * sigma * delta / kB / T) * * @param: delta: the length that the bond is stretched or compressed * from the equilibrium length * @return: if breaks * */ bool ifBreak(double delta) { double kr; static const double kr_cal = (_sigma * 1000.0 * _gama) / _thermal; // (nm^-1) kr = _kr0 * exp(kr_cal * fabs(delta)); return (sfmt_genrand_res53(&sfmt)< (1.0 - exp(-1.0 * kr * _timeInc))); }
/** * This function determines if a potential bond would form * given the distance between pairing ligand and receptor * Equation: kf = kf0 * exp ( - sigma_ts * delta * delta / (2*kB*T)) * * @param: bondLength: the distance between pairing ligand and receptor * @return: if forms * */ bool ifForm(double delta) { double kf; static const double kf_cal = -1.0 * (sigma_ts * 500.0) / _thermal; // (nm^-2) kf = _kf0 * exp(kf_cal * delta * delta); if (sfmt_genrand_res53(&sfmt)< 1.0 - exp(-1.0 * kf * _timeInc)) { return !ifBreak(delta); } return false; }
int main(int argc, char* argv[]) { int i, cnt, seed; double x, y, pi; const int NUM = 10000; sfmt_t sfmt; if (argc >= 2) { seed = strtol(argv[1], NULL, 10); } else { seed = 12345; } cnt = 0; sfmt_init_gen_rand(&sfmt, seed); for (i = 0; i < NUM; i++) { x = sfmt_genrand_res53(&sfmt); y = sfmt_genrand_res53(&sfmt); if (x * x + y * y < 1.0) { cnt++; } } pi = (double)cnt / NUM * 4; printf("%lf\n", pi); return 0; }
double wrap_genrand_res53(sfmt_t* sfmt) { return sfmt_genrand_res53(sfmt); }