hackingmaterials / atomate

atomate is a powerful software for computational materials science and contains pre-built workflows.
https://hackingmaterials.github.io/atomate
Other
241 stars 173 forks source link

Current status of LepsFW vs DFPTFW #287

Closed mkhorton closed 3 years ago

mkhorton commented 5 years ago

LepsFW is apparently deprecated in favor of DFPTFW and has been for some time, e.g. see https://github.com/hackingmaterials/atomate/issues/160 and https://github.com/hackingmaterials/atomate/blob/498ed49f0cf5a715475b10a7cf5f1815aff5319c/atomate/vasp/fireworks/core.py#L331, however it is still present and is still the default in the base presets library.

Is there anything still to be done for DFPTFW, or can LepsFW be removed?

janosh commented 3 years ago

I'd like to know this as well. Was LepsFW used to calculate the dielectric in MP? Would using DFPTFW result in non-comparable results?

utf commented 3 years ago

I think @shyamd knows the answer to this...

janosh commented 3 years ago

Forgot to mention, I ran a few calculations twice later that day first with the regular wf_dielectric_constant() and then with the atomate/vasp/workflows/base/library/dielectric_constant.yaml modified as follows

# Structure optimize + static dielectric constant
# Author: Anubhav Jain (ajain@lbl.gov)
fireworks:
  - fw: atomate.vasp.fireworks.core.OptimizeFW
    params:
      ediffg: -0.05
- - fw: atomate.vasp.fireworks.core.LepsFW
+ - fw: atomate.vasp.fireworks.core.DFPTFW
    params:
      parents: 0

and got identical results. Not enough to be reliable but perhaps worth mentioning.

our-vs-mp-refractive-n

Also, I was getting quite different results from MP at first. Then I cranked up the ENCUT, EDIFF and KPOINTS to the same values reported in "High-throughput screening of inorganic compounds for the discovery of novel dielectric and optical materials" which brought the values much more in line but there's still Yttrium Nitride which deviates significantly. Perhaps someone can offer insight as to why? Different pseudopotential? I'm at least using the same symbols Y_sv + N reported by MP but perhaps different versions? I'm in the process of acquiring r2SCAN but still running with Perdew-Zunger81 atm.

shyamd commented 3 years ago

The two fireworks are equivalent. The LepsFW always hasLEPSILON=True, while the DFPTFW presents it a variable that is default True. It's also a bit of semantics, as in effect the calculation is a DFPT calculation with LEPSILON set to True to compute the dielectric constant. They should yield the same results as long as the structure optimizations end up at the same exact structure.

@janosh , this is likely because the structure you're using from MP now and what was used back then differ slightly. As we get "better" quality structures from other calculations, we update MP.

janosh commented 3 years ago

In that case, I'd be happy to submit a PR that replaces LepsFW with DFPTFW to save future users the confusion. Anything still blocking that?

utf commented 3 years ago

Hi @janosh. Please go ahead and do that. Thank you very much.

janosh commented 3 years ago

@janosh , this is likely because the structure you're using from MP now and what was used back then differ slightly. As we get "better" quality structures from other calculations, we update MP.

I don't think that's it. Aren't separate calculations for the same material in MP matched together based on the input structure? Then a new/different structure wouldn't be matched to an old dielectric calculation, right? Plus if the structures were only slightly different, I wouldn't expect to get outlandish results like n of 60 (see below). Largest ever measured was 38.6.

I ran another two batches of 20 materials and both showed one material whose refractive index is massively off (mp1009130: MnN and mp-2693: SnSe) so the issue rate seems to be about 5 % which is a problem for my current project.

our-vs-mp-refractive-n

our-vs-mp-refractive-n

janosh commented 3 years ago

This is probably not the best support channel but just for completeness, this is how I generated those workflows:

from atomate.vasp.powerups import add_modify_incar, add_modify_kpoints
from atomate.vasp.workflows.presets.core import wf_dielectric_constant

mp_dielectrics = mpr.query(
    {"has": "diel", "nsites": 2}, ["material_id", "pretty_formula", "structure"]
)

for dic in mp_dielectrics:
    wf = wf_dielectric_constant(dic["structure"])

    wf = add_modify_incar(
        wf,
        # same INCAR settings as in https://rdcu.be/cjP5Z
        modify_incar_params={"incar_update": {"ENCUT": 600, "EDIFF": 1e-6}},
        fw_name_constraint="static dielectric",
    )
    wf = add_modify_kpoints(
        wf,
        {"kpoints_update": {"kpts": [[15, 15, 15]]}},
        fw_name_constraint="static dielectric",
    )

    launchpad.add_wf(wf)