|
[Sponsors] |
October 15, 2001, 12:57 |
Loop over the faces of a cell in UDF
|
#1 |
Guest
Posts: n/a
|
Hi everybody,
Does someone know how to do a loop over the faces of a cell in an UDF ? or what is the macro to name the face of a given cell ? I have found the instruction "C_FACE(cell,thread,i)" where I suppose that "i" corresponds to face number i of the cell. Therefore, I tried a thing like : for (i=0;i less C_NFACES(cell,thread);i++) { f0=C_FACE(cell,thread,i); ... } (I write "less" otherwise errors occurs in the text, but in the C source, I obviously used the sign, thus don't mind about that, the problem is not here!!) but it doesn't seem to work. Any help would be really appreciated. Thanks in advance Anthony |
|
October 15, 2001, 16:06 |
Re: Loop over the faces of a cell in UDF
|
#2 |
Guest
Posts: n/a
|
The integer variables C_NNODES and C_NFACES return the number of nodes or faces, respectively, for a given cell. The integer variable F_NNODES returns the number of nodes associated with a face.
So this is not the appropriate macro for looping over faces in a cell. Use : begin_f_loop(f,t) end_f_loop(f,t) ---> which loops over faces in a face thread. |
|
October 16, 2001, 04:04 |
Re: Loop over the faces of a cell in UDF
|
#3 |
Guest
Posts: n/a
|
Hi Ravi,
Thank you for your contribution. Unfortunetaly, your answer does not correspond to what I would like to do. I know very well the command : begin_f_loop(f,t) end_f_loop(f,t), which as you mentioned as well, is useful for a loop over faces in a FACE THREAD. But I am concerned with loop over faces of a CELL, not of a thread : this is completely different. I have been using "begin_f_loop(f,t) end_f_loop(f,t)" efficiently for a long time in simpler situations, when I would like to do a loop over faces of a face thread. If you have any other suggestion concerning how to write a "LOOP OVER FACES OF A CELL", thank you in advance Anthony |
|
October 16, 2001, 06:58 |
Re: Loop over the faces of a cell in UDF
|
#4 |
Guest
Posts: n/a
|
Ok here's how to do it:
int numbf; cell_t cf; Thread *tf,*f_thread; face_t face; /* cf,tf is cell & cell thread */ c_face_loop(cf,tf,numbf) { face = C_FACE(cf,tf,numbf); f_thread = C_FACE_THREAD(cf,tf,numbf); /* do what you like with face numbf with face & f_thread */ /* -- eg temp = F_T(face,thread); */ } Greg |
|
October 16, 2001, 11:55 |
Re: Loop over the faces of a cell in UDF
|
#5 |
Guest
Posts: n/a
|
Thanks Greg !!
Anthony |
|
September 20, 2015, 08:22 |
|
#6 | |
Member
Eduardo Tola
Join Date: Aug 2015
Location: Madrid/Haifa
Posts: 50
Rep Power: 11 |
Quote:
However, I am struggling to implement the code written here. I am trying to implement a code able to calculate the mass flow in different planes created by the user, not boundaries. My idea is integrate through a volumen and then divide for the width of the volumen. The code is created in a way that if the cell is located in the section then a loop through all the faces wants to be done. Because the mass flow importance for this problem is only the one in the direction Z, I calculate the normal vector of the face an multiply the Z component by the mass flow, for each face. I am having problems because I need to initialize two times the variables, for the first bucle and for the second bucle. I would really appreciate to get some help in this problem. Attached can be found the code. Code:
#include "udf.h" #include <math.h> #define Num_div 5 DEFINE_ADJUST(GetMassFlow,d) { face_t f; Thread *t; cell_t c; int n=0; int max_div=0; int numbf; real division=0; // Width of the division real kk0=0; // Minimum variable for each Division real kk1=0; // Maximum variable for each Division real x[ND_ND]; real NormalVector[ND_ND]; real Area; real SUMflow=0.; division=0.09/Num_div; // Calculating the division max_div=Num_div+1; for (n = 1; n < max_div; ++n) { ///////////////////////////////////////////////////////////////////////////// kk0=(n-1)*division+0.01; // Minimum variable for each Division kk1=n*division+0.01; // Maximum variable for each Division SUMflow=0; thread_loop_c(t, d) // Variable that stores the SUM of Mass Flow is initialized to zero { C_CENTROID(x,c,t); if ((x[2]<kk1) && (x[2]>kk0)) // All the parcels are organized in different sections { // L O O P - O V E R - A L L - T H E - F A C E S - O F - A - C E L L ///////////////////////////////////////////////////////////////////////////////////////////////////// cell_t cf; Thread *tf,*f_thread; face_t face; /* cf,tf is cell & cell thread */ F_AREA(NormalVector,face,tf); Area= sqrt(NormalVector[0]*NormalVector[0]+NormalVector[1]*NormalVector[1]+NormalVector[2]*NormalVector[2]); NormalVector[0]=NormalVector[0]/(Area); c_face_loop(cf,tf,numbf) { face = C_FACE(cf,tf,numbf); f_thread = C_FACE_THREAD(cf,tf,numbf); /* do what you like with face numbf with face & f_thread */ /* -- eg temp = F_T(face,thread); */ SUMflow+=F_FLUX(face,f_thread)*NormalVector[2]; } /////////////////////////////////////////////////////////////////////////////////////////////////////// // L O O P - O V E R - A L L - T H E - F A C E S - O F - A - C E L L } } Message ("%f\t",SUMflow/division); } Message ("\n"); } } Thank you very much
__________________
Having fun with CFD =) |
||
April 2, 2024, 11:10 |
|
#7 |
New Member
Diogo Martinho
Join Date: Sep 2022
Posts: 7
Rep Power: 4 |
Hey,
I think I will need to implement something as the code you wrote. What I dont get is the meaning of the numbf, how does it change and where does it come from to work as an input. Kind regards, Diogo |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
decomposePar -allRegions | stru | OpenFOAM Pre-Processing | 2 | August 25, 2015 04:58 |
foam-extend_3.1 decompose and pyfoam warning | shipman | OpenFOAM | 3 | July 24, 2014 09:14 |
Cluster ID's not contiguous in compute-nodes domain. ??? | Shogan | FLUENT | 1 | May 28, 2014 16:03 |
Journal file error | magicalmarshmallow | FLUENT | 3 | April 4, 2014 13:25 |
[snappyHexMesh] external flow with snappyHexMesh | chelvistero | OpenFOAM Meshing & Mesh Conversion | 11 | January 15, 2010 20:43 |