OpenFOAM Introduction Speakers:
Francois Rigo
[email protected] José Rothkegel
[email protected] Amandine GUISSART
[email protected]
February 2016
OpenFoam
What's OpenFOAM?
OpenFOAM: Open source Field Operation And Manipulation C++ toolbox for the development of customized numerical solvers, and pre-/post-processing utilities for the solution of continuum mechanics problems, including computational fluid dynamics (CFD).
OpenFoam
What comes with OpenFOAM?
Basic CFD solvers
Incompressible flow with RANS and LES
Advanced CFD solvers
Compressible flow solvers with RANS and LES
Buoyancy-driven flow solvers
Multiphase flow solvers
Combustion problems
Solvers for conjugate heat transfer
Particle Tracking
Molecular dynamics solvers[28]
Electromagnetics solvers
Solid dynamics solvers
OpenFoam
What are the applications of OpenFOAM?
CATIA Room
Ubuntu Login
User: foam
Pass: catia1135
Linux Basics
Open Terminal:
In gnome 2.x:
Applications → Accesories → Terminal
In KDE 4.x:
Applications menu → Systems → Konsole
Linux Basics
Create Folder
Copy files
~$rm name
Rename file
~$cp name destination
Delete files(attention: no undelete option)
~$mkdir name
~$mv name_original name_new
To edit a file, we'll use Gedit
$gedit filename
Linux Basics
Change directory
Go to home directory
~$cd
See working directory
~$cd folder
~$pwd
See working directory's content
~$ls
OpenFOAM Basics
Create a directory named student_work_2016_A in the OpenFOAM work directory
~$cd
~$cd OpenFOAM/foam-2.1.1/run
~$cd student_work_2016_A
Rename the folder to Cavity_original
~$cp -r tutorials/incompressible/icoFoam/cavity student_work_2016_A/
Go to student_work_2016_A
~$mkdir student_work_2016_A
Copy the cavity problem to the created directory
Note: you can use the key to autocomplete the line
~$mv cavity cavity_original
Go to cavity_original folder
~$cd cavity_original
OpenFOAM Basics
Folder structure
OpenFOAM Basics
Test case problem: lid-driven cavity
OpenFOAM Basics
Block Structure of of mesh
OpenFOAM Basics
blockMeshDict
convertToMeters 0.1; vertices ( (0 0 (1 0 (1 1 (0 1 (0 0 (1 0 (1 1 (0 1 );
0) 0) 0) 0) 0.1) 0.1) 0.1) 0.1)
OpenFOAM Basics
blockMeshDict
blocks ( hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1) );
OpenFOAM Basics
blockMeshDict
boundary ( movingWall { type wall; faces ( (3 7 6 2) ); } fixedWalls { type wall; faces ( (0 4 7 3) (2 6 5 1) (1 5 4 0) ); } ...
... frontAndBack { type empty; faces ( (0 3 2 1) (4 5 6 7) ); } );
OpenFOAM Basics
To generate the mesh from the blockMeshDict:
~$blockMesh
To visualize the mesh:
~$paraFoam
OpenFOAM Basics
In paraFoam: a) Apply in the Object Inspector b) Surface With edges in the representation menu b
a
OpenFOAM Basics
Problem set-up
Initial values: Folder ”0”
Properties: Folder ”constant”
U p TransportProperties
Numerical Control: Folder ”system”
controlDict fvSchemes fvSolution
OpenFOAM Basics
File: ”p”
dimensions
[0 2 -2 0 0 0 0];
internalField
uniform 0;
boundaryField { movingWall { type }
}
zeroGradient;
fixedWalls { type }
zeroGradient;
frontAndBack { type }
empty;
OpenFOAM Basics
File: ”U”
dimensions internalField boundaryField { movingWall { type value } fixedWalls { type value } frontAndBack { type } }
[0 1 -1 0 0 0 0]; uniform (0 0 0);
fixedValue; uniform (1 0 0);
fixedValue; uniform (0 0 0);
empty;
OpenFOAM Basics
File: ”U”
For external flows
dimensions [0 1 -1 internalField uniform boundaryField { dummyWall { type freestreamValue } }
0 0 0 0]; (0 0 0);
freestream; uniform (1 0 0);
OpenFOAM Basics
File: ”transportProperties”
nu [ 0 2 -1 0 0 0 0 ] 0.01;
OpenFOAM Basics
File: ”controlDict”
application
icoFoam;
startFrom startTime stopAt endTime
startTime; 0; endTime; 0.5;
DeltaT
0.005; // CFL is imposed through δt
writeControl timeStep; writeInterval 20; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable true;
δ t|U| CFL= δx
OpenFOAM Basics
To run the case
~$icoFoam
To visualize the results:
~$paraFoam
paraFoam Basics
a
paraFoam Basics c
b
d
paraFoam Basics
Common toolbar
Stream tracer: to show streamlines
Glyph: to show arrows
Student Work Mesh Grading
Problem is based on the lid-driven cavity tutorial
It introduces the mesh grading feature
Student Work
Test case problem: lid-driven cavity
Student Work
Student Work
Create a directory named student_work_2016_A in the OpenFOAM work directory
~$cd ~$cd OpenFOAM/foam-2.1.1/run
Copy the cavity problem to the created directory
~$cp -r tutorials/incompressible/icoFoam/cavity student_work_2016_A/
Go to student_work_2016_A
Note: you can use the key to autocomplete the line
~$cd student_work_2016_A/
Rename the folder to cavity_grading
~$mv cavity cavity_grading
Student Work
blockMeshDict
vertices ( (0.0 (0.5 (1.0 (0.0 (0.5 (1.0 (0.0 (0.5 (1.0
0.0 0.0 0.0 0.5 0.5 0.5 1.0 1.0 1.0
0.0) 0.0) 0.0) 0.0) 0.0) 0.0) 0.0) 0.0) 0.0)
(0.0 (0.5 (1.0 (0.0 (0.5 (1.0 (0.0 (0.5 (1.0
0.0 0.0 0.0 0.5 0.5 0.5 1.0 1.0 1.0
0.1) 0.1) 0.1) 0.1) 0.1) 0.1) 0.1) 0.1) 0.1)
);
Student Work
blockMeshDict
blocks ( hex hex hex hex );
(0 (1 (3 (4
1 2 4 5
4 5 7 8
3 4 6 7
9 10 13 12) 10 11 14 13) 12 13 16 15) 13 14 17 16)
(10 (10 (10 (10
10 10 10 10
1) 1) 1) 1)
simpleGrading simpleGrading simpleGrading simpleGrading
(2 2 1) (0.5 2 1) (2 0.5 1) (0.5 0.5 1)
Student Work boundary ( movingWall { type wall; faces ( (6 15 16 7) (7 16 17 8) ); } fixedWalls { type wall; faces ( (3 12 15 6) (0 9 12 3) (0 1 10 9) (1 2 11 10) (2 5 14 11) (5 8 17 14) ); } ...
... frontAndBack { type empty; faces ( (0 3 4 1) (1 4 5 2) (3 6 7 4) (4 7 8 5) (9 10 13 12) (10 11 14 13) (12 13 16 15) (13 14 17 16) ); } );
Student Work
Build mesh
Run the files:
~$blockMesh ~$icoFoam
View the results:
~$paraFoam
OpenFOAM Integrals
To calculate the integral of variable over a patch
General structure
~$ patchIntegrate
~$ patchIntegrate U movingWall
For example:
OpenFOAM Integrals
To calculate forces controlDict
... timeFormat
general;
timePrecision
6;
runTimeModifiable true; functions { }
#include "forceCoeffs"
OpenFOAM Integrals
To calculate forces
forceCoeffs Adapted from tutorials/incompressible/simpleFoam/motorBike/system/forceCoeffs
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v3.0+ | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ forceCoeffs1 { type
forceCoeffs;
functionObjectLibs ( "libforces.so" ); outputControl timeInterval
timeStep; 1;
log
yes;
patches rhoName rhoInf liftDir dragDir CofR pitchAxis magUInf lRef Aref
( patchesName ); rhoInf; // Indicates incompressible 1; // Redundant for incompressible (0 0 1); (1 0 0); (1 0 0); // Axle midpoint on ground (0 1 0); 20; 1.0; // Reference length 1.0; // Reference Area
C L=
2 FL
ρ U ∞2 A 2 FD C D= ρ U ∞2 A
}
Remember to set the correct values!!!
References
Linux
OpenFOAM
Just google:”linux commands” OpenFoam User Guide
Installing OpenFOAM
http://www.openfoam.com/version-v3.0+/