rendered paste bodyimport osfrom gpaw import GPAW, restartfrom ase import Atomsfrom gpaw.test import equalfrom gpaw.utilities import hdf5from math import sqrtimport numpy as npmodes = ['gpw']if hdf5(): modes.append('hdf5')d = 3.0atoms = Atoms('Na3', positions=[( 0, 0, 0), ( 0, 0, d), ( 0, d*sqrt(3./4.), d/2.)], magmoms=[1.0, 1.0, 1.0], cell=(3.5, 3.5, 3.5), pbc=True)# Only a short, non-converged calcuationconv = {'eigenstates': 1e-2, 'energy':2e-1, 'density':1e-1}calc = GPAW(h=0.34, nbands=3, convergence=conv)atoms.set_calculator(calc)e0 = atoms.get_potential_energy()niter0 = calc.get_number_of_iterations()f0 = atoms.get_forces()m0 = atoms.get_magnetic_moments()eig00 = calc.get_eigenvalues(spin=0)eig01 = calc.get_eigenvalues(spin=1)# Write the restart file(s)for mode in modes: calc.write('tmp.%s' % mode)del atoms, calc# Try restarting from all the filesfor mode in modes: atoms, calc = restart('tmp.%s' % mode) e1 = atoms.get_potential_energy() try: # number of iterations needed in restart niter1 = calc.get_number_of_iterations() except: pass f1 = atoms.get_forces() m1 = atoms.get_magnetic_moments() eig10 = calc.get_eigenvalues(spin=0) eig11 = calc.get_eigenvalues(spin=1) print e0, e1 equal(e0, e1, 1e-10) print f0, f1 for ff0, ff1 in zip(f0, f1): err = np.linalg.norm(ff0-ff1) assert err <= 1e-10 print m0, m1 for mm0, mm1 in zip(m0, m1): equal(mm0, mm1, 1e-10) print 'A',eig00, eig10 for eig0, eig1 in zip(eig00, eig10): equal(eig0, eig1, 1e-10) print 'B',eig01, eig11 for eig0, eig1 in zip(eig01, eig11): equal(eig0, eig1, 1e-10) energy_tolerance = 0.0002 niter_tolerance = 0 equal(e0, 27.1408, energy_tolerance) equal(niter0, 6, niter_tolerance) equal(e1, 27.1408, energy_tolerance)