예제 #1
0
system.non_bonded_inter[0, 0].lennard_jones.set_params(epsilon=1,
                                                       sigma=1,
                                                       cutoff=2**(1. / 6),
                                                       shift="auto")

system.non_bonded_inter[0, 1].lennard_jones.set_params(epsilon=1,
                                                       sigma=1,
                                                       cutoff=2**(1. / 6),
                                                       shift="auto")

system.non_bonded_inter[1, 1].lennard_jones.set_params(epsilon=1,
                                                       sigma=1,
                                                       cutoff=2**(1. / 6),
                                                       shift="auto")

fene = interactions.FeneBond(k=30, d_r_max=1.5)
system.bonded_inter.add(fene)

# The call to diamond.Diamond() creates 16 connected polymers.
# These polymers are initialized in a straight line connected to crosslink nodes
# Furthermore they are connected to one another across simulation boxes in a periodic fashion.
# It is crucial that the simulation box, chain length and a-parameters be
# chosen such that the arrangement will not break bonds.

# monomers per chain
MPC = 15

# length for Kremer-Grest chain
bond_length = 0.966

# The physical distance beween nodes such that a line of monomers "fit" needs to be worked out.
예제 #2
0
import numpy as np
import espressomd  # pylint: disable=import-error
from espressomd.io.writer import h5md  # pylint: disable=import-error
from espressomd import polymer
from espressomd import interactions

system = espressomd.System(box_l=[100.0, 100.0, 100.0])
system.set_random_state_PRNG()
#system.seed = system.cell_system.get_state()['n_nodes'] * [1234]

system.time_step = 0.01
system.thermostat.set_langevin(kT=1.0, gamma=1.0, seed=42)
system.cell_system.skin = 0.4

fene = interactions.FeneBond(k=10, d_r_max=2)
system.bonded_inter.add(fene)

positions = polymer.positions(n_polymers=5,
                              beads_per_chain=50,
                              bond_length=1.0,
                              seed=1234)
for polymer in positions:
    for i, pos in enumerate(polymer):
        id = len(system.part)
        system.part.add(id=id, pos=pos)
        if i > 0:
            system.part[id].add_bond((fene, id - 1))

system.integrator.run(steps=0)
h5_file = h5md.H5md(filename="sample.h5",
예제 #3
0
def calc(var):

    # AVB: Create an output directory for this to store the output files
    outdir = "./Noelle/r01.5kBT4Ads/1000=3.2"
    if not os.path.exists(outdir):
        os.makedirs(outdir)

    # Setup constant
    time_step = 0.01
    loops = 30
    step_per_loop = 100

    # AVB: the parameters (that I usually use)
    a = 0.05
    r0 = 2.0 * a
    kBT = 4.0e-6
    vwf_type = 0
    collagen_type = 1
    monomer_mass = 0.01

    box_l = 32.0
    #print("Shear velocity:")
    #shear_velocity = float(input())
    #vy = box_l*shear_velocity
    vy = var
    print(vy)
    v = [0, vy, 0]

    # System setup

    system = 0

    system = System(box_l=[box_l, box_l, box_l])
    system.set_random_state_PRNG()
    np.random.seed(seed=system.seed)
    system.cell_system.skin = 0.4

    mpc = 20  # The number of monomers has been set to be 20 as default
    # Change this value for further simulations

    # Fene interaction
    fene = interactions.FeneBond(k=0.04, d_r_max=0.3)
    system.bonded_inter.add(fene)

    # Setup polymer of part_id 0 with fene bond
    # AVB: Notice the mode, max_tries and shield parameters for pruned self-avoiding random walk algorithm
    polymer.create_polymer(N_P=1,
                           MPC=mpc,
                           bond=fene,
                           bond_length=r0,
                           start_pos=[29.8, 16.0, 16.0],
                           mode=2,
                           max_tries=100,
                           shield=0.6 * r0)

    # AVB: setting the type of particles and changing mass of each monomer to 0.01
    system.part[:].type = vwf_type
    system.part[:].mass = monomer_mass

    # AVB: I suggest to add Lennard-Jones interaction between the monomers
    # AVB: to reproduce hydrophobicity
    # AVB: parameters for the potential (amplitude and cut-off redius)
    amplVwfVwf = 4.0 * kBT  # sometimes we change this to 2.0*kBT
    rcutVwfVwf = 1.5 * r0
    # AVB: the potential
    system.non_bonded_inter[vwf_type, vwf_type].lennard_jones.set_params(
        epsilon=amplVwfVwf,
        sigma=r0 / 1.122,
        shift="auto",
        cutoff=rcutVwfVwf,
        min=r0 * 0.6)

    print("Warming up the polymer chain.")
    ## For longer chains (>100) an extensive
    ## warmup is neccessary ...
    system.time_step = 0.002
    system.thermostat.set_langevin(kT=4.0e-6, gamma=1.0)
    # AVB: Here the Langevin thermostat is needed, because we have not yet initialized the LB-fluid.
    # AVB: And somehow it is necessary so that the polymer adopts the equilibrium conformation of the globule.
    # AVB: you may skip this step

    for i in range(100):
        system.force_cap = float(i) + 1
        system.integrator.run(100)

    print("Warmup finished.")
    system.force_cap = 0
    system.integrator.run(100)
    system.time_step = time_step
    system.integrator.run(500)

    # AVB: the following command turns the Langevin thermostat on in line 49
    system.thermostat.turn_off()

    # AVB: This command sets the velocities of all particles to zero
    system.part[:].v = [0, 0, 0]

    # AVB: The density was too small here. I have set 1.0 for now.
    # AVB: It would be necessary to recalculate, but the density of the liquid should not affect the movements of the polymer (this is how our physical model works).
    lbf = espressomd.lb.LBFluid(agrid=1,
                                dens=1.0,
                                visc=1.0e2,
                                tau=time_step,
                                fric=0.01)
    system.actors.add(lbf)
    system.thermostat.set_lb(kT=4.0e-6)

    # Setup boundaries
    walls = [lbboundaries.LBBoundary() for k in range(2)]
    walls[0].set_params(shape=shapes.Wall(normal=[1, 0, 0], dist=1.5),
                        velocity=v)
    walls[1].set_params(shape=shapes.Wall(normal=[-1, 0, 0], dist=-30.5))

    for wall in walls:
        system.lbboundaries.add(wall)

    print("Warming up the system with LB fluid.")
    system.integrator.run(5000)
    print("LB fluid warming finished.")
    # AVB: after this you should have a completely collapsed polymer globule
    # AVB: If you want to watch the process of globule formation in Paraview, just change 5000 to 0 in line 100

    N = 25
    x_coord = np.array([30] * N)
    y_coord = np.arange(14, 24, 5 / N)
    z_coord = np.arange(14, 24, 5 / N)
    for i in range(N):
        for j in range(N):
            system.part.add(id=i * N + j + 100,
                            pos=np.array([x_coord[i], y_coord[j], z_coord[i]]),
                            v=np.array([0, 0, 0]),
                            type=i * N + j + 100)

    all_collagen = range(100, (N - 1) * N + (N - 1) + 100)
    system.comfixed.types = all_collagen

    for i in range(100, (N - 1) * N + (N - 1) + 100):
        system.non_bonded_inter[vwf_type,
                                i].lennard_jones.set_params(epsilon=amplVwfVwf,
                                                            sigma=r0 / 1.122,
                                                            shift="auto",
                                                            cutoff=rcutVwfVwf,
                                                            min=r0 * 0.6)

    # configure correlators
    com_pos = ComPosition(ids=(0, ))
    c = Correlator(obs1=com_pos,
                   tau_lin=16,
                   tau_max=loops * step_per_loop,
                   delta_N=1,
                   corr_operation="square_distance_componentwise",
                   compress1="discard1")
    system.auto_update_accumulators.add(c)

    print("Sampling started.")
    print("lenth after warmup")
    print(
        system.analysis.calc_re(chain_start=0,
                                number_of_chains=1,
                                chain_length=mpc - 1)[0])

    lengths = []

    ylengths = []

    for i in range(loops):
        system.integrator.run(step_per_loop)
        system.analysis.append()
        lengths.append(
            system.analysis.calc_re(chain_start=0,
                                    number_of_chains=1,
                                    chain_length=mpc - 1)[0])
        lbf.print_vtk_velocity(outdir + "/" + str(vy) + "%04i.vtk" % i)
        system.part.writevtk(outdir + "/" + str(vy) + "vwf_all%04i.vtk" % i,
                             types=all_collagen)
        system.part.writevtk(outdir + "/" + str(vy) + "vwf_poly%04i.vtk" % i,
                             types=[0])
        cor = list(system.part[:].pos)
        y = []
        for l in cor:
            y.append(l[1])
        ylengths.append(max(y) - min(y))

        sys.stdout.write("\rSampling: %05i" % i)
        sys.stdout.flush()

    walls[0].set_params(shape=shapes.Wall(normal=[1, 0, 0], dist=1.5))
    walls[1].set_params(shape=shapes.Wall(normal=[-1, 0, 0], dist=-30.5))

    for i in range(100):
        system.integrator.run(step_per_loop)
        lengths.append(
            system.analysis.calc_re(chain_start=0,
                                    number_of_chains=1,
                                    chain_length=mpc - 1)[0])

    system.part.writevtk(outdir + "/" + str(vy) +
                         "vwf_all[r0=2,kBT=4]intheEND.vtk")

    with open(outdir + "/lengths" + str(vy) + ".dat", "a") as datafile:
        datafile.write("\n".join(map(str, lengths)))

    with open(outdir + "/lengthsY" + str(vy) + ".dat", "a") as datafile:
        datafile.write("\n".join(map(str, ylengths)))

    mean_vy = [(vy * 10000) / 32, sum(ylengths) / len(ylengths)]

    print("mean_vy")
    print(mean_vy)

    with open(outdir + "/mean_vy" + "2kBT_2r0" + ".dat", "a") as datafile:
        datafile.write(" ".join(map(str, mean_vy)))

    c.finalize()
    corrdata = c.result()
    corr = zeros((corrdata.shape[0], 2))
    corr[:, 0] = corrdata[:, 0]
    corr[:, 1] = (corrdata[:, 2] + corrdata[:, 3] + corrdata[:, 4]) / 3

    savetxt(outdir + "/msd_nom" + str(mpc) + ".dat", corr)

    with open(outdir + "/rh_out.dat", "a") as datafile:
        rh = system.analysis.calc_rh(chain_start=0,
                                     number_of_chains=1,
                                     chain_length=mpc - 1)
        datafile.write(str(mpc) + "    " + str(rh[0]) + "\n")
예제 #4
0
class CommonTests(ut.TestCase):
    """
    Class that holds common test methods.
    """
    system = espressomd.System(box_l=[1.0, 1.0, 1.0])
    # avoid particles to be set outside of the main box, otherwise particle
    # positions are folded in the core when writing out and we cannot directly
    # compare positions in the dataset and where particles were set. One would
    # need to unfold the positions of the hdf5 file.
    system.box_l = [npart, npart, npart]
    system.cell_system.skin = 0.4
    system.time_step = 0.01
    written_pos = None
    written_bonds = None
    written_atoms = None

    types_to_write = None
    for i in range(npart):
        system.part.add(id=i,
                        pos=np.array([float(i), float(i),
                                      float(i)]),
                        v=np.array([1.0, 2.0, 3.0]),
                        type=1 + (-1)**i)

    system.bonded_inter.add(interactions.FeneBond(k=1., d_r_max=10.0))
    system.part[0].add_bond((0, 1))
    system.part[0].add_bond((0, 2))
    system.part[0].add_bond((0, 3))

    system.integrator.run(steps=0)

    def test_pos(self):
        """Test if positions have been written properly."""
        if self.types_to_write == 'all':
            simulation_pos = np.array([((i), float(i), float(i), float(i))
                                       for i in range(npart)])
        elif (2 in self.types_to_write):
            simulation_pos = np.array([((i * 2), float(i * 2), float(i * 2),
                                        float(i * 2))
                                       for i in range(npart // 2)])

        self.assertTrue(np.allclose(simulation_pos[:, 1:],
                                    self.written_pos[:, 1:]),
                        msg="Positions not written correctly by writevcf!")

    def test_bonds(self):
        """Test if bonds have been written properly: just look at number of bonds"""
        if self.types_to_write == 'all':
            simulation_bonds = np.array([1, 2, 3])  # the two bonded particles
        elif (2 in self.types_to_write):
            types = [2]
            simulation_bonds = np.array(2)  # only this one is type 2

        self.assertTrue(np.allclose(np.shape(simulation_bonds),
                                    np.shape(self.written_bonds)),
                        msg="Bonds not written correctly by writevsf!")

    def test_atoms(self):
        """Test if atom declarations have been written properly."""
        if self.types_to_write == 'all':
            simulation_atoms = np.array([((i), (1 + (-1)**i))
                                         for i in range(npart)])
        elif (2 in self.types_to_write):
            simulation_atoms = np.array([((i * 2), 2)
                                         for i in range(npart // 2)])

        self.assertTrue(np.allclose(simulation_atoms[:, 1],
                                    self.written_atoms[:, 1]),
                        msg="Atoms not written correctly by writevsf!")
예제 #5
0
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
This sample illustrates how bond information can be stored.
"""

from __future__ import print_function
import espressomd
from espressomd import interactions

system = espressomd.System(box_l=[10.0, 10.0, 10.0])
f = interactions.FeneBond(k=1, d_r_max=1)
f2 = interactions.FeneBond(k=2, d_r_max=1.5)
h = interactions.HarmonicBond(r_0=0, k=1)

# Pickle data
###########################################################
try:
    import cPickle as pickle
except ImportError:
    import pickle

system.bonded_inter.add(f)
system.bonded_inter.add(f2)
system.bonded_inter.add(h)

output_filename = "bonded_inter_save.pkl"
예제 #6
0
system = System(box_l=[box_l, box_l, box_l])
system.set_random_state_PRNG()
np.random.seed(seed=system.seed)
system.cell_system.skin = 0.4

print("The number of monomers")
mpc = float(input())  # The number of monomers has been set to be 20 as default
# Change this value for further simulations

# Lennard-Jones interaction
#system.non_bonded_inter[0,0].lennard_jones.set_params(
#    epsilon=0.01, sigma=1.0,
#    shift="auto", cutoff=2.0**(1.0/6.0))

# Fene interaction
fene = interactions.FeneBond(k=0.4, d_r_max=0.3)
system.bonded_inter.add(fene)

# Setup polymer of part_id 0 with fene bond
# AVB: Notice the mode, max_tries and shield parameters for pruned self-avoiding random walk algorithm
polymer.create_polymer(N_P=1,
                       MPC=mpc,
                       bond=fene,
                       bond_length=r0,
                       start_pos=[16.0, 16.0, 16.0],
                       mode=2,
                       max_tries=100,
                       shield=0.6 * r0)

# AVB: setting the type of particles and changing mass of each monomer to 0.01
system.part[:].type = vwf_type
예제 #7
0
system.cell_system.skin = skin
system.box_l = [box_l, box_l, box_l]
system.thermostat.set_langevin(kT=1.0, gamma=1.0)

### Particle types
type_counter = 0
type_mono = type_counter
type_counter += 1

system.non_bonded_inter[type_mono, type_mono].lennard_jones.set_params(
    epsilon=1., sigma=1., cutoff=2.**(1. / 6.), shift="auto")

# See PRL-A, Volume 33, number 5, May 1986, Gary S. Grest and Kurt Kremer
k_fene = (30. * epsilon) / (sigma * sigma)
r_fene = 1.5 * sigma
fene = interactions.FeneBond(k=k_fene, d_r_max=r_fene)
system.bonded_inter.add(fene)

poly_start = 0
polymer.create_polymer(N_P=1,
                       bond_length=0.97,
                       MPC=n_mono,
                       start_id=poly_start,
                       bond=fene,
                       type_poly_neutral=type_mono,
                       type_poly_charged=type_mono,
                       mode=1)
poly_end = poly_start + n_mono

# this is to init a polymer a s straight line
#for p in range(0,n_mono):