Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • wslda wslda
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • wtools
  • wsldawslda
  • Wiki
  • Quantum friction

Last edited by Gabriel Wlazłowski Jun 14, 2021
Page history

Quantum friction

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: qf

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.

Clone repository

Content of Documentation
Official webpage
W-BSK Toolkit