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/)
-   -   error: FLUENT received fatal signal (ACCESS_VIOLATION) (https://www.cfd-online.com/Forums/fluent-udf/166778-error-fluent-received-fatal-signal-access_violation.html)

ehsan105 February 16, 2016 09:45

error: FLUENT received fatal signal (ACCESS_VIOLATION)
 
when I want hooking (UDF DEFINE_ON_DEMAND(reset_UDM)) in Execute on Demand menu,This error occurs.

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: ()

I want to use DEFINE_EROSION, Which includes the above UDF
plz guid me

Bruno Machado February 16, 2016 09:52

Quote:

Originally Posted by ehsan105 (Post 585448)
when I want hooking (UDF DEFINE_ON_DEMAND(reset_UDM)) in Execute on Demand menu,This error occurs.

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: ()

I want to use DEFINE_EROSION, Which includes the above UDF
plz guid me

Usually ACCESS VIOLATION means you are trying to access some information that is not available yet. If you post your UDF we can have a look and help you accordingly.

ehsan105 February 16, 2016 16:53

Quote:

Originally Posted by Bruno Machado (Post 585449)
Usually ACCESS VIOLATION means you are trying to access some information that is not available yet. If you post your UDF we can have a look and help you accordingly.

TANKS FOR REPLY
#include "udf.h"

#define MIN_IMPACT_VELO -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 be executed only 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 UDMs, */
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(t);

num_in_data = F_UDMI(f,t,NUM_OF_HITS);

/* 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();
}

Bruno Machado February 17, 2016 06:08

Quote:

Originally Posted by ehsan105 (Post 585563)
TANKS FOR REPLY
#include "udf.h"

#define MIN_IMPACT_VELO -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 be executed only 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 UDMs, */
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(t);

num_in_data = F_UDMI(f,t,NUM_OF_HITS);

/* 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();
}

In each part of the code are you getting this error? You can add a message in parts of the code to help you track the missing information.

Message("Doing XXXXX\n");
Message("Checking YYYYY\n");
Message("Reading ZZZZZZ ...\n");

When you run the code, it will print this information in the order you put it and you can check where it is stoping.

ehsan105 April 4, 2016 16:37

Thank you so much
 
Quote:

Originally Posted by Bruno Machado (Post 585644)
In each part of the code are you getting this error? You can add a message in parts of the code to help you track the missing information.

Message("Doing XXXXX\n");
Message("Checking YYYYY\n");
Message("Reading ZZZZZZ ...\n");

When you run the code, it will print this information in the order you put it and you can check where it is stoping.


When using of uds in particle track panel This error occurs:

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: ()
This error occurs

And I can not find a way to solve it.. plz guide me

`e` April 4, 2016 17:52

Quote:

Originally Posted by ehsan105 (Post 593366)
When using of uds in particle track panel This error occurs:

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: ()
This error occurs

And I can not find a way to solve it.. plz guide me

You need to first allocate an appropriate number of user-defined scalars for the particles in the DPM dialog box (their code uses one UDS for example).

ehsan105 April 6, 2016 19:20

thank for reply
 
Quote:

Originally Posted by `e` (Post 593386)
You need to first allocate an appropriate number of user-defined scalars for the particles in the DPM dialog box (their code uses one UDS for example).

I did this, This means that in scaler menu define one scalar and in memory's menu define 10 udm.
and in material's menu I made the necessary adjustments.

But faced with the same error...
plz guide me

ehsan105 April 6, 2016 19:30

Photos of my work
 
http://s6.picofile.com/file/8246177868/1111.JPG
------------------
http://s6.picofile.com/file/8246177884/111111.JPG
------------------
http://s6.picofile.com/file/8246178176/2.JPG

ehsan105 April 6, 2016 20:02

After this process was error
http://s7.picofile.com/file/8246179476/code1.JPG
-------------------
http://s7.picofile.com/file/8246179484/code2.JPG
-------------------
http://s6.picofile.com/file/8246179684/code4.JPG
-------------------
http://s7.picofile.com/file/8246179726/code5.JPG

`e` April 15, 2016 06:03

Quote:

Originally Posted by ehsan105 (Post 593760)
I did this, This means that in scaler menu define one scalar and in memory's menu define 10 udm.
and in material's menu I made the necessary adjustments.

But faced with the same error...
plz guide me

From your images, you've created one user-defined scalar (what is this UDS used for?) with a boundary condition. You've also created one storage location (user variable) for the particles (DPM); this allocation is required for P_USER_REAL(p,0).

However, your user-defined function also employs three user-defined memory locations (with C_UDMI and similar macros). These locations need to be allocated via Define > User-Defined > Memory...


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