Young’s modulus of a CNT with a defect¶
Carbon nanotubes are well known for their exceptional mechanical properties; Young’s moduli in the 1 TPa range have been measured [KDE+98], which is higher than any other known material. The theoretical Young’s modulus is fairly simple to calculate for a defect-free carbon nanotube, but this is not the case when defects are present. In that case, molecular dynamics (MD) is a suitable tool for calculation of the mechanical properties.
In this tutorial you will build a carbon nanotube (CNT) with a Stone–Wales defect, and use the ATK-ForceField engine to calculate the Young’s modulus.
This tutorial uses a CNT structure that is built in the tutorial
Stone–Wales defects in nanotubes. If you have not already done so, please go that
tutorial first and build the CNT device configuration, or simply
download it as a Python script:
CNT bulk configuration¶
Open the QuantumATK Builder , and use to import the previously saved CNT configuration to the Stash. Note that the structure is a device configuration with the Stone–Wales defect in the middle of the central region.
Next, highlight the device Stash item, and click the icon to convert it to a bulk configuration (the device electrodes are simply removed), and use the tool to add tags to the atoms at both ends of the nanotube:
- Use the mouse to highlight the left-most carbon atoms and set the tag “Left” on them.
- Do the same for the right-most carbon atoms, as illustrated below.
These tags will be used to impose constraints on the structure during the MD simulation.
Configuring the MD simulation¶
- First, change the default output file to
- In the New Calculation block, select the ATK-ForceField calculator, and make sure to use the Tersoff_C_2010 classical potential, which is designed for simulating lattice dynamics of graphene and nanotubes.
For QuantumATK-versions older than 2017, the ATK-ForceField calculator can be found under the name ATK-Classical.
- Make the following changes to the MolecularDynamics block:
- Molecular Dynamics options:
- Set the “Type” to NVT Berendsen.
- Set “Steps” to 20000.
- Set the “Log interval” to 200.
- Initial Velocity options:
- Set “Type” to Maxwell-Boltzmann.
- Set “Temperature” to 300 K.
- Untick the Remove center-of-mass momentum option.
- NVT Berendsen options:
- Set the “Thermal coupling” to 1 fs.
- Molecular Dynamics options:
Leave the remaining settings at defaults, like in the image above.
Adding Python hooks¶
It is possible in QuantumATK to define “hooks”; Python functions or classes that are called before or after each MD step. These hooks can be used to provide customized on-the-fly analysis or monitoring of the system, or – as in this case – to modify the structure dynamically during the simulation.
You will now define a pre-step hook that will be used to strain the nanotube slightly for each step of the MD run:
With the Python script open in the Editor, scroll down to the bottom of the script and locate the block defining the
md_trajectory. The predefined tags “Left” and “Right” can now be used to apply constraints to the system. Change the line
md_trajectoryblock, add the line
and add a comma to the line immediately above it (
You should also define what “strainer” is: Add the following line immediately before the
strainer = StressStrainUtility()
The bottom of the script should now look like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
# ------------------------------------------------------------- # Molecular Dynamics # ------------------------------------------------------------- initial_velocity = MaxwellBoltzmannDistribution( temperature=300.0*Kelvin, remove_center_of_mass_momentum=False ) method = NVTBerendsen( time_step=1*femtoSecond, reservoir_temperature=300*Kelvin, thermostat_timescale=100*femtoSecond, initial_velocity=initial_velocity ) strainer = StressStrainUtility() md_trajectory = MolecularDynamics( bulk_configuration, constraints=bulk_configuration.indicesFromTags(["Left","Right"]), trajectory_filename='mdtrajectory_cnt.hdf5', steps=20000, log_in