# A fatal signal (segmentation violation)

 Register Blogs Members List Search Today's Posts Mark Forums Read

 February 18, 2011, 09:17 A fatal signal (segmentation violation) #1 New Member   sutthinan Join Date: Feb 2011 Posts: 9 Rep Power: 15 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 seucj likes this.

 February 18, 2011, 10:07 #2 Senior Member   Join Date: Nov 2009 Posts: 411 Rep Power: 19 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

 February 18, 2011, 17:57 #3 New Member   sutthinan Join Date: Feb 2011 Posts: 9 Rep Power: 15 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

 February 18, 2011, 19:45 #4 Senior Member   Join Date: Nov 2009 Posts: 411 Rep Power: 19 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];

 February 19, 2011, 01:57 #5 New Member   sutthinan Join Date: Feb 2011 Posts: 9 Rep Power: 15 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)

 February 19, 2011, 10:23 #6 Senior Member   Join Date: Nov 2009 Posts: 411 Rep Power: 19 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

March 16, 2011, 18:35
#7
New Member

Chun-Liang Wu
Join Date: May 2010
Posts: 2
Rep Power: 0
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 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