|
[Sponsors] |
April 4, 2006, 08:32 |
the problem of UDF
|
#1 |
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(); } |
|
April 4, 2006, 11:21 |
Re: the problem of UDF
|
#2 |
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.
|
|
April 5, 2006, 06:36 |
Re: the problem of UDF
|
#3 |
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 |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
ATTN ALL: SOLUTON TO UDF COMPILE PROBLEM | Rizwan | Fluent UDF and Scheme Programming | 40 | March 18, 2018 07:05 |
Problem with my udf | july | Fluent UDF and Scheme Programming | 3 | June 20, 2010 07:56 |
UDF problem | mansha goraya | FLUENT | 0 | October 29, 2007 01:31 |
udf compiling problem | akr | FLUENT | 3 | August 22, 2007 08:14 |
UDF problem | chiseung | FLUENT | 4 | January 10, 2002 10:58 |