260 likes | 393 Vues
Post-Processing Output with MATLAB. Claudia Fricke Institute of Petroleum Engineering, Heriot Watt University. Overview. How to create MATLAB Output with CSMP? How to use the CSMP Output with MATLAB?. Why MATLAB – not VTK?. General CSMP++ Workflow. Load libraries
E N D
Post-Processing Output with MATLAB Claudia FrickeInstitute of Petroleum Engineering, Heriot Watt University
Overview • How to create MATLAB Output with CSMP? • How to use the CSMP Output with MATLAB?
General CSMP++ Workflow • Load libraries • Generate SuperGroup (from mesh) and set properties, boundary and start values • Set up FE and FV algorithms • Output initial values • Main calculation loop over different time steps • Final output CSMP or MATLAB Code:essential commands in red or green
Include Header-File • Load libraries #include "CSP_MatlabInterface.h" *) • Generate supergroup (from mesh) and set properties, boundary and start values • … *) in ...\CSMP\source_code\interfaces
name of supergroup name of output files CSMP output variable current time step default output filename current time step CSP_MatlabInterface.h value of CSMP variable to file void write2DMatlabFile(SuperGroup<csp_float,2>& sg, const char* name,const char* variable,long step ); void write2DMatlabFile(SuperGroup<csp_float,2>& sg,const char* groupname,const char* name,const char* variable,long step ); save current time step in file void writeSavedTimeStepsFile( long step, const char* name="saved_time_steps.txt" ); restriction to sub-group extract 1D data from 2D void extractAndWrite1DVariableProfileAlongX( ... ); void extractAndWrite1DVariableProfileAlongY( ... );
Export Initial Values … • Set up FE and FV algorithms • Output initial values write2DMatlabFile (supergroup, name of output file,CSMP variable,time step := start time )writeSavedTimeStepsFile (time step := start time , "filename" ); • Main calculation loop over different time steps …
Export Values for each Time Step … • Main calculation loop over different time stepswhile ( global_time < max_time ) { ...//calculate time step FE / time step FV...write2DMatlabFile(supergroup, name of output file, CSMP variable,time step := current time )writeSavedTimeStepsFile( ... ); //increment global_time ... } …
Export Final Values ... • Main calculation loop over different time steps • Final output write2DMatlabFile(supergroup, name of output file,CSMP variable,time step := final time ) writeSavedTimeStepsFile( ... );
Example CSMP
2 5 1 m Finite Elements(here m = 8) n Nodes(here n = 9) 3 1 4 2 4 6 3 8 6 7 5 7 8 9 Finite Element Mesh
2 1 1 1 3 Generated Output Files one value for each node one file for each time step time steps in extra file t rows x-y-coordinates of nodes nrows t files m rows nrows
Part 2 And now? How to use the CSMP Output with MATLAB?
How to read data into MATLAB? variable = load (file name) Command load • returns matrix variable • each matrix column represents a column from the former data table • each matrix row represents one row from the former data table nrows m rows n x 2 matrix m x 3 matrix variable (:,1)returns 1st column of matrix
How to plot in 1D? 1D Commandplot( nodes on x axis, calculated y-values, plot options) • Plot Options: • multiple plots • plot title • legend • axes markings • change colours • add coordinates grid • size of text • ...
How to plot in 2D? 2D Commands surface plot (for triangular data) trisurf( mx3 matrix of triangular elements, n x-values of nodes, n y-values of nodes, calculated z-values, options) Mesh Plot trimesh ( matrix of triangular elements, x coordinates of nodes, y coordinates of nodes, options) one plot command per time step for animation
How to save plot as image file? print( resolution, file type, file name ); Command print Example print( '-r200', '-djpeg', 'concentration.jpg' ); Stack of Images Animation (e.g with Movie Maker) compose file name (loop counter j) ['concentration', num2str(j),'.jpg']
2D Animation Example % start values time_steps = load ('time_steps.txt'); % 1 column j = 1; %loop counter last_time_step = length(time_steps); % load mesh no = load ( 'nodes.txt' ); el = load ( 'elements.txt' ); % loop while j <= last_time_step u = load ( ['concentration', num2str(j),'.txt'] ); trisurf ( el, no(:,1), no(:,2), u, possible options) view ( 2 ) % top view ... % more plot options % save single jpg's print( '-r200', '-djpeg', ['concentration', num2str(j),'.jpg'] ); j = j + 1 ; % time step increment end % see a plot of just the triangles with trimesh ( t, no(:,1), no(:,2) ) % start values time_steps = load ('time_steps.txt'); % 1 column j = 1; %loop counter last_time_step = length(time_steps); % load mesh no = load ( 'nodes.txt' ); el = load ( 'elements.txt' ); % loop while j <= last_time_step u = load ( ['concentration', num2str(j),'.txt'] ); trisurf ( el, no(:,1), no(:,2), u, possible options) view ( 2 ) % top view ... % more plot options % save single jpg's print( '-r200', '-djpeg', ['concentration', num2str(j),'.jpg'] ); j = j + 1 ; % time step increment end % see a plot of just the triangles with trimesh ( t, no(:,1), no(:,2) )
Output MATLAB
Change Plot Options withBatch Function • Create basic plot • Change various plot options with Property Editor • Generate m-Code Function • Call this function and pass in new datafrom other m-File in main loop • in detail see Youtube video“MATLAB Plot: Interactively Creating Plots in MATLAB”http://www.youtube.com/watch?v=GJVvBqR8Mws
Useful Links to MATLAB Always try Help Manual of MATLAB = easy MATLAB “homepage” http://www.mathworks.com …/products/featured/videos/ …/academia/student_center/tutorials/launchpad.html Introduction, Tutorials, Documentation, Examples, etc. Some useful tutorials http://www.youtube.com/user/MATLAB Octave (free alternative, mostly compatible with MATLAB) http://www.octave.org/
1D Output Extract data from 2D void extractAndWrite1DVariableProfileAlongX( SuperGroup<csp_float,2>& sg, csp_float distance, const char* name, const char* variable,long step ); void extractAndWrite1DVariableProfileAlongY(... );
1D Post-Processing Plot extractAndWrite1DVariableProfileAlongX(..) • 1-dimensional advection & diffusion equation • compare different time stepping schemes • plot 4 results in one figure with MATLAB
1D Animation Example % start values obs_function = 'fluid_pressure'; time_steps = load ('time_steps.txt'); % 1 column step = time_steps(2) - time_steps(1); max_time = time_steps(length(time_steps)); t = time_steps(1); while t <= max_time % read CSMP data u = load ( [obs_function, num2str(t),'.txt'] ); %2 columns x = u(:,1); % 1st column p_x_t_CSMP = u(:,2); % 2nd column % calculate analytical solution p_x_t_ana = ... %plot figure(1) plot( x, p_x_t_ana, x, p_x_t_CSMP) ... % more plot options t = t + step; end
MATLAB Terms • Environment: • Command Window • Workspace • Current Directory • Command History • Programming • m-code • m-file • script vs. function • plot, figure, surface plot, ...