/* Author copyright: V. P. Singh Time evolution code for the Monte Carlo state with barrier parameters same as experiments. This gives the imbalance. */ #include #include #include #include #include "functions.c" const int xlen = 508 ; const int ylen = 33 ; const int zlen = 33 ; const double J0 = 1.00 ; const double U = 0.89; double freq_x_Hz = 1.6; double freq_y_Hz = 252; double freq_z_Hz = 250; double trap_scale = 9.48074e-10; const double eps=1.e-7 ; int xmid = xlen/2; int ymid = ylen/2; int zmid = zlen/2; int Lbx = xlen-3; int Lby = ylen-3; double tunit = 0.0000615816; const double ti = 0.0 ; const double tf = 180.0 ; const double Vs_finalTime = 220.0 ; double ramp_up(double t) { if(t < ti){ return 0.0 ; } else if( (t >= ti) && (t < tf) ){ return 1.0*(t - ti)/(tf - ti) ; } else return 1.0; } double xx0; double Vs, gaus_width; /* Returnsa Gaussian potential with a half width */ double gaussian_stirrer( int x_site ) { double x0center = 1.*xx0 - x_site; return 1.0*exp( -2.*x0center*x0center/(gaus_width*gaus_width ) ); } /* Returns a Gaussian potential with a half width */ double gaussian_mobile( int x_site, double t, double v0, double x1, double freq){ double om_freq =2.*M_PI*freq; double x_time = v0*(t- Vs_finalTime) + x1*sin( om_freq*(t - Vs_finalTime) ); double modx0 = 1.*xx0 - x_site + x_time; return 1.0*exp( -2.*modx0*modx0/( gaus_width*gaus_width ) ); } double excitation_protocol(int x_site, double t, double v0, double v1, double freq){ if(t < Vs_finalTime) { return ramp_up(t)*Vs*gaussian_stirrer(x_site); } else return Vs*gaussian_mobile(x_site, t, v0, v1, freq); } double *trap; double v0, v1, simfreq; void dervis(double t, double *xfield, double *dxdt) { for(int z=0; z(j*timestep-t)){htry=(j*timestep -t);} else{htry=hnext;} dervis(t, xfield, dxdt); rkqs(xfield, dxdt, 2*xlen*ylen*zlen-1, &t, htry, eps, yscal, &hbid, &hnext, dervis); } if(j >= TprobeSteps ){ double n_Left =0.0; double n_Right=0.0; int vortex_sum =0; double om_freq = 2.*M_PI*simfreq; double vel_time = v0*(t- Vs_finalTime) + v1*sin( om_freq*(t - Vs_finalTime) ); double modx0 = 1.*xx0 + vel_time; for(int z=0; z