Tensor Network Theory Library  Beta release 1.2.1
A library of routines for performing TNT-based operations
 All Data Structures Functions Variables Groups Pages
init_impurity_boson_transport.m

Creates an initialisation file describing a localised impurity boson in an environment of another species of bosons. After the ground state is found, a tilt potential is added. This is a smaller-sized example of the system studied in Johnson, T. H., Clark, S. R., Bruderer, M., & Jaksch, D. (2011). Impurity transport through a strongly interacting bosonic quantum gas. Physical Review A, 84(2), 023617.

bhimpurity.png
%% Creating an initialisation file for TNT library functions
clear all;
% matlab filename for input file
savename = 'impurity_boson_transport.mat';
% Initialise all variables required
%% Create n-species operators
ns = 2; % Number of species
nmax = 1; % Maximum number of bosons per site
[bdag,b,n] = tntMatBosonOps(nmax,ns); % Creating boson operators
d = size(n{1},1); % Physical dimension
%% Defining the physical basis, symmetry information and global system parameters
% Now give the quantum number(s) for each index of the operator.
% If there are n quantum numbers there should be n
% rows in the array, and the number of columns must equal the number of
% rows or columns of the basis operator.
qnums = zeros(ns,d);
for loop = 1:ns
qnums(loop,:) = transpose(diag(n{loop}));
end
tntSystem.basisOp = tntMatAppendBasisOp(n{1},qnums); %Set the basis operator for the system
tntSystem.symm_type = 1; % U(1) symmetry type (0 for no symmetries)
tntSystem.symm_num_qn = ns; % The number of quantum number labels
%% Set up the system
chi=50;
L=25;
%% Parameters for finding the ground state: a deep impurity trap
precision = 1e-5; % ground state is found when difference between energy iterations is less than this
% Starting with a highly localised impurity state
vac = zeros(d,1); vac(1) = 1;
wf_gs = cell(1,L);
for loop = 1:L
wf_gs{loop} = vac; % start with a vacuum on each site
if (mod(loop,2) == 0)
wf_gs{loop} = bdag{2} * wf_gs{loop}; % add an environment boson on every other site
end
if loop == ceil(L/2)
wf_gs{loop} = bdag{1} * wf_gs{loop}; % add an impurity boson on the central site
end
end
wf_gs = tntMatCreateProdMps(wf_gs,qnums);
% ground state Hamiltonian
% onsite terms: central square well for impurity, on-site interation for environment, density-density intra-species coupling
osg = tntMatCreateOpArray({ n{1}, n{2}*(n{2} - eye(d))/2, n{1}*n{2}});
osparamg = [ 10* (1:L ~= ceil(L/2)); 2*ones(1,L); 0.5*ones(1,L)];
% nearest neighbour terms: hopping for each species
nnlg = tntMatCreateOpArray({b{1},bdag{1},b{2},bdag{2}});
nnrg = tntMatCreateOpArray({bdag{1},b{1},bdag{2},b{2}});
nnparamg = [-0.6;-0.6;-1;-1];
%% Parameters for time evolution
dt = 0.01;
numsteps = 12/dt;
tbigstep = numsteps/50;
%% Evolution Hamiltonian
% ground state Hamiltonian
% onsite terms: tilt for impurity, on-site interation for environment, density-density intra-species coupling
ost = tntMatCreateOpArray({ n{1}, n{2}*(n{2} - eye(d))/2, n{1}*n{2}});
osparamt = [ 1.2*((1:L)-ceil(L/2)); 2*ones(1,L); 0.5*ones(1,L)];
% nearest neighbour terms: hopping for each species
nnlt = tntMatCreateOpArray({b{1},bdag{1},b{2},bdag{2}});
nnrt = tntMatCreateOpArray({bdag{1},b{1},bdag{2},b{2}});
nnparamt = [-0.6;-0.6;-1;-1];
%% Expectation values to take
% on-site operators and labels
ExOp.os_operators = tntMatCreateOpArray({n{1},n{2}});
ExOp.os_labels = {'na','nb'};
ExOp.nn_operators = {};
ExOp.nn_labels = {};
ExOp.cs_operators = {};
ExOp.cs_labels = {};
ExOp.ap_operators = {};
ExOp.ap_labels = {};
%% Save all the parameters
save(savename);