... | @@ -10,4 +10,103 @@ The quantum friction potential is given by: |
... | @@ -10,4 +10,103 @@ The quantum friction potential is given by: |
|
```
|
|
```
|
|
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.
|
|
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
|
|
\ No newline at end of file |
|
The quantum friction is controlled via `input` file via tags:
|
|
|
|
```bash
|
|
|
|
# --------------- 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:
|
|
|
|
```math
|
|
|
|
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`):
|
|
|
|
```c
|
|
|
|
__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`):
|
|
|
|
```c
|
|
|
|
#define NX 24
|
|
|
|
#define NY 24
|
|
|
|
#define NZ 8
|
|
|
|
#define FUNCTIONAL ASLDA
|
|
|
|
```
|
|
|
|
with input file parmaters:
|
|
|
|
```bash
|
|
|
|
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](uploads/0a927351fb183a211fb554689fdd30cb/qf.png)
|
|
|
|
|
|
|
|
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](Regularization schemes of the pairing field). |
|
|
|
\ No newline at end of file |