Advanced FLUENT User-Defined Functions
Advanced FLUENT User-Defined Functions
C Programming (1)
Basic syntax rules:
each statement must be terminated with a semicolon ;
comments can be inserted anywhere between /* and */
variables must be explicitly declared (unlike in FORTRAN)
compound statements must be enclosed by braces { }
Chapter 1
functions have the following format:
return-value-type function-name (parameter-list)
Introduction and { function body }
FLUENT Data Structure Macros are defined in the header files, they can be used just like functions
Built-in data types: int, float, double, enum, boolean:
int niter, a; /* declaring ‘niter’ and ‘a’ as integers */
Advanced FLUENT float dx[10]; /* ‘dx’ is a real array with 10 members, the
User-Defined Functions array index always starts from dx[0] */
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009
© 2006 ANSYS,
ANSYS, Inc.AllAll
Inc. rightsreserved.
rights reserved. 1-1 © Fluent Inc. 11/16/2010
Inventory
ANSYS, #002686
Inc. Proprietary © 2009 ANSYS, Inc. All rights reserved. 1-4 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-2 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-5 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-3 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-6 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
Basic control structures For Loops: • Domain is the set of connectivity and hierarchy info for the entire
for ( k=0; k < NUM; k++ ) data structure in a given problem for single phase flows. It includes:
if ( … ) <statement>; all fluid zones (‘fluid threads’)
all solid zones (‘solid threads’)
<statement>; all boundary zones (‘boundary threads’)
While Loops:
• Cell: Cell is the computational unit, conservation equations are
if ( …) while ( … ) solved over each cell
<statement>; <statement>; • Face: direction is in the outward normal
else • Threads: represent the collection of cells or faces; a Thread
represents a fluid or solid or boundary zone
<statement>;
Conditional Operator (? : ) • multiphase simulations (singlephase simulations use single domain
( condition ? operand a : operand b ) only)
if ( …) Each phase has its own “Domain-structure”
<statement>; false Geometric and common property information are shared among ‘sub-
example: domains’
else if ( … ) real At = (rp_axi ? At*2*M_PI : At ); Multiphase UDF will be discussed later
<statement>;
true
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-7 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-10 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
• We (as CFD programmers in FLUENT) want to know how FLUENT • A Thread is a sub-set of the Domain structure
organizes data so that we know: • Individual ‘fluid’, ‘solid’ and each ‘boundary’ zones are
How to access mesh information for a particular cell zone or a face zone identified as ‘zones’ and their datatype is Thread
Cell centroids, cell volumes, the neighbors, etc.
Face centroids, face areas, face normal directions (vectors), etc.
• ‘Zone’ and ‘Thread’ terms are often used interchangeably
How to access field data for cells (and faces): pressure, velocity, density, etc. • Some further details about Zone/Thread ID and Thread-
How to efficiently loop through these cells or faces in the codes datatype:
• How to supply customized source terms, boundary conditions, and fluid Zones are identified at mesh level with an integer ID in the
properties, etc., to the solver Define/Boundary Condition panel
• How to modify the behaviors or specific model parameters for various Threads, a Fluent-specific datatype, store structured information
physical models as in turbulence, reactions kinetics, multiphase, and about the mesh, connectivity, models, property, etc. all in one place
dynamic mesh, etc. Users identify zones through the ID’s
• How to implement user’s own governing equations in the finite-volume Zone/Thread-ID and Threads are correlated through UDF
macro’s
framework of FLUENT solver
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-8 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-11 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
• Control volumes of fluid and solid zones are also called ‘cells’ in
face FLUENT
Domain The data structure for the cell zones is typed as ‘cell_t’ (the cell
cell cell thread index)
The data structure for the cell faces is typed as ‘face_t’ (the face
Domain Thread thread index)
• A fluid or solid zone is called a cell zone, which can be accessed by
using cell threads
Cell Cell
• Boundary or internal faces can be accessed by using face threads
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-9 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-12 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
ensemble are listed as boundary face-threads with the • F_CENTROID(x, f, t) x, y, z-coords of centroid
Nodes
fluid & solid cell-threads under Define- • F_AREA(A, f, t) vector of a
• NV_MAG(A) Area-magnitude
Boundary_Condition panel Location of cell variables
• C_VOLUME(c, t) Volume of a C_CENTROID(X,c,t); X: X[3]
Those faces which are inside the flow-domain and do not • C_VOLUME_2D(c, t) Volume of a 2D C_NNODES(c,t) = 8
share any external boundary are not accessible from GUI (Depth is 1m in 2D; 2*π m in axi-symmetric solver )C_NFACES(c,t) = 6
F_NNODES(f,t) = 4 each
• NODE_X(nn) x-coord; nn is a node pointer
(because you do not need them)
• NODE_Y(nn) x-coord;
They can still be accessed from User-Defined-Functions • NODE_Z(nn) x-coord;
Many more are available. See the FLUENT UDF Manual
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-13 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-16 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-14 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-17 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
Fluent UDF Data Structure Summary (2) Macros for Cell Variables (2)
• More cell variables
• Each thread (zone) has a unique integer ID
available in the boundary condition panel (or can • C_DUDX(c,t)
be listed by the list-zone TUI command: • C_DUDY(c,t)
/grid/modify-zones/list-zones) • C_DUDZ(c,t)
• C_DVDX(c,t)
• Given a correct ID, the Lookup_Thread macro
• C_DVDY(c,t) Velocity derivatives
can retrieve the thread pointer • C_DVDZ(c,t)
int ID=7; • C_DWDX(c,t)
Thread *tf=Lookup_Thread(domain, ID); • C_DWDY(c,t)
• Conversely, given a thread pointer tf, the zone ID • C_DWDZ(c,t)
can be retrieved • C_MU_L(c,t) Laminar viscosity
• C_MU_T(c,t) Turbulent viscosity
ID=THREAD_ID(tf);
• C_MU_EFF(c,t)
• Once we have the correct pointer (for a specific • C_DP(c,t)[i] Pressure derivatives
zone), we can access the members belonging to • C_D_DENSITY(c,t)[i] Density derivatives
the zone without any problem. Thread pointer
provides the leading address of the thread (zone)
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-15 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-18 Inventory #002686
Introduction to UDF and FLUENT Data Structure Introduction to UDF and FLUENT Data Structure
ANSYS, Inc. Proprietary April 30, 2009 ANSYS, Inc. Proprietary April 30, 2009
© 2009 ANSYS, Inc. All rights reserved. 1-19 Inventory #002686 © 2009 ANSYS, Inc. All rights reserved. 1-22 Inventory #002686