def calculate_kinetic_energy(): tmp_kin_energy = 0. for i in range(system.n_part): tmp_kin_energy+=1./2.*numpy.linalg.norm(system.part[i].v)**2.0 print("tmp_kin_energy={}".format(tmp_kin_energy)) print("analyze.energy(system)['ideal']={}".format(analyze.energy(system)["ideal"]))
def main_loop(): global energies print("run %d at time=%f " % (i, system.time)) integrate.integrate(int_steps) mayavi.update() energies = analyze.energy(system=system) print(energies) plot.set_xdata(numpy.append(plot.get_xdata(), system.time)) plot.set_ydata(numpy.append(plot.get_ydata(), energies['total'])) obs_file.write('{ time %s } %s\n' % (system.time, energies)) linear_momentum = analyze.analyze_linear_momentum(system=system) print(linear_momentum)
def runTest(self): self.system.box_l = [self.box_l, self.box_l, self.box_l] self.system.skin = 0.4 self.system.time_step = 0.01 self.system.non_bonded_inter[0, 0].lennard_jones.set_params( epsilon=self.lj_eps, sigma=self.lj_sig, cutoff=self.lj_cut, shift="auto") for i in range(self.n_part): self.system.part.add(id=i, pos=np.random.random(3) * self.system.box_l) minimize=self.system.minimize_energy minimize.init(f_max=0.0, gamma=0.1, max_steps=10000, max_displacement=0.001) minimize.minimize() minimize.minimize() energy = analyze.energy(system=self.system) assert( energy["total"] == 0 )
system = espressomd.System() #if no seed is provided espresso generates a seed system.time_step = 0.01 system.skin = 0.4 system.box_l = [100, 100, 100] system.thermostat.set_langevin(1.0, 1.0) system.cell_system.set_n_square(use_verlet_lists=False) system.non_bonded_inter[0, 0].lennard_jones.set_params( epsilon=1, sigma=1, cutoff=2**(1. / 6), shift="auto") fene = interactions.FeneBond(k=10, d_r_max=2) system.bonded_inter.add(fene) poly = system.polymer poly(N_P = 1, bond_length = 1.0, MPC=50, bond_id=0) ############################################################# # Integration # ############################################################# for i in range(20): integrate.integrate(1000) energies = analyze.energy(system=system) print energies
set_file = open("pylj_liquid.set", "w") set_file.write("box_l %s\ntime_step %s\nskin %s\n" % (box_l, system.time_step, system.skin)) ############################################################# # Integration # ############################################################# print("\nStart integration: run %d times %d steps" % (int_n_times, int_steps)) # remove force capping lj_cap = 0 system.nonBondedInter.setForceCap(lj_cap) print(system.nonBondedInter[0, 0].lennardJones) # print initial energies energies = analyze.energy(system=system) print(energies) j = 0 for i in range(0, int_n_times): print("run %d at time=%f " % (i, system.time)) integrate.integrate(int_steps) energies = analyze.energy(system=system) print(energies) obs_file.write('{ time %s } %s\n' % (system.time, energies)) # write end configuration end_file = open("pylj_liquid.end", "w") end_file.write("{ time %f } \n { box_l %f }\n" % (system.time, box_l))
def main_loop(): global energies, plt1_x_data, plt1_y_data, plt2_x_data, plt2_y_data, old_pressure integrate.integrate(int_steps) mayavi.update() # make sure the parameters are valid # not sure if this is necessary after using limit_range if controls.volume == 0: controls.volume = controls.min_vol if controls.number_of_particles == 0: controls.number_of_particles = 1 if controls.pressure == 0: controls.pressure = controls.min_press pressure = analyze.pressure(system) # update the parameters set in the GUI system.thermostat.set_langevin(kT=controls.temperature, gamma=1.0) if controls.ensemble == 'NPT': # reset Vkappa when target pressure has changed if old_pressure != controls.pressure: analyze.Vkappa(system, 'reset') old_pressure = controls.pressure newVkappa = analyze.Vkappa(system, 'read')['Vk1'] newVkappa = newVkappa if newVkappa > 0. else 4.0/(NPTGamma0*NPTGamma0*NPTInitPistonMass) pistonMass = limit_range(4.0/(NPTGamma0*NPTGamma0*newVkappa), NPTMinPistonMass, NPTMaxPistonMass) integrate.set_integrator_isotropic_npt(controls.pressure, pistonMass, cubic_box=True) controls.volume = system.box_l[0]**3. else: integrate.set_integrator_nvt() controls.pressure = pressure['total'] new_box = numpy.ones(3) * controls.volume**(1./3.) if numpy.any(numpy.array(system.box_l) != new_box): for i in range(system.n_part): system.part[i].pos *= new_box / system.box_l[0] system.box_l = new_box new_part = controls.number_of_particles if new_part > system.n_part: for i in range(system.n_part, new_part): system.part.add(id=i, pos=numpy.random.random(3) * system.box_l) elif new_part < system.n_part: for i in range(new_part, system.n_part): system.part[i].delete() # There should be no gaps in particle numbers assert system.n_part == system.max_part + 1 plt1_x_data = plot1.get_xdata() plt1_y_data = plot1.get_ydata() plt2_x_data = plot2.get_xdata() plt2_y_data = plot2.get_ydata() plt1_x_data = numpy.append(plt1_x_data[-plot_max_data_len+1:], system.time) if show_real_system_temperature: plt1_y_data = numpy.append(plt1_y_data[-plot_max_data_len+1:], 2./(3. * system.n_part)*analyze.energy(system)["ideal"]) else: plt1_y_data = numpy.append(plt1_y_data[-plot_max_data_len+1:], system.temperature) plt2_x_data = numpy.append(plt2_x_data[-plot_max_data_len+1:], system.time) plt2_y_data = numpy.append(plt2_y_data[-plot_max_data_len+1:], pressure['total'])