You are on page 1of 2

let l = 20; //matrix size }

let w = 2 //square size


let n = 2; //number of particles
let c = 0;
let steps = 5; function draw() {
let grid = []; let avgR = 0;
for(let z = 1; z < 10; z++){
let X = []; n = z;
let Y = []; for(let i = 0; i < steps; i++) {

let initialX = []; //SET THE PARTICLES IN RANDOM PLACES


let initialY = []; let posX, posY;
for(let i = 0; i<n; i++){
let finalX = []; posX = RandomPosition();
let finalY = []; posY = RandomPosition();
//get random position for every particle
let diffusionGraph = []; //Transfer it to location in pixels
X[i] = (posX-1)*w + (w/2);
Y[i] = (posY-1)*w + (w/2);
function RandomPosition() { //find the address of the particle in the Grid
let posInGrid = (l*(posX-1) + posY-1);
var position = Math.floor(Math.random() * //update Occupied data
((l+2) - 2)) + 1; grid[posInGrid] = {"X":X[i], "Y":Y[i],
return position; "isOccupied":1};
} // console.log(X[i], Y[i], posInGrid);
// console.log(grid[posInGrid]);
function RandomStep(){ }
let step;
var direction = Math.floor(Math.random()* (2 - 0 for(let i = 0; i < l; i++){
+ 1)) + 0; moveParticle();
if(direction === 2) { if(i===1){
direction = -1; for(let g = 0; g<n; g++){
} initialX[g] = X[g];
initialY[g] = Y[g];
step = direction * w; }
return step; }
} }

for(let g = 0; g<n; g++){


finalX[g] = X[g];
function setup() { finalY[g] = Y[g];
//fill grid with zeros }
for(let k = 0; k<l;k++){
for(var i =0; i<l;i++){ avgR += averageDisplacement();
grid[c] = {"X":k*w+(w/2), "Y":i*w+(w/2), // console.log(avgR/(i+1));
"isOccupied":0};
c++;
} }
} diffusionGraph.push([z/(l*l),
} Math.pow(avgR/(steps*l),2)/(4*steps)]);
}
function averageDisplacement(){ }
let displacement = [];
let averageDisplacement = 0; function moveParticle() {
for(let g = 0; g<n; g++){ for(let i = 0; i<n; i++){
let disX = Math.abs(initialX[g]) - Math.abs(finalX[g]); //find position in Grid
let disY = Math.abs(initialY[g]) - Math.abs(finalY[g]); let posInGrid = (l*((X[i]-(w/2))/w-1+1)
let disXY = Math.pow(disX, 2) + Math.pow(disY, 2); + (Y[i]-(w/2))/w-1+1);
displacement[g] = Math.pow(disXY, 0.5); grid[posInGrid] = {"X": X[i], "Y": Y[i],
averageDisplacement += Math.pow(disXY, 0.5); "isOccupied":1};
} newX = X[i] + RandomStep();
averageDisplacement = averageDisplacement/n; newY = Y[i] + RandomStep();
return averageDisplacement;
//WARUNKI BRZEGOWE
if(newX>=l*w){
newX = w/2;
} }
}
if(newY>=l*w){
newY = w/2; document.addEventListener('DOMContentLoaded',
} function () {
console.log('elo');
if(newX<0){ setup();
newX = l*w - w/2; draw();
}
var myChart = Highcharts.chart('pijaczyna', {
if(newY<0){ chart: {
newY = l*w - w/2; type:"scatter"
} },
title: {
//find position in Grid text: 'Diffusion Coefficient Chart'
posInGrid = (l*((newX-(w/2))/w-1+1) + },
(newY-(w/2))/w-1+1); xAxis: {
// console.log(grid[posInGrid], newX, title: {
newY); text: 'Concentration'
// if(!grid[posInGrid]){ },
// console.log("gon sie");
// } },
while(grid[posInGrid].isOccupied === yAxis: {
1) { title: {
newX = X[i] + RandomStep(); text: 'Diffusion Coefficient'
newY = Y[i] + RandomStep(); },
//WARUNKI BRZEGOWE plotLines: [{
if(newX>=l*w){ value: 0,
newX = w/2; width: 1,
} color: '#808080'
}]
if(newY>=l*w){ },
newY = w/2; tooltip: {
} valueSuffix: ' units'
},
if(newX<0){ series: [{
newX = l*w - w/2; data:diffusionGraph
} }]
});
if(newY<0){ });
newY = l*w - w/2;
}

posInGrid = (l*((newX-(w/2))/w-1+1) +
(newY-(w/2))/w-1+1);
}

grid[posInGrid] = {"X": newX, "Y":


newY, "isOccupied":1}
//clear last position
let posInGridOld = (l*((X[i]-w/2)/w-
1+1) + (Y[i]-w/2)/w-1+1);
// console.log(grid[posInGridOld], posInGridOld, X[i],
Y[i]);
grid[posInGridOld] = {"X": X[i], "Y":
Y[i], "isOccupied":0};

X[i] = newX;
Y[i] = newY;

You might also like