6.12615 5.62330 1.00000 1.00000 n=6 2 1 E 135.64896 4.82387 5.14075 1.00000 %EndBlock PAO.Basis """) URLbase = "http://fisica.ehu.es/ag/siesta-psffiles/" urllib.urlretrieve(URLbase + "Pb.psf", "Pb.psf") cell = Num.array([ [0.5,0.5,0.0], [0.5,0.0,0.5], [0.0,0.5,0.5]]) cell = 4.89*cell atoms = ListOfAtoms([Atom('Pb', (0.0,0.0,0.0))], cell=cell, periodic=1) for i in range(len(cutoffs)): cutoff = cutoffs[i] print i, cutoff a = Siesta(executable="$HOME/bin/siesta-2.6.9") # Initialize object ### a.SetOption("FilterCutoff"," 100.0 Ry") # Optional Filtering a.SetOption("Meshcutoff", str(cutoff)+" Ry") a.SetOption("%include"," basis.fdf") energy[i], dum, dum2 = a.run(atoms) # Run Siesta and get the (free)energy # # Plot # p.add(biggles.Curve(cutoffs[:],energy[:])) p.show() os.chdir(orig_dir)
output_file=os.path.abspath(label+".eggbox."+str(cutoff)) print "The output will be in file: ", output_file # create a work subdirectory orig_dir = os.getcwd() import tempfile workdir = tempfile.mkdtemp(prefix="eggbox.work.",dir=".") print "Working directory: ", workdir os.chdir(workdir) # move to dir # os.system("cp -p " + pseudo_file + " .") os.system("cp -p " + basis_file + " .") g=open(output_file,"w") for i in range(len(disps)): d = i*dx/(m-1) # could generalize the displacement here (1,1,1), (1,0,1)... atoms=Crystal([Atom(symbol=symbol,label=label,position=(0,0,d))]) atoms.SetUnitCell(cell,fix=True) atoms.SetBoundaryConditions(periodic=True) energy[i], force, stress = a.run(atoms) # Run Siesta - get the (free)energy print i, d, energy[i] fforce = [ float(j) for j in force[0]] g.write(" %10.6f %20.6f %15.6f%15.6f%15.6f\n" % (float(d), float(energy[i]), fforce[0], fforce[1], fforce[2] )) # g.close() os.chdir(orig_dir)