Hi Mitchell,

> The shape of the field array that gets returned is:
>
> (38, 28, 28, 3)
>
> From looking at the source code the 3 on the end seems to just be for
> whatever dimension your system is, so I assume it's not a simple fix as it
> seems kwants 'streamplot' wants a  3d array and not a 4d array.

Since current is a vector and not a scalar, you get a vector field
evaluated over a homogeneous grid. And of course now it is a
3D-vector, and not a 2D vector. So for example you could get rid of
the z-component entirely by selecting current[:, :, 12, :2].

Another interesting possibility that I suggest to explore is to
somehow use ipyvolume (see ipyvolume.readthedocs.io) for rendering the
3D current distribution.

Cheers,
Anton

>
>
> Any advice would be greatly appreciated.
>
>
> Thank You,
>
> Mitchell Greenberg
>
> ________________________________
> From: anton.akhme...@gmail.com <anton.akhme...@gmail.com> on behalf of Anton
> Akhmerov <anton.akhmerov...@gmail.com>
> Sent: Saturday, August 26, 2017 8:49:08 PM
>
> To: Mitchell Greenberg
> Cc: kwant-discuss@kwant-project.org
> Subject: Re: [Kwant] 2D Current Density Streamplot of 3D System
>
> Hi Mitchell,
>
> The only problem that occurs if you remove the check is the
> normalization of the current density; in 3D you'd need to redo the
> integration of the smoothing function to get the right prefactor. If
> that doesn't bother you, just remove the check (or you could compute
> the correct prefactor).
>
> Best,
> Anton
>
> On Sat, Aug 26, 2017 at 3:30 AM, Mitchell Greenberg
> <mitchell.greenb...@my.jcu.edu.au> wrote:
>> Hi Anton,
>>
>>
>> Thanks for the quick reply, when I try to call
>> kwant.plotter.interpolate_current(syst,current) for my 3D system, I
>> encounter the following error:
>>
>>
>> 'interpolate_current' only works for 2D systems.
>>
>>
>> The error triggers at the line:
>>
>>
>>     # TODO: Generalize 'factor' prefactor to arbitrary dimensions and
>> remove
>>     #       this check. This check is done here to keep changes local
>>     if dim != 2:
>>         raise ValueError("'interpolate_current' only works for 2D
>> systems.")
>>
>>
>> I went and had a look at the source code and it seems that this check is
>> here 'to keep changes local' and that a 'TODO' is to generalize the
>> prefactor to arbitrary dimensions, can I just   remove this check or will
>> that cause issues?
>>
>>
>> If this cannot be done I was looking at current density calculations on
>> the
>> forums last night and I saw there was code for a manual calculation of
>> current density, I also saw on the forums that we can get the 'slice' of
>> the
>> wavefunctions through:
>>
>>
>>     wavefunction = wf(0)
>>
>>     def in_sheet(site):
>>         return site.pos[1] == 0  # site in x-z plane, y position == 0
>>
>>
>> For my code I'd switch to site.pos[2] == 0 since we want z axis slices
>>
>>
>>     sheet = [idx for idx, site in enumerate(sysf.sites) if in_sheet(site)]
>>
>>
>>     wavefunction_in_plane = wavefunction[0][sheet]
>>
>>
>> Is there a way I can use the manual calculation:
>>
>>
>> I_ij = 2 𝕀m[ Ψ⁺_i H_ij Ψ_j ]
>>
>>
>> By only evaluating the 2D section of the wavefunction and hamiltonian that
>> we want?
>>
>>
>> Many Thanks,
>>
>> Mitchell Greenberg
>>
>> ________________________________
>> From: anton.akhme...@gmail.com <anton.akhme...@gmail.com> on behalf of
>> Anton
>> Akhmerov <anton.akhmerov...@gmail.com>
>> Sent: Saturday, August 26, 2017 2:35:56 AM
>> To: Mitchell Greenberg
>> Cc: kwant-discuss@kwant-project.org
>> Subject: Re: [Kwant] 2D Current Density Streamplot of 3D System
>>
>> Hi Mitchell,
>>
>> You can use the low level function that calculates the current
>> interpolation:
>>
>> https://kwant-project.org/doc/1/reference/generated/kwant.plotter.interpolate_current#kwant.plotter.interpolate_current
>>
>> I believe this function will work in 3D as well. Then you can slice
>> the result to get the 2D distribution that you need.
>>
>> Internally we do that and then essentially pass the output to the
>> matplotlib streamplot (or rather kwant.plotter.streamplot).
>>
>> Best,
>> Anton
>>
>> On Fri, Aug 25, 2017 at 12:15 PM, Mitchell Greenberg
>> <mitchell.greenb...@my.jcu.edu.au> wrote:
>>> Hello,
>>>
>>>
>>>
>>> I am currently completing my thesis using Kwant, per discussions with my
>>> supervisor we would like to plot the current density as a streamplot of
>>> our
>>> 3d system for different z-axis 'slices' of the system (our system has an
>>> exponentially decaying potential in the z direction, so we'd expect
>>> current
>>> to flow differently through each layer).
>>>
>>>
>>>
>>> I have tried tinkering with the new current functions implemented in 1.3
>>> but
>>> the plotting function can only plot 2d systems. Is there a way to obtain
>>> the
>>> current density streamplot for a 2d 'slice' of our 3d system.
>>>
>>>
>>>
>>> Thank You,
>>>
>>> Mitchell Greenberg
>>>
>>>

Reply via email to