Single-surface vs symmetric double-surface adsorption for DFT slab calculations

Hi everyone,

I am working with pymatgen adsorption workflows and I am a bit confused about the correct approach for calculating O₂ adsorption/binding energies on a slab surface.

My goal is to calculate the adsorption energy of O₂ on a surface using DFT later on (VASP calculations after generating the structures with pymatgen).

I noticed there are two different methods in AdsorbateSiteFinder:

generate_adsorption_structures()

and

adsorb_both_surfaces()

From my understanding:

  • generate_adsorption_structures() places the adsorbate only on one surface of the slab.

  • adsorb_both_surfaces() places symmetric adsorbates on both the top and bottom surfaces.

My question is:

For adsorption/binding energy calculations, which approach is generally preferred and why?

Should I:

  1. Use generate_adsorption_structures() with adsorption only on one side of the slab?
    or

  2. Use adsorb_both_surfaces() to preserve slab symmetry and avoid dipole effects?

I am especially unsure because the adsorption energy would then effectively include two adsorbates in the cell when using adsorb_both_surfaces().

Are there standard best practices for this in surface DFT calculations?

Thanks!