int main(int argc, char **argv) { model_t m[1]; hist_t *hs; double *beta, *lnz; int iT; unsigned flags = 0; model_default_lj(m); model_doargs(m, argc, argv); if ( m->rmcom ) flags |= WHAM_RMCOM; xnew(beta, m->nT); xnew(lnz, m->nT); for ( iT = 0; iT < m->nT; iT++ ) { beta[iT] = 1./(m->Tmin + m->Tdel * iT); lnz[iT] = 0; } if ( m->loadprev ) { /* load from existing histogram */ if ( (hs = hist_initf(m->fnhis, HIST_INT | HIST_VERBOSE)) == NULL ) { return -1; } } else { if ( m->simul == SIMUL_MD ) { hs = lj_domd(m, beta); } else { hs = lj_domc(m, beta); } } whamx(hs, beta, lnz, flags, NULL, m->damp, m->mdiis_nbases, m->mdiis_update_method, m->mdiis_threshold, m->itmin, m->itmax, m->tol, m->verbose, m->fnlndos, m->fneav, m->wham_method); if ( m->verbose ) { double lnzref0 = 0; for ( iT = 0; iT < hs->rows; iT++ ) { double tp = 1/beta[iT], tot, eav, var; double eref, pref, lnzref, muref; eav = hist_getave(hs, iT, &tot, &var); eref = ljeos3d_get(m->rho, tp, &pref, &lnzref, &muref); lnzref *= -m->nn / tp; if ( iT == 0 ) lnzref0 = lnzref; printf("%3d %10.7f %14.7f %8.0f %15.7f %14.7f | %10.3f %10.3f\n", iT, tp, lnz[iT], tot, eav, sqrt(var), lnzref - lnzref0, eref * m->nn); } } hist_close(hs); free(beta); free(lnz); return 0; }
// // Flush the current history command. // void hist_flush(History_t *hp) { char *buff; if (hp) { buff = (char *)sfreserve(hp->histfp, 0, SF_LOCKR); if (buff) { hp->histflush = sfvalue(hp->histfp) + 1; sfwrite(hp->histfp, buff, 0); } else { hp->histflush = 0; } if (sfsync(hp->histfp) < 0) { Shell_t *shp = hp->histshell; hist_close(hp); if (!sh_histinit(shp)) sh_offoption(shp, SH_HISTORY); } else { hp->histflush = 0; } } }
static void serial_close (struct tty_struct* tty, struct file* filp) { NkPort* port = (NkPort*)tty->driver_data; printk("serial_close tty addr = %p, filp = %p, port->count=0x%x\n", tty, filp, port->count); port->count--; if (port->count == 0) { if (NKLINE(tty) == 1) { hist_close(port); } else if (port->vlink) { vcons_close(port); } else { cons_close(port); } #ifdef DEBUG printk("Closing ttyNK<%d>\n", tty->index); #endif } }
int main(void) { lj_t *lj; int t, vtot = 0, vacc = 0, isrun; real u, k, p, rhoav, bc = 0.f; static av_t avU, avK, avp, avbc, avrho; hist_t *hsvol; lj = lj_open(N, 3, rho, rc); if (usesw) { lj_initsw(lj, rs); printf("rc %g, rs %g, box %g\n", rc, rs, lj->l*.5f); } if (initload && 0 != lj_readpos(lj, lj->x, lj->v, fnpos, LJ_LOADBOX)) { fprintf(stderr, "error loading previous coordinates from %s\n", fnpos); } hsvol = hist_open(1, 0, 5.*lj->n/lj->rho, 2.f); for (t = 1; t <= nequil + nsteps; t++) { lj_vv(lj, mddt); lj_shiftcom(lj, lj->v); lj_vrescalex(lj, tp, thermdt); isrun = (t > nequil); if ( t % 5 == 0 ) { /* different barostats */ if ( barostat == 1 ) { vacc += lj_mctp(lj, 0.05, tp, pressure, 0, 1e300, 0, 0); } else if ( barostat == 2 ) { vacc += lj_mcp(lj, 0.05, tp, pressure, 0, 1e300, 0, 0); } else if ( barostat == 3 ) { lj_langtp0(lj, 1e-5, tp, pressure, 0); } else if ( barostat == 4 ) { lj_langp0(lj, 1e-5, tp, pressure, 0); } vtot++; if (isrun) { av_add(&avrho, lj->n / lj->vol); hist_add1ez(hsvol, lj->vol, HIST_VERBOSE); } } if (isrun) { av_add(&avU, lj->epot); av_add(&avK, lj->ekin); av_add(&avp, lj_calcp(lj, tp)); /* or lj_calcpk(lj) */ if (usesw) { bc = lj_bconfsw3d(lj, NULL); av_add(&avbc, bc); } } } u = av_getave(&avU)/N; k = av_getave(&avK)/N; p = av_getave(&avp); bc = av_getave(&avbc); rhoav = av_getave(&avrho); printf("T %g, U/N %6.3f, K/N %6.3f, p %6.3f, bc %6.3f, rho %6.3f, vacc %g%%\n", tp, u, k, p, bc, rhoav, 100. * vacc / vtot); u = ljeos3d_getx(rhoav, tp, &p, NULL, NULL, LJEOS_PVEhBHKN); printf("ref., u %6.3f, p %6.3f\n", u, p); hist_save(hsvol, "volmd.his", HIST_NOZEROES); hist_close(hsvol); lj_writepos(lj, lj->x, lj->v, fnpos); lj_close(lj); return 0; }
int main(void) { int t, acc = 0, vacc = 0, vtot = 0, isrun = 0; lj_t *lj; ljrdf_t *ljrdf; real u, p, rho1; hist_t *hsvol; lj = lj_open(n, d, rho, rcdef); /* since this is MC, the dof should be n*d * maybe we can that it were the same dof as MD? */ lj->dof = n * d; if (usesq) { lj_initsq(lj, ra, rb); lj->vir = 0; } ljrdf = ljrdf_open(lj, 0.01, 0); hsvol = hist_open(1, 0, 5.*lj->n/rho, 1.f); for (t = 1; t <= nsteps; t++) { acc += lj_metro3d(lj, amp, 1.0f/tp); isrun = (t > nsteps / 2); if (nstvmove && t % nstvmove == 0) { vtot += 1; vacc += lj_mcp(lj, 0.01, tp, pressure, 0, 1e300, 0, 0); if (isrun) { av_add(&avrho, lj->n / lj->vol); hist_add1ez(hsvol, lj->vol, HIST_VERBOSE); } } if (t % 10000 == 0) { /* refresh energy regularly, just in case */ real epo = lj->epot; lj_energy(lj); if (fabs(lj->epot - epo) > 1e-2) { fprintf(stderr, "energy mismatch %g vs %g\n", epo, lj->epot); } } if (t % 10000 == 0) printf("t %d\n", t); if (isrun) { av_add(&avU, lj->epot); av_add(&avp, lj_calcp(lj, tp)); if (t % nstrdf == 0) ljrdf_add(ljrdf, 0); } } u = av_getave(&avU)/lj->n; p = av_getave(&avp); rho1 = av_getave(&avrho); printf("erg %g, p %g, rho %g, acc %.2f%%, vacc %.2f%%, rdfnfr %d, dof/d %g\n", u, p, rho1, 100.*acc/nsteps, 100.*vacc/(1e-6 + vtot), ljrdf->nfr, 1.*lj->dof/lj->d); hist_save(hsvol, "volmc.his", HIST_NOZEROES); hist_close(hsvol); ljrdf_save(ljrdf, "rdfmc.dat", HIST_ADDAHALF | HIST_KEEPHIST | HIST_NOZEROES); ljrdf_close(ljrdf); lj_close(lj); return 0; }