Introduction
Quantum friction is an external potential added to the Hamiltonian that breaks time-reversal invariance so as to cool the system (decrease its total energy). It may be used to cool fermionic many-body systems with thousands of wavefunctions that must remain orthogonal. It is described in details in:
- A. Bulgac, M. M. Forbes, K. J. Roche, G. Wlazłowski, Quantum Friction: Cooling Quantum Systems with Unitary Time Evolution, arXiv:1305.6891
The quantum friction potential is given by:
V_{\sigma}^{(qf)} = -\alpha \frac{\hbar\,\vec{\nabla}\cdot\vec{j}_\sigma}{\rho_0}
where \rho_0=\frac{k_F^3}{6\pi^2}
is reference density. By construction, this potential removes any irrotational currents. Thus it provides a convenient method of removing phonon excitations from the system.
Usage
The quantum friction is controlled via input
file via tags:
# --------------- QUANTUM FRICTION ------------------
# qfalpha 0.0 # alpha parameter for quantum friction term
# qfstart 0.0 # start time for evolving with quantum friction [eF]
# qfstop 0.0 # stop time for evolving with quantum friction [eF]
# qfswitch 0.0 # the friction will be activated and deactivated gradually over this period of time [eF]
Notes:
-
qfalpha ~ 1
looks to be reasonable choice, - too large value of
qfalpha
may lead to instability of the code, typically it manifests via growing of the energy during the evolution.
Example
Consider application a time-dependent potential:
V_{\textrm{ext}}(x,y,t)=s(t,t_{\textrm{start}}, t_{\textrm{stop}})\exp\left[-\frac{x^2}{2\sigma_x^2}-\frac{y^2}{2\sigma_y^2}\right]
to the unitary Fermi gas, being initially in the uniform state, where s(t,t_{\textrm{start}}, t_{\textrm{stop}})
is (smooth) step function that acquires 1 in time interval [t_{\textrm{start}}, t_{\textrm{stop}}]
, otherwise is 0. Implemamntion of this potential is following (problem-definition.h
):
__device__ __host__ inline double switch_function(double t, double T, double alpha)
{
return 0.5*( 1.0+tanh( alpha*tan( M_PI_2*( 2.0*t/T-1.0 ) ) ) );
}
__device__ __host__ inline double smooth_step(double t, double step_start, double step_stop, double T, double alpha)
{
if(t<=step_start || t>=step_stop) return 0.0;
if(t>=step_start+T && t<=step_stop-T) return 1.0;
if(t>step_start && t<step_start+T) return switch_function(t-step_start, T, alpha);
else return 1.0-switch_function(t-step_stop+T, T, alpha);
}
__device__ double v_ext(int ix, int iy, int iz, int it, int spin, double *params, size_t extra_data_size, void *extra_data)
{
double x = DX*(ix-NX/2);
double y = DY*(iy-NY/2); // for 1d code iy will be always 0
double z = DZ*(iz-NZ/2); // for 1d and 2d codes iz will be always 0
double t = dc_t0 + dc_dt*it; // time
// ADD HERE FORMULA FOR V_ext(r)
double AMPLITUDE = params[0];
double AX=params[1];
double AY=params[2];
double AZ=params[3];
double T_START=params[4];
double T_STOP=params[5];
double T_SWITCH=params[6];
double gauss = AMPLITUDE *
smooth_step(t, T_START, T_STOP, T_SWITCH, 1.0) *
exp(-1.*AX*x*x -1.*AY*y*y -1.*AZ*z*z );
double V_ext = gauss;
return V_ext;
}
extern "C" void process_params(double *params, double *kF, double *mu, size_t extra_data_size, void *extra_data)
{
// PROCESS INPUT FILE PARAMETERS
double eF = 0.5*kF[0]*kF[0];
params[0]*=eF;
// sigmas
int i;
for(i=1; i<=3; i++) if(params[i]>1.0e-9) params[i] = 1.0/(2.0*params[i]*params[i]);
// times
for(i=4; i<=6; i++) params[i]/=eF;
}
When executing this code for lattice (predefines.h
):
#define NX 24
#define NY 24
#define NZ 8
#define FUNCTIONAL ASLDA
with input file parmaters:
params0 0.25 # gauss amplitude [eF]
params1 2.0 # width in x direction
params2 1.9 # width in y direction
params4 0.0 # turn-on
params5 50.0 # turn-off
params6 10.0 # switch-time
# ...
qfalpha 1.0 # or 0.0 (=deactivated)
qfstart 0.0
qfstop 250.0
qfswitch 1.0
# ...
the resulting evolution of the total energy looks like this:
It is observed, that time-dependent potential excites the system. Selected potential does not introduce angular momentum to the system, and only phonons are induced. When evolving this state with the quantum friction (qfalpha=1.0
) we see that the system returns after some time to its ground state. The origin for energy fluctuations for qfalpha=0.0
and for t\varepsilon_F>50
see here.