def run_mio_test(test=None): database_folder = os.getenv('MIO') if database_folder is None: raise RuntimeError('Please use environment variable MIO to specify path to mio Slater-Koster tables.') calc = Atomistica( [ native.TightBinding( database_folder = database_folder, SolverLAPACK = dict(electronic_T=0.001), SCC = dict(dq_crit = 1e-4, mixing = 0.2, # 0.2 andersen_memory = 3, # 3 maximum_iterations = 100, log = True) ), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0) ], avgn = 1000 ) check_db(calc, db2, test=test)
a = molecule('H2O') a.center(vacuum=10.0) ### database_folder = os.getenv('MIO') if database_folder is None: raise RuntimeError( 'Please use environment variable MIO to specify path to mio Slater-Koster tables.' ) tb = native.TightBinding( database_folder=database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-4, mixing=0.2, # 0.2 andersen_memory=3, # 3 maximum_iterations=100, log=True)) calc = Atomistica( [tb, native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0)], avgn=1000) a.set_calculator(calc) print('potential energy =', a.get_potential_energy()) print('eigenvalues:') for ev, occ in zip(tb.eigenvalues, tb.occupation): print(ev, occ)
def run_dftb3_test(test=None, tol=0.05): mio_database_folder = os.getenv('MIO') if mio_database_folder is None: raise RuntimeError( 'Please use environment variable MIO to specify path to mio Slater-Koster tables.' ) dftb3_database_folder = os.getenv('DFTB3') if dftb3_database_folder is None: raise RuntimeError( 'Please use environment variable DFTB3 to specify path to 3ob Slater-Koster tables.' ) dftb2_calc = Atomistica( [ native.TightBinding( database_folder=mio_database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-6, mixing=0.05, # 0.2 andersen_memory=15, # 3 maximum_iterations=100, log=True)), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0) ], avgn=1000) dftb2_XH_calc = Atomistica( [ native.TightBinding( database_folder=mio_database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-6, mixing=0.05, # 0.2 andersen_memory=15, # 3 maximum_iterations=100, log=True)), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0, damp_gamma=True, zeta=3.70) ], avgn=1000) dftb3_calc = Atomistica( [ native.TightBinding( database_folder=mio_database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-6, mixing=0.05, # 0.2 andersen_memory=15, # 3 maximum_iterations=100, log=True)), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0, dftb3=True, HubbardDerivatives=dict(H=-0.1857, O=-0.1575)) ], avgn=1000) dftb3_XH_calc = Atomistica( [ native.TightBinding( database_folder=mio_database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-6, mixing=0.05, # 0.2 andersen_memory=15, # 3 maximum_iterations=100, log=True)), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0, dftb3=True, damp_gamma=True, zeta=4.05, HubbardDerivatives=dict(H=-0.1857, O=-0.1575)) ], avgn=1000) dftb3_XH_3ob_calc = Atomistica( [ native.TightBinding( database_folder=dftb3_database_folder, SolverLAPACK=dict(electronic_T=0.001), SCC=dict( dq_crit=1e-6, mixing=0.05, # 0.2 andersen_memory=15, # 3 maximum_iterations=100, log=True)), native.DirectCoulomb(), native.SlaterCharges(cutoff=10.0, dftb3=True, damp_gamma=True, zeta=4.00, HubbardDerivatives=dict(H=-0.1857, O=-0.1575)) ], avgn=1000) if test is None: print( ' nH2O| G3B3| DFTB2 (MIO) | DFTB2+XH (MIO) | DFTB3 (MIO) | DFTB3+XH (MIO) | DFTB3+XH (3OB) |' ) print( ' | | me ref. | me ref. | me ref. | me ref. | me ref. |' ) print( ' | |-----------------|-----------------|-----------------|-----------------|-----------------|' ) for name, data in table5_data.items(): e0_DFTB2 = 0.0 e0_DFTB3 = 0.0 e0_DFTB2_XH = 0.0 e0_DFTB3_XH = 0.0 e0_DFTB3_3ob_XH = 0.0 for structure in data['reference_structures']: if os.path.exists(structure): a = read(structure) else: a = molecule(structure) a.center(vacuum=10.0) a.set_calculator(dftb2_calc) FIRE(a, logfile=None).run(fmax=0.001) e0_DFTB2 += a.get_potential_energy() a.set_calculator(dftb2_XH_calc) FIRE(a, logfile=None).run(fmax=0.001) e0_DFTB2_XH += a.get_potential_energy() a.set_calculator(dftb3_calc) FIRE(a, logfile=None).run(fmax=0.001) e0_DFTB3 += a.get_potential_energy() a.set_calculator(dftb3_XH_calc) FIRE(a, logfile=None).run(fmax=0.001) e0_DFTB3_XH += a.get_potential_energy() a.set_calculator(dftb3_XH_3ob_calc) FIRE(a, logfile=None).run(fmax=0.001) e0_DFTB3_3ob_XH += a.get_potential_energy() eref_G3B3 = data['G3B3'] eref_DFTB2 = data['DFTB2'] eref_DFTB2_XH = data['DFTB2+XH'] eref_DFTB3 = data['DFTB3'] eref_DFTB3_XH = data['DFTB3+XH'] eref_DFTB3_3ob_XH = data['DFTB3+XH_3ob'] a = read(data['structure']) a.center(vacuum=10.0) a.set_calculator(dftb2_calc) FIRE(a, logfile=None).run(fmax=0.001) e_DFTB2 = a.get_potential_energy() e_DFTB2 = (e_DFTB2 - e0_DFTB2) / (ase.units.kcal / ase.units.mol) a.set_calculator(dftb2_XH_calc) FIRE(a, logfile=None).run(fmax=0.001) e_DFTB2_XH = a.get_potential_energy() e_DFTB2_XH = (e_DFTB2_XH - e0_DFTB2_XH) / (ase.units.kcal / ase.units.mol) a.set_calculator(dftb3_calc) FIRE(a, logfile=None).run(fmax=0.001) e_DFTB3 = a.get_potential_energy() e_DFTB3 = (e_DFTB3 - e0_DFTB3) / (ase.units.kcal / ase.units.mol) a.set_calculator(dftb3_XH_calc) FIRE(a, logfile=None).run(fmax=0.001) e_DFTB3_XH = a.get_potential_energy() e_DFTB3_XH = (e_DFTB3_XH - e0_DFTB3_XH) / (ase.units.kcal / ase.units.mol) a.set_calculator(dftb3_XH_3ob_calc) FIRE(a, logfile=None).run(fmax=0.001) e_DFTB3_3ob_XH = a.get_potential_energy() e_DFTB3_3ob_XH = (e_DFTB3_3ob_XH - e0_DFTB3_3ob_XH) / (ase.units.kcal / ase.units.mol) success_DFTB2 = abs(e_DFTB2 - eref_G3B3 - eref_DFTB2) < tol success_DFTB2_XH = abs(e_DFTB2_XH - eref_G3B3 - eref_DFTB2_XH) < tol success_DFTB3 = abs(e_DFTB3 - eref_G3B3 - eref_DFTB3) < tol success_DFTB3_XH = abs(e_DFTB3_XH - eref_G3B3 - eref_DFTB3_XH) < tol success_DFTB3_3ob_XH = abs(e_DFTB3_3ob_XH - eref_G3B3 - eref_DFTB3_3ob_XH) < tol success_str = {True: ' ', False: 'X'} if test is None: print( '{0:>8}| {1:>7.3f}|{2:>7.3f} {3:>7.3f} {4}|{5:>7.3f} {6:>7.3f} {7}|{8:>7.3f} {9:>7.3f} {10}|{11:>7.3f} {12:>7.3f} {13}|{14:>7.3f} {15:>7.3f} {16}|' .format(name, eref_G3B3, e_DFTB2 - eref_G3B3, eref_DFTB2, success_str[success_DFTB2], e_DFTB2_XH - eref_G3B3, eref_DFTB2_XH, success_str[success_DFTB2_XH], e_DFTB3 - eref_G3B3, eref_DFTB3, success_str[success_DFTB3], e_DFTB3_XH - eref_G3B3, eref_DFTB3_XH, success_str[success_DFTB3_XH], e_DFTB3_3ob_XH - eref_G3B3, eref_DFTB3_3ob_XH, success_str[success_DFTB3_3ob_XH])) else: test.assertTrue(success_DFTB2) test.assertTrue(success_DFTB2_XH) test.assertTrue(success_DFTB3) test.assertTrue(success_DFTB3_XH) test.assertTrue(success_DFTB3_3ob_XH)