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 - Greg

Pages: [1]
1
Ok, here's how to do the isosurface in 10.8.

Code: python
(n_u,n_d) = nlread('density.nc', ElectronDensity)

n_up = n_u[:,:,:].inUnitsOf(n_u.unit())
n_dn = n_d[:,:,:].inUnitsOf(n_d.unit())
n = (n_up - n_dn)/(n_up + n_dn + 1e-19)

# Overwrite values in n_u with the difference density
import NLEngine
n_u._GridValues__grid3d = NLEngine.RealGrid3D(n_u._GridValues__grid3d.gridDescriptor(), \
                                              NLEngine.doubleSequenceToRealVector(n.flatten()))

# Save it!
nlsave('diff.nc', n_u, object_id="Spin Polarization Density")

This will not be part of the official tutorial, we will temporarily remove it for 10.8, but it will be possible to do it in 11.2 - just like the current tutorial states.


Dear Mr Anders Blom, the problem has been fixed, thanks for your help very much!

2
Seems we need to double-check that tutorial a bit. Thanks for reading and trying it, and for reporting the issues.

To work around the issue (a more general solution will be provided later), insert 2 lines after the "nlread" line:

Code
n_up = n_u[:,:,:]
n_dn = n_d[:,:,:]

After that, you should be able to use

Code
r = (n_up - n_dn)/(n_up + n_dn + 1e_19)

(I added a small infinitesimal for safety, to avoid division by zero.)

Same solution applies to both scripts.

However, it will not be possible to save the computed polarization grid in an NCFile, so the "nlsave" line must be removed; you will have to be content with the picture in the manual, for now :)

:(doesn't work

Mr Anders Blom, previous problems have not been disposed at all.


3
Seems we need to double-check that tutorial a bit. Thanks for reading and trying it, and for reporting the issues.

To work around the issue (a more general solution will be provided later), insert 2 lines after the "nlread" line:

Code
n_up = n_u[:,:,:]
n_dn = n_d[:,:,:]

After that, you should be able to use

Code
r = (n_up - n_dn)/(n_up + n_dn + 1e_19)

(I added a small infinitesimal for safety, to avoid division by zero.)

Same solution applies to both scripts.

However, it will not be possible to save the computed polarization grid in an NCFile, so the "nlsave" line must be removed; you will have to be content with the picture in the manual, for now :)


Thank you very much, Mr Anders Blom, i will try them at once.

4
Dear everyone:
When I used the script below, I found that it didn’t work at all.
………………………………………………………………………..
(n_u,n_d) = nlread('F:/ATK/graphene_nanoribbon/density.nc', ElectronDensity)

r = (n_u - n_d)/(n_u + n_d)
nlsave('F:/ATK/graphene_nanoribbon/diff.nc', r)
………………………………………………………………………..
the error message is:
Traceback (most recent call last):
File "c:\users\zhangsg\appdata\local\temp\2550619019667366.py", line 5, in <module>
r = (n_u - n_d)/(n_u + n_d)
TypeError: unsupported operand type(s) for /: 'ElectronDensity' and 'ElectronDensity'
NanoLanguageScript execution failure

Anyone can help me?
Another script also didn’t work:
………………………………………………………………………..
import numpy
import pylab

# Read coordinates and densities
coords     = nlread('F:/ATK/graphene_nanoribbon/bandstructure.nc', BulkConfiguration)[0]
coords     = coords.cartesianCoordinates().inUnitsOf(Angstrom)[:,1:3]
(n_u, n_d) = nlread('F:/ATK/graphene_nanoribbon/density.nc', ElectronDensity)

# Calculate the polarization density
n = (n_u - n_d)/(n_u + n_d)
n = n[:,:,:]
av = numpy.array(n.sum(axis=0))

# Set the 2D axis
y = numpy.array(range(av.shape[0]))/float(av.shape[0])*19.3063
z = numpy.array(range(av.shape[1]))/float(av.shape[1])*2.46100171044

# A 'spin-dependent colorbar'
cdict = {
    'red':   ((0.0, 0.0, 0.0),
              (0.5, 0.0, 1.0),
              (1.0, 1.0, 1.0)),
    'green': ((0.0, 1.0, 1.0),
              (0.5, 0.0, 0.0),
              (1.0, 1.0, 1.0)),
    'blue':  ((0.0, 0.0, 0.0),
              (0.5, 1.0, 0.0),
              (1.0, 0.0, 0.0))
    }
spin_cmap = pylab.matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)

# Build up the plot
pylab.clf()
pylab.figure(figsize=(5,y[-1]/z[-1]*5.))
pylab.xlabel('z / Angstrom')
pylab.ylabel('y / Angstrom')
pylab.contourf(z,y,av,40,colors='k')
pylab.contourf(z,y,av,40,cmap=spin_cmap)
pylab.plot(coords[:,1],coords[:,0],'ko',ms=15.0)
axis = pylab.axis('image')
v = [axis[0],axis[1],4.0,15.3]
pylab.axis(v)
pylab.colorbar()
pylab.savefig('av.png')
…………………………………………………………………………..

the error message is:
Traceback (most recent call last):
File "c:\users\zhangsg\appdata\local\temp\4538397047235477.py", line 12, in <module>
n = (n_u - n_d)/(n_u + n_d)
TypeError: unsupported operand type(s) for /: 'ElectronDensity' and 'ElectronDensity'
NanoLanguageScript execution failure

Almost the same error as the former script.

What should I do to carry out these scripts successfully? Can you help me? Thank you very much in advance, everyone.
 :'(

Pages: [1]