Author Topic: Applying strain in graphene  (Read 18442 times)

0 Members and 1 Guest are viewing this topic.

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Applying strain in graphene
« on: December 10, 2012, 11:06 »
Dear Sir,

I was looking to apply strain to a graphene sheet. For this purpose I tried two methods:

1. Using the stretch cell utility in the builder, I applied strain to the graphene unit cell. However when I look to get the band diagram, the symmetry path G-M-K-G is no longer available, only G,Z are available. Thus it becomes difficult to understand the changes in band structure due to strain.

2. If I manipulate the Lattice parameters by small amount (say 10%) in the Bulk Tools to apply strain (keeping the Fractional co ordinates fixed of course), then it seems only the unit cell dimension increases and not the positions of the atoms within the cell. Also the band structures obtained do not seem to differ from the unstrained graphene.

Kindly suggest some solutions.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #1 on: December 10, 2012, 18:34 »
1. This is because as soon as you manipulate the structure in this way, it is no longer hexagonal (well, not necessarily), and so the symmetry points don't apply any more. There are ways to work around this, however, which we can get back to. If your crystal is still supposed to be hexagonal, then probably 2. is the better option to apply the strain.

2. I think that's just an optical illusion, there will be small changes in the band structure for sure, but not major perhaps. If you are not sure about the atom positions, you can inspect the coordinates before and after you change the lattice parameters using Coordinate Tools>Coordinate List.

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #2 on: December 11, 2012, 05:17 »
What are the ways of working around method(1), could you kindly elaborate? Method 1 is more important as we don't really want the strain to be isotropic (as in method 2).
« Last Edit: December 11, 2012, 07:02 by ams_nanolab »

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #3 on: December 11, 2012, 20:42 »
Ok. The trick, which isn't so difficult in your particular case, is to overwrite the method which defines the symmetryPoints(). The problem comes when you want to plot the band structure; since this is an unsupported feature, VNL will not be happy with the plotting... But we can make custom plot scripts, let me get back to that separately. So, to define your own symmetry points, you can do this:
Code: python
def mysym():
    return {
            "G"  : numpy.array((0.0, 0.0, 0.0)),
            "K"  : numpy.array((1./3., 1./3., 0.0)),
            "M"  : numpy.array((0.0, 0.5, 0.0)),
            "A"  : numpy.array((0.0, 0.0, 0.5)),
            "H"  : numpy.array((1./3., 1./3., 0.5)),
            "L"  : numpy.array((0.0, 0.5, 0.5)),
        }

bulk_configuration.bravaisLattice().symmetryPoints = mysym

bandstructure = Bandstructure(
    configuration=bulk_configuration,
    route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
    points_per_segment=100,
    bands_above_fermi_level=All
    )

nlsave("bandstructure.nc" bandstructure)
The code segment needs to be inserted at the end of the script, or use it as a separate script where you read the bulk_configuration from the NC file of the converged calculation. A simplification is possible if the symmetry points are coming from an existing lattice class, like Hexagonal:
Code: python
bulk_configuration._BulkConfiguration__bravais_lattice.symmetryPoints = Hexagonal.symmetryPoints

bandstructure = Bandstructure(
    configuration=bulk_configuration,
    route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
    points_per_segment=100,
    bands_above_fermi_level=All
    )

nlsave("bandstructure.nc" bandstructure)
« Last Edit: December 12, 2012, 07:35 by Anders Blom »

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #4 on: December 12, 2012, 06:59 »
Dear Dr. Blom,

I am running the given code at the end of the script,  as you already said VNL is unable to show any plots for the bandstructure. What is more troublesome is when I'm exporting the saved data points I am getting only a blank output bandstructure file with only the two lines:
+------------------------------------------------------------------------------+
| Bandstructure Report                                                                               |
| ---------------------------------------------------------------------------- |
| Fermi level = -5.701485e+00                                                                     |
| Unit = eV                                                                                               |
| ---------------------------------------------------------------------------- |
| Route :                                                                                                 |
|                                                                                                            |

and nothing else.  :o
It seems bandstructure is not being computed at all.  :o
 

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #5 on: December 12, 2012, 07:34 »
That is also to be expected, you cannot use VNL at all for this case. To plot the band structure, use the script attached. The script is for the general case; for you, if it's specifically the Hexagonal symmetry points you want, you can simplify a bit, skip the symmetry point definition in the script, and just do
Code: python
...
bs = nlread('bandstructure.nc', Bandstructure)[0]

# Override the symmetry points
bs._Bandstructure__lattice.symmetryPoints = Hexagonal.symmetryPoints

# The bandstructure energies
data = bs.evaluate()

# Setup the axises.
...
Same in the code for the bandstructure calculation, actually, you could have done
Code: python
bulk_configuration = nlread("strained_graphene.nc")[0]
bulk_configuration._BulkConfiguration__bravais_lattice.symmetryPoints = Hexagonal.symmetryPoints
bandstructure = Bandstructure(
    configuration=bulk_configuration,
    route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
    points_per_segment=50,
    )
nlsave("bandstructure.nc", bandstructure)

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #6 on: December 12, 2012, 08:21 »
I am running the scripts but the same problem persists.

One thing I am not sure about though, if we are applying strain and therefore transforming the cell to other than hexagonal system, then defining the symmetry points to be hexagonal by override isn't really going to help. Would we get any band structures anyway? Because if the hexagonal symmetry directions don't apply then there's not supposed to any dispersion in those directions.

Could a script be developed to map the new symmetry points back into the hexagonal system ?
« Last Edit: December 12, 2012, 08:27 by ams_nanolab »

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #7 on: December 12, 2012, 08:27 »
1. What problem is that? There shouldn't be any problem when you run the script (well, maybe except for "nlprint", you should remove that) and as I said you cannot do anything in VNL with this NC file.

2. If your system becomes completely distorted, then there are no symmetries, and then you cannot define a bandstructure in the traditional sense (a completely general lattice has no symmetries at all, it's triclinic), so you would need to look for other measures of how the system responds to the strain. But I think you are still "approximately hexagonal" if you apply a small strain, so the current approach is the appropriate one for looking at things like broken degeneracies, changes in effective masses, etc.

So, under the small strain, the hexagonal symmetry points are not strictly speaking high symmetry points, but they are as close as you can get, and they are correctly defined in this way.
« Last Edit: December 12, 2012, 08:31 by Anders Blom »

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #8 on: December 12, 2012, 08:35 »
Dear Dr. Blom

The problem is that I am not getting any data points for the band structure. The job manager is showing that the bandstructure is being calculated but though VNL may not be able to display the results in a graph, it should be able to save the bs data for the given path. When I am trying to export the data points from the result viewer I am getting an empty file like in my earlier post:

+------------------------------------------------------------------------------+
| Bandstructure Report                                                                               |
| ---------------------------------------------------------------------------- |
| Fermi level = -5.701485e+00                                                                     |
| Unit = eV                                                                                               |
| ---------------------------------------------------------------------------- |
| Route :                                                                                                 |
|                                                                                                            |

where to find the data points? kindly help.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #9 on: December 12, 2012, 09:21 »
To export the data you can use this:
Code: python
bs = nlread('bandstructure.nc', Bandstructure)[0]
bs._Bandstructure__lattice.symmetryPoints = Hexagonal.symmetryPoints
nlprint(bs)
« Last Edit: December 12, 2012, 09:26 by Anders Blom »

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #10 on: December 12, 2012, 09:32 »
Ya, now it's working. Many thanks.  :D

Offline ams_nanolab

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 389
  • Country: in
  • Reputation: 11
    • View Profile
Re: Applying strain in graphene
« Reply #11 on: December 17, 2012, 11:09 »
Could you help me regarding how to calculate the effective mass at K point of strained graphene sheet?
In this case will the effective mass analyzer function give accurate results?
Currently I'm inputting the StrainedGraphene.nc file into the analyzer. The analyzer seems to read the BulkConfiguration data.
Should I input the StrainedGraphene.nc file or the bandstructure.nc file to get accurate results?

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #12 on: December 17, 2012, 12:51 »
There is no assumption in the effective mass analyzer about strain, so it will work fine for whatever configuration you use, as long as you provide it with the correct k-point etc.

You must use the converged configuration NC file; the analyzer does not use a precomputed band structure, it re-computes the E(k) relationship as needed for good accuracy.

Offline Sarang

  • Regular QuantumATK user
  • **
  • Posts: 11
  • Country: us
  • Reputation: 0
    • View Profile
Bandstructure of Pure Graphene
« Reply #13 on: May 21, 2013, 23:29 »
Dear Dr. Bloom,

I have been getting the same trouble of not getting the k-points except G,Z; while we need to have G, M,K,G as the points. I tried to follow the instructions per your advice, the input python file is as attached. But I am getting below error after running it is as below:

Traceback (most recent call last):
  File "c:\users\sarang\appdata\local\temp\1128902377281156.py", line 76, in <module>
    bs = nlread('C:/Users/Sarang/Desktop/VNL Files/BAND STRUCTURE WORKING/ATT_2.nc', Bandstructure)[0] 
IndexError: list index out of range

Could you please help on the same ?

Thanks,
Sarang

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: Applying strain in graphene
« Reply #14 on: May 21, 2013, 23:34 »
This particular error message is quite simple to understand. It means the file "ATT_2.nc" does not contain any Bandstructure objects.