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)
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()
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)
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)