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>ρDV/μ</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