def test_write_dftb_velocities(): atoms = Atoms('H2') velocities = np.linspace(-1, 2, num=6).reshape(2, 3) atoms.set_velocities(velocities) write_dftb_velocities(atoms, filename='velocities.txt') velocities = np.loadtxt('velocities.txt') * Bohr / AUT assert np.allclose(velocities, atoms.get_velocities())
label='h2o', Hamiltonian_MaxAngularMomentum_='', Hamiltonian_MaxAngularMomentum_O='p', Hamiltonian_MaxAngularMomentum_H='s', Driver_='VelocityVerlet', Driver_MDRestartFrequency=5, Driver_Velocities_='', Driver_Velocities_empty='<<+ "velocities.txt"', Driver_Steps=500, Driver_KeepStationary='Yes', Driver_TimeStep=8.26, Driver_Thermostat_='Berendsen', Driver_Thermostat_Temperature=0.00339845142, # 800 degC Driver_Thermostat_CouplingStrength=0.01) write_dftb_velocities(atoms, 'velocities.txt') atoms.calc = calculator_NVE atoms.get_potential_energy() # run NVE ensemble using DFTB+'s own driver atoms = read('geo_end.gen') write('after_NVE.xyz', atoms) read_dftb_velocities(atoms, filename='geo_end.xyz') write_dftb_velocities(atoms, 'velocities.txt') os.system('mv geo_end.xyz geo_end_NVE.xyz') atoms.calc = calculator_NVT atoms.get_potential_energy() # run NVT ensemble using DFTB+'s own driver atoms = read('geo_end.gen') write('after_NVT.xyz', atoms)
Hamiltonian_MaxAngularMomentum_='', Hamiltonian_MaxAngularMomentum_O='"p"', Hamiltonian_MaxAngularMomentum_H='"s"', Driver_='VelocityVerlet', Driver_MDRestartFrequency=5, Driver_Velocities_='', Driver_Velocities_empty='<<+ "velocities.txt"', Driver_Steps=500, Driver_KeepStationary='Yes', Driver_TimeStep=8.26, Driver_Thermostat_='Berendsen', Driver_Thermostat_Temperature=0.00339845142, # 800 deg Celcius # Driver_Thermostat_Temperature=0.0, # 0 deg Kelvin Driver_Thermostat_CouplingStrength=0.01) write_dftb_velocities(test, 'velocities.txt') os.system('rm md.log.* md.out* geo_end*xyz') test.set_calculator(calculator_NVE) dyn = VelocityVerlet(test, 0.000 * fs) # fs time step. dyn.attach(MDLogger(dyn, test, 'md.log.NVE', header=True, stress=False, peratom=False, mode='w'), interval=1) dyn.run(1) # run NVE ensemble using DFTB's own driver test = read('geo_end.gen') write('test.afterNVE.xyz', test) read_dftb_velocities(test, filename='geo_end.xyz') write_dftb_velocities(test, 'velocities.txt') os.system('mv md.out md.out.NVE') os.system('mv geo_end.xyz geo_end_NVE.xyz')
def run_dftb(self, gen='poscar.gen'): if self.np == 1: system('dftb+>dftb.out') else: system('mpirun -n %d dftb+>dftb.out' % self.np) def get_thermal(self, out='dftb.out'): e, p, t = get_dftb_energy(out=out) return e, p, t def close(self): print('- Hugstate calculation compeleted.') if __name__ == '__main__': if isfile('dftb.traj'): A = read('dftb.traj', index=-1) write_dftb_velocities(A, 'velocities') A.write('poscar.gen') v = 'velocities' else: v = None ''' evergy (mdRestart) to write MD trajectories i.e. positions and velocities when task completed, can use " ase gui dftb.traj to see the MD results" ''' dftb = DFTB(pressure=None, dT=5.0, ncpu=40, skf_dir='/home/leno/scisoft/3ob-3-1/') dftb.nvt(T=2500, compress=0.996, mdRestart=10, velocities=v)