SWNTGenerator

class sknano.generators.SWNTGenerator(*args, from_scaling_matrix=False, **kwargs)[source] [edit on github][source]

Bases: sknano.generators.NanotubeBundleGeneratorBase, sknano.generators.SWNTGeneratorBase, sknano.core.structures.SWNT

Class for generating SWNT structures.

Parameters:
  • *Ch

    Either a 2-tuple of integers (i.e., *Ch = [(n, m)]) or 2 integers (i.e., *Ch = [n, m]) specifying the chiral indices of the nanotube chiral vector \(\mathbf{C}_h = n\mathbf{a}_1 + m\mathbf{a}_2 = (n, m)\).

  • ny, nz (nx,) – Number of repeat unit cells in the \(x, y, z\) dimensions.
  • basis ({list}, optional) –

    List of strs of element symbols or atomic number of the two atom basis (default: [‘C’, ‘C’])

    New in version 0.3.10.

  • element2 (element1,) –

    Element symbol or atomic number of basis Atom 1 and 2

    Deprecated since version 0.3.10: Use basis instead

  • bond (float, optional) – \(\mathrm{a}_{\mathrm{CC}} =\) distance between nearest neighbor atoms. Must be in units of Angstroms.
  • Lz (float, optional) –

    Length of nanotube in units of Angstroms. Overrides the nz value.

    New in version 0.2.5.

    Changed in version 0.4.0: Changed units from nanometers to Angstroms

  • tube_length (float, optional) –

    Length of nanotube in units of Angstroms. Overrides the nz value.

    Deprecated since version 0.2.5: Use Lz instead

  • fix_Lz (bool, optional) –

    Generate the nanotube with length as close to the specified \(L_z\) as possible. If True, then non integer \(n_z\) cells are permitted.

    New in version 0.2.6.

  • vdw_radius (float, optional) –

    van der Waals radius of nanotube atoms

    New in version 0.2.5.

  • bundle_packing ({'hcp', 'ccp'}, optional) –

    Packing arrangement of nanotubes bundles. If bundle_packing is None, then it will be determined by the bundle_geometry parameter if bundle_geometry is not None. If both bundle_packing and bundle_geometry are None, then bundle_packing defaults to hcp.

    New in version 0.2.5.

  • bundle_geometry ({'triangle', 'hexagon', 'square', 'rectangle'}, optional) –

    Force a specific geometry on the nanotube bundle boundaries.

    New in version 0.2.5.

  • autogen (bool, optional) – if True, automatically generate structure data.
  • verbose (bool, optional) – if True, show verbose output

Examples

Using the SWNTGenerator class, you can generate structure data for single-walled nanotubes (SWNTs) or nanotube bundles with either cubic close packed (ccp) or hexagonal close packed (hcp) arrangement of nanotubes. The bundle packing arrangement is set using the bundle_packing parameter.

You can also enforce a specific bundle geometry which will try and build the nanotube bundle such that it “fits inside” the boundaries of a specified geometric shape. This allows you to generate hcp bundles that are trianglar, hexagonal, or rectangular in shape, as some of the examples below illustrate.

First, load the SWNTGenerator class.

>>> from sknano.generators import SWNTGenerator

Now let’s generate a \(\mathbf{C}_{\mathrm{h}} = (10, 5)\) SWNT unit cell.

>>> swnt = SWNTGenerator((10, 5))
>>> swnt.save(fname='10,5_unit_cell.xyz')
>>> # note that there are two other alternative, but equivalent
>>> # means of passing arguments to SWNTGenerator constructor:
>>> # SWNTGenerator(10, 5) and SWNTGenerator(n=10, m=5)

Here’s a nice ray traced rendering of the generated \((10, 5)\) SWNT unit cell.

../_images/10,5_unit_cell-01.png

Next, let’s generate an hcp bundle of \(C_{\mathrm{h}} = (10, 5)\) SWCNTs and cell count \(n_x=10, n_y=3, n_z=5\).

>>> SWCNTbundle = SWNTGenerator(n=10, m=5, nx=10, ny=3, nz=5)
>>> SWCNTbundle.save()

The rendered structure looks like:

../_images/1005_hcp_10cellsx3cellsx5cells-01.png

Now let’s generate a nice hexagon bundle, 3 tubes wide, with \(C_{\mathrm{h}} = (6, 5)\).

>>> SWCNTbundle = SWNTGenerator(n=6, m=5, nz=5, bundle_geometry='hexagon')
>>> SWCNTbundle.save()

which looks like:

../_images/0605_hcp_7tube_hexagon-01.png

Remember, all of the save methods allow you to rotate the structure data before saving:

>>> SWCNTbundle.save(fname='0605_hcp_7tube_hexagon_rot-30deg.xyz',
...                  rot_axis='z', rotation_angle=30)
../_images/0605_hcp_7tube_hexagon_rot-30deg-01.png

Now, just because we can, let’s make a big ass hexagon bundle with \(C_{\mathrm{h}} = (10, 0)\).

>>> big_hexagonal_bundle = SWNTGenerator(10, 0, nx=25, ny=25, nz=1,
...                                      bundle_geometry='hexagon')
>>> big_hexagonal_bundle.save()

Take a look at the 469 \((10, 0)\) unit cells in this big ass bundle!

../_images/1000_hcp_469tube_hexagon-01.png

Lastly, here’s a look at a bundle generated with cubic close packed bundle arrangement:

>>> SWCNTbundle = SWNTGenerator(10, 10, nx=3, ny=3, nz=5,
...                             bundle_packing='ccp')
>>> SWCNTbundle.save()

The rendered ccp structure looks like:

../_images/1010_ccp_3cellsx3cellsx5cells-01.png

Attributes

Ch SWNT circumference \(|\mathbf{C}_h|\) in
Ch_vec SWNT chiral vector.
Lx Axis-aligned length along the x-axis in Angstroms.
Ly Axis-aligned length along the y-axis in Angstroms.
Lz SWNT length \(L_z = L_{\mathrm{tube}}\) in Angstroms.
M \(M = np - nq\)
N Number of graphene hexagons in nanotube unit cell.
Natoms N atoms.
Natoms_list list of Natoms per nanotube in bundle.
Natoms_per_bundle Alias for Natoms.
Natoms_per_tube Alias for Natoms_list.
Natoms_per_unit_cell Number of atoms in nanotube unit cell.
Ntubes Number of nanotubes in bundle.
R Symmetry vector \(\mathbf{R} = (p, q)\).
T Length of nanotube unit cell \(|\mathbf{T}|\) in Å.
Tvec SWNT translation vector.
atoms Structure Atoms.
basis NanoStructureBase basis objects.
bundle_density Compute the nanotube bundle density.
bundle_geometry Bundle geometry.
bundle_mass An alias for mass.
bundle_packing Bundle packing.
chiral_angle Chiral angle \(\theta_c\) in degrees.
chiral_type SWNT chiral type.
crystal_cell Structure CrystalCell.
d \(d=\gcd{(n, m)}\)
dR \(d_R=\gcd{(2n + m, 2m + n)}\)
dt Nanotube diameter \(d_t = \frac{|\mathbf{C}_h|}{\pi}\) in Å.
electronic_type SWNT electronic type.
element1 Basis element 1
element2 Basis element 2
fix_Lz bool indicating whether SWNTMixin.Lz is fixed or calculated.
fmtstr Format string.
lattice Structure Crystal3DLattice.
lattice_shift Lattice displacement vector.
linear_mass_density Linear mass density of nanotube in g/Å.
m Chiral index \(m\).
mass Total mass of atoms.
n Chiral index \(n\).
nx Number of nanotubes along the \(x\)-axis.
ny Number of nanotubes along the \(y\)-axis.
nz Number of nanotube unit cells along the \(z\)-axis.
rt Nanotube radius \(r_t = \frac{|\mathbf{C}_h|}{2\pi}\) in Å.
scaling_matrix CrystalCell.scaling_matrix.
structure An alias to self.
t1 \(t_{1} = \frac{2m + n}{d_{R}}\)
t2 \(t_2 = -\frac{2n + m}{d_R}\)
tube_length Alias for SWNT.Lz
tube_mass An alias for mass.
unit_cell Structure UnitCell.
unit_cell_mass Unit cell mass in atomic mass units.
unit_cell_symmetry_params Tuple of SWNT unit cell symmetry parameters.
vdw_distance Van der Waals distance.
vdw_radius Van der Waals radius

Methods

clear() Clear list of StructureMixin.atoms.
finalize() Finalize structure data by clipping region bounds if fix_Lz is True.
generate([finalize]) Generate structure data.
generate_bundle_coords() Generate coordinates of bundle tubes.
generate_fname([n, m, nx, ny, nz, fix_Lz, ...]) Generate filename string.
init_bundle_parameters() Initialize bundle attributes.
make_supercell(scaling_matrix[, wrap_coords]) Make supercell.
rotate(**kwargs) Rotate crystal cell lattice, basis, and unit cell.
save([fname, outpath, structure_format, ...]) Save structure data.
todict() Return dict of constructor parameters.
transform_lattice(scaling_matrix[, ...]) Transform structure lattice.
translate(t[, fix_anchor_points]) Translate crystal cell lattice, basis, and unit cell.
write(*args, **kwargs) Write structure data to file.
write_data(**kwargs) Write LAMMPS data file.
write_dump(**kwargs) Write LAMMPS dump file.
write_pdb(**kwargs) Write pdb file.
write_xyz(**kwargs) Write xyz file.

Methods Summary

finalize() Finalize structure data by clipping region bounds if fix_Lz is True.
generate_fname([n, m, nx, ny, nz, fix_Lz, ...]) Generate filename string.
save([fname, outpath, structure_format, ...]) Save structure data.

Methods Documentation

finalize()[source] [edit on github][source]

Finalize structure data by clipping region bounds if fix_Lz is True.

classmethod generate_fname(n=None, m=None, nx=None, ny=None, nz=None, fix_Lz=False, Ntubes=None, bundle_geometry=None, bundle_packing=None, **kwargs)[source] [edit on github][source]

Generate filename string.

save(fname=None, outpath=None, structure_format=None, center_centroid=True, **kwargs)[source] [edit on github][source]

Save structure data.

See save method for documentation.