[gpaw-users] DFT+U
Jens Jørgen Mortensen
jensj at fysik.dtu.dk
Mon Jun 3 13:43:22 CEST 2013
Hi!
See my comments below;
Den 30-05-2013 17:07, Glenn Jones skrev:
>
> Hi,
>
> I am experimenting with +U for metal oxide systems and have come
> across a couple of issues.
>
> The first is with CeO2 in LCAO mode, I am able to run single point
> calculations and optimise cells of CeO2 in PW mode and fd mode, but
> get an error related to my basis set in LCAO mode, the last couple of
> lines are :
>
> File
> "/home/gjones/modulefiles/gpaw_lib/lib64/python/gpaw/lcao/overlap.py",
> line 525, in calculate_expansions
>
> tsoe = calc.calculate_expansions(l1_j, f1_jq, l2_j, f2_jq)
>
> File
> "/home/gjones/modulefiles/gpaw_lib/lib64/python/gpaw/lcao/overlap.py",
> line 488, in calculate_expansions
>
> oe = self.transformer.calculate_overlap_expansion(a_q, la, lb)
>
> File
> "/home/gjones/modulefiles/gpaw_lib/lib64/python/gpaw/lcao/overlap.py",
> line 456, in calculate_overlap_expansion
>
> a_g = (8 * fbt(l, a_q * k1**(-2 - lmax - l), self.k_q, R) /
>
> File
> "/home/gjones/modulefiles/gpaw_lib/lib64/python/gpaw/lcao/overlap.py",
> line 99, in fbt
>
> ifft(C[l][n] * f * r**(1 + l - n), 2 * m)[:m].real)
>
> IndexError: list index out of range
>
Could you send us a simple example that shows this error?
> The second is regarding bulk optimisations, I am able to optimise the
> bulk of my crystals using a series of single point calculations and
> fitting an equation of state. However I have tried to use PW mode with
> the strain filter and it seems that after setting U, the calculation
> reverts back to standard DFT and optimises with U at 0. Is there some
> way to ensure the calculation continues to apply the U value when
> looping through the optimisation:
That's not easy to do at the moment. We should fix that. What would be
the nice user interface to do a DFT+U calculation be?
Something like:
GPAW(..., setups={'Ce':{'U': 5.5, 'l': 2}}, ...)
But there is another problem: I don't think the DFT+U contributions to
the forces and stress tensor have been implemented. Anybody know if
those are simple to do?
> #extract of PW mode optimisation script:
>
> atoms.set_calculator(calc)
>
> l = 2
>
> U_eV = 5.5
>
> U_au = U_eV / Hartree
>
> scale = 1
>
> store = 0
>
> atoms.get_potential_energy()
>
> for at in Ce_list:
>
> calc.hamiltonian.setups[at].set_hubbard_u(U_au, l, scale, store) # Apply U
>
> calc.scf.reset()
>
> #define bulk optim
>
> sf = StrainFilter(atoms)
>
> lat_opt = BFGS(sf, logfile = 'lat.log')
>
> traj = PickleTrajectory('lat.traj', 'w', atoms)
>
> lat_opt.attach(traj)
>
> #opt.run(0.005)
>
> #define atomic optim
>
> at_opt = BFGS(atoms,logfile = 'at.log', trajectory='at.traj')
>
> at_opt.run(0.1)
>
> def converged(atoms,smax,fmax):
>
> maxstress = max(atoms.get_stress().ravel())
>
> rmsforces = np.sum(atoms.get_forces()**2,axis=1)**0.5
>
> maxforce = max(rmsforces)
>
> if maxforce < fmax and maxstress < smax:
>
> return True
>
> return False
>
> #we run this loop until both the atoms and cell are converged #
> should I reset the U value each time here?
>
> while not converged(atoms,smax=0.005,fmax=0.05):
>
> #first relax internal degrees of freedom
>
> lat_opt.run(0.005)
>
> #take a step on the cell
>
> at_opt.run(0.05)
>
> #extract of script using series of single points (this works, I guess
> because U is reapplied before each step):
>
> for a in a0 * np.linspace(1 - eps, 1 + eps, 14):
>
> atoms.set_cell((a,a,a),scale_atoms=True)
>
> atoms.set_calculator(calc)
>
> l = 2
>
> U_eV = 0
>
> U_au = U_eV / Hartree
>
> scale = 1
>
> store = 0
>
> atoms.get_potential_energy()
>
> for at in arange(2):
>
> calc.hamiltonian.setups[at].set_hubbard_u(U_au, l, scale, store) # Apply U
>
> calc.scf.reset()
>
> atoms.get_potential_energy()
>
> traj.write(atoms)
>
> I would like to optimise using stress as I plan to look at more
> complex structures of oxides, whilst using U, which is easier ( and
> more efficient) than using a set of single point energies and fitting EOS.
>
> The final issue I am having is with the plane-wave mode, which is
> great for small cells --alloys primitive oxides etc. However, when
> tackling larger cells it appears to be very memory hungry, is this
> because the feature is relatively new and not optimised or are there
> some 'tricks' to limit memory usage
>
We have done some memory optimization and that is only in the trunk
version of GPAW, so make sure you are using that. I would like to look
at examples where memory usage is still too large - so if you have such
cases then please send them to me.
Jens Jørgen
> Thanks,
>
> Glenn
>
>
>
> If the reader of this email is not the intended recipient(s), please
> be advised that any dissemination, distribution or copying of this
> information is strictly prohibited. Johnson Matthey PLC has its main
> place of business at 5th Floor, 25 Farringdon Street, London (0207269
> 8400).
>
> Johnson Matthey Public Limited Company Registered Office: 5th Floor,
> 25 Farringdon Street, London EC4A 4AB.Registered in England No 33774
>
> Whilst Johnson Matthey aims to keep its network free from viruses you
> should note that we are unable to scan certain emails, particularly if
> any part is encrypted or password-protected, and accordingly you are
> strongly advised to check this email and any attachments for viruses.
> The company shall NOT ACCEPT any liability with regard to computer
> viruses transferred by way of email.
>
> Please note that your communication may be monitored in accordance
> with Johnson Matthey internal policy documentation.
>
>
>
> _______________________________________________
> gpaw-users mailing list
> gpaw-users at listserv.fysik.dtu.dk
> https://listserv.fysik.dtu.dk/mailman/listinfo/gpaw-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserv.fysik.dtu.dk/pipermail/gpaw-users/attachments/20130603/a90a62c1/attachment-0001.html
More information about the gpaw-users
mailing list