From 8afed61db1c83ba87365b6525a0fcc9c61a3c193 Mon Sep 17 00:00:00 2001 From: Oliver Henrich Date: Tue, 28 Mar 2017 18:16:36 +0100 Subject: [PATCH] Upgrade to oxDNA2 --- doc/src/PDF/USER-CGDNA-overview.pdf | Bin 3429250 -> 3429502 bytes doc/src/Section_packages.txt | 20 +- doc/src/bond_oxdna.txt | 21 +- doc/src/bonds.txt | 1 + doc/src/pair_oxdna.txt | 36 +- doc/src/pair_oxdna2.txt | 102 ++ doc/src/pairs.txt | 2 + examples/USER/cgdna/README | 8 +- .../examples/oxDNA/duplex1/input.duplex1 | 34 +- ...uplex1.g++.1 => log.24Mar17.duplex1.g++.1} | 62 +- ...uplex1.g++.4 => log.24Mar17.duplex1.g++.4} | 66 +- .../examples/oxDNA/duplex2/input.duplex2 | 36 +- ...uplex2.g++.1 => log.24Mar17.duplex2.g++.1} | 62 +- ...uplex2.g++.4 => log.24Mar17.duplex2.g++.4} | 66 +- .../examples/oxDNA2/duplex1/data.duplex1 | 73 ++ .../examples/oxDNA2/duplex1/input.duplex1 | 78 ++ .../oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 | 1167 +++++++++++++++++ .../oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 | 1167 +++++++++++++++++ .../examples/oxDNA2/duplex2/data.duplex2 | 96 ++ .../examples/oxDNA2/duplex2/input.duplex2 | 78 ++ .../oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 | 1167 +++++++++++++++++ .../oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 | 1167 +++++++++++++++++ examples/USER/cgdna/util/sequence_simple.txt | 8 +- src/USER-CGDNA/bond_oxdna2_fene.cpp | 12 +- src/USER-CGDNA/bond_oxdna2_fene.h | 2 +- src/USER-CGDNA/bond_oxdna_fene.cpp | 8 +- src/USER-CGDNA/bond_oxdna_fene.h | 2 +- src/USER-CGDNA/fix_nve_dot.cpp | 3 +- src/USER-CGDNA/fix_nve_dot.h | 3 + src/USER-CGDNA/fix_nve_dotc_langevin.cpp | 2 +- src/USER-CGDNA/fix_nve_dotc_langevin.h | 3 + src/USER-CGDNA/mf_oxdna.h | 2 +- src/USER-CGDNA/pair_oxdna2_coaxstk.cpp | 6 +- src/USER-CGDNA/pair_oxdna2_coaxstk.h | 2 +- src/USER-CGDNA/pair_oxdna2_dh.cpp | 553 ++++++++ src/USER-CGDNA/pair_oxdna2_dh.h | 75 ++ src/USER-CGDNA/pair_oxdna2_excv.cpp | 18 +- src/USER-CGDNA/pair_oxdna2_excv.h | 2 +- src/USER-CGDNA/pair_oxdna2_stk.cpp | 50 + src/USER-CGDNA/pair_oxdna2_stk.h | 56 + src/USER-CGDNA/pair_oxdna_coaxstk.cpp | 6 +- src/USER-CGDNA/pair_oxdna_coaxstk.h | 2 +- src/USER-CGDNA/pair_oxdna_excv.cpp | 12 +- src/USER-CGDNA/pair_oxdna_excv.h | 2 +- src/USER-CGDNA/pair_oxdna_hbond.cpp | 6 +- src/USER-CGDNA/pair_oxdna_hbond.h | 2 +- src/USER-CGDNA/pair_oxdna_stk.cpp | 25 +- src/USER-CGDNA/pair_oxdna_stk.h | 4 +- src/USER-CGDNA/pair_oxdna_xstk.cpp | 6 +- src/USER-CGDNA/pair_oxdna_xstk.h | 2 +- 50 files changed, 6110 insertions(+), 273 deletions(-) create mode 100644 doc/src/pair_oxdna2.txt rename examples/USER/cgdna/examples/oxDNA/duplex1/{log.17Mar17.duplex1.g++.1 => log.24Mar17.duplex1.g++.1} (97%) rename examples/USER/cgdna/examples/oxDNA/duplex1/{log.17Mar17.duplex1.g++.4 => log.24Mar17.duplex1.g++.4} (97%) rename examples/USER/cgdna/examples/oxDNA/duplex2/{log.17Mar17.duplex2.g++.1 => log.24Mar17.duplex2.g++.1} (97%) rename examples/USER/cgdna/examples/oxDNA/duplex2/{log.17Mar17.duplex2.g++.4 => log.24Mar17.duplex2.g++.4} (97%) create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/data.duplex1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/input.duplex1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/data.duplex2 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/input.duplex2 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 create mode 100644 src/USER-CGDNA/pair_oxdna2_dh.cpp create mode 100644 src/USER-CGDNA/pair_oxdna2_dh.h create mode 100644 src/USER-CGDNA/pair_oxdna2_stk.cpp create mode 100644 src/USER-CGDNA/pair_oxdna2_stk.h diff --git a/doc/src/PDF/USER-CGDNA-overview.pdf b/doc/src/PDF/USER-CGDNA-overview.pdf index 6fb9e43bd1d301d48cfd96e3d37f4a8ea11bb7c2..cada7eaebf80121698d5ef4812c04f0864b77d98 100644 GIT binary patch delta 24462 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 synAA7d*UJkd166 delta 24199 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 #include #include "bond_oxdna2_fene.h" -#include "atom.h" -#include "neighbor.h" -#include "domain.h" -#include "comm.h" -#include "update.h" -#include "force.h" -#include "memory.h" -#include "error.h" -#include "atom_vec_ellipsoid.h" -#include "math_extra.h" using namespace LAMMPS_NS; diff --git a/src/USER-CGDNA/bond_oxdna2_fene.h b/src/USER-CGDNA/bond_oxdna2_fene.h index f3b9731ca9..d7e53d8ae1 100644 --- a/src/USER-CGDNA/bond_oxdna2_fene.h +++ b/src/USER-CGDNA/bond_oxdna2_fene.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef BOND_CLASS diff --git a/src/USER-CGDNA/bond_oxdna_fene.cpp b/src/USER-CGDNA/bond_oxdna_fene.cpp index 87f724b814..dcb171d545 100644 --- a/src/USER-CGDNA/bond_oxdna_fene.cpp +++ b/src/USER-CGDNA/bond_oxdna_fene.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -211,7 +211,7 @@ void BondOxdnaFene::allocate() void BondOxdnaFene::coeff(int narg, char **arg) { - if (narg != 4) error->all(FLERR,"Incorrect args for bond coefficients in oxdna_fene"); + if (narg != 4) error->all(FLERR,"Incorrect args for bond coefficients in oxdna/fene"); if (!allocated) allocate(); int ilo,ihi; @@ -231,7 +231,7 @@ void BondOxdnaFene::coeff(int narg, char **arg) count++; } - if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients in oxdna_fene"); + if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients in oxdna/fene"); } @@ -261,7 +261,7 @@ void BondOxdnaFene::init_style() force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) { if (comm->me == 0) - error->warning(FLERR,"Use special bonds lj = 0,1,1 and coul = 1,1,1 with bond style oxdna_fene"); + error->warning(FLERR,"Use special bonds lj = 0,1,1 and coul = 1,1,1 with bond style oxdna/fene"); } } diff --git a/src/USER-CGDNA/bond_oxdna_fene.h b/src/USER-CGDNA/bond_oxdna_fene.h index bbf310aee2..bba966e2c7 100644 --- a/src/USER-CGDNA/bond_oxdna_fene.h +++ b/src/USER-CGDNA/bond_oxdna_fene.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef BOND_CLASS diff --git a/src/USER-CGDNA/fix_nve_dot.cpp b/src/USER-CGDNA/fix_nve_dot.cpp index 68ea1999ab..5cdda59703 100644 --- a/src/USER-CGDNA/fix_nve_dot.cpp +++ b/src/USER-CGDNA/fix_nve_dot.cpp @@ -10,9 +10,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ - /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include diff --git a/src/USER-CGDNA/fix_nve_dot.h b/src/USER-CGDNA/fix_nve_dot.h index 2c2ff3be63..634ce20dde 100644 --- a/src/USER-CGDNA/fix_nve_dot.h +++ b/src/USER-CGDNA/fix_nve_dot.h @@ -10,6 +10,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ #ifdef FIX_CLASS diff --git a/src/USER-CGDNA/fix_nve_dotc_langevin.cpp b/src/USER-CGDNA/fix_nve_dotc_langevin.cpp index 53cf4b08b9..fae515897c 100644 --- a/src/USER-CGDNA/fix_nve_dotc_langevin.cpp +++ b/src/USER-CGDNA/fix_nve_dotc_langevin.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include diff --git a/src/USER-CGDNA/fix_nve_dotc_langevin.h b/src/USER-CGDNA/fix_nve_dotc_langevin.h index 7f011c0ff5..49cc2dfe90 100644 --- a/src/USER-CGDNA/fix_nve_dotc_langevin.h +++ b/src/USER-CGDNA/fix_nve_dotc_langevin.h @@ -10,6 +10,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ #ifdef FIX_CLASS diff --git a/src/USER-CGDNA/mf_oxdna.h b/src/USER-CGDNA/mf_oxdna.h index 146c5b60c2..f9ba923dbb 100644 --- a/src/USER-CGDNA/mf_oxdna.h +++ b/src/USER-CGDNA/mf_oxdna.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifndef MF_OXDNA_H diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp index 06a24f6546..c0ed980023 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -556,7 +556,7 @@ void PairOxdna2Coaxstk::coeff(int narg, char **arg) { int count; - if (narg != 21) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstack"); + if (narg != 21) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/coaxstk"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -678,7 +678,7 @@ void PairOxdna2Coaxstk::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstack"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/coaxstk"); } diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.h b/src/USER-CGDNA/pair_oxdna2_coaxstk.h index fb84fe0777..908e6e5a3e 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.h +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS diff --git a/src/USER-CGDNA/pair_oxdna2_dh.cpp b/src/USER-CGDNA/pair_oxdna2_dh.cpp new file mode 100644 index 0000000000..ea91dad0a0 --- /dev/null +++ b/src/USER-CGDNA/pair_oxdna2_dh.cpp @@ -0,0 +1,553 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_oxdna2_dh.h" +#include "mf_oxdna.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "update.h" +#include "integrate.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" +#include "atom_vec_ellipsoid.h" +#include "math_extra.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MFOxdna; + +/* ---------------------------------------------------------------------- */ + +PairOxdna2Dh::PairOxdna2Dh(LAMMPS *lmp) : Pair(lmp) +{ + single_enable = 0; + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairOxdna2Dh::~PairOxdna2Dh() +{ + if (allocated) { + + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(qeff_dh_pf); + + memory->destroy(kappa_dh); + memory->destroy(b_dh); + memory->destroy(cut_dh_ast); + memory->destroy(cutsq_dh_ast); + memory->destroy(cut_dh_c); + memory->destroy(cutsq_dh_c); + + } +} + +/* ---------------------------------------------------------------------- + compute vector COM-sugar-phosphate backbone interaction site in oxDNA2 +------------------------------------------------------------------------- */ +void PairOxdna2Dh::compute_interaction_sites(double e1[3], + double e2[3], double r[3]) +{ + double d_cs_x=-0.34, d_cs_y=+0.3408; + + r[0] = d_cs_x*e1[0] + d_cs_y*e2[0]; + r[1] = d_cs_x*e1[1] + d_cs_y*e2[1]; + r[2] = d_cs_x*e1[2] + d_cs_y*e2[2]; +} + +/* ---------------------------------------------------------------------- + compute function for oxDNA pair interactions + s=sugar-phosphate backbone site, b=base site, st=stacking site +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::compute(int eflag, int vflag) +{ + double delf[3],delta[3],deltb[3]; // force, torque increment;; + double rtmp_s[3],delr[3]; + double evdwl,fpair,factor_lj; + double r,rsq,rinv; + // vectors COM-backbone sites in lab frame + double ra_cs[3],rb_cs[3]; + + // quaternions and Cartesian unit vectors in lab frame + double *qa,ax[3],ay[3],az[3]; + double *qb,bx[3],by[3],bz[3]; + double *special_lj = force->special_lj; + + double **x = atom->x; + double **f = atom->f; + double **torque = atom->torque; + int *type = atom->type; + + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + int *alist,*blist,*numneigh,**firstneigh; + + AtomVecEllipsoid *avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); + AtomVecEllipsoid::Bonus *bonus = avec->bonus; + + int a,b,ia,ib,anum,bnum,atype,btype; + + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + anum = list->inum; + alist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over pair interaction neighbours of my atoms + + for (ia = 0; ia < anum; ia++) { + + a = alist[ia]; + atype = type[a]; + + qa=bonus[a].quat; + MathExtra::q_to_exyz(qa,ax,ay,az); + + // vector COM-backbone site a + compute_interaction_sites(ax,ay,ra_cs); + + rtmp_s[0] = x[a][0] + ra_cs[0]; + rtmp_s[1] = x[a][1] + ra_cs[1]; + rtmp_s[2] = x[a][2] + ra_cs[2]; + + blist = firstneigh[a]; + bnum = numneigh[a]; + + for (ib = 0; ib < bnum; ib++) { + + b = blist[ib]; + factor_lj = special_lj[sbmask(b)]; // = 0 for nearest neighbours + b &= NEIGHMASK; + btype = type[b]; + + qb=bonus[b].quat; + MathExtra::q_to_exyz(qb,bx,by,bz); + + // vector COM-backbone site b + compute_interaction_sites(bx,by,rb_cs); + + // vector backbone site b to a + delr[0] = rtmp_s[0] - x[b][0] - rb_cs[0]; + delr[1] = rtmp_s[1] - x[b][1] - rb_cs[1]; + delr[2] = rtmp_s[2] - x[b][2] - rb_cs[2]; + rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + + if (rsq <= cutsq_dh_c[atype][btype]) { + + r = sqrt(rsq); + rinv = 1.0/r; + + if (r <= cut_dh_ast[atype][btype]) { + + fpair = qeff_dh_pf[atype][btype] * exp(-kappa_dh[atype][btype] * r) * + (kappa_dh[atype][btype] + rinv) * rinv * rinv; + + if (eflag) { + evdwl = qeff_dh_pf[atype][btype] * exp(-kappa_dh[atype][btype]*r) * rinv; + } + + } + else { + + fpair = 2.0 * b_dh[atype][btype] * (cut_dh_c[atype][btype] - r) * rinv; + + if (eflag) { + evdwl = b_dh[atype][btype] * (r - cut_dh_c[atype][btype]) * (r - cut_dh_c[atype][btype]); + } + + } + + // knock out nearest-neighbour interaction between adjacent backbone sites + fpair *= factor_lj; + evdwl *= factor_lj; + + delf[0] = delr[0] * fpair; + delf[1] = delr[1] * fpair; + delf[2] = delr[2] * fpair; + + // apply force and torque to each of 2 atoms + + if (newton_pair || a < nlocal) { + + f[a][0] += delf[0]; + f[a][1] += delf[1]; + f[a][2] += delf[2]; + + MathExtra::cross3(ra_cs,delf,delta); + + torque[a][0] += delta[0]; + torque[a][1] += delta[1]; + torque[a][2] += delta[2]; + + } + + if (newton_pair || b < nlocal) { + + f[b][0] -= delf[0]; + f[b][1] -= delf[1]; + f[b][2] -= delf[2]; + + MathExtra::cross3(rb_cs,delf,deltb); + + torque[b][0] -= deltb[0]; + torque[b][1] -= deltb[1]; + torque[b][2] -= deltb[2]; + + } + + // increment energy and virial + + if (evflag) ev_tally(a,b,nlocal,newton_pair, + evdwl,0.0,fpair,delr[0],delr[1],delr[2]); + } + + } + } +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(kappa_dh,n+1,n+1,"pair:kappa_dh"); + memory->create(qeff_dh_pf,n+1,n+1,"pair:qeff_dh_pf"); + + memory->create(b_dh,n+1,n+1,"pair:b_dh"); + memory->create(cut_dh_ast,n+1,n+1,"pair:cut_dh_ast"); + memory->create(cutsq_dh_ast,n+1,n+1,"pair:cutsq_dh_ast"); + memory->create(cut_dh_c,n+1,n+1,"pair:cut_dh_c"); + memory->create(cutsq_dh_c,n+1,n+1,"pair:cutsq_dh_c"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::settings(int narg, char **arg) +{ + if (narg != 0) error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::coeff(int narg, char **arg) +{ + int count; + + if (narg != 5) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/dh"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + count = 0; + + double T, rhos_dh_one, qeff_dh_one; + + T = force->numeric(FLERR,arg[2]); + rhos_dh_one = force->numeric(FLERR,arg[3]); + qeff_dh_one = force->numeric(FLERR,arg[4]); + + double lambda_dh_one, kappa_dh_one, qeff_dh_pf_one; + double b_dh_one, cut_dh_ast_one, cut_dh_c_one; + + // Debye length and inverse Debye length + + /* + NOTE: + The numerical factor is the Debye length in s.u. + lambda(T = 300 K = 0.1) = + sqrt(eps_0 * eps_r * k_B * T/(2 * N_A * e^2 * 1000 mol/m^3)) + * 1/oxDNA_energy_unit + (see B. Snodin et al., J. Chem. Phys. 142, 234901 (2015).) + + We use + eps_0 = vacuum permittivity = 8.854187817e-12 F/m + eps_r = relative permittivity of water = 80 + k_B = Boltzmann constant = 1.3806485279e-23 J/K + T = absolute temperature = 300 K + N_A = Avogadro constant = 6.02214085774e23 / mol + e = elementary charge = 1.6021766208e-19 C + oxDNA_length_unit = 8.518e-10 m + */ + + lambda_dh_one = 0.3616455075438555*sqrt(T/0.1/rhos_dh_one); + kappa_dh_one = 1.0/lambda_dh_one; + + // prefactor in DH interaction containing qeff^2 + + /* + NOTE: + The numerical factor is + qeff_dh_pf = e^2/(4 * pi * eps_0 * eps_r) + * 1/(oxDNA_energy_unit * oxDNA_length_unit) + (see B. Snodin et al., J. Chem. Phys. 142, 234901 (2015).) + + In addition to the above units we use + oxDNA_energy_unit = 4.142e-20 J + */ + + qeff_dh_pf_one = 0.08173808693529228*qeff_dh_one*qeff_dh_one; + + // smoothing parameters - determined through continuity and differentiability + + cut_dh_ast_one = 3.0*lambda_dh_one; + + b_dh_one = -(exp(-cut_dh_ast_one/lambda_dh_one) * qeff_dh_pf_one * qeff_dh_pf_one * + (cut_dh_ast_one + lambda_dh_one) * (cut_dh_ast_one + lambda_dh_one))/ + (-4.0 * cut_dh_ast_one * cut_dh_ast_one * cut_dh_ast_one * + lambda_dh_one * lambda_dh_one * qeff_dh_pf_one); + + cut_dh_c_one = cut_dh_ast_one * (qeff_dh_pf_one*cut_dh_ast_one + + 3.0*qeff_dh_pf_one * lambda_dh_one)/ + (qeff_dh_pf_one * (cut_dh_ast_one+lambda_dh_one)); + + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + + kappa_dh[i][j] = kappa_dh_one; + qeff_dh_pf[i][j] = qeff_dh_pf_one; + b_dh[i][j] = b_dh_one; + cut_dh_ast[i][j] = cut_dh_ast_one; + cut_dh_c[i][j] = cut_dh_c_one; + + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/dh"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::init_style() +{ + int irequest; + + // request regular neighbor lists + + irequest = neighbor->request(this,instance_me); +} + +/* ---------------------------------------------------------------------- + neighbor callback to inform pair style of neighbor list to use regular +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::init_list(int id, NeighList *ptr) +{ + if (id == 0) list = ptr; + if (id > 0) error->all(FLERR,"Respa not supported"); +} + + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairOxdna2Dh::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + error->all(FLERR,"Coefficient mixing not defined in oxDNA"); + } + if (offset_flag) { + error->all(FLERR,"Offset not supported in oxDNA"); + } + + kappa_dh[j][i] = kappa_dh[i][j]; + qeff_dh_pf[j][i] = qeff_dh_pf[i][j]; + + b_dh[j][i] = b_dh[i][j]; + + cut_dh_ast[j][i] = cut_dh_ast[i][j]; + cut_dh_c[j][i] = cut_dh_c[i][j]; + + cutsq_dh_ast[i][j] = cut_dh_ast[i][j]*cut_dh_ast[i][j]; + cutsq_dh_ast[j][i] = cutsq_dh_ast[i][j]; + + cutsq_dh_c[i][j] = cut_dh_c[i][j]*cut_dh_c[i][j]; + cutsq_dh_c[j][i] = cutsq_dh_c[i][j]; + + // set the master list distance cutoff + return cut_dh_c[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + + fwrite(&kappa_dh[i][j],sizeof(double),1,fp); + fwrite(&qeff_dh_pf[i][j],sizeof(double),1,fp); + fwrite(&b_dh[i][j],sizeof(double),1,fp); + fwrite(&cut_dh_ast[i][j],sizeof(double),1,fp); + fwrite(&cut_dh_c[i][j],sizeof(double),1,fp); + + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::read_restart(FILE *fp) +{ + read_restart_settings(fp); + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + + fread(&kappa_dh[i][j],sizeof(double),1,fp); + fread(&qeff_dh_pf[i][j],sizeof(double),1,fp); + fread(&b_dh[i][j],sizeof(double),1,fp); + fread(&cut_dh_ast[i][j],sizeof(double),1,fp); + fread(&cut_dh_c[i][j],sizeof(double),1,fp); + + } + + MPI_Bcast(&kappa_dh[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&qeff_dh_pf[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&b_dh[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_dh_ast[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_dh_c[i][j],1,MPI_DOUBLE,0,world); + + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::write_restart_settings(FILE *fp) +{ + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::read_restart_settings(FILE *fp) +{ + int me = comm->me; + if (me == 0) { + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + } + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d\ + %g %g\ + %g %g %g\ + \n",i, + kappa_dh[i][i],qeff_dh_pf[i][i], + b_dh[i][i],cut_dh_ast[i][i],cut_dh_c[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairOxdna2Dh::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d\ + %g %g\ + %g %g %g\ + \n",i,j, + kappa_dh[i][j],qeff_dh_pf[i][j], + b_dh[i][j],cut_dh_ast[i][j],cut_dh_c[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +void *PairOxdna2Dh::extract(const char *str, int &dim) +{ + dim = 2; + + if (strcmp(str,"kappa_dh") == 0) return (void *) kappa_dh; + if (strcmp(str,"qeff_dh_pf") == 0) return (void *) qeff_dh_pf; + if (strcmp(str,"b_dh") == 0) return (void *) b_dh; + if (strcmp(str,"cut_dh_ast") == 0) return (void *) cut_dh_ast; + if (strcmp(str,"cut_dh_c") == 0) return (void *) cut_dh_c; + + return NULL; +} diff --git a/src/USER-CGDNA/pair_oxdna2_dh.h b/src/USER-CGDNA/pair_oxdna2_dh.h new file mode 100644 index 0000000000..46dd4729c1 --- /dev/null +++ b/src/USER-CGDNA/pair_oxdna2_dh.h @@ -0,0 +1,75 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(oxdna2/dh,PairOxdna2Dh) + +#else + +#ifndef LMP_PAIR_OXDNA2_DH_H +#define LMP_PAIR_OXDNA2_DH_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairOxdna2Dh : public Pair { + public: + PairOxdna2Dh(class LAMMPS *); + virtual ~PairOxdna2Dh(); + virtual void compute_interaction_sites(double *, double *, double *); + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + void init_style(); + void init_list(int, class NeighList *); + double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + void *extract(const char *, int &); + + protected: + + double **qeff_dh_pf,**kappa_dh; + double **b_dh,**cut_dh_ast,**cutsq_dh_ast,**cut_dh_c,**cutsq_dh_c; + + virtual void allocate(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-CGDNA/pair_oxdna2_excv.cpp b/src/USER-CGDNA/pair_oxdna2_excv.cpp index 010c3f9bd5..e1b18e1487 100644 --- a/src/USER-CGDNA/pair_oxdna2_excv.cpp +++ b/src/USER-CGDNA/pair_oxdna2_excv.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -19,24 +19,8 @@ #include #include #include "pair_oxdna2_excv.h" -#include "mf_oxdna.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" -#include "integrate.h" -#include "math_const.h" -#include "memory.h" -#include "error.h" -#include "atom_vec_ellipsoid.h" -#include "math_extra.h" using namespace LAMMPS_NS; -using namespace MathConst; -using namespace MFOxdna; /* ---------------------------------------------------------------------- */ diff --git a/src/USER-CGDNA/pair_oxdna2_excv.h b/src/USER-CGDNA/pair_oxdna2_excv.h index a135d59430..2414afa685 100644 --- a/src/USER-CGDNA/pair_oxdna2_excv.h +++ b/src/USER-CGDNA/pair_oxdna2_excv.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS diff --git a/src/USER-CGDNA/pair_oxdna2_stk.cpp b/src/USER-CGDNA/pair_oxdna2_stk.cpp new file mode 100644 index 0000000000..3b98db3201 --- /dev/null +++ b/src/USER-CGDNA/pair_oxdna2_stk.cpp @@ -0,0 +1,50 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_oxdna2_stk.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairOxdna2Stk::PairOxdna2Stk(LAMMPS *lmp) : PairOxdnaStk(lmp) +{ + +} + +/* ---------------------------------------------------------------------- */ + +PairOxdna2Stk::~PairOxdna2Stk() +{ + +} + +/* ---------------------------------------------------------------------- + return temperature dependent oxDNA2 stacking strength +------------------------------------------------------------------------- */ + +double PairOxdna2Stk::stacking_strength(double T) +{ + double eps; + + eps = 1.3523 + 2.6717 * T; + + return eps; +} diff --git a/src/USER-CGDNA/pair_oxdna2_stk.h b/src/USER-CGDNA/pair_oxdna2_stk.h new file mode 100644 index 0000000000..4cc5a48909 --- /dev/null +++ b/src/USER-CGDNA/pair_oxdna2_stk.h @@ -0,0 +1,56 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(oxdna2/stk,PairOxdna2Stk) + +#else + +#ifndef LMP_PAIR_OXDNA2_STK_H +#define LMP_PAIR_OXDNA2_STK_H + +#include "pair_oxdna_stk.h" + +namespace LAMMPS_NS { + +class PairOxdna2Stk : public PairOxdnaStk { + public: + PairOxdna2Stk(class LAMMPS *); + virtual ~PairOxdna2Stk(); + + protected: + virtual double stacking_strength(double); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp index 4ad98bb36a..4a1af83884 100644 --- a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -680,7 +680,7 @@ void PairOxdnaCoaxstk::coeff(int narg, char **arg) { int count; - if (narg != 23) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstack"); + if (narg != 23) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/coaxstk"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -818,7 +818,7 @@ void PairOxdnaCoaxstk::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstack"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/coaxstk"); } diff --git a/src/USER-CGDNA/pair_oxdna_coaxstk.h b/src/USER-CGDNA/pair_oxdna_coaxstk.h index 7251893c73..e6e4a705a7 100644 --- a/src/USER-CGDNA/pair_oxdna_coaxstk.h +++ b/src/USER-CGDNA/pair_oxdna_coaxstk.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS diff --git a/src/USER-CGDNA/pair_oxdna_excv.cpp b/src/USER-CGDNA/pair_oxdna_excv.cpp index 8046942cd1..09ae13f1b2 100644 --- a/src/USER-CGDNA/pair_oxdna_excv.cpp +++ b/src/USER-CGDNA/pair_oxdna_excv.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -455,7 +455,7 @@ void PairOxdnaExcv::coeff(int narg, char **arg) { int count; - if (narg != 11) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_excv"); + if (narg != 11) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/excv"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -501,7 +501,7 @@ void PairOxdnaExcv::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_excv"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/excv"); count = 0; @@ -532,7 +532,7 @@ void PairOxdnaExcv::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_excv"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/excv"); count = 0; @@ -563,7 +563,7 @@ void PairOxdnaExcv::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_excv"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/excv"); } @@ -664,7 +664,7 @@ double PairOxdnaExcv::init_one(int i, int j) cutsq_bb_c[j][i] = cutsq_bb_c[i][j]; // set the master list distance cutoff - return cut_ss_ast[i][j]; + return cut_ss_c[i][j]; } diff --git a/src/USER-CGDNA/pair_oxdna_excv.h b/src/USER-CGDNA/pair_oxdna_excv.h index 683bebc279..63d2558294 100644 --- a/src/USER-CGDNA/pair_oxdna_excv.h +++ b/src/USER-CGDNA/pair_oxdna_excv.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS diff --git a/src/USER-CGDNA/pair_oxdna_hbond.cpp b/src/USER-CGDNA/pair_oxdna_hbond.cpp index 24fd82d3d8..96f86d6059 100644 --- a/src/USER-CGDNA/pair_oxdna_hbond.cpp +++ b/src/USER-CGDNA/pair_oxdna_hbond.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -607,7 +607,7 @@ void PairOxdnaHbond::coeff(int narg, char **arg) { int count; - if (narg != 26) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_hbond"); + if (narg != 26) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/hbond"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -770,7 +770,7 @@ void PairOxdnaHbond::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_hbond"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/hbond"); } diff --git a/src/USER-CGDNA/pair_oxdna_hbond.h b/src/USER-CGDNA/pair_oxdna_hbond.h index ac7fa1fda0..4ce79b59de 100644 --- a/src/USER-CGDNA/pair_oxdna_hbond.h +++ b/src/USER-CGDNA/pair_oxdna_hbond.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS diff --git a/src/USER-CGDNA/pair_oxdna_stk.cpp b/src/USER-CGDNA/pair_oxdna_stk.cpp index 916ad24539..9a5779afad 100644 --- a/src/USER-CGDNA/pair_oxdna_stk.cpp +++ b/src/USER-CGDNA/pair_oxdna_stk.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -644,6 +644,19 @@ void PairOxdnaStk::settings(int narg, char **arg) } +/* ---------------------------------------------------------------------- + return temperature dependent oxDNA stacking strength +------------------------------------------------------------------------- */ + +double PairOxdnaStk::stacking_strength(double T) +{ + double eps; + + eps = 1.3448 + 2.6568 * T; + + return eps; +} + /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ @@ -652,7 +665,7 @@ void PairOxdnaStk::coeff(int narg, char **arg) { int count; - if (narg != 21) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_stk"); + if (narg != 21) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/stk"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -662,7 +675,7 @@ void PairOxdnaStk::coeff(int narg, char **arg) // stacking interaction count = 0; - double epsilon_st_one, a_st_one, b_st_lo_one, b_st_hi_one; + double T, epsilon_st_one, a_st_one, b_st_lo_one, b_st_hi_one; double cut_st_0_one, cut_st_c_one, cut_st_lo_one, cut_st_hi_one; double cut_st_lc_one, cut_st_hc_one, tmp, shift_st_one; @@ -678,7 +691,9 @@ void PairOxdnaStk::coeff(int narg, char **arg) double a_st1_one, cosphi_st1_ast_one, b_st1_one, cosphi_st1_c_one; double a_st2_one, cosphi_st2_ast_one, b_st2_one, cosphi_st2_c_one; - epsilon_st_one = force->numeric(FLERR,arg[2]); + T = force->numeric(FLERR,arg[2]); + epsilon_st_one = stacking_strength(T); + a_st_one = force->numeric(FLERR,arg[3]); cut_st_0_one = force->numeric(FLERR,arg[4]); cut_st_c_one = force->numeric(FLERR,arg[5]); @@ -790,7 +805,7 @@ void PairOxdnaStk::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_stk"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/stk"); } diff --git a/src/USER-CGDNA/pair_oxdna_stk.h b/src/USER-CGDNA/pair_oxdna_stk.h index 40ee87ee29..edab9db3cf 100644 --- a/src/USER-CGDNA/pair_oxdna_stk.h +++ b/src/USER-CGDNA/pair_oxdna_stk.h @@ -11,13 +11,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS PairStyle(oxdna/stk,PairOxdnaStk) -PairStyle(oxdna2/stk,PairOxdnaStk) #else @@ -48,6 +47,7 @@ class PairOxdnaStk : public Pair { protected: // stacking interaction + virtual double stacking_strength(double); double **epsilon_st, **a_st, **cut_st_0, **cut_st_c; double **cut_st_lo, **cut_st_hi; double **cut_st_lc, **cut_st_hc, **b_st_lo, **b_st_hi, **shift_st; diff --git a/src/USER-CGDNA/pair_oxdna_xstk.cpp b/src/USER-CGDNA/pair_oxdna_xstk.cpp index 72165410eb..c14993dc36 100644 --- a/src/USER-CGDNA/pair_oxdna_xstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_xstk.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #include @@ -625,7 +625,7 @@ void PairOxdnaXstk::coeff(int narg, char **arg) { int count; - if (narg != 25) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstk"); + if (narg != 25) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/xstk"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -772,7 +772,7 @@ void PairOxdnaXstk::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna_xstk"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients in oxdna/xstk"); } diff --git a/src/USER-CGDNA/pair_oxdna_xstk.h b/src/USER-CGDNA/pair_oxdna_xstk.h index a10bd44461..9d520ebc89 100644 --- a/src/USER-CGDNA/pair_oxdna_xstk.h +++ b/src/USER-CGDNA/pair_oxdna_xstk.h @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Oliver Henrich (EPCC, University of Edinburgh) + Contributing author: Oliver Henrich (University of Strathclyde, Glasgow) ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS