図とコードが多くなりかなりスクロールする必要のある記事になったので、先に回答だけ示します。SciPyにあるVoronoiとDelaunayまたはConvexHullを組み合わせるとできます。後者は属性を表示するだけなので圧倒的に簡潔です。zone(ブリリュアンゾーン)は固体物理の教科書の最初の方に出てくる似たような概念です。Linkどちらも「空間中のある点と周囲の点の垂直二等分面で囲まれる最小の領域」として定義されます。対象とする空間が実空間(軸の単位が長さ[$L$])か逆空間(単位が長さの逆数[$L^{-1}$])かという違いだけですが、必要になる場面が異なるため目にする頻度にもかなり差があります。zoneは物性の理解に必須なバンド構造を記述するのに欠かせない概念で物性系の論文では頻繁に出現しますが、演習問題の定番でもあるその体積が論文で言及されることはまずありません。zoneと一緒に教科書に出てきますが、論文で目にすること自体が少ないです。cellの体積として出てきます1。zoneはもっぱら結晶構造の対称性と周期性が重要な場面で重宝されるため、研究者はその大きさや体積にあまり興味を持ちません。cell2は実際の結晶構造の中においてある原子位置に割り当てられた領域と解釈できるため、例えば大きさの異なる原子が結晶中のある位置に入り込みやすいかどうかなどを判定する際の目安として使えます。cellの体積なんて簡単に出せるでしょ」と思っていました。cellの体積を計算してくれるボタンがついた道具」はどうやら存在しないことがわかりました3。冒頭に挙げた図は面心立方格子の場合の非常に単純な例であり、綺麗な形をしているので体積の計算式も苦労せずに手計算で出せます。cellの場合は単位格子中にたくさんの原子があるとかなり複雑な多面体を考える必要があり一筋縄では行きません。diagram(下図)と呼ばれるものです。diagramは、区分けが必要な学問・実務領域で広く活用されているため、その大きさを評価する道具は絶対に揃っているはずです。Link困った時のSciPy頼み具体的な問題を数学的な固有名詞のついた問題のレベルまで落とし込めればSciPyがだいたい解決してくれます。diagramを計算する関数がありました。triangulationを使って多面体を四面体要素に分割し、四面体の体積公式を使って求めた各要素の体積を足せば解決です4。これもSciPyにあります。Guideまさにこれです。notebookを使っています。cellを計算しましょう5。この結晶構造には対称性の異なる2種類のNdサイトがあります。cellの体積も違うはずです。そこで実際に二つのNdサイトの体積を求めてどれくらい違うか確かめてみましょう。Ndとその周辺にある原子(下図の赤線で囲った部分)の原子位置と格子定数を定義しておきます6。原子が多いのでかなり長大なリストになりますが、どうやって作ったかは忘れました。VESTAでぽちぽちクリックしたのかもしれません。antigravityで空に浮かんでPCに手が届かなくなる前に地上への降り方をあらかじめ調べておきましょう。SciPyの公式ドキュメントを見ると、属性にverticesやridgeといった耳慣れない単語があります。diagramを扱う上で必須の重要な情報なのですが、かなり関係が入り組んでいるためコードを書いてるうちに簡単に迷子になります。幸いなことに、Qiitaのこちらの記事に大変わかりやすい図解があったので、以下はこの図と照らし合わせながら読んでいくと理解が早いと思います。Voronoiオブジェクトの属性の可視化Voronoiオブジェクトの各属性がどんなものか、それぞれ最初の3点だけちょっと見てみましょう。注意すべきはある点についての情報が結晶構造中での座標(coordinate)なのか、点を保持したリストの中での位置を示すインデックスなのかです。この出力を見ても想像がつかないので可視化します。label='B')ax.legend()これは説明もいらないでしょう。先に示した結晶構造の赤線で囲んだ部分の原子だけが表示されています。mew=0.5)複雑な多面体の頂点が全てプロットされているのでこれだけでは何が何だかわかりません。color='C0')多面体の面を垂直に貫く二点を結ぶ全ての線がまとめて表示されています。これも何が何だかわかりません。color='C0')一端がNdである線だけに限定すると、様子がわかってきます。線が集中している四点にNdがあり、各線分のもう一端にNdに隣接する各原子があります。83入力点の垂直二等分面を表示しています。cellに相当するVoronoi領域が見えましたが、余計な面が混ざっています。cellが表示できました。triangulationは多面体を四面体に分割してくれます。cellの体積が求まります。StackOverflowのこの回答を参考にした以下のコードで計算します。A^32種類のNdサイトの体積の差が定量的にわかりました。実はSciPyのConvexHullで一発だったこの問題に遭遇した当時は上の方法を使って一件落着したのですが、後日調べたらSciPyのConvexHullにvolumeというドンピシャの属性があるのを見つけました。当時(数年前)はまだ実装されていなかったものです。triangulationを使って求めた値と一致しています。今後使うならこれですね。cellをVESTAで表示するここまではmatplotlibを使って可視化してきましたが、結晶構造の可視化はやはりVESTAが一番です7。上の図を作った時の詳しい手順は失念してしまいましたが、以下のような感じだったと思います。cellの中にある原子と仮想原子のBondを表示する(原子間距離の範囲はうまく調整)。Polygon表示モードにするCIFファイルに追記する仮想原子のリストは以下で生成できます。cellが置換系における原子半径とサイト占有率を論じる際などに使われます。cellと表記します。↩ただし、ググっても出てこないようなちょっとした便利機能としてなんらかのソフトに実装されている可能性は高いです。何か知っていたら教えてください。Overflowの回答を見て初めて知りました。簡単な構造だと張り合いがないのでいきなり単位格子内の原子数が多い例でやってみます。cellを求めたかったからです。面が描画されておらず妙な隙間のできてるPolygonがありますが、原因はよくわかりません。