Ressonância entre um pente de frequências e um átomo de dois níveis - programa em Pascal

Voltar

Programa em Pascal para o estudo da ressonância da interação entre um pente de frequências e um átomo de dois níveis.

program dois_niveis_tempo;
uses crt;
var 
     q12,q22,gama,w,alpha,N,wL,w2: real;
     dd,Omega,h,t,Tr,fr,phi: real;
     Tp,a10,a20,x,y: real;
     Pulsos,i,j,k,m,psi,PassoRKfento,g: integer;
     a,b,c,k1,k2,k3,k4:array[1..4] of real;
     texto:text;

{equações de Bloch}
function f(a1,a2,a12,b12:real;i:integer):real;
begin
  {a11}  if i=1  then f:= +2*Omega*(b12*cos(alpha)-a12*sin(alpha))  +q22*a2 -(a1-a10)*gama;
  {a22}  if i=2  then f:= -2*Omega*(b12*cos(alpha)-a12*sin(alpha))  -q22*a2       -a2*gama;
  {Re12} if i=3  then f:= -dd*b12-Omega*(a2-a1)*sin(alpha)         -0.5*q22*a12  -a12*gama;
  {Im12} if i=4  then f:=  dd*a12+Omega*(a2-a1)*cos(alpha)         -0.5*q22*b12  -b12*gama;
end;

begin
     {Criado em 16-06-2011}
     assign(texto,'tempo.dat');  
     rewrite(texto);
     clrscr;
     writeln;

     gama:= 0;                                {inverso do tempo de vôo}
     PassoRKfento:= 10;        
     q22:= 2*Pi*5e6;                     {taxa de relaxação da população}
     q12:= 0.5* q22;                      {taxa de relaxação da coerência
     fr:= 100e6;                              {taxa de repetição do laser em Hz}
     Tp:= 100e-15;                        {largura do pulso em fs}
     Pulsos:= 100;                          {quantidade de pulsos}
     Omega:= 0.01*q22/(fr*Tp);    {frequencia de rabi média}
     a10:= 1;                                  {população inicial do estado 1}
     a20:= 0;                                  {população inicial do estado 2}
     w2:= 2*Pi*400e12;                {frequência de ressonancia atômica}
     wL:= 2*Pi*400e12;                {frequência central do laser}
     phi:= 0;            {CEO}

     a[1]:= a10;        
     a[2]:= a20;
     a[3]:= 0;
     a[4]:= 0;
     t:=0; N:= -1;
     dd:= w2 - wL;
     Tr:= 1/fr;

     textcolor(15);

     for i:=1 to 2*Pulsos + 1 do
     begin

       {excitação dos átomos pelos pulsos do laser} 
       if (i mod 2) = 0 then
       begin
          N:= N + 1;
          g:= PassoRKfento;
          h:= 1/g * Tp;
          alpha:= -N*wL*Tr + N*phi;

          for k:=1 to g do
          begin

             t:= t + h;

         {aqui começa o algoritmo de Runge-Kutta}

             for j:=1 to 4 do
                k1[j]:=f(a[1],a[2],a[3],a[4],j);

             for j:=1 to 4 do
                k2[j]:=f(a[1]+k1[1]*h/2,a[2]+k1[2]*h/2,a[3]+k1[3]*h/2,a[4]+k1[4]*h/2,j);
       
             for j:=1 to 4 do
                k3[j]:=f(a[1]+k2[1]*h/2,a[2]+k2[2]*h/2,a[3]+k2[3]*h/2,a[4]+k2[4]*h/2,j);
       
             for j:=1 to 4 do
                k4[j]:=f(a[1]+k3[1]*h,a[2]+k3[2]*h,a[3]+k3[3]*h,a[4]+k3[4]*h,j);

             for j:=1 to 4 do
                b[j]:=a[j]+h*(k1[j]/6+k2[j]/3+k3[j]/3+k4[j]/6);

         {fim do Runge-Kutta}

             for m:=1 to 4 do
                a[m]:=b[m];

          end;

     end;

     {decaimento dos átomos}
     if (i mod 2) = 1 then
     begin

         t:= t + (Tr - Tp);
         x:= dd* (Tr - Tp);
         y:= q22*(Tr - Tp);

         b[1]:= a[1] + a[2]*(1 - exp(-y));
         b[2]:= a[2]*exp(-y);
         b[3]:= (a[3]*cos(x) - a[4]*sin(x)*exp(-0.5*y));
         b[4]:= (a[3]*sin(x) + a[4]*cos(x)*exp(-0.5*y));

         for m:=1 to 4 do
             a[m]:=b[m];     

     end;


     writeln(texto,t*1e9:4:4,' ',b[1],' ',b[2],' ',b[3],' ',b[4]);
     writeln(i,' ',b[1]:8:8,' ',b[2]:8:8,' ',b[3]:8:8,' ',b[4]:8:8);

  end;

end.