⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moving.cc

📁 使用量子轨道方法计算量子主方程的C++库
💻 CC
字号:
// Simple harmonic oscillator, using the moving basis, one // trajectory.// Different unravelings can be chosen by uncommenting or// commenting out the appropriate lines.#include <math.h>#include <stdio.h>#include <iostream.h>#include <fstream.h>#include "ACG.h"#include "Traject.h"#include "State.h"#include "Operator.h"#include "FieldOp.h"#include "Complex.h"main(){  // Basic operators  AnnihilationOperator A;  NumberOperator N;  Operator Ac = A.hc();  // The Hamiltonian  double omega = 1.0;  Operator H = omega*Ac*A;  // The Lindblad operators  double gamma = 1.0;  const int nOfLindblads = 1;  Operator L1 = gamma*A;  Operator L[nOfLindblads] = {L1};  // The initial state  int dim = 4;           // cutoff Hilbert space dimension, can be small                         //  since the moving basis is used.  Complex alpha(1.4,-0.4);//int m=5;//State psi(dim,m,alpha); // excited coherent state |alpha,m>  State psi(dim,0,alpha); // coherent state |alpha>                           // (centered at alpha, i.e., represented as the                          //  ground state of the excited basis {|alpha,m>})                          // See "State.h" for more details.  // The random number generator  int seed = 74298;  ACG gen(seed,55);  ComplexNormal rand1(&gen);   // noise function for QSD//ComplexUniform rand1(&gen);  // noise function for Quantum Jumps  // Stepsize and integration time    double dt=0.01;   // basic time step  int numdts=10;    // time interval between outputs = numdts*dt  int numsteps=100; // total integration time = numsteps*numdts*dt    double accuracy = 0.000001;  AdaptiveStep theStepper(psi,H,nOfLindblads,L,accuracy);    // QSD unraveling    // deterministic part: adaptive stepsize 4th/5th order Runge Kutta    // stochastic part: fixed stepsize Euler//AdaptiveStochStep theStepper(psi,H,nOfLindblads,L,accuracy);    // QSD unraveling    // deterministic part: adaptive stepsize 4th/5th order Runge Kutta    // stochastic part: Euler, same (variable) stepsize as deterministic part//AdaptiveJump theStepper(psi,H,nOfLindblads,L,accuracy,"jump_times");    // Quantum Jumps unraveling (jumps in file "jump_times")    // deterministic part: adaptive stepsize 4th/5th order Runge Kutta    // stochastic part: Euler, same (variable) stepsize as deterministic part  Trajectory theTraject(psi,dt,theStepper,&rand1);   int nOfMovingFreedoms = 1;   // Moving basis for 1 degree of freedom.// We dynamically adjust the number of basis vectors. Our criterion for// this adjustment depends on parameters `pCutoff' the cutoff// probability, and `nPad', the pad size, which represents the number of// boundary basis states that are checked for significant probability. We// require the total probability of the top `nPad' states to be no// greater than `pCutoff', increasing and decreasing the number of states// actually used accordingly, as the integration proceeds along the// quantum trajectory.// See  J. Phys. A 28, 5401 (1995) for more details.  double pCutoff = 0.01;  int nPad = 2;  // Output  const int nOfOut = 2;  Operator outlist[nOfOut] = {A,N};	    // Operators to output  char *flist[nOfOut] = {"A.out","N.out"};  // Output files  int pipe[4] = {1,2,5,7};      // Standard output:      // t,Re<A>,Im<A>,<N>,<N^2>-<N>^2,dim,steps      //  where `t' is time, `dim' is the effective dimension of Hilbert space,      //  and steps is the number of adaptive steps taken.  // Start integration  theTraject.plotExp(nOfOut,outlist,flist,pipe,numdts,numsteps,		     nOfMovingFreedoms, pCutoff, nPad);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -