Difference between revisions of "Team:Queens Canada/Fluid Dynamics"

Line 2: Line 2:
 
{{Queens Canada/Navbar}}
 
{{Queens Canada/Navbar}}
 
<html>
 
<html>
 +
<head>
 +
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?lang=m"></script>
 
<style>
 
<style>
 
body {
 
body {
Line 10: Line 12:
 
}
 
}
 
</style>
 
</style>
 +
</head>
 
<body>
 
<body>
  
 
<h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2>
 
<h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2>
 +
 +
<h3>Matlab code</h3>
 +
<pre class="prettyprint">
 +
anArray = zeros(1,10);          %Initialize storage array
 +
storageCounterMax = 10;
 +
 +
for storageCounter = 1:storageCounterMax
 +
 +
%Variable Declaration
 +
n = 1;                          %Initialize loop counter
 +
N=0.25;                        %Range from random selection will be [-N,N]
 +
loopMax=10000;                  %Number of random walk movements
 +
ColorSet = varycolor(loopMax);  %Set amount of colours
 +
diameter = 6.94;                %Set diameter of cylinder
 +
radius = diameter*0.5;          %Set radius of cylinder
 +
totalHeight = 10.85;            %Set total height of container
 +
pauseTime = 0.0;                %Set time between plotting iterations
 +
boundaryCondition = true;
 +
 +
%Cylinder Figure
 +
maxHeight = totalHeight - radius;
 +
h=maxHeight;
 +
x0=0;y0=0;z0=0;
 +
[x,y,z]=cylinder(radius);
 +
x=x+x0;
 +
y=y+y0;
 +
z=z*h+z0;
 +
 +
%Half Sphere Figure
 +
A = [0 0 0 radius];
 +
[X, Y, Z] = sphere;
 +
XX = X * A(4) + A(1);
 +
YY = Y * A(4) + A(2);
 +
ZZ = Z * A(4) + A(3);
 +
XX = XX(11:end,:);
 +
YY = YY(11:end,:);
 +
ZZ = -ZZ(11:end,:);
 +
 +
%Display Information
 +
figure
 +
xlabel('X');
 +
ylabel('Y');
 +
zlabel('Z');
 +
surface(x,y,z, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on
 +
surface(XX, YY, ZZ, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on
 +
axis equal
 +
view(3);
 +
set(gca,'GridLineStyle','-')
 +
Information=strcat('Brownian Motion in 3D Space');
 +
title(Information ,'FontWeight','bold');
 +
view(-109,40);
 +
hold all
 +
set(gca, 'ColorOrder', ColorSet);
 +
 +
 +
%Initialize Beginning Location
 +
heightInitialize = maxHeight + radius;
 +
xF = (2*radius*rand())-radius;
 +
yF = (2*radius*rand())-radius;
 +
zF = (heightInitialize*rand())-radius;
 +
 +
while(boundaryCondition == true)
 +
   
 +
    n = n + 1;
 +
 +
    xI = xF;
 +
    yI = yF;
 +
    zI = zF;
 +
 +
    xF = xI + (2*N*rand())-N;
 +
    yF = yI + (2*N*rand())-N;
 +
    zF = zI + (2*N*rand())-N;
 +
   
 +
    dist = sqrt(xF^2 + yF^2);
 +
    length = sqrt(xF^2 + yF^2 + zF^2);
 +
 +
   
 +
    if (zF >= maxHeight)
 +
        flag = 1;
 +
        disp(n);
 +
        break;
 +
    end
 +
   
 +
    if (zF >= 0 && zF < maxHeight && dist < radius)
 +
 +
        v1=[xI,yI,zI];
 +
        v2=[xF,yF,zF];
 +
        v=[v2;v1];
 +
        plot3(v(:,1),v(:,2),v(:,3));
 +
        pause(pauseTime);
 +
   
 +
    elseif (zF < 0 && length < radius)
 +
       
 +
        v1=[xI,yI,zI];
 +
        v2=[xF,yF,zF];
 +
        v=[v2;v1];
 +
        plot3(v(:,1),v(:,2),v(:,3));
 +
        pause(pauseTime);
 +
   
 +
    else
 +
       
 +
        boundaryCondition = false;
 +
        while(boundaryCondition == false)
 +
     
 +
            xF = xI + (2*N*rand())-N;
 +
            yF = yI + (2*N*rand())-N;
 +
            zF = zI + (2*N*rand())-N;
 +
 +
            length = sqrt(xF^2 + yF^2 + zF^2);
 +
            dist = sqrt(xF^2 + yF^2);
 +
       
 +
            if ((zF >= 0 && zF < maxHeight && dist < radius)||(zF < 0 && length < radius))
 +
                boundaryCondition = true;
 +
                v1=[xI,yI,zI];
 +
                v2=[xF,yF,zF];
 +
                v=[v2;v1];
 +
                plot3(v(:,1),v(:,2),v(:,3));
 +
                pause(pauseTime);
 +
               
 +
            end
 +
        end
 +
    end
 +
end
 +
 +
anArray(storageCounter)=n;
 +
disp(anArray);
 +
end
 +
 +
plot3(xF,yF,zF,'ok','MarkerFaceColor','r');
 +
hold off
 +
disp(anArray)
 +
disp(n)
 +
 +
function ColorSet=varycolor(NumberOfPlots)
 +
% VARYCOLOR Produces colors with maximum variation on plots with multiple
 +
% lines.
 +
%
 +
%    VARYCOLOR(X) returns a matrix of dimension X by 3.  The matrix may be
 +
%    used in conjunction with the plot command option 'color' to vary the
 +
%    color of lines. 
 +
%
 +
%    Yellow and White colors were not used because of their poor
 +
%    translation to presentations.
 +
%
 +
%    Example Usage:
 +
%        NumberOfPlots=50;
 +
%
 +
%        ColorSet=varycolor(NumberOfPlots);
 +
%
 +
%        figure
 +
%        hold on;
 +
%
 +
%        for m=1:NumberOfPlots
 +
%            plot(ones(20,1)*m,'Color',ColorSet(m,:))
 +
%        end
 +
 +
%Created by Daniel Helmick 8/12/2008
 +
 +
narginchk(1,1)%correct number of input arguements??
 +
nargoutchk(0, 1)%correct number of output arguements??
 +
 +
%Take care of the anomolies
 +
if NumberOfPlots<1
 +
    ColorSet=[];
 +
elseif NumberOfPlots==1
 +
    ColorSet=[0 1 0];
 +
elseif NumberOfPlots==2
 +
    ColorSet=[0 1 0; 0 1 1];
 +
elseif NumberOfPlots==3
 +
    ColorSet=[0 1 0; 0 1 1; 0 0 1];
 +
elseif NumberOfPlots==4
 +
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1];
 +
elseif NumberOfPlots==5
 +
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0];
 +
elseif NumberOfPlots==6
 +
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0; 0 0 0];
 +
 +
else %default and where this function has an actual advantage
 +
 +
    %we have 5 segments to distribute the plots
 +
    EachSec=floor(NumberOfPlots/5);
 +
   
 +
    %how many extra lines are there?
 +
    ExtraPlots=mod(NumberOfPlots,5);
 +
   
 +
    %initialize our vector
 +
    ColorSet=zeros(NumberOfPlots,3);
 +
   
 +
    %This is to deal with the extra plots that don't fit nicely into the
 +
    %segments
 +
    Adjust=zeros(1,5);
 +
    for m=1:ExtraPlots
 +
        Adjust(m)=1;
 +
    end
 +
   
 +
    SecOne  =EachSec+Adjust(1);
 +
    SecTwo  =EachSec+Adjust(2);
 +
    SecThree =EachSec+Adjust(3);
 +
    SecFour  =EachSec+Adjust(4);
 +
    SecFive  =EachSec;
 +
 +
    for m=1:SecOne
 +
        ColorSet(m,:)=[0 1 (m-1)/(SecOne-1)];
 +
    end
 +
 +
    for m=1:SecTwo
 +
        ColorSet(m+SecOne,:)=[0 (SecTwo-m)/(SecTwo) 1];
 +
    end
 +
   
 +
    for m=1:SecThree
 +
        ColorSet(m+SecOne+SecTwo,:)=[(m)/(SecThree) 0 1];
 +
    end
 +
   
 +
    for m=1:SecFour
 +
        ColorSet(m+SecOne+SecTwo+SecThree,:)=[1 0 (SecFour-m)/(SecFour)];
 +
    end
 +
 +
    for m=1:SecFive
 +
        ColorSet(m+SecOne+SecTwo+SecThree+SecFour,:)=[(SecFive-m)/(SecFive) 0 0];
 +
    end
 +
end
 +
end
 +
</pre>
 +
 
<footer style="background-color: #212121;height:90px ">
 
<footer style="background-color: #212121;height:90px ">
 
             <div class="container">
 
             <div class="container">

Revision as of 18:14, 20 September 2018

Fluid Dynamics

Matlab code

anArray = zeros(1,10);          %Initialize storage array
storageCounterMax = 10;

for storageCounter = 1:storageCounterMax

%Variable Declaration
n = 1;                          %Initialize loop counter
N=0.25;                         %Range from random selection will be [-N,N]
loopMax=10000;                  %Number of random walk movements
ColorSet = varycolor(loopMax);  %Set amount of colours
diameter = 6.94;                %Set diameter of cylinder
radius = diameter*0.5;          %Set radius of cylinder
totalHeight = 10.85;            %Set total height of container
pauseTime = 0.0;                %Set time between plotting iterations
boundaryCondition = true;

%Cylinder Figure
maxHeight = totalHeight - radius;
h=maxHeight;
x0=0;y0=0;z0=0;
[x,y,z]=cylinder(radius);
x=x+x0;
y=y+y0;
z=z*h+z0;

%Half Sphere Figure
A = [0 0 0 radius];
[X, Y, Z] = sphere;
XX = X * A(4) + A(1);
YY = Y * A(4) + A(2);
ZZ = Z * A(4) + A(3);
XX = XX(11:end,:);
YY = YY(11:end,:);
ZZ = -ZZ(11:end,:);

%Display Information
figure
xlabel('X');
ylabel('Y');
zlabel('Z');
surface(x,y,z, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on
surface(XX, YY, ZZ, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on
axis equal
view(3);
set(gca,'GridLineStyle','-')
Information=strcat('Brownian Motion in 3D Space');
title(Information ,'FontWeight','bold');
view(-109,40);
hold all
set(gca, 'ColorOrder', ColorSet);


%Initialize Beginning Location
heightInitialize = maxHeight + radius;
xF = (2*radius*rand())-radius;
yF = (2*radius*rand())-radius;
zF = (heightInitialize*rand())-radius;

while(boundaryCondition == true)
    
    n = n + 1;

    xI = xF;
    yI = yF;
    zI = zF;

    xF = xI + (2*N*rand())-N;
    yF = yI + (2*N*rand())-N;
    zF = zI + (2*N*rand())-N;
    
    dist = sqrt(xF^2 + yF^2);
    length = sqrt(xF^2 + yF^2 + zF^2);

    
    if (zF >= maxHeight)
        flag = 1;
        disp(n);
        break;
    end
    
    if (zF >= 0 && zF < maxHeight && dist < radius)

        v1=[xI,yI,zI];
        v2=[xF,yF,zF];
        v=[v2;v1];
        plot3(v(:,1),v(:,2),v(:,3));
        pause(pauseTime);
    
    elseif (zF < 0 && length < radius)
        
        v1=[xI,yI,zI];
        v2=[xF,yF,zF];
        v=[v2;v1];
        plot3(v(:,1),v(:,2),v(:,3));
        pause(pauseTime);
    
    else
        
        boundaryCondition = false;
        while(boundaryCondition == false)
       
            xF = xI + (2*N*rand())-N;
            yF = yI + (2*N*rand())-N;
            zF = zI + (2*N*rand())-N;

            length = sqrt(xF^2 + yF^2 + zF^2);
            dist = sqrt(xF^2 + yF^2);
        
            if ((zF >= 0 && zF < maxHeight && dist < radius)||(zF < 0 && length < radius))
                boundaryCondition = true;
                v1=[xI,yI,zI];
                v2=[xF,yF,zF];
                v=[v2;v1];
                plot3(v(:,1),v(:,2),v(:,3));
                pause(pauseTime);
                
            end
        end
    end
end

anArray(storageCounter)=n;
disp(anArray);
end

plot3(xF,yF,zF,'ok','MarkerFaceColor','r');
hold off
disp(anArray)
disp(n)

function ColorSet=varycolor(NumberOfPlots)
% VARYCOLOR Produces colors with maximum variation on plots with multiple
% lines.
%
%     VARYCOLOR(X) returns a matrix of dimension X by 3.  The matrix may be
%     used in conjunction with the plot command option 'color' to vary the
%     color of lines.  
%
%     Yellow and White colors were not used because of their poor
%     translation to presentations.
% 
%     Example Usage:
%         NumberOfPlots=50;
%
%         ColorSet=varycolor(NumberOfPlots);
% 
%         figure
%         hold on;
% 
%         for m=1:NumberOfPlots
%             plot(ones(20,1)*m,'Color',ColorSet(m,:))
%         end

%Created by Daniel Helmick 8/12/2008

narginchk(1,1)%correct number of input arguements??
nargoutchk(0, 1)%correct number of output arguements??

%Take care of the anomolies
if NumberOfPlots<1
    ColorSet=[];
elseif NumberOfPlots==1
    ColorSet=[0 1 0];
elseif NumberOfPlots==2
    ColorSet=[0 1 0; 0 1 1];
elseif NumberOfPlots==3
    ColorSet=[0 1 0; 0 1 1; 0 0 1];
elseif NumberOfPlots==4
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1];
elseif NumberOfPlots==5
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0];
elseif NumberOfPlots==6
    ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0; 0 0 0];

else %default and where this function has an actual advantage

    %we have 5 segments to distribute the plots
    EachSec=floor(NumberOfPlots/5); 
    
    %how many extra lines are there? 
    ExtraPlots=mod(NumberOfPlots,5); 
    
    %initialize our vector
    ColorSet=zeros(NumberOfPlots,3);
    
    %This is to deal with the extra plots that don't fit nicely into the
    %segments
    Adjust=zeros(1,5);
    for m=1:ExtraPlots
        Adjust(m)=1;
    end
    
    SecOne   =EachSec+Adjust(1);
    SecTwo   =EachSec+Adjust(2);
    SecThree =EachSec+Adjust(3);
    SecFour  =EachSec+Adjust(4);
    SecFive  =EachSec;

    for m=1:SecOne
        ColorSet(m,:)=[0 1 (m-1)/(SecOne-1)];
    end

    for m=1:SecTwo
        ColorSet(m+SecOne,:)=[0 (SecTwo-m)/(SecTwo) 1];
    end
    
    for m=1:SecThree
        ColorSet(m+SecOne+SecTwo,:)=[(m)/(SecThree) 0 1];
    end
    
    for m=1:SecFour
        ColorSet(m+SecOne+SecTwo+SecThree,:)=[1 0 (SecFour-m)/(SecFour)];
    end

    for m=1:SecFive
        ColorSet(m+SecOne+SecTwo+SecThree+SecFour,:)=[(SecFive-m)/(SecFive) 0 0];
    end
end
end