Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Hassan

Pages: [1] 2
1
Hi,

I found this weird issue with using evaluate() on an Effective Potential grid object using ATK 14.2.         

Code
voltage = effective_potential_obj.evaluate (x_coord, y_coord, z_coord, Spin.Sum)

This line takes around 100 milliseconds on an object that has  242x223x363 grid points. I have a script that outputs these grid objects to an XYZ format, and it would take days to do this. For some reason this is only happening with Veff objects and not, say, Electron Density. The work around I've found is using the toArray() function, which takes around ~5 seconds to convert to an array and then takes only 50 µs for an access. However, this is annoying because I have to map physical coordinates to array indices, and annoyingly there is no function that does that (gridCoordinate() does the opposite).

I thought you might look into why this is happening.


2
In the manual page for AtomicCompensationCharge (http://quantumwise.com/documents/manuals/latest/ReferenceManual/index.html/ref.atomiccompensationcharge.html), you have the following code example:

Code
# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
    elements=[Silicon, Silicon],
    fractional_coordinates=[[ 0.  ,  0.  ,  0.  ],
                            [ 0.25,  0.25,  0.25]]
    )

# Set a negative compensation charge on each atom, to compensate for p-doping
compensation_charge = AtomicCompensationCharge([[0, -0.0005], [1, -0.0005]])
bulk_configuration.setExternalPotential(compensation_charge)

# Calculator
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(5, 5, 5),
    )
It is copied from the 13.8 Manual page (http://quantumwise.com/documents/manuals/ATK-13.8/ReferenceManual/ref.atomiccompensationcharge.html).

The problem is that you have changed the functionality of the atomic_shifts argument in 14.0 onwards (why...I'm not sure). It accepts tags and charge tuples rather than atom index and charge tuples so if you tried to use the code example you get an error.

It should read:

Code
bulk_configuration = BulkConfiguration(
    bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
    elements=[Silicon, Silicon],
    fractional_coordinates=[[ 0.  ,  0.  ,  0.  ],
                            [ 0.25,  0.25,  0.25]]
    )
bulk_configuration.addTags ('all_atoms', [0,1])

# Set a negative compensation charge on each atom, to compensate for p-doping
compensation_charge = AtomicCompensationCharge([('all_atoms', -0.0005)])
bulk_configuration.setExternalPotential(compensation_charge)

3
General Questions and Answers / Re: Effect of gate metal
« on: April 8, 2015, 23:06 »
Can you please describe in detail where/how the Fermi level is reported?

4
General Questions and Answers / Error with multigrid residual
« on: February 19, 2015, 19:08 »
I'm running a simulation of a transistor device and i get the following error:

The computed multigrid residual is greater than the required accuracy.       #
#                                                                              #
# Computed residual :         inf                                            #
# Required accuracy :   1.00000e-12


The simulator also throws an exception:
* Back Engine Exception : Singular value decomposition failed
 33 ** Location of Exception : mathutils.cpp:1604
 34


I'm using  Atomistix ToolKit 2014.2 [Build 811a2e4]. This error is really unpredictable. I use very similar geometry on other devices and i dont get the same error. I am using Neumann Boundary conditions on the A/B axes and Dirichlet on the C ends of the device.

        left_electrode_poisson_solver = MultigridSolver(
            boundary_conditions=[[NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
            )

        right_electrode_poisson_solver = MultigridSolver(
            boundary_conditions=[[NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
            )

        device_poisson_solver = MultigridSolver(
            boundary_conditions=[[NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [NeumannBoundaryCondition,NeumannBoundaryCondition],
                                 [DirichletBoundaryCondition,DirichletBoundaryCondition]]
            )

I'm attaching my device geometry. Note that the distance between the dielectric and any atom is exactly 1A as suggested by QW experts here.


Any help would be nice.

Thanks

5


This is the Transmission spectrum curves of two different cross sections of nanowires. I am using ATK 13.8.1.

The larger cross section clearly has larger area under the curve, and just to make sure I integrated it and got the values of:

15.98 (for 8.65x5.76A) vs. 12.228 (for 5.76x5.76A). Both the Spectrums are generated using an applied voltage of 0.1V.

However, when I run TransObj.current() on the spectrum, Atomistix returns 29.5uA for the larger cross-section and 37.3uA for the smaller cross section. The parameters used in each simulation were the same (k-points, energy cutoff etc.)


What is going on here?

Thanks


6
General Questions and Answers / Re: Silicon Nanowire FET
« on: August 25, 2014, 23:51 »
I have doped the electrodes, I still get negligible current. I have tried doping at 4e19 cm^-3, I think that's a pretty high doping. This is again with the Silicon Hydrogen-terminated NW.

7
General Questions and Answers / Silicon Nanowire FET
« on: August 21, 2014, 00:14 »
Hi,

I simulated  Silicon nanowire FET with DFT-GGA. However, the currents that I'm getting are way too low I think.

I am attaching the structure of the FET.

I have also attached the Gate voltage vs. Current curve. The current being this low is basically just noise. Note, this data is from TransmissionSpectrum with -2eV to 2eV range. I redid the calculation with -4eV to 4eV range and the result is only an order of magnitude higher. It still produces extremely low currents.


8
Helpp

9
General Questions and Answers / Metal Work Function Question
« on: July 18, 2014, 18:07 »
These are the posts made in this forum that talk about how the Gate Metal Work Function is treated in Atomistix. I wanted to clarify a few things.

Quote
The work function of the metalic region will determine where is the zero value of the gate potential. Thus, the effect of the work function is to shift the gate potential by a constant. You cannot set this parameter, and you need to make such corrections as post analysis. 
i.e. work function of electrode is 4 eV, work function of gate is 5 eV, then you must add -1 V to you gate potential axis as post analysis.

The gate electrodes are just electrostatic, and have no real "atomic" character, which would be needed to define a work function.


Quote
Question:
But without knowing the work function of this so called electrostatic region, how can one anticipate the changes of I-V as we move from two terminal to three terminal device with zero gate bias ?
Answer:
In principle yes, but this is only relevant if there is a gate current as well, but to describe such a real three-probe system you need the gate to be described atomistically as well, just as source and drain, and this formalism is not available in ATK.


So does this mean that the gate metal work function is in reference to whatever electrode metal is being used? So for example if I have a Copper electrode, then the ideal gate metal used has the same work function as that copper electrode? And if I intend to use another metal as the gate, then I simply subtract the difference from the electrode metal work function and gate metal work function from the Gate Potential Axis in my transfer characteristics curve?

Thanks!

10
General Questions and Answers / Re: Bandgap vs. DOS curve
« on: April 8, 2014, 22:16 »
Perfect, the results actually make sense now :)
Thanks!

11
General Questions and Answers / Bandgap vs. DOS curve
« on: April 7, 2014, 19:47 »
Hi,

I am trying to determine the bandgap of graphene nanoribbons. I am also trying to compare with the density of states with the bandstructure diagram, and something doesn't add up.

The system under question:



This is a nanoribbon 20 atoms wide in the armchair configuration.

This is the bandstructure diagram I get with the following settings:

Code
            bandstructure = Bandstructure (
                configuration=configuration_obj,
                route=band_route,
                points_per_segment=100,
                bands_above_fermi_level=5
)



As you can see the bandgap is around ~100meV.

Now, the Density of States curve with the following settings:
Code
dos = DensityOfStates(
                configuration=configuration_obj,
                kpoints=MonkhorstPackGrid(4,4,4),
                bands_above_fermi_level=5,
                energy_zero_parameter=FermiLevel,
             )



In this photo you can see the bandgap to be around 2eV. Why is this difference so large? Is there anything wrong in my setup?

The settings for the DFT calculation were PBE.GGA Double Polarized, 4x4x4 k point grid and 65 Rydberg E cutoff.

Any help is appreciated.

 

12
I have a similar question.

Is it possible to check whether a certain analysis object EXISTS, without reading in the entire object to memory?

Like if I want to do
 
config_object = nlread ('data.nc', DeviceConfiguration, object_id = 'config2')
  • ,


is it possible to just check if config2 exists? I'm asking because I have .nc files with hundreds of objects, and it is time consuming to loop through them especially if you are looping through DeviceConfiguration or BulkConfiguration objects.

THanks

14
Hi,

I'd like to know how accurate a non-self consistent current calculation is through the TransmissionSpectrum object?

Reading this page: http://www.quantumwise.com/documents/tutorials/latest/GrapheneDevice/index.html/chap.further.html

It seems like it's fairly accurate over a certain voltage range (-1, 0.6) V, but drops off rapidly after 0.6. What is the reason for this?

I'd like to know if my thinking here is correct, in order to speed up my current calculations.

Say I'd like to do an accurate Gate Bias vs. Current curve over (-3, 3) V, I would do self consistent calculations for 13 points (-+3, -+2.5, -+2, -+1.5, -+1, +-0.5, 0) V, and then do non-self consistent calculations around each of the self consistent bias points (e.g. for self consistent voltage -2.5, I'd do -2.75 to -2.25 with a step size of 0.01 Volts to get a finer curve.

Does this seem like a good idea?

Thanks for your help.

15
Hi,

I'm simulating a metal nanowire and trying to figure out the electron affinity of different metals (the attached images are for Gold FCC nanowire).

My question is why are the Electrostatic Difference Potential and Effective Potential graphs inverted? Reading the other forum posts about EDP, I would expect the graphs to have the same shape. Also, I would expect the effective potential to have valleys where the atom positions are, rather than peak.. What am I doing wrong?


Difference Potential

Effective Potential (aligned with the nanowire cross section)



Thanks for your help.

Pages: [1] 2