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)
Exemple #2
0
                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()

Exemple #3
0
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)
Exemple #4
0
    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)