===== Reading output files with Matlab (examples) =====
Three different matlab functions can read sunfluidh output files. [[https://sunfluidh.limsi.fr/_media/sunfluidh:read_sunfluidh_data.tar|download the files]]. Make sure the directory where you have untar these files is listed in the matlabpath((For Unix system you can add the following command in ~/.bashrc :
//export MATLABPATH='directory_where_the_files_are_stored'//)).
- **read_sunfluidh_data** reads res* or rst* files
- **read_sunfluidh_probes** reads all probes files *_ins_*
- **read-sunfluidh-namelist** reads check_namelist_data.dat
As for any matlab function, the documentation is built in. In the command window just type : **help** read_sunfluidh_data or **doc** read_sunfluidh_data.
Here, we assume you have already run the case[[ sunfluidh:2D_channel_flow_with_bar_Incomp_Flow | 2D laminar channel flow with a constriction]]. Make sure the current directory for matlab is also the directory where you have the output files.
===== Instantaneous (or statistical) fields =====
Visualisation of U velocity component.
f = read_sunfluidh_data(7) % read res_00000_0000007.d. If you omit (7), the function tries to read the lastest generated file.
pcolor(f.xu,f.yc,f.U') % Note the transpose ' for f.U
axis image
shading interp
Add a colorbar, labels and increase the font size.
colorbar
xlabel('x'); ylabel('y'), set(gca,'FontSize',16)
Add on the same figure the contour for the isovalue 0 for the U component. The isocontour is red with a thick line.
hold on
contour(f.xu,f.yc,f.U',[0 0],'r','linewidth',2)
hold off
Extract the profiles from the instantaneous field. For instance, the U profile as a function of x for the grid nodes 48 in the y direction.
plot(f.xu,f.U(:,48))
Add another profile for grid nodes 19, labels.
hold on
plot(f.xu,f.U(:,19))
hold off
xlabel('x'); ylabel('U(x)'), set(gca,'FontSize',18)
grid on
Add a legend retreiving the coordinates of the 19 and 48 grid nodes from f.yc.
legend(['y = ',num2str(f.yc(48))],['y = ',num2str(f.yc(19))] )
Plotting the profiles along the y direction is very similar. Here, the ghost cells are removed.
xind = 152; % pick an indice
plot(f.U(xind,2:end-1),f.yc(2:end-1))
xlabel('U(y)'),ylabel('y')
Retrieve from the namelists stored in check_namelist_data.dat the dynamic viscosity and the mesh size to make a title
nml = read_sunfluidh_namelist
nx = nml.DOMAIN_FEATURES.CELLS_NUMBER_I_DIRECTION;
ny = nml.DOMAIN_FEATURES.CELLS_NUMBER_J_DIRECTION;
Rey = 1/nml.FLUID_PROPERTIES.REFERENCE_DYNAMIC_VISCOSITY;
mystring = [' Profile at x= ',num2str(f.xu(xind)), ' Re = ',num2str(Rey), ...
', grid size = ' num2str(nx),'x', num2str(ny) ];
title(mystring)
For statistical fields you can use read_sunfluidh_data. You just need to add the 'stat' option (see **doc** read_sunfluidh_data). For statistical fields all data are centered on scalar grid points. It is also possible to center the instantaneaous fields with the option 'center'. This can be handy in a post processing when computing quantities with different velocity field components
===== Temporal series =====
The *ins* files or more generally temporal series are ascii files in which the first column is time and the first line is a header. There is no special needs to have a script for these files. You can use directly builtin matlab functions that you can taylor to your needs.
Reading the file resid_L2_Li.d with builtin matlab function
s = importdata('resid_L2_Li.d');
time = s.data(:,1);
L2 = s.data(:,2);
Linf = s.data(:,3);
semilogy(time,L2)
grid on
xlabel('t','FontSize',16); ylabel('L2 norm','FontSize',16)
set(gca,'FontSize',16)
Plotting the U velocity component for the second probe with builtin matlab function
s = importdata('u_ins_00000.d',' ',1)
time = s.data(:,1);
u2 = s.data(:,3);
plot(time,u2)
grid on
xlabel('t'); ylabel('u probe2')
You can use **read_sunfluid_probes.m** that attempts to read in the current directory all the *ins* files and build a structure with the variable names. It intends to make life a bit easier but it is however quite fragile and may fail.
Exemple:
s = read_sunfluidh_probes;
plot(s.time,s.u(:,2)) % to plot u velocity component for probe number 2