def generate_data(count, filename='cmd.traj'): """Generates test or training data with a simple MD simulation.""" if os.path.exists(filename): return traj = io.Trajectory(filename, 'w') atoms = io.read('2.xyz') atoms.set_calculator(Amp.load('sio2.amp')) atoms.get_potential_energy() traj.write(atoms) mb(atoms, 300. * units.kB) # dyn = vv(atoms, dt=1. * units.fs, logfile='cmd.log') dyn = NVTB(atoms, timestep=0.5 * units.fs, temperature=300, taut=2.0 * units.fs, logfile='cmd.log') for step in range(count - 1): dyn.run(1) traj.write(atoms)
def md_run( parent_dataset, dft_calculator, starting_image, temp, dt, count, label, ensemble="NVE", ): slab = starting_image.copy() slab.set_calculator(AMPOnlineCalc(parent_dataset, dft_calculator, 3)) # MaxwellBoltzmannDistribution(slab, temp * units.kB) if ensemble == "nvtberendsen": dyn = NVTBerendsen(slab, dt * ase.units.fs, temp, taut=300 * ase.units.fs) traj = ase.io.Trajectory(label + ".traj", "w", slab) dyn.attach(traj.write, interval=1) dyn.run(count - 1)
# Parameters for the Morse potential for Cu D = 0.3429 r0 = 2.866 alpha = 1.3588 atoms = read('hexagonal_lattice.xyz') atoms.set_calculator(MorsePotential(D=D, alpha=alpha, r0=r0)) vel = np.zeros((len(atoms), 3)) # initialize velocities with uniform random numbers between [-0.005, 0.005] # gives random initial velocity vel[:, 0] = (np.random.rand(len(atoms)) - 0.5) * 1e-2 vel[:, 1] = (np.random.rand(len(atoms)) - 0.5) * 1e-2 atoms.set_velocities(vel) open('berendsen.log', 'w').close() dyn = NVTBerendsen(atoms, timestep=1 * units.fs, temperature=600, taut=100 * units.fs, logfile='berendsen.log', trajectory='berendsen.traj') # Note that the temperature in NVTBerendsen is given in K # taut = relaxtation time dyn.run(1000) write('berendsen.xyz', read('berendsen.traj@:'))
calc = GAP(rcut=6.0) nsw, pstress, tebeg, potim, _ = read_incar() my_atoms = read('POSCAR', format='vasp') my_atoms.set_calculator(calc) """ for NVT """ #print(tebeg,'tebeg') dyn = NVTBerendsen(my_atoms, timestep=potim * fs, temperature=tebeg, taut=0.5 * 1000 * fs, trajectory='ase.traj') dyn.attach(MDLogger(dyn, my_atoms, 'OUTCAR', header=True, stress=True, pstress=pstress, peratom=False, mode="w"), interval=1) dyn.run(steps=nsw) atoms_lat = my_atoms.cell atoms_pos = my_atoms.positions atoms_symbols = my_atoms.get_chemical_symbols() element, ele = get_ele_dict(atoms_symbols) write_contcar(element, ele, atoms_lat, atoms_pos)
if atom.position[i] > cell[i,i]-self.margin: atom.momentum[i] = -abs(atom.momentum[i]) if __name__ == '__main__': # test from ase.cluster.cubic import FaceCenteredCubic from ase.calculators.emt import EMT from ase.md.nvtberendsen import NVTBerendsen from ase.io.trajectory import Trajectory from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation from ase.units import fs, kB atoms = FaceCenteredCubic( 'Pt', [(1, 0, 0), (1, 1, 0), (1, 1, 1)], [2, 3, 1], 4.09) atoms.center(vacuum=5) atoms.set_calculator( EMT() ) T = 8000 # K -- try to vaporize MaxwellBoltzmannDistribution(atoms, kB*T) Stationary(atoms) ZeroRotation(atoms) #dyn = NVTBerendsen(atoms, 1*fs, T, 500*fs, logfile='-') dyn = NVTBerendsen(atoms, 1*fs, T, 500*fs, logfile='-') traj = Trajectory('borders_test.traj', 'w', atoms) dyn.attach(traj.write, interval=10) fr = Freeze(atoms) #fr = Mirror(atoms) dyn.attach( fr, interval=20 ) dyn.run(5000) traj.close()
si.set_calculator(calc) # geometry optimization si = optimize(si, box=True) print('equlirum cell para: ', si.get_cell()[0][0]) print('equlirum energy: ', si.get_potential_energy()) print('equlirum stress', -si.get_stress() / units.GPa) # Build the 2*2*2 supercell atoms = si * 2 atoms.set_calculator(calc) print(atoms) # NVT MD simulation dyn = NVTBerendsen(atoms, p.time_step * units.fs, p.temperature, taut=p.taut * units.fs) MaxwellBoltzmannDistribution(atoms, p.temperature * units.kB) dyn.attach(MDLogger(dyn, atoms, 'md.log', header=True, stress=False, mode="w"), interval=p.save_interval) traj = Trajectory('md.traj', 'w', atoms) dyn.attach(traj.write, interval=p.save_interval) dyn.run(p.run_step)