CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   Fluent UDF and Scheme Programming (https://www.cfd-online.com/Forums/fluent-udf/)
-   -   A fatal signal (segmentation violation) (https://www.cfd-online.com/Forums/fluent-udf/85161-fatal-signal-segmentation-violation.html)

sutthinan February 18, 2011 09:17

A fatal signal (segmentation violation)
 
Hi everyone,

I need to control the geometry of boundary in function of pressure in fluent by using the UDF in deform function, but fluent show massage that "A fatal signal (segmentation violation)", I really don't know about this error, this is my UDF

#include "udf.h"
DEFINE_GEOM(deform, domain, dt, position)
{
Thread *t;
face_t f;
real x[ND_ND];
real NV_VEC (A);
real ho=0.000001, hc, def;
real presur[1000],xx[1000];
int max;
int i,j;
if (!Data_Valid_P ())
return;
i=0.;
begin_f_loop (f, t)
{
F_CENTROID(x,f,t);
xx[i]=x[0];
presur[i]=F_P(f, t);
i=i+1;
max=i;
}
end_f_loop (f, t)
i=0.;
j=0.;
begin_f_loop (f, t)
{
for(i = 0; i < max;i++)
{
def=(xx[j+1]-xx[j])*presur[j]*ln(fabs((xx[i+1]+xx[i])/2.-xx[j]*fabs((xx[i-1]+xx[i])/2.-xx[j]));
}
hc=def/(2.*3.14);
position[1]=ho+xx[j]*xx[j]/2.+hc;
j=j+1;
}
end_f_loop (f, t)
return position[1];
}



Many thanks

DoHander February 18, 2011 10:07

Probably your vectors are smaller than the total number of faces from your mesh. Do a grid->check to see how many faces do you have and let me know.

Do

sutthinan February 18, 2011 17:57

Hi Dohander,

My gird has the data as following;
Level Cells Faces Nodes Partitions
0 64902 98278 33377 1
1 cell zone, 6 face zones.


Thanks you so much for your suggestion.

Sutthinan

DoHander February 18, 2011 19:45

OK,
Check if the total numbers of faces (not zones) is less than 1000. I think this is why you have the memory error, specifically here:

real presur[1000],xx[1000];

sutthinan February 19, 2011 01:57

Thank you for your advices, and I wonder that if I need to use the presure for calculating. Does which one appropriate between C_P(c,t) and F_P(f, t) ? (because both of them, I can get the same pressure)

:confused:

DoHander February 19, 2011 10:23

One is for the pressure at the center of a cell and one for the pressure at a face of a cell.
Try changing this line:

real presur[1000],xx[1000];

to

real presur[98280],xx[98280];

It should get rid of the memory violation error, at least I hope so.

Do

richardwu March 16, 2011 18:35

what is the face thread t in the face loop? The pointer t is not initialized or assigned a valid value, which absolutely returns you a "segmentation fault" error.


Quote:

Originally Posted by sutthinan (Post 295937)
Hi everyone,

I need to control the geometry of boundary in function of pressure in fluent by using the UDF in deform function, but fluent show massage that "A fatal signal (segmentation violation)", I really don't know about this error, this is my UDF

#include "udf.h"
DEFINE_GEOM(deform, domain, dt, position)
{
Thread *t;
face_t f;
real x[ND_ND];
real NV_VEC (A);
real ho=0.000001, hc, def;
real presur[1000],xx[1000];
int max;
int i,j;
if (!Data_Valid_P ())
return;
i=0.;
begin_f_loop (f, t)
{
F_CENTROID(x,f,t);
xx[i]=x[0];
presur[i]=F_P(f, t);
i=i+1;
max=i;
}
end_f_loop (f, t)
i=0.;
j=0.;
begin_f_loop (f, t)
{
for(i = 0; i < max;i++)
{
def=(xx[j+1]-xx[j])*presur[j]*ln(fabs((xx[i+1]+xx[i])/2.-xx[j]*fabs((xx[i-1]+xx[i])/2.-xx[j]));
}
hc=def/(2.*3.14);
position[1]=ho+xx[j]*xx[j]/2.+hc;
j=j+1;
}
end_f_loop (f, t)
return position[1];
}



Many thanks



All times are GMT -4. The time now is 13:45.