#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <string>
#include <complex>
#include <vector>
#define PI 3.141592654
using namespace std;
/* function prototypes */
complex<double> dnx(double, vector<complex<double> > , vector<complex<double> >, int );
complex<double> rk4_dn1(complex<double>(*)(double, vector<complex<double> >, vector<complex<double> >, int ),
double, double, vector<complex<double> >, vector<complex<double> >, int);
double sampleNormal ();
/* global variables */
const double g = 0;
const double r = -1;
const double u = 0.00;
const double w = 100.0;
const complex<double> i (0,1);
int main()
{
int n;
int tmax;
int tt = 5000; // number of first-order equations
double ti, tf, dt, sigma,mu,z,q,N ;
vector<complex<double> > xi, xf;
double j;
int i, y,d;
int m=0;
/* output: file and formats */
ofstream file;
file.open ("provavet11(om100(2g))).dat");
// write results to this file
/* output format */
file.precision(6);
file.setf(ios::scientific | ios::showpoint);
cout.precision(6);
cout.setf(ios::fixed | ios::showpoint);
printf("Number of equations\n");
scanf("%d", &n);
printf("Particles in central cav.\n");
scanf("%d", &N);
printf("Sigma\n");
scanf("%d", &q);
/* initial information */
xi.reserve(n);
xf.reserve(n);
// initial value for variable t
for(y=0; y<=n-1; y++)
{
//scanf("%f\n", xi[y]);
//cin >> xi[y];
// }
// step size for integration (s)
xi[y]= N* exp(-pow((y-(n - 1) /2.),2)/(2 * q * q));
cout << xi[y] << "\n";
}
ti = 0.0;
dt = 0.00005;
tmax = 4000; // integrate till tmax (s)
/* Gaussian randomly distributed array
for (tt = 0; i <= 10000; tt+dt) {
eta[tt]= sampleNormal();
}
/*
/* integration of ODE */
while (ti <= tmax)
{
/*fracpart= modf(ti, &j);*/
m=m+1;
y==0;
/* z = real(xi[2*y]*xi[2*y+1]);*/
// fprintf(fp, "%f", xi[y]);
d=(n-2)/2;
if( m%20000 == 0)
{
for (y = 0; y <= d; y++) {
file <<setw(8)<< real(xi[2*y]*xi[2*y+1])+imag(xi[2*y]*xi[2*y+1])<< setw(8)<< "";
}
file << endl;
}
tf = ti + dt;
/*=================================*/
rk4_dn1(dnx, ti, tf, xi, xf, n);
/*=================================*/
/* prepare for the next step*/
ti = tf;
for (i = 0; i<=n-1; i = i+1)
{
xi[i] = xf[i];
}
}
system ("pause");
return 0;
}
/*==============================================================
System of first order differential equations for the RK solver
For a system of n first-order ODEs
x [] array - x values
dx[] array - dx/dt values
==============================================================*/
complex<double> dnx(double t, vector<complex<double> > x, vector<complex<double> > dx, int n)
{
const complex<double> i (0,1);
int j,d;
d=(n-2)/2;
/* first cav */
dx[0] = -i*w*x[0]-i*g*abs(x[0])*x[1]-i*r*(x[n-2]+x[2]-2.0*x[0])-(1.0-i)*u*sampleNormal()*x[0];
dx[1] = i*w*x[1]+i*g*abs(x[1])*x[0]+i*r*(x[n-1]+x[3]-2.0*x[1])-(1.0+i)*u*sampleNormal()*x[1];
dx[n-2] = -i*w*x[n-2]-i*g*abs(x[n-2])*x[n-1]-i*r*(x[n-4]+x[0]-2.0*x[n-2])-(1.0-i)*u*sampleNormal()*x[n-2];
dx[n-1] = i*w*x[n-1]+i*g*abs(x[n-1])*x[n-2]+i*r*(x[n-3]+x[1]-2.0*x[n-1])-(1.0+i)*u*sampleNormal()*x[n-1];
for(j=1;j<=d-1;j++){
dx[2*j] = -i*w*x[2*j]-i*g*abs(x[2*j])*x[2*j+1]-i*r*(x[2*j-2]+x[2*j+2]-2.0*x[2*j])-(1.0-i)*u*sampleNormal()*x[2*j];
dx[2*j+1] = i*w*x[2*j+1]+i*g*abs(x[2*j+1])*x[2*j]+i*r*(x[2*j-1]+x[2*j+3]-2.0*x[2*j+1])-(1.0+i)*u*sampleNormal()*x[2*j+1];
}
}
/*==========================================================
Runge-Kutta 4th-order
----------------------------------------------------------
call ...
dnx(t,x[],dx[],n)- functions dx/dt
input ...
ti - initial time
tf - solution time
xi[] - initial values
n - number of first order equations
output ...
xf[] - solutions
==========================================================*/
complex<double> rk4_dn1(complex<double>(dnx)(double, vector<complex<double> >, vector<complex<double> >, int),
double ti, double tf, vector<complex<double> > xi, vector<complex<double> > xf, int n)
{
vector<complex<double> > x, dx;
vector<complex<double> > k1,k2,k3,k4;
double t,h;
int j;
h = tf-ti;
t = ti;
//k1
dnx(t, xi, dx, n);
for (j = 0; j<=n-1; j = j+1)
{
k1[j] = h*dx[j];
x[j] = xi[j] + k1[j]/2.0;
}
//k2
dnx(t+h/2.0, x, dx, n);
for (j = 0; j<=n-1; j = j+1)
{
k2[j] = h*dx[j];
x[j] = xi[j] + k2[j]/2.0;
}
//k3
dnx(t+h/2.0, x, dx, n);
for (j = 0; j<=n-1; j = j+1)
{
k3[j] = h*dx[j];
x[j] = xi[j] + k3[j];
}
//k4 and result
dnx(t+h, x, dx, n);
for (j = 0; j<=n-1; j = j+1)
{
k4[j] = h*dx[j];
xf[j] = xi[j] + k1[j]/6.0+k2[j]/3.0+k3[j]/3.0+k4[j]/6.0;
}
return 0.0;
}
/* random gaussian generator */
double sampleNormal()
{
double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
double r = u * u + v * v;
if (r == 0 || r > 1) return sampleNormal();
double c = sqrt(-2 * log(r) / r);
return u * c;
}
CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGNvbmlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxjb21wbGV4PgojaW5jbHVkZSA8dmVjdG9yPgojZGVmaW5lIFBJIDMuMTQxNTkyNjU0Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwpjb21wbGV4PGRvdWJsZT4gZG54KGRvdWJsZSwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+ICwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+LCBpbnQgKTsKY29tcGxleDxkb3VibGU+IHJrNF9kbjEoY29tcGxleDxkb3VibGU+KCopKGRvdWJsZSwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+LCB2ZWN0b3I8Y29tcGxleDxkb3VibGU+ID4sIGludCApLAogICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+LCB2ZWN0b3I8Y29tcGxleDxkb3VibGU+ID4sIGludCk7CiAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGVOb3JtYWwgKCk7CiAgICAgICAgICAgICAgIAoKLyogZ2xvYmFsIHZhcmlhYmxlcyAqLwpjb25zdCBkb3VibGUgZyA9IDA7ICAgICAgICAgICAgICAgCmNvbnN0IGRvdWJsZSByID0gLTE7CmNvbnN0IGRvdWJsZSB1ID0gMC4wMDsgICAgICAgICAgICAgICAgCmNvbnN0IGRvdWJsZSB3ID0gMTAwLjA7Cgpjb25zdCBjb21wbGV4PGRvdWJsZT4gaSAoMCwxKTsKaW50IG1haW4oKQoKCnsKICAgIGludCAgbjsKICAgIAogICAgaW50IHRtYXg7CglpbnQgdHQgPSA1MDAwOyAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgZmlyc3Qtb3JkZXIgZXF1YXRpb25zIAogICAgZG91YmxlIHRpLCB0ZiwgZHQsIHNpZ21hLG11LHoscSxOIDsKICAgIHZlY3Rvcjxjb21wbGV4PGRvdWJsZT4gPiB4aSwgeGY7CiAgICBkb3VibGUgIGo7CiAgICBpbnQgaSwgeSxkOwogICAgaW50IG09MDsKICAgICAKCi8qIG91dHB1dDogZmlsZSBhbmQgZm9ybWF0cyAqLwoKCiAgICBvZnN0cmVhbSBmaWxlOwogICAgZmlsZS5vcGVuICgicHJvdmF2ZXQxMShvbTEwMCgyZykpKS5kYXQiKTsgCgkgICAgICAgLy8gd3JpdGUgcmVzdWx0cyB0byB0aGlzIGZpbGUKLyogb3V0cHV0IGZvcm1hdCAqLwogICAgZmlsZS5wcmVjaXNpb24oNik7CiAgICBmaWxlLnNldGYoaW9zOjpzY2llbnRpZmljIHwgaW9zOjpzaG93cG9pbnQpOwogICAgY291dC5wcmVjaXNpb24oNik7CiAgICBjb3V0LnNldGYoaW9zOjpmaXhlZCB8IGlvczo6c2hvd3BvaW50KTsKCiAgICAKCiAgIAoKICAgIHByaW50ZigiTnVtYmVyIG9mIGVxdWF0aW9uc1xuIik7CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBwcmludGYoIlBhcnRpY2xlcyBpbiBjZW50cmFsIGNhdi5cbiIpOwogICAgc2NhbmYoIiVkIiwgJk4pOwogICAgcHJpbnRmKCJTaWdtYVxuIik7CiAgICBzY2FuZigiJWQiLCAmcSk7CiAgICAKLyogaW5pdGlhbCBpbmZvcm1hdGlvbiAqLwoKICAgIHhpLnJlc2VydmUobik7CiAgICB4Zi5yZXNlcnZlKG4pOwogICAgCiAgICAgICAgICAgIAoJICAgIC8vIGluaXRpYWwgdmFsdWUgZm9yIHZhcmlhYmxlIHQKICAgIGZvcih5PTA7IHk8PW4tMTsgeSsrKQoJCgl7CgkKICAgIC8vc2NhbmYoIiVmXG4iLCB4aVt5XSk7CiAgICAvL2NpbiA+PiB4aVt5XTsKICAgIC8vICAgfQogICAgICAgIC8vIHN0ZXAgc2l6ZSBmb3IgaW50ZWdyYXRpb24gKHMpCiAgICB4aVt5XT0gTiogZXhwKC1wb3coKHktKG4gLSAxKSAvMi4pLDIpLygyICogcSAqIHEpKTsKCWNvdXQgPDwgeGlbeV0gPDwgIlxuIjsKICAgIAoJICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgICAgICAgCgkJCSAgIHRpID0gMC4wOwoJCQkgICBkdCA9IDAuMDAwMDU7ICAgICAgICAJCQkgIAoJCQkgICB0bWF4ID0gNDAwMDsgICAgICAgICAgLy8gaW50ZWdyYXRlIHRpbGwgdG1heCAocykKICAgIAovKiBHYXVzc2lhbiByYW5kb21seSBkaXN0cmlidXRlZCBhcnJheSAKZm9yICh0dCA9IDA7IGkgPD0gMTAwMDA7IHR0K2R0KSB7CgkKCWV0YVt0dF09IHNhbXBsZU5vcm1hbCgpOwoKfQoKIC8qCgovKiBpbnRlZ3JhdGlvbiBvZiBPREUgKi8KCiAgIAogICAKICAgIHdoaWxlICh0aSA8PSB0bWF4KQogICAgewogICAgCQogICAgCS8qZnJhY3BhcnQ9IG1vZGYodGksICZqKTsqLwogICAgICAgICAgCgkJbT1tKzE7CgkKCQl5PT0wOwoJCQogICAgICAgICAvKiB6ID0gcmVhbCh4aVsyKnldKnhpWzIqeSsxXSk7Ki8KICAgICAgCiAgICAgICAgIC8vIGZwcmludGYoZnAsICIlZiIsIHhpW3ldKTsKICAgICAgICAgCiAgICAgICAgICBkPShuLTIpLzI7CgkJICBpZiggbSUyMDAwMCA9PSAwKQoJCSAgCgkJICB7CgkJICAKICAgICAgICAgIGZvciAoeSA9IDA7IHkgPD0gZDsgeSsrKSB7CiAgICAgICAgICAJCiAgICAgICAgICAgICAgZmlsZSA8PHNldHcoOCk8PCByZWFsKHhpWzIqeV0qeGlbMip5KzFdKStpbWFnKHhpWzIqeV0qeGlbMip5KzFdKTw8IHNldHcoOCk8PCAiIjsKCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9IAogICAgICAgICAgICBmaWxlIDw8IGVuZGw7CiAgICAgICB9CgkgIAogICAgICAgICAgCiAgICAgICAKICAgICAgIAogICAgIHRmID0gdGkgKyBkdDsKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogICAgIHJrNF9kbjEoZG54LCB0aSwgdGYsIHhpLCB4Ziwgbik7Ci8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogcHJlcGFyZSBmb3IgdGhlIG5leHQgc3RlcCovCiAgICAgICAgdGkgPSB0ZjsKICAgICAgICBmb3IgKGkgPSAwOyBpPD1uLTE7IGkgPSBpKzEpCiAgICAgICAgeyAKICAgICAgICAgICB4aVtpXSA9IHhmW2ldOwogICAgICAgIH0gCiAgICAgICAgCgoKICAgfQogICAgc3lzdGVtICgicGF1c2UiKTsKICAgIHJldHVybiAwOwp9CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAogIFN5c3RlbSBvZiBmaXJzdCBvcmRlciBkaWZmZXJlbnRpYWwgZXF1YXRpb25zIGZvciB0aGUgUksgc29sdmVyCiAgCiAgRm9yIGEgc3lzdGVtIG9mIG4gZmlyc3Qtb3JkZXIgT0RFcwogIHggW10gYXJyYXkgLSB4IHZhbHVlcwogIGR4W10gYXJyYXkgLSBkeC9kdCB2YWx1ZXMKICAKICAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKICAgIGNvbXBsZXg8ZG91YmxlPiBkbngoZG91YmxlIHQsIHZlY3Rvcjxjb21wbGV4PGRvdWJsZT4gPiB4LCB2ZWN0b3I8Y29tcGxleDxkb3VibGU+ID4gZHgsIGludCBuKQp7CgkJY29uc3QgY29tcGxleDxkb3VibGU+IGkgKDAsMSk7CgkJaW50IGosZDsKCQlkPShuLTIpLzI7CgkJCi8qIGZpcnN0IGNhdiAqLwogICAgICBkeFswXSA9IC1pKncqeFswXS1pKmcqYWJzKHhbMF0pKnhbMV0taSpyKih4W24tMl0reFsyXS0yLjAqeFswXSktKDEuMC1pKSp1KnNhbXBsZU5vcm1hbCgpKnhbMF07CiAgICAgIGR4WzFdID0gaSp3KnhbMV0raSpnKmFicyh4WzFdKSp4WzBdK2kqciooeFtuLTFdK3hbM10tMi4wKnhbMV0pLSgxLjAraSkqdSpzYW1wbGVOb3JtYWwoKSp4WzFdOwogICAgICBkeFtuLTJdID0gLWkqdyp4W24tMl0taSpnKmFicyh4W24tMl0pKnhbbi0xXS1pKnIqKHhbbi00XSt4WzBdLTIuMCp4W24tMl0pLSgxLjAtaSkqdSpzYW1wbGVOb3JtYWwoKSp4W24tMl07CiAgICAgIGR4W24tMV0gPSBpKncqeFtuLTFdK2kqZyphYnMoeFtuLTFdKSp4W24tMl0raSpyKih4W24tM10reFsxXS0yLjAqeFtuLTFdKS0oMS4wK2kpKnUqc2FtcGxlTm9ybWFsKCkqeFtuLTFdOwogICAgICAKICAgICAgCmZvcihqPTE7ajw9ZC0xO2orKyl7CiAgICAgICAgICAKICAgICAKICAgICAgCiAgICAgIGR4WzIqal0gPSAtaSp3KnhbMipqXS1pKmcqYWJzKHhbMipqXSkqeFsyKmorMV0taSpyKih4WzIqai0yXSt4WzIqaisyXS0yLjAqeFsyKmpdKS0oMS4wLWkpKnUqc2FtcGxlTm9ybWFsKCkqeFsyKmpdOwogICAgICBkeFsyKmorMV0gPSBpKncqeFsyKmorMV0raSpnKmFicyh4WzIqaisxXSkqeFsyKmpdK2kqciooeFsyKmotMV0reFsyKmorM10tMi4wKnhbMipqKzFdKS0oMS4wK2kpKnUqc2FtcGxlTm9ybWFsKCkqeFsyKmorMV07Cn0KCQoKfSAgICAKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICBSdW5nZS1LdXR0YSA0dGgtb3JkZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogY2FsbCAuLi4KIGRueCh0LHhbXSxkeFtdLG4pLSBmdW5jdGlvbnMgZHgvZHQgICAKIGlucHV0IC4uLgogdGkgICAgLSBpbml0aWFsIHRpbWUKIHRmICAgIC0gc29sdXRpb24gdGltZQogeGlbXSAgLSBpbml0aWFsIHZhbHVlcyAKIG4gICAgIC0gbnVtYmVyIG9mIGZpcnN0IG9yZGVyIGVxdWF0aW9ucwogb3V0cHV0IC4uLgogeGZbXSAgLSBzb2x1dGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmNvbXBsZXg8ZG91YmxlPiByazRfZG4xKGNvbXBsZXg8ZG91YmxlPihkbngpKGRvdWJsZSwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+LCB2ZWN0b3I8Y29tcGxleDxkb3VibGU+ID4sIGludCksIAogICAgICAgICAgICAgICBkb3VibGUgdGksIGRvdWJsZSB0ZiwgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+IHhpLCB2ZWN0b3I8Y29tcGxleDxkb3VibGU+ID4geGYsIGludCBuKQp7CiAgICAgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+ICB4LCBkeDsKICAgICAgdmVjdG9yPGNvbXBsZXg8ZG91YmxlPiA+IGsxLGsyLGszLGs0OwogICAgICBkb3VibGUgdCxoOwogICAgICAKICAgICAgaW50IGo7CgogICAgICBoID0gdGYtdGk7CiAgICAgIHQgPSB0aTsKLy9rMQogICAgICBkbngodCwgeGksIGR4LCBuKTsKICAgICAgZm9yIChqID0gMDsgajw9bi0xOyBqID0gaisxKQogICAgICAgIHsKICAgICAgICAgIGsxW2pdID0gaCpkeFtqXTsKICAgICAgICAgIHhbal0gID0geGlbal0gKyBrMVtqXS8yLjA7ICAKICAgICAgICB9ICAgICAgCi8vazIKCiAgICAgIGRueCh0K2gvMi4wLCB4LCBkeCwgbik7CiAgICAgIGZvciAoaiA9IDA7IGo8PW4tMTsgaiA9IGorMSkKICAgICAgICB7CiAgICAgICAgICBrMltqXSA9IGgqZHhbal07CiAgICAgICAgICB4W2pdICA9IHhpW2pdICsgazJbal0vMi4wOyAgCiAgICAgICAgfQovL2szCiAgICAgIGRueCh0K2gvMi4wLCB4LCBkeCwgbik7CiAgICAgIGZvciAoaiA9IDA7IGo8PW4tMTsgaiA9IGorMSkKICAgICAgICB7CiAgICAgICAgICBrM1tqXSA9IGgqZHhbal07CiAgICAgICAgICB4W2pdICA9IHhpW2pdICsgazNbal07ICAKICAgICAgICB9ICAgICAgCi8vazQgYW5kIHJlc3VsdCAgICAgIAogICAgICBkbngodCtoLCB4LCBkeCwgbik7CiAgICAgIGZvciAoaiA9IDA7IGo8PW4tMTsgaiA9IGorMSkKICAgICAgICB7CiAgICAgICAgICBrNFtqXSA9IGgqZHhbal07CiAgICAgICAgICB4ZltqXSA9IHhpW2pdICsgazFbal0vNi4wK2syW2pdLzMuMCtrM1tqXS8zLjArazRbal0vNi4wOwogICAgICAgIH0gICAgICAKICAgICAgICAKCgogCiAgICByZXR1cm4gMC4wOwogICAgCn0KLyogcmFuZG9tIGdhdXNzaWFuIGdlbmVyYXRvciAqLwpkb3VibGUgc2FtcGxlTm9ybWFsKCkgCnsKICAgIGRvdWJsZSB1ID0gKChkb3VibGUpIHJhbmQoKSAvIChSQU5EX01BWCkpICogMiAtIDE7CiAgICBkb3VibGUgdiA9ICgoZG91YmxlKSByYW5kKCkgLyAoUkFORF9NQVgpKSAqIDIgLSAxOwogICAgZG91YmxlIHIgPSB1ICogdSArIHYgKiB2OwogICAgaWYgKHIgPT0gMCB8fCByID4gMSkgcmV0dXJuIHNhbXBsZU5vcm1hbCgpOwogICAgZG91YmxlIGMgPSBzcXJ0KC0yICogbG9nKHIpIC8gcik7CiAgICByZXR1cm4gdSAqIGM7Cn0KCg==