Вы находитесь на странице: 1из 31
In-Cylinder Flows with OpenFOAM Hrvoje Jasak h.jasak@wikki.co.uk Wikki Ltd, United Kingdom FSB, University of
In-Cylinder
Flows
with
OpenFOAM
Hrvoje
Jasak
h.jasak@wikki.co.uk
Wikki Ltd,
United
Kingdom
FSB,
University
of Zagreb,
Croatia
18/Nov/2005

In-Cylinder Flows with OpenFOAM – p.1/31

Outline

 
Outline  
Outline  
Outline  
Outline  
Outline  

Objective

 

Present

a

novel

way

of handling

software

               

implementation

in

numerical

mechanics

Topics

OpenFOAM:

Object-oriented

software

for

Computational

Continuum Mechanics

(CCM)

A new approach to

model

representation

Mesh

handling

and

discretisation

support

In-cylinder flow (related)

capabilities

In-Cylinder Flows with OpenFOAM – p.2/31

Background

 
Background  
Background  
Background  
Background  
Background  

State

 

of

the Art

           

Numerical

modelling part of

product design

Improvements

in

computer performance

Improved

physical modelling

and

numerics

Sufficient validation

and

experience

Two-fold requirements

Quick and

reliable model

implementation

Complex

geometry,

high-performance

computing,

automatic

meshing

etc.

In-Cylinder Flows with OpenFOAM – p.3/31

In-Cylinder Flows

In-Cylinder Flows
In-Cylinder Flows
In-Cylinder Flows
In-Cylinder Flows
In-Cylinder Flows
   

Simulation

Challenges:

Very

Demanding!

           

Complex

mathematical

model

Compressible

(transonic)

fluid

flow

Turbulence,

combustion,

chemistry

Lagrangian

particles

for spray

Wall

interaction

and

wall

film

Complex

geometry

handling:

moving

mesh,

topological

changes

(valve

action)

Model-to-model

interaction:

complex

coupling

In-Cylinder Flows with OpenFOAM – p.4/31

Numerics for CCM How to handle complex models in software? • Natural language of continuum
Numerics for CCM
How
to
handle
complex
models
in software?
Natural
language of
continuum
mechanics:
partial differential equations
∂k
+
∇•
(u
k
)
∇•[(ν
+
ν t )∇ k ]
=
∂t
2
ǫ
o
ν
1 2 (∇ u + ∇ u T
)
k
t
k
o
Main
object =
operator,
e.g. time
derivative,
convection,
diffusion,
gradient

In-Cylinder Flows with OpenFOAM – p.5/31

OpenFOAM: CCM in C++ FOAM (Field Operation and Manipulation): Represent equations in their natural language
OpenFOAM: CCM in C++
FOAM
(Field Operation
and
Manipulation):
Represent
equations in their natural language
solve
(
fvm::ddt(k)
+
fvm::div(phi,
k)
-
fvm::laplacian(nu()
+
nut,
k)
==
nut * magSqr(symm(fvc::grad(U)))
-
fvm::Sp(epsilon/k,
k)
);

In-Cylinder Flows with OpenFOAM – p.6/31

Object Orientation Recognise main objects from the numerical modelling viewpoint • Computational domain Object
Object Orientation
Recognise
main objects from
the
numerical
modelling viewpoint
Computational
domain
Object
Time
Tensor
Mesh primitives
Space
Software representation
C++
Class
Time
steps
(database)
(List of)
numbers
+
algebra
Point,
face,
cell
Computational mesh
time
vector, tensor
Point, face, cell
polyMesh

In-Cylinder Flows with OpenFOAM – p.7/31

Object Orientation • Field algebra Object Software representation of values C++ Class Field List Field
Object Orientation • Field algebra Object Software representation of values C++ Class Field List Field
Object Orientation • Field algebra Object Software representation of values C++ Class Field List Field

Object Orientation

• Field algebra Object Software representation of values C++ Class Field List Field Boundary condition
Field
algebra
Object
Software
representation
of values
C++
Class
Field
List
Field
Boundary condition
Values + condition
patchField
Dimensions
dimensionSet
Geometric
field
Field
+
Dimension Set
boundary conditions
geometricField
Field
algebra
+
∗ / tr
(), sin()
, exp() .
field
operators
Matrix and solvers
Object
Linear
equation
matrix
Software representation
Matrix coefficients
Solvers
Iterative
solvers
C++ Class
lduMatrix
lduMatrix::solver

In-Cylinder Flows with OpenFOAM – p.8/31

Object Orientation • Numerics Object Software representation C++ Class Interpolation Differencing schemes
Object Orientation
Numerics
Object
Software
representation
C++ Class
Interpolation
Differencing
schemes
interpolation
Differentiation
ddt,
div,
grad,
curl
fvc,
fec
Discretisation
ddt, d2dt2,
div,
laplacian
fvm, fem,
fam
Implemented
Methods:
Finite Volume,
Finite
Element,
Finite Area and Lagrangian
tracking
Top-level
organisation
Object
Model library
Application
Software
representation
C++
Class
Library
turbulenceModel
main()

In-Cylinder Flows with OpenFOAM – p.9/31

Model Interaction Common interface for related models class turbulenceModel { virtual volTensorField R() const
Model Interaction
Common
interface for related
models
class
turbulenceModel
{
virtual
volTensorField
R()
const
=
0;
virtual
fvVectorMatrix
divR
(
volVectorField&
U
)
const
=
0;
virtual
void
correct()
=
0;
};
class
SpalartAllmaras
:
public
turbulenceModel
{};

In-Cylinder Flows with OpenFOAM – p.10/31

Run-Time Selection

Run-Time Selection
Run-Time Selection
Run-Time Selection
Run-Time Selection
Run-Time Selection

 

Model-to-model

interaction

through

common

           

interfaces

(virtual base classes)

New

components

do not

disturb existing

code

Run-time

selection

tables:

dynamic

binding

Used for every

implementation:

“user-coding”

Convection

differencing

schemes

Gradient calculation

Boundary

conditions

Linear equation

solvers

Physical modelling,

e.g.

evaporation model,

etc.

In-Cylinder Flows with OpenFOAM – p.11/31

Geometry Handling

Geometry Handling
Geometry Handling
Geometry Handling
Geometry Handling
Geometry Handling
   

Complex

geometry, mesh

motion

and

morphing

           

Complex

geometry

is

a

rule,

not

exception

Polyhedral cell

support

Cell

is

a polyhedron

bounded

cell

of all

by polygons types

Consistent

handling

More

freedom

in

mesh

generation

Integrated

mesh

motion

and

topo

changes

Automatic

motion solver + topo

morph

engine

In-Cylinder Flows with OpenFOAM – p.12/31

Layered Development

Layered Development
Layered Development
Layered Development
Layered Development
Layered Development

 

Design

encourages code re-use:

shared

 

tools

       

Code

developed

and tested

in

isolation

Vectors, tensors

and

field

algebra

Mesh

handling,

refinement,

topo changes

Discretisation,

boundary

conditions

Matrices

and

solver

technology

Physics

by

segment

Custom

applications

Ultimate

user-coding

capabilities!

In-Cylinder Flows with OpenFOAM – p.13/31

In-Cylinder Flows Challenges in Simulating In-Cylinder Flows • Robust FVM solver, turbulence and combustion,
In-Cylinder Flows
Challenges
in
Simulating
In-Cylinder
Flows
Robust
FVM
solver, turbulence
and
combustion,
chemistry,
gas properties
etc.
Mesh
handling:
motion
and topo
changes
Lagrangian
particle
tracking
Numerics to
support
wall
film:
Finite Area
Efficiency:
massive
parallelism
with
domain
decomposition
.
.
.
and
then
lots
and
lots
of models!

In-Cylinder Flows with OpenFOAM – p.14/31

Automatic Mesh Motion

Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
   

Handling

Shape Change:

Problem

Specification

           

Initial valid mesh

is

available

Time-varying

boundary

motion

Prescribed

in

advance:

e.g.

IC

engines

Part

of the solution:

surface

tracking

Need

to

determine

internal

point

motion

based on

prescribed boundary

motion

Mesh

in

motion

must

remain valid:

face and

cell

flip

must

be

prevented by

the algorithm

In-Cylinder Flows with OpenFOAM – p.15/31

Automatic Mesh Motion

Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion

Solution

Technique

 

Point position

will be

provided

by solving

an

           

equation

given

boundary motion

conditions

Variants of the

motion

solver

Cell-based

methods fail:

interpolation

Spring

analogy:

unreliable

Vertex-based

(FEM) with

polyhedral

cell

support:

mini-element

technique

Choice

of equation:

Laplace

or

pseudo-solid

In-Cylinder Flows with OpenFOAM – p.16/31

Automatic Mesh Motion

Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
Automatic Mesh Motion
     

Implementation:

Polyhedral

FEM Solver

           

Substantial

code

re-use

Mesh

support,

vectors and tensors

Geometric fields

and

field

algebra

Linear

matrix

support and solvers

Additional

implementation

required

Patch fields

and

matrix

interaction

FE

calculus,

e.g.

gradient

calculation

FE

discretisation:

making

matrices

In-Cylinder Flows with OpenFOAM – p.17/31

Automatic Mesh Motion Automatic Mesh Motion • Easy to set up • Improved robustness •
Automatic Mesh Motion
Automatic
Mesh
Motion
Easy
to set
up
Improved
robustness
Control
over
mesh
quality
and
spacing:
diffusivity
Pseudo-solid
approach
better
but
more
expen-
sive:
component
coupled
vs.
segregated
approach

In-Cylinder Flows with OpenFOAM – p.18/31

Automatic Mesh Motion Free surface tracking • 2 phases = 2 meshes v = −v
Automatic Mesh Motion
Free
surface tracking
2
phases =
2
meshes
v
=
−v F
b
Mesh
adjusted
for
interface
motion
y
v
a
F
F
S
B
S
A
o
x
Free
r
F
surface
y
o
x

In-Cylinder Flows with OpenFOAM – p.19/31

Topological Changes

 
Topological Changes  
Topological Changes  
Topological Changes  
Topological Changes  
Topological Changes  

Supporting

Topological Changes

 

1.

Define

primitive

mesh operations:

                   

Add/modify/remove point/face/cell

2.

Support

primitive

operations

in

mesh

classes

3.

Describe

mesh

modifiers in terms

of

primitive

mesh

operations

4.

Collect

changes from

mesh

modifiers into

topo

change

request

5.

Execute

topo

change,

including

field mapping!

In-Cylinder Flows with OpenFOAM – p.20/31

Topological Changes

Topological Changes
Topological Changes
Topological Changes
Topological Changes
Topological Changes

Topology

Engine

 

 

Topology

engine

= list

of

“mesh

modifiers”

             

Attach/detach

boundary

Layer addition/removal

Sliding interface

Each mesh

modifier

self-contained,

including

triggering condition

Flow

solver

presented

with

valid

mesh

and

mapped

data

+

mesh

motion

info

In-Cylinder Flows with OpenFOAM – p.21/31

Topological Changes Topological • This is the • and bugs on Changes Polyhedral Meshes current
Topological Changes Topological • This is the • and bugs on Changes Polyhedral Meshes current
Topological Changes Topological • This is the • and bugs on Changes Polyhedral Meshes current

Topological Changes

Topological • This is the • and bugs
Topological
This
is
the
and
bugs

on

Changes

Polyhedral

Meshes

This is the • and bugs on Changes Polyhedral Meshes current point Intersecting topo of development

current

point

Intersecting topo

on Changes Polyhedral Meshes current point Intersecting topo of development modifiers, parallelisation support

of development

modifiers,

parallelisation

support

(sliding), unified

solver

In-Cylinder Flows with OpenFOAM – p.22/31

Lagrangian Particles Class Hierarchy • Particle: a point recording its position and location in a
Lagrangian Particles
Class
Hierarchy
Particle:
a
point
recording
its
position
and
location
in
a
mesh
Cloud:
is-a
group
of
particles
with
addition,
removal and
tracking
capabilities
Spray
Parcel
=
Particle
is-a with
properties:
diameter,
population,
temperature
Spray
tracking
is-a
cloud
of
parcels

In-Cylinder Flows with OpenFOAM – p.23/31

Lagrangian Particles Diesel Spray Model • Spray tracking + sub-models: atomisation, breakup, collision,
Lagrangian Particles
Diesel Spray Model
Spray
tracking
+ sub-models:
atomisation,
breakup,
collision,
dispersion,
drag,
evaporation heat
transfer,
wall
interaction
Each class
of
sub-models
answers
to generic
interface
for its
class
spray::evolve():
track
+ update
models
Hierarchical
implementation
with
code
re-use:
object orientation +
generic programming

In-Cylinder Flows with OpenFOAM – p.24/31

Diesel Combustion

 
Diesel Combustion  
Diesel Combustion  
Diesel Combustion  
Diesel Combustion  
Diesel Combustion  
 

Diesel Combustion

   

in

Scania

D-12

Engine

           

1/8

sector

with

75

%

load

and

n-heptane fuel

RANS,

k

ǫ

turbulence

model,

simplified

5-species

chemistry

and

1

reaction,

Chalmers

PaSR combustion

model

Temperature

on

the cutting

plane

Spray

droplets

coloured with

temperature

In-Cylinder Flows with OpenFOAM – p.25/31

Diesel Combustion Diesel Combustion in Scania D-12 Engine
Diesel Combustion
Diesel Combustion
in
Scania
D-12
Engine

In-Cylinder Flows with OpenFOAM – p.26/31

Lagrangian Particles Hour-Glass: same tracking, different particles
Lagrangian Particles
Hour-Glass:
same tracking,
different
particles

In-Cylinder Flows with OpenFOAM – p.27/31

Wall Film Model Finite Area Method (FAM) • Need to solve transport equations on a
Wall Film Model
Finite
Area
Method
(FAM)
Need
to
solve
transport
equations on
a
curved
2-D
surface
in
3-D
Polygonal
mesh
support:
boundary
of
a
polyhedral
mesh
Discretisation
almost
identical
to
3-D
FVM
.
.
.
but with corrections
for
surface
curvature
Implementation
additional code
effort
identical
to the
FEM
solver;
re-use
with
3-D
FVM

In-Cylinder Flows with OpenFOAM – p.28/31

Coupled Simulation Free-Rising Air Bubble with Surfactants Complex coupling problem: FVM flow solver + FEM
Coupled Simulation
Free-Rising Air Bubble
with Surfactants
Complex
coupling
problem:
FVM
flow
solver
+
FEM
automatic mesh
motion +
FAM
for
surfactant transport

In-Cylinder Flows with OpenFOAM – p.29/31

Summary • Object-oriented approach facilitates model implementation: layered design + re-use • Equation
Summary
Object-oriented
approach
facilitates
model
implementation:
layered
design
+
re-use
Equation
mimicking opens
new
CCM
grounds
Extensive
capabilities
already
implemented
Open
design for easy
user
customisation
Acknowledgements and
Further
Info
Željko Tukovi
c,´
University of Zagreb,
Niklas Nordin,
Scania
and
Chalmers Uni
For more info on
OpenFOAM, please visit http://www.openfoam.org
Free
OpenFOAM Workshop
in
Zagreb,
Croatia
26-28/Jan/2006:
http://powerlab.fsb.hr/ped/kturbo/FsbOpenFOAMWorksh
op/

In-Cylinder Flows with OpenFOAM – p.30/31

FOAM: CCM in C++

FOAM: CCM in C++
FOAM: CCM in C++
FOAM: CCM in C++
FOAM: CCM in C++
FOAM: CCM in C++

Main

characteristics

 

Wide area

of applications:

all

of CCM!

             

Shared tools

and

code re-use

Versatility

Unstructured

motion

meshes,

automatic mesh changes

topological

+

Finite

Volume,

Finite

Element,

Lagrangian

tracking

and

Finite Area methods

Efficiency through

massive

parallelism

In-Cylinder Flows with OpenFOAM – p.31/31