FLUENT 6 - User Defined Function to compute the integral of a variable along a line


Line surfaces in FLUENT have area in 2d and 2d-axi but not in 3d, so currently integrals on line surfaces are zero.

This solution provides a sample User Defined Function (UDF) that shows how to calculate the integral of a variable (say temperature) along a line in fluent, then divide it by the length of the line, and output this number at every time step, for a large number of lines in a transient 3d simulation.

sample UDF code to work with for line integration: you will need to augment it to use it with multiple lines, etc

/* UDF to calculate line integral and line lenght weighted average of a variable.
by sra and fm 5/05

To have line integral and line average of variable V on a line S u need to
Go to Contour panel and do compute of V on S
This will fill the values necessary for computation. */

#include "udf.h"
#include "surf.h"
#include "cxsurf.h"
#include "cxiface.h"

#define SID 14


DEFINE_ON_DEMAND(line_integrals)
{
Surface *s;
int i, j, k, index;
float v[2][3];
float face_val, line_int, line_ave, curve_length, tot_length;

/* s is the surface having data of surface id SID
s->np no of points.
s->nf no of faces.
s->points points to array of np points.
s->ip pointer to interpolation vector of np points.
s->facets facet list of the surface. length of array is nfl.
s->cells pointer to cells of each point.
s->nfl facet list length.
*/
s = SurfaceList+SID;

tot_length = 0.;
line_int = 0.;

for (i = 0, k = 0; k < s->np; i +=s->facets[i]+1, k++)
{
if (s->facets[i] != 2) continue; /* makes sure only line is there */
/*facet value for line surfaces will be the cell value in
which the facet lies*/
face_val = SV_Cell_Field(SVFIELD_CURRENT, s->cells+k);
for (j = 0; j < s->facets[i]; j++)
{
index = s->facets[i+j+1];
/* sets point coord x y z*/
SET_POINT_COORD(v[j][0], s->points[index], X_DIM);
SET_POINT_COORD(v[j][1], s->points[index], Y_DIM);
SET_POINT_COORD(v[j][2], s->points[index], Z_DIM);
}
/* Length calculation */
curve_length = sqrt(SQR(v[0][0]-v[1][0])+SQR(v[0][1]-v[1][1])+SQR(v[0][2]-v[1][2]));
tot_length += curve_length;
line_int += curve_length * face_val;
}

line_ave = line_int/tot_length;
Message("Line integral of currently displayed variable on line of ID %d : %6fn", SID, line_int);
Message("Line length average of currently displayed variable on line of ID %d : %6fn", SID, line_ave);
}





Show Form
No comments yet. Be the first to add a comment!