8
$\begingroup$

I would like to construct a primitive cell (figure shown) and possibly the two-dimensional layout (figure from here) using the following input. Any clues as to how this can be done?

ChemicalData["MoS2", "EdgeRules"]

ChemicalData["MoS2", "EdgeTypes"]

ChemicalData["MoS2", "ElementTypes"]

ChemicalData["MoS2", "VertexTypes"]

ChemicalData["MoS2", "VertexCoordinates"]

ChemicalData["MoS2", "FormalCharges"]

ChemicalData["MoS2", "ElementTally"]

MoS2 primitive cell

MoS2 lattice

$\endgroup$
8
$\begingroup$

Edit I've included another method for creating the crystal structure which should be useful for pedagogical purposes, but assumes that MoS2 behaves ideally.

Short Answer

It can't be done with ChemicalData alone, (as of 2014) since there is important information missing. We are not given any information about the crystal structure, and therefore need to find additional sources.

Roll your own

We can try to make our own crystal structure if we have the relevant information. Here's one way to do it, starting first with a simpler structure, that of sodium chloride, which crystallizes in a face centered cubic lattice. We can use LatticeData to visualize this structure:

LatticeData["FaceCenteredCubic", "Image"]

enter image description here

We need to look elsewhere for the unit cell dimensions (the cell dimension is 429 pm) but we can get ionic radii from WolframAlpha

naradius = 
 QuantityMagnitude@WolframAlpha["sodium ion radius", "WolframResult"]
clradius = 
 QuantityMagnitude@
  WolframAlpha["chloride ion radius", "WolframResult"]
celldim = 429;

Now, playing with the lattice above, we can style it for the anions:

chloride = 
 LatticeData["FaceCenteredCubic", "Image"] /. {Line[_] -> Null, 
   Polygon[_] -> Null, GrayLevel[0] -> Blue, 
   Sphere[x_List, y_] :> Sphere[x, clradius/celldim]}

enter image description here

We do the same thing for the sodium ions and note that these ions are shifted by one half the dimensions of the unit cell. Putting all of this together gets us:

sodium = LatticeData["FaceCenteredCubic", 
   "Image"] /. {Line[_] -> Null, Polygon[_] -> Null, 
   GrayLevel[0] -> Green, 
   Sphere[x_List, y_] :> Sphere[x, naradius/celldim]}
unitcell = 
 Show[{chloride, 
   Graphics3D[
    GeometricTransformation[sodium[[1]], 
     TranslationTransform[{0.5, 0.5, 0.5}]]]}, 
  PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}, Boxed -> True]

enter image description here

I really like this view, since it clearly shows us that the unit cell contains 4 full ions of sodium, and the 4 chloride ions are counted by noting that each corner is 1/8 an ion and each face is 1/2 an ion. Making a table of transformations gets us a nice looking crystal (that is admittedly inefficient and needs a little bit of cleanup around the edges).

Graphics3D[
 GeometricTransformation[
  unitcell[[1]], 
  Flatten@Table[
    TranslationTransform[{i 1, j 1, k 1}], {i, 0, 3}, {j, 0, 3}, {k, 
     0, 3}]]]

Back to MoS2

Molybdenum disulfide is a challenge since it has a hexagonal packing structure with an a-typical coordination. I think it's best to draw our own unit cell for these purposes. I note from this paper that the metal is encapsulated in a trigonal prismatic cage of sulfur atoms, and the sulfur atoms form an eclipsed hexagonal structure. The unit cell for this form is a rhombus and we can use known relationships to get our unit cell. The dimensions from the paper are a = 3.12 angstroms and the layer spacing is 3.11 angstroms.

a = 3.12;
c = 3.11;
p = -2 a Cos[120 Degree];
q = 2 a Sin[120 Degree];

sulfur = Graphics3D[{Yellow, Specularity[GrayLevel[1], 5], 
   Sphere[#, 0.5] & /@ {{0, p/2, c/2}, {0, -p/2, c/2}, {q/2, 0, 
      c/2}, {-q/2, 0, c/2}, {0, p/2, -c/2}, {0, -p/2, -c/2}, {q/2, 
      0, -c/2}, {-q/2, 0, -c/2}}}, Boxed -> False]

enter image description here

Let's have Mathematica figure out where the Molybdenum is supposed to be, given that we know it is coordinated to 6 of the sulfur atoms. We'll add some bonds while were at it.

coordsulfur = {{0, p/2, c/2}, {0, -p/2, c/2}, {-q/2, 0, c/2}, {0, 
    p/2, -c/2}, {0, -p/2, -c/2}, {-q/2, 0, -c/2}};
momin = NMinimize[
  Total[EuclideanDistance[#, {x, y, z}] & /@ coordsulfur], {x, y, z}]
mopos = {x, y, z} /. momin[[2]]
unitcell = 
 Graphics3D[
  Flatten[{sulfur[[1]], {Blue, Sphere[mopos, 0.4]}, {GrayLevel[0.5], 
     bonds}}], Boxed -> False]
bonds = Tube[{#, mopos}, 0.2] & /@ coordsulfur;
sbonds = Tube[#, 0.2] & /@ {
    {{0, -p/2, c/2}, {-q/2, 0, c/2}},
    {{-q/2, 0, c/2}, {0, p/2, c/2}},
    {{0, p/2, c/2}, {q/2, 0, c/2}},
    {{q/2, 0, c/2}, {0, -p/2, c/2}},
    {{0, -p/2, -c/2}, {-q/2, 0, -c/2}},
    {{-q/2, 0, -c/2}, {0, p/2, -c/2}},
    {{0, p/2, -c/2}, {q/2, 0, -c/2}},
    {{q/2, 0, -c/2}, {0, -p/2, -c/2}},
    {{q/2, 0, -c/2}, {q/2, 0, c/2}},
    {{-q/2, 0, -c/2}, {-q/2, 0, c/2}},
    {{0, p/2, -c/2}, {0, p/2, c/2}},
    {{0, -p/2, -c/2}, {0, -p/2, c/2}},
    {{0, -p/2, c/2}, {0, p/2, c/2}},
    {{0, -p/2, -c/2}, {0, p/2, -c/2}}
    };

enter image description here

One can perform a GeometricTransformation on this unit cell to get the expanded crystal structure; however this is the part that I don't like, so I'll sleep on it before adding to this already-too-long answer.

Update, another crystal structure fabrication process

I've thought a bit about the MoS2 crystal structure, and here's how I came about some pictures. Start with the hcp lattice from curated data. Grab the spheres and (manually) select the 8 that represent the unit cell. We also need to adjust the z height (to 1 instead of 2) and add the Mo atom in the appropriate place.

hcp = LatticeData["HexagonalClosePacking", "Image"];
spheres = Cases[hcp[[1]], Sphere[x_, y_] :> x, Infinity];
unitcellspheres = spheres[[ {1, 2, 4, 5, 11, 12, 14, 15}]];
unitcellspheres[[All, 3]] = 
  unitcellspheres[[All, 3]] /. {1 -> 0.5, -1 -> -0.5};
csphere = {-1/2, 1/(2 Sqrt[3]), 0};

Now, I find it easiest to use a GraphicsComplex to make the first figure.

unitcell = GraphicsComplex[Join[unitcellspheres, {csphere}],
   {
    (* 'global' directives *)
    Specularity[GrayLevel[1], 9],
    (* sulfur atoms*)
    {Yellow, Table[Sphere[i, 0.1], {i, 1, 8}]},
    (* sulfur 'bonds' *)
    {Yellow, 
     Tube[#, 0.03] & /@ {{1, 3}, {3, 4}, {4, 2}, {2, 1}, {3, 2}, {5, 
        7}, {7, 8}, {8, 6}, {6, 5}, {7, 6}, {1, 5}, {2, 6}, {3, 
        7}, {4, 8}}},
    (* Mo *)
    {Blue, Sphere[9, 0.1]},
    (* Mo bonds Mo side*)
    {Blue, 
     GeometricTransformation[ Tube[{#, 9}, 0.03], 
        ScalingTransform[0.5, unitcellspheres[[#]] - csphere, 
         csphere]] & /@ {1, 2, 3, 5, 6, 7}},
    (* Mo bonds S side *)
    {Yellow,
     GeometricTransformation[ Tube[{#, 9}, 0.03], 
        ScalingTransform[0.5, unitcellspheres[[#]] - csphere, 
         unitcellspheres[[#]]]] & /@ {1, 2, 3, 5, 6, 7}}

    }] // Graphics3D

Mathematica graphics

The remaining figures can be made using GeometricTransformation of the unit cell, and I wrap that into a Manipulate to have some fun. I've created another unitcell (unitcell2) that doesn't have the sulfur-sulfur bonds shown in the previous figure.

unitcell2 =  GraphicsComplex[Join[unitcellspheres, {csphere}],
    {
     (* 'global' directives *)
     Specularity[GrayLevel[1], 9],
     (* sulfur atoms*)
     {Yellow, Table[Sphere[i, 0.1], {i, 1, 8}]},
     (* Mo *)
     {Blue, Sphere[9, 0.1]},
     (* Mo bonds *)
     {GrayLevel[0.5], Tube[{#, 9}, 0.05] & /@ {1, 2, 3, 5, 6, 7}}

     }] // Graphics3D;
Manipulate[Graphics3D[GeometricTransformation[unitcell2[[1]],
   Flatten@{
     TranslationTransform[{0, 0, 0}],
     Table[
      TranslationTransform[{j 0.5 + i, j Sqrt[3]/2 + Mod[k, 2], 
        2 k }], {i, 0, imax}, {j, 0, jmax}, {k, 0, kmax}]
     }], SphericalRegion -> True, Boxed -> False], {imax, 0, 5, 
  1}, {jmax, 0, 5, 1}, {kmax, 0, 3, 1}]

enter image description here

$\endgroup$
  • $\begingroup$ Neat! BTW, if one wants CPK coloring, ColorData["Atoms"] has the needed colors. $\endgroup$ – J. M. is away Jun 9 '15 at 4:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.