Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
velocity field in fluid dynamics

Subject: velocity field in fluid dynamics

From: Ivo

Date: 12 Jul, 2010 10:34:06

Message: 1 of 4

I have a problem with plotting a 2D velocity field. I would like to have a plot that shows the velocity in the xy direction at various positions.

The data I have is from a numerical simulation. I have a (virtual) watertank and in that tank are 950 probes that measure the 3 veclocity components, pressure and density (one of the velocity components is zero in an ideal situation).
The output is like this:
V_y V_z V_x pressure density (one files (i.e. one probe) measures on 500 timesteps so I get 500 rows of this format in one file, and that brings me to a total of 950 files with data in this format, but for this purpose I would like to make a plot of one timestep, so one row of each file)

In a separate file are the locations of the probes and are in a format:
y z x
this file has 950 rows of this format (row 1 corresponds to file 1)

I was able to make a plot of the velocities seperatly, but not together and not with arrows (I used contour)

Here are the m-files I am using now (these are for all timesteps)
This is for loading U (x-speed)
________________________________________
U=13.*[sonda(:,3),sonda(:,2)];
for i=50:99
   number=num2str(i);
   file=strcat('son0',number,'.out');
   stored=load( file );
   for j=1:500
   U((i-49),j+2)=stored(j,4);
   end
end
for i=100:999
   number=num2str(i);
   file=strcat('son',number,'.out');
   stored=load( file );
   for j=1:500
   U((i-49),j+2)=stored(j,4);
   end
end
________________________________________
This is for plotting U and saving the plots on my harddisk
________________________________________
x=U(:,1);y=U(:,2);
xmin=min(x); ymin=min(y);
xmax=max(x); ymax=max(y);

xres=200; yres=200;

xv=linspace(xmin, xmax, xres); yv=linspace(ymin, ymax, yres);

[Xinterp,Yinterp]=meshgrid(xv,yv);
for i=1:500
    z=U(:,i+2);
    Zinterp=griddata(x,y,z,Xinterp,Yinterp);
    number=num2str(i);
    A=strcat('Perpendicular velocity(U in cm/s) on t=',number);
    h=1;
    contour(Xinterp,Yinterp,Zinterp,20); title(A);xlabel('Distance to the moving wall'); ylabel('Distance to the bottom');caxis([-0.6 0.6]);
    load('Mycolormaps','mycmap');
    set(1,'colormap',mycmap);
    colorbar('location','eastoutside');
    filename=['t',num2str(i+100),'.jpg'];
    saveas(h,filename,'jpeg');
end
________________________________________

Could someone please explain how to rearrange my data such that I can use quiver or an other plot function that would serve my purpose? Or if it turns out to be really easy, adjust my m-files so that I can use it? (Please don;t make it too complicated, because creating these m-files is about my level of understanding of matlab).

Thank you in advance,

Ivo

Subject: velocity field in fluid dynamics

From: Sean

Date: 12 Jul, 2010 12:46:04

Message: 2 of 4

"Ivo " <i.g.s.v.hooijdonk@student.tue.nl> wrote in message <i1er2u$io3$1@fred.mathworks.com>...
> I have a problem with plotting a 2D velocity field. I would like to have a plot that shows the velocity in the xy direction at various positions.
>
> The data I have is from a numerical simulation. I have a (virtual) watertank and in that tank are 950 probes that measure the 3 veclocity components, pressure and density (one of the velocity components is zero in an ideal situation).
> The output is like this:
> V_y V_z V_x pressure density (one files (i.e. one probe) measures on 500 timesteps so I get 500 rows of this format in one file, and that brings me to a total of 950 files with data in this format, but for this purpose I would like to make a plot of one timestep, so one row of each file)
>
> In a separate file are the locations of the probes and are in a format:
> y z x
> this file has 950 rows of this format (row 1 corresponds to file 1)
>
> I was able to make a plot of the velocities seperatly, but not together and not with arrows (I used contour)
>
> Here are the m-files I am using now (these are for all timesteps)
> This is for loading U (x-speed)
> ________________________________________
> U=13.*[sonda(:,3),sonda(:,2)];
> for i=50:99
> number=num2str(i);
> file=strcat('son0',number,'.out');
> stored=load( file );
> for j=1:500
> U((i-49),j+2)=stored(j,4);
> end
> end
> for i=100:999
> number=num2str(i);
> file=strcat('son',number,'.out');
> stored=load( file );
> for j=1:500
> U((i-49),j+2)=stored(j,4);
> end
> end
> ________________________________________
> This is for plotting U and saving the plots on my harddisk
> ________________________________________
> x=U(:,1);y=U(:,2);
> xmin=min(x); ymin=min(y);
> xmax=max(x); ymax=max(y);
>
> xres=200; yres=200;
>
> xv=linspace(xmin, xmax, xres); yv=linspace(ymin, ymax, yres);
>
> [Xinterp,Yinterp]=meshgrid(xv,yv);
> for i=1:500
> z=U(:,i+2);
> Zinterp=griddata(x,y,z,Xinterp,Yinterp);
> number=num2str(i);
> A=strcat('Perpendicular velocity(U in cm/s) on t=',number);
> h=1;
> contour(Xinterp,Yinterp,Zinterp,20); title(A);xlabel('Distance to the moving wall'); ylabel('Distance to the bottom');caxis([-0.6 0.6]);
> load('Mycolormaps','mycmap');
> set(1,'colormap',mycmap);
> colorbar('location','eastoutside');
> filename=['t',num2str(i+100),'.jpg'];
> saveas(h,filename,'jpeg');
> end
> ________________________________________
>
> Could someone please explain how to rearrange my data such that I can use quiver or an other plot function that would serve my purpose? Or if it turns out to be really easy, adjust my m-files so that I can use it? (Please don;t make it too complicated, because creating these m-files is about my level of understanding of matlab).
>
> Thank you in advance,
>
> Ivo


If my understanding of what you have is correct:
>>quiver(Xinterp(:),Yinterp(:),U(:,1),U(:,2)); %The colon operator turns the matrix into a vector taking pieces column-wise.
%Thus what I'm doing is making 4 column vectors: x-coords, y-coords, U-coords, V-coords and quiver() will draw an arrow for each row of the 4.

Subject: velocity field in fluid dynamics

From: Sean

Date: 12 Jul, 2010 12:46:04

Message: 3 of 4

"Ivo " <i.g.s.v.hooijdonk@student.tue.nl> wrote in message <i1er2u$io3$1@fred.mathworks.com>...
> I have a problem with plotting a 2D velocity field. I would like to have a plot that shows the velocity in the xy direction at various positions.
>
> The data I have is from a numerical simulation. I have a (virtual) watertank and in that tank are 950 probes that measure the 3 veclocity components, pressure and density (one of the velocity components is zero in an ideal situation).
> The output is like this:
> V_y V_z V_x pressure density (one files (i.e. one probe) measures on 500 timesteps so I get 500 rows of this format in one file, and that brings me to a total of 950 files with data in this format, but for this purpose I would like to make a plot of one timestep, so one row of each file)
>
> In a separate file are the locations of the probes and are in a format:
> y z x
> this file has 950 rows of this format (row 1 corresponds to file 1)
>
> I was able to make a plot of the velocities seperatly, but not together and not with arrows (I used contour)
>
> Here are the m-files I am using now (these are for all timesteps)
> This is for loading U (x-speed)
> ________________________________________
> U=13.*[sonda(:,3),sonda(:,2)];
> for i=50:99
> number=num2str(i);
> file=strcat('son0',number,'.out');
> stored=load( file );
> for j=1:500
> U((i-49),j+2)=stored(j,4);
> end
> end
> for i=100:999
> number=num2str(i);
> file=strcat('son',number,'.out');
> stored=load( file );
> for j=1:500
> U((i-49),j+2)=stored(j,4);
> end
> end
> ________________________________________
> This is for plotting U and saving the plots on my harddisk
> ________________________________________
> x=U(:,1);y=U(:,2);
> xmin=min(x); ymin=min(y);
> xmax=max(x); ymax=max(y);
>
> xres=200; yres=200;
>
> xv=linspace(xmin, xmax, xres); yv=linspace(ymin, ymax, yres);
>
> [Xinterp,Yinterp]=meshgrid(xv,yv);
> for i=1:500
> z=U(:,i+2);
> Zinterp=griddata(x,y,z,Xinterp,Yinterp);
> number=num2str(i);
> A=strcat('Perpendicular velocity(U in cm/s) on t=',number);
> h=1;
> contour(Xinterp,Yinterp,Zinterp,20); title(A);xlabel('Distance to the moving wall'); ylabel('Distance to the bottom');caxis([-0.6 0.6]);
> load('Mycolormaps','mycmap');
> set(1,'colormap',mycmap);
> colorbar('location','eastoutside');
> filename=['t',num2str(i+100),'.jpg'];
> saveas(h,filename,'jpeg');
> end
> ________________________________________
>
> Could someone please explain how to rearrange my data such that I can use quiver or an other plot function that would serve my purpose? Or if it turns out to be really easy, adjust my m-files so that I can use it? (Please don;t make it too complicated, because creating these m-files is about my level of understanding of matlab).
>
> Thank you in advance,
>
> Ivo


If my understanding of what you have is correct:
>>quiver(Xinterp(:),Yinterp(:),U(:,1),U(:,2)); %The colon operator turns the matrix into a vector taking pieces column-wise.
%Thus what I'm doing is making 4 column vectors: x-coords, y-coords, U-coords, V-coords and quiver() will draw an arrow for each row of the 4.

Subject: velocity field in fluid dynamics

From: Ivo

Date: 12 Jul, 2010 13:20:04

Message: 4 of 4

"Sean " <sean.dewolski@nospamplease.umit.maine.edu> wrote in message <i1f2qc$4t5$1@fred.mathworks.com>...
> "Ivo " <i.g.s.v.hooijdonk@student.tue.nl> wrote in message <i1er2u$io3$1@fred.mathworks.com>...
> > I have a problem with plotting a 2D velocity field. I would like to have a plot that shows the velocity in the xy direction at various positions.
> >
> > The data I have is from a numerical simulation. I have a (virtual) watertank and in that tank are 950 probes that measure the 3 veclocity components, pressure and density (one of the velocity components is zero in an ideal situation).
> > The output is like this:
> > V_y V_z V_x pressure density (one files (i.e. one probe) measures on 500 timesteps so I get 500 rows of this format in one file, and that brings me to a total of 950 files with data in this format, but for this purpose I would like to make a plot of one timestep, so one row of each file)
> >
> > In a separate file are the locations of the probes and are in a format:
> > y z x
> > this file has 950 rows of this format (row 1 corresponds to file 1)
> >
> > I was able to make a plot of the velocities seperatly, but not together and not with arrows (I used contour)
> >
> > Here are the m-files I am using now (these are for all timesteps)
> > This is for loading U (x-speed)
> > ________________________________________
> > U=13.*[sonda(:,3),sonda(:,2)];
> > for i=50:99
> > number=num2str(i);
> > file=strcat('son0',number,'.out');
> > stored=load( file );
> > for j=1:500
> > U((i-49),j+2)=stored(j,4);
> > end
> > end
> > for i=100:999
> > number=num2str(i);
> > file=strcat('son',number,'.out');
> > stored=load( file );
> > for j=1:500
> > U((i-49),j+2)=stored(j,4);
> > end
> > end
> > ________________________________________
> > This is for plotting U and saving the plots on my harddisk
> > ________________________________________
> > x=U(:,1);y=U(:,2);
> > xmin=min(x); ymin=min(y);
> > xmax=max(x); ymax=max(y);
> >
> > xres=200; yres=200;
> >
> > xv=linspace(xmin, xmax, xres); yv=linspace(ymin, ymax, yres);
> >
> > [Xinterp,Yinterp]=meshgrid(xv,yv);
> > for i=1:500
> > z=U(:,i+2);
> > Zinterp=griddata(x,y,z,Xinterp,Yinterp);
> > number=num2str(i);
> > A=strcat('Perpendicular velocity(U in cm/s) on t=',number);
> > h=1;
> > contour(Xinterp,Yinterp,Zinterp,20); title(A);xlabel('Distance to the moving wall'); ylabel('Distance to the bottom');caxis([-0.6 0.6]);
> > load('Mycolormaps','mycmap');
> > set(1,'colormap',mycmap);
> > colorbar('location','eastoutside');
> > filename=['t',num2str(i+100),'.jpg'];
> > saveas(h,filename,'jpeg');
> > end
> > ________________________________________
> >
> > Could someone please explain how to rearrange my data such that I can use quiver or an other plot function that would serve my purpose? Or if it turns out to be really easy, adjust my m-files so that I can use it? (Please don;t make it too complicated, because creating these m-files is about my level of understanding of matlab).
> >
> > Thank you in advance,
> >
> > Ivo
>
>
> If my understanding of what you have is correct:
> >>quiver(Xinterp(:),Yinterp(:),U(:,1),U(:,2)); %The colon operator turns the matrix into a vector taking pieces column-wise.
> %Thus what I'm doing is making 4 column vectors: x-coords, y-coords, U-coords, V-coords and quiver() will draw an arrow for each row of the 4.


Thank you. i don't really understand why I didn't get it right before. I have been spending quitte some time on solving this. But now it works.

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us