Skip to content

Conversation

DanielYang59
Copy link
Contributor

@DanielYang59 DanielYang59 commented Apr 1, 2025

Summary

  • Fix inconsistent "Van der waals radius" and "Metallic radius" in core.periodic_table.json

Currently some of the radii from JSON is different from our CSV (the YAML is the same):

After this PR:

Element  | Van der waals radius   | Metallic radius 
------------------------------------------------------
H        | 1.2                    | no data         
He       | 1.4                    | no data         
Li       | 1.82                   | 1.52            
Be       | 1.53                   | 1.12            
B        | 1.92                   | no data         
C        | 1.7                    | no data         
N        | 1.55                   | no data         
O        | 1.52                   | no data         
F        | 1.47                   | no data         
Ne       | 1.54                   | no data         
Na       | 2.27                   | 1.86            
Mg       | 1.73                   | 1.6             
Al       | 1.84                   | 1.43            
Si       | 2.1                    | no data         
P        | 1.8                    | no data         
S        | 1.8                    | no data         
Cl       | 1.75                   | no data         
Ar       | 1.88                   | no data         
K        | 2.75                   | 2.27            
Ca       | 2.31                   | 1.97            
Sc       | 2.11                   | 1.62            
Ti       | 2.11                   | 1.47            
V        | 2.07                   | 1.34            
Cr       | 2.06                   | 1.28            
Mn       | 2.05                   | 1.27            
Fe       | 2.04                   | 1.26            
Co       | 2                      | 1.25            
Ni       | 1.63                   | 1.24            
Cu       | 1.4                    | 1.28            
Zn       | 1.39                   | 1.34            
Ga       | 1.87                   | 1.35            
Ge       | 2.11                   | 1.39            
As       | 1.85                   | no data         
Se       | 1.9                    | no data         
Br       | 1.85                   | 1.14            
Kr       | 2.02                   | no data         
Rb       | 3.03                   | 2.48            
Sr       | 2.49                   | 2.15            
Y        | 2.32                   | 1.8             
Zr       | 2.23                   | 1.6             
Nb       | 2.18                   | 1.46            
Mo       | 2.17                   | 1.39            
Tc       | 2.16                   | 1.36            
Ru       | 2.13                   | 1.34            
Rh       | 2.1                    | 1.34            
Pd       | 1.63                   | 1.37            
Ag       | 1.72                   | 1.44            
Cd       | 1.58                   | 1.51            
In       | 1.93                   | 1.67            
Sn       | 2.17                   | 1.58            
Sb       | 2.06                   | 1.61            
Te       | 2.06                   | no data         
I        | 1.98                   | no data         
Xe       | 2.16                   | no data         
Cs       | 3.43                   | 2.65            
Ba       | 2.68                   | 2.22            
La       | 2.43                   | 1.87            
Ce       | 2.42                   | 1.818           
Pr       | 2.4                    | 1.824           
Nd       | 2.39                   | 1.814           
Pm       | 2.38                   | 1.834           
Sm       | 2.36                   | 1.804           
Eu       | 2.35                   | 1.804           
Gd       | 2.34                   | 1.804           
Tb       | 2.33                   | 1.773           
Dy       | 2.31                   | 1.781           
Ho       | 2.3                    | 1.762           
Er       | 2.29                   | 1.761           
Tm       | 2.27                   | 1.759           
Yb       | 2.26                   | 1.76            
Lu       | 2.24                   | 1.738           
Hf       | 2.23                   | 1.59            
Ta       | 2.22                   | 1.46            
W        | 2.18                   | 1.39            
Re       | 2.16                   | 1.37            
Os       | 2.16                   | 1.35            
Ir       | 2.13                   | 1.355           
Pt       | 1.75                   | 1.385           
Au       | 1.66                   | 1.44            
Hg       | 1.55                   | 1.51            
Tl       | 1.96                   | 1.7             
Pb       | 2.02                   | 1.75            
Bi       | 2.07                   | 1.82            
Po       | 1.97                   | 1.53            
At       | 2.02                   | no data         
Rn       | 2.2                    | no data         
Fr       | 3.48                   | no data         
Ra       | 2.83                   | 2.293           
Ac       | 2.47                   | 1.878           
Th       | 2.45                   | 1.79            
Pa       | 2.1                    | 1.63            
U        | 1.86                   | 1.56            
Np       | 2.39                   | 1.55            
Pu       | 2.43                   | 1.59            
Am       | 2.44                   | 1.73            
Cm       | 2.45                   | 1.74            
Bk       | 2.44                   | 1.7             
Cf       | 2.45                   | 1.86            
Es       | 2.45                   | 1.86            
Fm       | 2.45                   | no data         
Md       | 2.46                   | no data         
No       | 2.46                   | no data 

Script:

import json
from pathlib import Path

from pymatgen.core import Element

def print_radius_table(json_file: str | Path) -> None:
    with open(json_file, encoding="utf-8") as f:
        data = json.load(f)

    headers = ["Element", "Van der waals radius", "Metallic radius"]
    print(f"{headers[0]:<8} | {headers[1]:<22} | {headers[2]:<16}")
    print("-" * 54)

    for elem in Element:
        elem = str(elem)
        vdw = data[elem].get("Van der waals radius", "")
        metal = data[elem].get("Metallic radius", "")
        print(f"{elem:<8} | {str(vdw):<22} | {str(metal):<16}")

if __name__ == "__main__":
    print_radius_table("periodic_table.json")

@DanielYang59 DanielYang59 changed the title Fix incorrect "Van der waals radius" and "Metallic radius" in core.periodic_table.json Fix inconsistent "Van der waals radius" and "Metallic radius" in core.periodic_table.json Apr 1, 2025
@DanielYang59 DanielYang59 marked this pull request as ready for review April 1, 2025 13:17
@shyuep
Copy link
Member

shyuep commented Apr 17, 2025

I asked ChatGPT to do some validation. See below. Of course, ChatGPT notoriously can hallucinate. So you might want to just quickly check the discrepancies.

I have cross-referenced the van der Waals and metallic radii in your table with authoritative public sources, including Bondi’s 1964 compilation and data from WebElements and Wikipedia. Here’s a summary of the findings:

⸻

✅ Values Consistent with Public Sources

The following elements have van der Waals and/or metallic radii that align with widely accepted reference values:
	•	Hydrogen (H): VDW radius of 1.20 Å matches Bondi’s value.
	•	Carbon (C): VDW radius of 1.70 Å is consistent with Bondi.
	•	Nitrogen (N): VDW radius of 1.55 Å aligns with Bondi.
	•	Oxygen (O): VDW radius of 1.52 Å matches Bondi.
	•	Fluorine (F): VDW radius of 1.47 Å is consistent with Bondi.
	•	Phosphorus (P): VDW radius of 1.80 Å aligns with Bondi.
	•	Sulfur (S): VDW radius of 1.80 Å matches Bondi.
	•	Chlorine (Cl): VDW radius of 1.75 Å is consistent with Bondi.
	•	Copper (Cu): VDW radius of 1.40 Å aligns with Bondi.
	•	Sodium (Na): VDW radius of 2.27 Å matches Bondi.
	•	Potassium (K): VDW radius of 2.75 Å is consistent with Bondi.
	•	Cesium (Cs): VDW radius of 3.43 Å aligns with Bondi.
	•	Iodine (I): VDW radius of 1.98 Å matches Bondi.
	•	Xenon (Xe): VDW radius of 2.16 Å is consistent with Bondi.
	•	Mercury (Hg): VDW radius of 1.55 Å aligns with Bondi.

⸻

⚠️ Minor Discrepancies Noted

Some elements exhibit slight differences between your table and public sources, which may be attributed to variations in measurement methods or coordination numbers:
	•	Lithium (Li): Your VDW radius is 1.82 Å; Alvarez (2014) reports 2.12 Å.
	•	Beryllium (Be): Your VDW radius is 1.53 Å; Alvarez (2014) reports 1.98 Å.
	•	Nickel (Ni): Your VDW radius is 1.63 Å; Alvarez (2014) reports 2.40 Å.
	•	Silver (Ag): Your VDW radius is 1.72 Å; Alvarez (2014) reports 2.53 Å.
	•	Gold (Au): Your VDW radius is 1.66 Å; Alvarez (2014) reports 2.32 Å.
	•	Lead (Pb): Your VDW radius is 2.02 Å; Alvarez (2014) reports 2.60 Å.

These discrepancies are within acceptable ranges, considering the differences in data sources and measurement techniques.

⸻

ℹ️ Notes on Missing Data
	•	Metallic Radii: For elements where “no data” is listed under metallic radius, it’s important to note that metallic radii are typically defined for metals in a solid state with specific coordination numbers. Nonmetals and noble gases do not have metallic radii in the conventional sense, hence the absence of data.
	•	Van der Waals Radii: Similarly, for some transition metals and inner transition metals, van der Waals radii are less commonly reported due to the complexity of their electron configurations and bonding environments.

⸻

If you require a detailed comparison for specific elements or further clarification on any discrepancies, feel free to ask!```

@DanielYang59
Copy link
Contributor Author

DanielYang59 commented Apr 17, 2025

Hi @shyuep thanks for helping me double check.

This PR doesn't intend to validate the data source itself, but to ensure our periodic_table.json is consistent with its source (for vdw radii it's dev_scripts/radii.csv) (the periodic_table.yaml on the other hand, is the same as the CSV source in this regard)

For example the vdw radius of Ag is 1.72 in the source CSV and YAML, but is 2.11 in the JSON:

47,Ag,silver,160,165,172,153,137,144

"Van der waals radius": 2.11,

Van der waals radius: 1.72


With #4338, we could then validate the radii or whatever other property, as the final JSON generation would have a more explainable/reliable pipeline.

@shyuep shyuep merged commit bdc448f into materialsproject:master Apr 17, 2025
43 checks passed
@DanielYang59 DanielYang59 deleted the fix-radii-csv branch April 17, 2025 17:14
DanielYang59 added a commit to DanielYang59/pymatgen that referenced this pull request Apr 21, 2025
shyuep pushed a commit that referenced this pull request Apr 21, 2025
…ook (#4372)

* add new values that are absent from CSV at all

* remove fixed issues

* regenerate json and yaml

* add Ge vdw radius

* remove legacy electron_affinities.yaml

* manually recover electron affinities for D for now

* reapply update from #2122

* Revert "Fix inconsistent "Van der waals radius" and "Metallic radius" in `core.periodic_table.json` (#4345)"

This reverts commit bdc448f.

* add note

* revert changes to metallic radii

* revert change to metallic radii in production json

* fix Pa vdw radius
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants