CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > FLUENT

the problem of UDF

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

Reply
 
LinkBack Thread Tools Display Modes
Old   April 4, 2006, 07:32
Default the problem of UDF
  #1
zzb
Guest
 
Posts: n/a
I am studying UDF,I have a problem doing a example of UDF hlep,there is not erroe in compiling ,but do not run.How to do with? Error: FLUENT received fatal signal (ACCESS_VIOLATION) 1. Note exact events leading to error. 2. Save case/data under new name. 3. Exit program and restart to continue. 4. Report error to your distributor. Error Object: ()

/************************************************** ********************* UDF for extending post-processing of wall impacts ************************************************** **********************/ #include "udf.h"

#define MIN_IMPACT_VELO -0.1000 /* Minimum particle velocity normal to wall (m/s) to allow Accretion.*/

Domain *domain; /* Get the domain pointer and assign it later to domain*/

enum /* Enumeration of used User-Defined Memory Locations. */ { NUM_OF_HITS, /* Number of particle hits into wall face considered.*/ AVG_DIAMETER, /* Average diameter of particles that hit the wall. */ AVG_RADI_VELO, /* Average radial velocity of "" "" ------------ */ NUM_OF_USED_UDM };

int UDM_checked = 0; /* Availability of UDMLs checked? */

void reset_UDM_s(void); /* Function to follow below. */

int check_for_UDM(void) /* Check for UDMLs' availability... */ { Thread *t;

if (UDM_checked)

return UDM_checked;

if (!rp_axi) Internal_Error("UDF-Error: only valid for 2d-axisymmetric cases!\n");

thread_loop_c(t, domain) /* We require all cell threads to.. */

{ /* provide space in memory for UDML */

if (FLUID_THREAD_P(t))

if (NULLP(THREAD_STORAGE(t,SV_UDM_I)))

return 0;

}

UDM_checked = 1; /* To make the following work properly... */ reset_UDM_s(); /* This line will only be executed once, */ return UDM_checked; /* because check_for_UDM checks... */ } /* ...for UDM_checked first. */

void reset_UDM_s(void) { Thread *t; cell_t c; face_t f; int i;

if (!check_for_UDM()) /* Don't do it, if memory is not available. */

return;

Message("Resetting User Defined Memory...\n");

thread_loop_f(t, domain)

{

if (NNULLP(THREAD_STORAGE(t,SV_UDM_I)))

{

begin_f_loop(f, t)

{

for (i = 0; i < NUM_OF_USED_UDM; i++)

F_UDMI(f, t, i) = 0.;

}

end_f_loop(f, t)

}

else

{

Message(" Skipping FACE thread no. %d..\n", THREAD_ID(t));

}

} thread_loop_c(t, domain)

{

if (NNULLP(THREAD_STORAGE(t,SV_UDM_I)))

{

begin_c_loop(c, t)

{

for (i = 0; i < NUM_OF_USED_UDM; i++)

C_UDMI(c, t, i) = 0.;

}

end_c_loop(c, t)

}

else

{

Message(" Skipping CELL thread no. %d..\n", THREAD_ID(t));

}

} /* Skipping Cell Threads can happen if the user */

/* uses reset_UDM prior to initializing. */ Message(" --- Done.\n"); }

DEFINE_DPM_SCALAR_UPDATE(dpm_scalup, c, t, if_init, p) { if (if_init)

P_USER_REAL(p, 0) = 0; /* Simple initialization. Used later for

* stopping trajectory calculation */ }

DEFINE_DPM_EROSION(dpm_accr, p, t, f, normal, alpha, Vmag, Mdot) { real A[ND_ND], area; int num_in_data; Thread *t0; cell_t c0;

real radi_pos[2], radius, imp_vel[2], vel_ortho;

/* The following is ONLY valid for 2d-axisymmetric calculations!!! */ /* Additional effort is necessary because DPM tracking is done in */ /* THREE dimensions for TWO-dimensional axisymmetric calculations. */

radi_pos[0] = p->state.pos[1]; /* Radial location vector. */ radi_pos[1] = p->state.pos[2]; /* (Y and Z in 0 and 1...) */

radius = NV_MAG(radi_pos); NV_VS(radi_pos, =, radi_pos, /, radius);

/* Normalized radius direction vector.*/ imp_vel[0] = P_VEL(p)[0]; /* Axial particle velocity component. */ imp_vel[1] = NVD_DOT(radi_pos, P_VEL(p)[1], P_VEL(p)[2], 0.); /* Dot product of normalized radius vector and y & z components */ /* of particle velocity vector gives _radial_ particle velocity */ /* component */ vel_ortho = NV_DOT(imp_vel, normal); /*velocity orthogonal to wall */

if (vel_ortho < MIN_IMPACT_VELO) /* See above, MIN_IMPACT_VELO */

return;

if (!UDM_checked) /* We will need some UDM's, */

if (!check_for_UDM()) /* so check for their availability.. */

return; /* (Using int variable for speed, could */

/* even just call check_for UDFM().) */ c0 = F_C0(f, t); t0 = THREAD_T0(f, t);

num_in_data = F_UDMI(f, t, NUM_OF_HITS);

/* Add particle to statistics: Calculate...: current_particle_property + earlier_particles_averaged_property * number_of_earlier_particles -----------------------------------------------------------------

number_of_earlier_particles + 1 */

/* Average diameter of particles that hit the particular wall face:*/ F_UDMI(f, t, AVG_DIAMETER) = (P_DIAM(p)

+ num_in_data * F_UDMI(f, t, AVG_DIAMETER))

/ (num_in_data + 1); C_UDMI(c0,t0,AVG_DIAMETER) = F_UDMI(f, t, AVG_DIAMETER);

/* Average velocity normal to wall of particles hitting the wall:*/ F_UDMI(f, t, AVG_RADI_VELO) = (vel_ortho

+ num_in_data * F_UDMI(f, t, AVG_RADI_VELO))

/ (num_in_data + 1); C_UDMI(c0,t0,AVG_RADI_VELO) = F_UDMI(f, t, AVG_RADI_VELO);

F_UDMI(f, t, NUM_OF_HITS) = num_in_data + 1; C_UDMI(c0,t0,NUM_OF_HITS) = num_in_data + 1;

F_AREA(A, f, t); area = NV_MAG(A); F_STORAGE_R(f,t,SV_DPMS_ACCRETION) += Mdot / area;

/* copied from source. */

P_USER_REAL(p, 0) = 1.; /* "Evaporate" */ }

DEFINE_DPM_LAW(stop_dpm_law, p, if_cpld) { if (0. < P_USER_REAL(p, 0))

P_MASS(p) = 0.; /* "Evaporate" */ }

DEFINE_ON_DEMAND(reset_UDM) { /* assign domain pointer with global domain */ domain = Get_Domain(1); reset_UDM_s(); }

  Reply With Quote

Old   April 4, 2006, 10:21
Default Re: the problem of UDF
  #2
Lobby.H
Guest
 
Posts: n/a
i don't fully understand your code but i've seen somewhere else that if this error occurs, just double check your udf defining. A example he can take is if there's solid in your b.c., when you define velocity or some other parameter with define_init, this will happen.
  Reply With Quote

Old   April 5, 2006, 05:36
Default Re: the problem of UDF
  #3
RoM
Guest
 
Posts: n/a
Please look here for a short description how to post preformated code. Most people wont have the time to reformate the mess you posted above, let alone debugging.

http://www.cfd-online.com/Forum/fluent.cgi?file=help

Some observations from me:

Dont use the domain pointer as global variable. If someone forgets to call the reset_udm function, it will remain uninitialized. You use particle scalars in your udf, did you allocate any (its easy to forget)?

RoM
  Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
ATTN ALL: SOLUTON TO UDF COMPILE PROBLEM Rizwan Fluent UDF and Scheme Programming 32 May 8, 2015 06:05
Problem with my udf july Fluent UDF and Scheme Programming 3 June 20, 2010 06:56
UDF problem mansha goraya FLUENT 0 October 29, 2007 01:31
udf compiling problem akr FLUENT 3 August 22, 2007 07:14
UDF problem chiseung FLUENT 4 January 10, 2002 10:58


All times are GMT -4. The time now is 20:40.