vibesketcher.chem.rolled_tubes¶
Nanotubes rolled from any two-dimensional periodic structure.
The rolling construction generalizes the carbon chiral vector (Saito, Dresselhaus and Dresselhaus, Physical Properties of Carbon Nanotubes, 1998, ch. 3) to any layer with in-plane lattice vectors a1, a2, as CRYSTAL does for inorganic tubes (Noel, D’Arco, Demichelis, Zicovich-Wilson and Dovesi, J. Comput. Chem. 31, 855, 2010):
the rolling vector is R = n a1 + m a2 and becomes the circumference;
the tube period is the shortest lattice vector T = t1 a1 + t2 a2 with T . R = 0. It exists only when the lattice metric makes (a1 . R) / (a2 . R) rational; otherwise the tube has no translational period and is refused;
the rolled cell holds abs(n t2 - m t1) layer cells per period;
a point at in-plane fraction s along R and height h above the layer’s middle plane goes to angle 2 pi s and radius norm(R) / (2 pi) + h. Atoms outside that middle surface are stretched along the circumference and those inside are compressed, as for any rolled multi-plane layer, so this is an unrelaxed starting geometry.
The cell is one-dimensional: z is the tube axis, x and y hold the tube plus a stated vacuum gap and are not periodic.
Functions
|
The 1D tube cell rolled from |
Classes
|
Roll a 2D periodic structure of the document along n a1 + m a2. |
- class vibesketcher.chem.rolled_tubes.RolledNanotubeRecipe(*, kind='rolled_nanotube', identifier, source, n, m, periods=1, vacuum=10.0, inward_normal=False, indices='lattice')[source]¶
Bases:
BaseModelRoll a 2D periodic structure of the document along n a1 + m a2.
- Parameters:
kind (Literal['rolled_nanotube'])
identifier (Annotated[str, _PydanticGeneralMetadata(pattern='^[A-Za-z][A-Za-z0-9_-]{0,63}$')])
source (Annotated[str, _PydanticGeneralMetadata(pattern='^[A-Za-z][A-Za-z0-9_-]{0,63}$')])
vacuum (Annotated[float, Ge(ge=3), Le(le=200), AllowInfNan(allow_inf_nan=False)])
inward_normal (bool)
indices (Literal['lattice', 'nanotube'])
- model_config = {'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- kind: Literal['rolled_nanotube']¶
- indices: Literal['lattice', 'nanotube']¶
n, m count the layer’s own a1, a2 (as CRYSTAL’s NANOTUBE input does).
nanotube: the carbon-nanotube convention for a hexagonal layer, with a1 and a2 60 degrees apart, so (n,n) is armchair and (n,0) zigzag whichever hexagonal setting the layer uses.- Type:
lattice
- vibesketcher.chem.rolled_tubes.roll_layer(recipe, layer)[source]¶
The 1D tube cell rolled from
layer, or a refusal with the reason.- Parameters:
recipe (RolledNanotubeRecipe)
layer (PeriodicStructure)
- Return type: