📄 gaugeatomlaser.xmds
字号:
<?xmds version="1.0"?><!--Stochastic Atom laser simulation--><!-- $Id: gaugeatomlaser.xmds,v 1.13 2004/07/14 06:37:05 joehope Exp $ --><!-- Copyright (C) 2000-2004 --><!-- --><!-- Code contributed by Greg Collecutt, Joseph Hope and Paul Cochrane --><!-- --><!-- This file is part of xmds. --><!-- --><!-- This program is free software; you can redistribute it and/or --><!-- modify it under the terms of the GNU General Public License --><!-- as published by the Free Software Foundation; either version 2 --><!-- of the License, or (at your option) any later version. --><!-- --><!-- This program is distributed in the hope that it will be useful, --><!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --><!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --><!-- GNU General Public License for more details. --><!-- --><!-- You should have received a copy of the GNU General Public License --><!-- along with this program; if not, write to the Free Software --><!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, --><!-- MA 02111-1307, USA. --> <simulation> <!-- Global system parameters and functionality --> <name>gaugeatomlaser</name> <author>Unknown Author</author> <description> Gauge atom laser simulation </description> <stochastic>yes</stochastic> <prop_dim>t</prop_dim> <error_check>yes</error_check> <paths>1</paths> <use_mpi>no</use_mpi> <seed>1 7</seed> <noises>11</noises> <use_wisdom>yes</use_wisdom> <!-- Global variables for the simulation --> <globals> <![CDATA[ const double noise = 1.0; /* physical constants */ const double r=5.0e3; const double rhos=4.0e7; const double omegax = 25; const double transversearea = 1.2e-11; const double g = 0*9.8; const double kappamax = 1.0e1; const double kick = -1.0e7; const double Utt = 0.005*1.96e-50; const double Utu = 0*2.9e-51; const double Uuu = 0.005*2.974797272874263e-51; const double inum = 375; const double losst1 = 7.0e-3; const double losst2 = 2.0e-19/transversearea; const double lossu1 = 7.0e-3; const double lossu2 = 4e-20/transversearea; const double losstu2 = 0*1.0e-19/transversearea; const double hbar = 1.05500000000e-34; const double M = 1.409539200000000e-25; const double offsetpotential = hbar*hbar*kick*kick/2/M-hbar*omegax/2; /* absorbing boundary constants */ const double dpow = 1; const double absorbleft = 4.0e4/pow(2,dpow); const double absorbright = 4.0e4/pow(2,dpow); const double xleft = -7.0e-5; const double widthl = 3.0e-5; const double xright = 5.0e-5; const double widthr = 3.0e-5; /* derived constants */ const double Uohtt = Utt/hbar/transversearea; const double Uohtu = Utu/hbar/transversearea; const double Uohuu = Uuu/hbar/transversearea; const fftw_complex gaa=rcomplex(-losst2,-Uohtt); const fftw_complex gbb=rcomplex(-lossu2,-Uohuu); const fftw_complex gab=rcomplex(losstu2,Uohtu); const fftw_complex gaas=conj(gaa); const fftw_complex gbbs=conj(gbb); const fftw_complex gabs=conj(gab); const fftw_complex csqrtgaa=c_sqrt(gaa)*noise; const fftw_complex csqrtgbb=c_sqrt(gbb)*noise; const fftw_complex csqrtgaas=c_sqrt(gaas)*noise; const fftw_complex csqrtgbbs=c_sqrt(gbbs)*noise; const double mu = (pow(M, 0.3333333333333333)*pow(1.5*inum*Uohtt*hbar*omegax,0.6666666666666666))/2.; const complex csqrtgabo2 = noise*c_sqrt(gab/2); const complex csqrtgabso2 = noise*c_sqrt(conj(gabs)/2); const double sqrtrhos = noise*sqrt(rhos); const fftw_complex Ka = noise*(gab-2*gaa)/4/dx -losst1/2; const fftw_complex Kb = noise*(gab-2*gbb)/4/dx -lossu1/2; const double modgaapgaare = noise*(mod(gaa)+gaa.re)/2/dx; const double losst2ondx = -noise*gaa.re/dx; const double modgbbpgbbre = noise*(mod(gbb)+gbb.re)/2/dx; const double lossu2ondx = -noise*gbb.re/dx; const double modgabon4 = noise*mod(gab)/4; const double quarter = noise/4; const double tworegab = 2*gab.re*noise; const double losst2noise = losst2*noise; const double lossu2noise = lossu2*noise; /* numerical shift constants */ const double ko=kick; const double muo=hbar*omegax/2+offsetpotential; const double Eo=muo; /* If muo and Eo are ever different - will need to put time dependence back in functions */ const double muomeooh = (muo-Eo)/hbar; ]]> </globals> <!-- Field to be integrated over --> <field> <dimensions>x</dimensions> <lattice>8192</lattice> <domains>(-1.0e-4, 8.0e-5)</domains> <samples>1 1 1 1</samples> <vector> <name>dconstants</name> <type>double</type> <components>Vt Vu damping ruo2 ruo4dx sqrtruo2</components> <fourier_space>no</fourier_space> <![CDATA[ double u=sqrt(M*omegax/M_PI/hbar)*exp(-x*x*M*omegax/hbar); ruo2 = r*u/2; ruo4dx = noise*r*u/4/dx; sqrtruo2 = noise*sqrt(ruo2); damping = x<xleft ? absorbleft*pow(1-cos(M_PI*(xleft-x)/widthl),dpow) : ( x>xright ? absorbright*pow(1-cos(M_PI*(x-xright)/widthr),dpow): 0); Vt = (0.5*M*omegax*omegax*x*x-muo+offsetpotential)/hbar; Vu = M*g*x/hbar; ]]> </vector> <vector> <name>cconstants</name> <type>complex</type> <components>kappa kappas</components> <fourier_space>no</fourier_space> <![CDATA[ kappa = kappamax*c_exp(-i*(kick-ko)*x); /* fftw_complex kappa = kappamax*c_exp(-i*((kick-ko)*x-muomeooh*t)); */ kappas = conj(kappa); ]]> </vector> <vector> <name>main</name> <type>complex</type> <components>phita phitb phiua phiub theta</components> <fourier_space>no</fourier_space> <vectors> dconstants cconstants </vectors> <![CDATA[ double realfn = sqrt(inum)*pow(M*omegax/M_PI/hbar,1/4.0)*exp(-x*x*M*omegax/2/hbar); phita = rcomplex(realfn,0); phitb = rcomplex(realfn,0); phiua = rcomplex(0,0); phiub = rcomplex(0,0); theta = rcomplex(0,0); ]]> </vector> </field> <!-- The sequence of integrations to perform --> <sequence> <integrate> <algorithm>SIIP</algorithm> <interval>1.0e-10</interval> <lattice>10</lattice> <samples>5 5 5 2</samples> <k_operators> <constant>yes</constant> <operator_names>Lta Ltb Lua Lub</operator_names> <![CDATA[ Lta = rcomplex(Ka.re, Ka.im -hbar/M/2*kx*kx); Ltb = rcomplex(Ka.re,-Ka.im +hbar/M/2*kx*kx); Lua = rcomplex(Kb.re, Kb.im -hbar/M/2*(kx+ko)*(kx+ko) +Eo/hbar); Lub = rcomplex(Kb.re,-Kb.im +hbar/M/2*(kx-ko)*(kx-ko) -Eo/hbar); ]]> </k_operators> <vectors>main dconstants cconstants</vectors> <![CDATA[ complex denst = phitb*phita; complex densu = phiub*phiua; double moddenst = mod(denst); double moddensu = mod(densu); complex difft = denst - moddenst; complex diffu = densu - moddensu; complex csqrtuaub = 2*noise*c_sqrt(phiua)*c_sqrt(phiub); complex csqrttatb = 2*noise*c_sqrt(phita)*c_sqrt(phitb); complex cnoisealpha = csqrtgabo2*c_sqrt(phita)*c_sqrt(phiua); complex cnoisebeta = csqrtgabso2*c_sqrt(phitb)*c_sqrt(phiub); complex invdenst=1/(rhos+denst); complex pumpdamp=ruo2*invdenst +ruo4dx*(3*rhos+denst)*invdenst*invdenst*invdenst -damping; complex pumpnoise=sqrtruo2*invdenst; dphita_dt = Lta[phita] + (-i*Vt +pumpdamp +gaa*moddenst -gab*moddensu +csqrtgaa*n_1)*phita + kappa*phiua -cnoisealpha*(n_5-i*n_7) +pumpnoise*(i*phita*n_9+sqrtrhos*(n_10+i*n_11)); dphitb_dt = Ltb[phitb] + (i*Vt +pumpdamp +gaas*moddenst -gabs*moddensu +csqrtgaas*n_2)*phitb + kappas*phiub -cnoisebeta*(n_6-i*n_8) +pumpnoise*(-i*phitb*n_9+sqrtrhos*(n_10-i*n_11)); dphiua_dt = Lua[phiua] + (-i*Vu -damping +gbb*moddensu -gab*moddenst +csqrtgbb*n_3)*phiua - kappas*phita +cnoisealpha*(n_5+i*n_7); dphiub_dt = Lub[phiub] + (i*Vu -damping +gbbs*moddensu -gabs*moddenst +csqrtgbbs*n_4)*phiub - kappa*phitb +cnoisebeta*(n_6+i*n_8); dtheta_dt = difft*(csqrtgaa*n_1+csqrtgaas*n_2+difft*losst2noise)+denst*losst2ondx+modgaapgaare*moddenst + diffu*(csqrtgbb*n_3+csqrtgbbs*n_4+diffu*lossu2noise+difft*tworegab)+densu*lossu2ondx+modgbbpgbbre*moddensu + modgabon4*(mod(phitb*phiua)+mod(phita*phiub))*conj(phitb*phiub+phita*phiua) + (difft+diffu)*conj(gab*phitb*phiub+gabs*phita*phiua)*quarter + c_sqrt(phita)*c_sqrt(phiub)*((i*n_5-n_7)*csqrtgabo2*csqrtuaub.im-(i*n_6+n_8)*csqrtgabso2*csqrttatb.im) + c_sqrt(phitb)*c_sqrt(phiua)*((i*n_6-n_8)*csqrtgabso2*csqrtuaub.im-(i*n_5+n_7)*csqrtgabo2*csqrttatb.im); /* dtheta_dt=rcomplex(0,0); */ ]]> </integrate> </sequence> <!-- The output to generate --> <output format="ascii" precision="double"> <filename>gaugeatomlaser.xsil</filename> <overwrite>yes</overwrite> <group> <sampling> <fourier_space>no</fourier_space> <lattice>0</lattice> <moments>integral</moments> <![CDATA[ integral=theta; ]]> </sampling> <post_propagation> <fourier_space>no</fourier_space> <moments>weight</moments> <![CDATA[ weight = exp(integral.re)*cos(integral.im); ]]> </post_propagation> </group> <group> <sampling> <fourier_space> no</fourier_space> <lattice> 32</lattice> <moments>trapped untrapped</moments> <![CDATA[ complex weight = c_exp(_mg0_raw[(_mg0_sample_pointer-1)*_mg0_raw_ncomponents]); trapped=phitb*phita*weight; untrapped=phiub*phiua*weight; ]]> </sampling> </group> <group> <sampling> <fourier_space> no</fourier_space> <lattice> 0</lattice> <moments>ntr nuntr</moments> <![CDATA[ complex weight = c_exp(_mg0_raw[(_mg0_sample_pointer-1)*_mg0_raw_ncomponents]); ntr=phitb*phita*weight; nuntr=phiub*phiua*weight; ]]> </sampling> </group> <group> <sampling> <fourier_space> yes</fourier_space> <lattice> 128</lattice> <moments>ktrapped kuntrapped</moments> <![CDATA[ complex weight = c_exp(_mg0_raw[(_mg0_sample_pointer-1)*_mg0_raw_ncomponents]); if(_i0>0) { ktrapped = _active_main_main[_main_lattice0*_main_main_ncomponents - _main_main_index_pointer + 1]*phita*weight; kuntrapped = _active_main_main[_main_lattice0*_main_main_ncomponents - _main_main_index_pointer + 3]*phiua*weight; } else { ktrapped = phitb*phita*weight; kuntrapped = phiub*phiua*weight; }; ]]> </sampling> </group> </output></simulation>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -