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 Feb 20, 2026
Page history
This is an old version of this page. You can view the most recent version or browse the 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
  • API version
  • Automatic interpolations
  • Auxiliary tools and extensions
  • Browsing the code
  • Broyden algorithm
  • C and CUDA
  • Campaign of calculations
  • Checking correctness of settings
  • Chemical potentials control
  • Code and results quality
  • Common failures of static codes
  • Common failures of time dependent codes
  • Computational domain
  • Configuring GPU machine
  • Constraining densities and potentials
View All Pages