Example #1
0
File: ljwham.c Project: 3ki5tj/wham
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;
}
Example #2
0
File: history.c Project: att/ast
//
// 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
    }
}
Example #4
0
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;
}
Example #5
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;
}