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

Line 17: Line 17:
  
 
<h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2>
 
<h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2>
 +
 +
<h3>Variables and Equations</h3>
 +
<p>Known variables from QGEM resources and equations from literature are employed to characterize the fluid dynamics
 +
of the pacifier. The protein size is given at 64.86 kilodaltons, with a concentration in water (as a protein solution)
 +
of 2.37 mg/ml. 100μL of saliva is required to interact with the protein solution, although more should be collected to
 +
ensure that the minimum requirement is met. The diameter of the inner pacifier tube leading from the saliva input to
 +
the protein container is 1.5mm, while the length is 12mm. Reynold’s equation is given in Equation (1):</p>
 +
 +
<div>
 +
Re = <em>&rho;DV/&mu;</em><br>
 +
</div>
  
 
<h3>Matlab code</h3>
 
<h3>Matlab code</h3>

Revision as of 18:19, 20 September 2018

Fluid Dynamics

Variables and Equations

Known variables from QGEM resources and equations from literature are employed to characterize the fluid dynamics of the pacifier. The protein size is given at 64.86 kilodaltons, with a concentration in water (as a protein solution) of 2.37 mg/ml. 100μL of saliva is required to interact with the protein solution, although more should be collected to ensure that the minimum requirement is met. The diameter of the inner pacifier tube leading from the saliva input to the protein container is 1.5mm, while the length is 12mm. Reynold’s equation is given in Equation (1):

Re = ρDV/μ

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