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

DEFINE_ADJUST Problem

Register Blogs Community New Posts Updated Threads Search

Like Tree2Likes
  • 2 Post By Bogdan

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   February 16, 2007, 02:06
Default DEFINE_ADJUST Problem
  #1
Davis Yohanes Arifin
Guest
 
Posts: n/a
I encountered a problem when I try to run a DEFINE_ADJUST function. This function is used to store the first gradient of velocities in UDS so that, in the next function, I can used these values to calculate the second gradient of velocities. My code is simple as the following.

DEFINE_ADJUST(adjust_grad2,domain) {

Thread *t;

cell_t c;

domain = Get_Domain(domain_ID);

/* Fill UDS with the variable */

thread_loop_c (t,domain)

{

begin_c_loop (c,t)

{

C_UDSI(c,t,0) = C_DUDX(c,t);

C_UDSI(c,t,1) = C_DVDY(c,t);

C_UDSI(c,t,2) = C_DWDZ(c,t);

}

end_c_loop (c,t)

}

}

I successfully compile and load the library. But,when I try to run it via iteration, the following error occurs. The bad thing is that it does not specify what error should be fixed. Could anyone provide any help on this? Thanks.

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: ()
  Reply With Quote

Old   February 16, 2007, 06:26
Default Re: DEFINE_ADJUST Problem
  #2
Rizwan
Guest
 
Posts: n/a
I think (not 100% sure) u surely need to use udmi to store the variables. so that u can use them at a later stage. the problem is due to the fact that, solver contuosly removes gradients at each iteration or timestep to free up memory. make sure u have allocated memory to store ur UDS in first place. the help file mentions a lot about memory when using UDS.
  Reply With Quote

Old   February 16, 2007, 15:56
Default Re: DEFINE_ADJUST Problem
  #3
Bogdan
Guest
 
Posts: n/a
remove the line domain=Get_Domain(domain_ID). The domain is already available to your function (via define_adjust argument).
  Reply With Quote

Old   February 19, 2007, 04:36
Default Re: DEFINE_ADJUST Problem
  #4
Davis
Guest
 
Posts: n/a
How to make sure that I have allocated memory for UDS? Is it by utilizing Reserve_User_Scalar_Vars? By the way, does somebody know actually what the main difference between user defined scalar (UDS) and user defined memory?
  Reply With Quote

Old   February 19, 2007, 09:51
Default Re: DEFINE_ADJUST Problem
  #5
Bogdan
Guest
 
Posts: n/a
when you use an user defined scalar actually you solve an equation like equation 11.2.1 in the UDF user manual. a user define memory is a variable where you store some intermediate values needed further in your calculations.

You get the segmentation fault error because when you launch FLUENT and read your data and case file, there is no gradient available so you will get the error. What you can do is either make 1 or 2 iterations without hooking your functions, then hook your functions, or use the following statement in your DEFINE_ADJUST function

Alloc_Storage_Vars(domain, SV_U_G,SV_NULL)

then at the end of your function:

Free_Storage_Vars(domain,SV_U_G,SV_NULL)

The problem with these two instructions is that they just allocate memory but actually not computing the gradient for the first one or two iterations (You can check this by putting a Message macro). Hope this help you.
  Reply With Quote

Old   February 20, 2007, 23:12
Default Re: DEFINE_ADJUST Problem
  #6
Davis Yohanes Arifin
Guest
 
Posts: n/a
It works now. Thanks. However, I have another question.

I would like to have the second gradient of velocity so that I make use UDS as follows.

thread_loop_c (t,domain) { begin_c_loop (c,t) { C_UDSI(c,t,0) = C_U_G(c,t)[0]; C_UDSI(c,t,1) = C_V_G(c,t)[1]; C_UDSI(c,t,2) = C_W_G(c,t)[2]; } end_c_loop (c,t) }

}

double grad2_u = NV_MAG(C_UDSI_G(c,t,0)); double grad2_v = NV_MAG(C_UDSI_G(c,t,1)); double grad2_w = NV_MAG(C_UDSI_G(c,t,2));

But, I am not sure what C_UDSI_G returns. It indeed a gradient; but, in which direction? What I need is d2u/dx2, d2v/dy2, and d2w/dz2. Could please provide advice on this?
  Reply With Quote

Old   February 21, 2007, 01:37
Default Re: DEFINE_ADJUST Problem
  #7
Bogdan
Guest
 
Posts: n/a
C_UDSI_G returns a vector which components are the x, y and z directions, so:

d2u/dx2 is C_UDSI_G(c,t,0)[0], d2v/dy2 is C_UDSI_G(c,t,1)[1] and d2w/dx2 is C_UDSI_G(c,t,2)[2]
sunjian and Hesam_Ami like this.
  Reply With Quote

Old   February 21, 2007, 10:58
Default Re: DEFINE_ADJUST Problem
  #8
Davis Yohanes Arifin
Guest
 
Posts: n/a
Thank you. Now my udf works perfectly fine.
  Reply With Quote

Old   December 23, 2009, 03:34
Default
  #9
New Member
 
emma
Join Date: Dec 2009
Posts: 4
Rep Power: 16
Emma66 is on a distinguished road
I compute fourth order derivative with UDS through Gauss's divergence theorem.

We can obtain second order derivative of Φ through integrating Laplacian of Φ at cell c0.
For computing fourth order derivative, the idea is that using Gauss's divergence theorem again and let the second order derivative to be the UDS.

I directly use c_face_loop to present second order derivative first.
c_face_loop(c,t,n)
{
F_AREA(A,C_FACE(c,t,n), C_FACE_THREAD(c,t,n));
At = NV_MAG(A);
Aterm = At/C_VOLUME(c,t);
NV_DS(Grad2, +=, C_UDSI_G(c,t,GRAD_1)[0], C_UDSI_G(c,t,GRAD_1)[1], C_UDSI_G(c,t,GRAD_1)[2],*,Aterm);
}
For computing fourth order derivative, I use magnitude of second order gradient to define a UDS.
C_UDSI(c,t,GRAD_1) =NV_MAG(Grad2)

The fourth gradient is then be,
c_face_loop(c,t,n)
{
F_AREA(A,C_FACE(c,t,n), C_FACE_THREAD(c,t,n));
At = NV_MAG(A);
Aterm = At/C_VOLUME(c,t);
NV_DS(Grad4, +=, C_UDSI_G(c,t,GRAD_1)[0], C_UDSI_G(c,t,GRAD_1)[1], C_UDSI_G(c,t,GRAD_1)[2],*,Aterm);
}

I was wondering if this is correct to slove it.

i was confusing that seconder order gradient is a vector here, and not like the original Φ, which is a scalar.


how to solve this problem?

Could anybody provide any helps? Thanks

Last edited by Emma66; December 24, 2009 at 09:35.
Emma66 is offline   Reply With Quote

Old   December 24, 2009, 09:37
Default
  #10
New Member
 
emma
Join Date: Dec 2009
Posts: 4
Rep Power: 16
Emma66 is on a distinguished road
Has anyone done the similar or been familar with this problem?
Emma66 is offline   Reply With Quote

Old   December 28, 2009, 22:07
Default
  #11
New Member
 
emma
Join Date: Dec 2009
Posts: 4
Rep Power: 16
Emma66 is on a distinguished road
Dear Davis Yohanes Arifin,
How do you set boundary conditions for uds1, uds2, uds3 because they are only set for your final need.
I now meet a quite similar questions. I have to introduce three uds to compute my source term in another uds equation. However, I have no idea whether should I set the same source term to these three uds with the one I need to comput?
Please give me some suggestion.
Many thanks.
Emma66 is offline   Reply With Quote

Old   June 16, 2014, 04:08
Default
  #12
New Member
 
Join Date: Jun 2014
Posts: 16
Rep Power: 12
sunjian is on a distinguished road
Hi,Davis. I meet a similar problem. I need to obtain the second derivation of temperature in DEFINE_SOURCE. Here is the code:
DEFINE_ADJUST(my_adjust,d)
{
Thread *t;
cell_t c;
if (! Data_Valid_P())
return;

thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
C_UDSI(c,t,1)=C_T_G(c,t)[0];
C_UDSI(c,t,2)=C_T_G(c,t)[1];
C_UDSI(c,t,3)=C_T_G(c,t)[2];
}
end_c_loop(c,t)
}
}

DEFINE_SOURCE(uds_source, c, t, dS, eqn)
{
real source;
source=-0.000143472*(C_UDSI_G(c,t,1)[0]+C_UDSI_G(c,t,2)[1]+C_UDSI_G(c,t,3)[2]);
dS[eqn]=0;
return source;
}
I've tried solve/set/expert temporary solver memory [yes], and iterated some steps before hooking DEFINE_ADJUST. After I hook DEFINE_ADJUST, it can calculate without any problems. But once I include the source term, I meet the error access_violation. Can you give me some suggestion? Thank you in advance.
sunjian is offline   Reply With Quote

Old   September 20, 2015, 13:22
Default
  #13
Member
 
Join Date: Nov 2014
Posts: 42
Rep Power: 11
Maryam-A is on a distinguished road
Hi every body

I wanted to return derivative of UDS as wall boundary value, but I faced with "fatal signal" while initializing (both Hybrid and standard) that I found this because of boundary condition UDS.
this is part of my udf for B.C of UDS( volume fraction of nanoparticle in my case)

DEFINE_PROFILE(alpha_bc1,thread,position)
{
Thread *t;
cell_t c;
.
.
.

begin_f_loop(f,thread)
{

C_UDSI_G(c,t,0)[0]=-(D_T/D_B)*C_T_G(c,t)[0];
F_PROFILE(f,thread,position)=C_UDSI_G(c,t,0)[0];
}
end_f_loop(f,t)
}

I would appreciate if anyone can help me about my mistakes.
Maryam-A is offline   Reply With Quote

Old   September 20, 2015, 14:04
Default
  #14
Member
 
Join Date: Nov 2014
Posts: 42
Rep Power: 11
Maryam-A is on a distinguished road
Furthermore, I used Define_Adjust to calculate laplacian, maybe this is my fault?
can I use UDS as scalar variable and then I used it in source function?
I will turn off all Uds except one that I wanted to solve. is it true?

thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
C_UDSI(c,t,1)=D_T*C_T_G(c,t)[0];
C_UDSI(c,t,2)=D_T*C_T_G(c,t)[1];
C_UDSI(c,t,3)=D_T*C_T_G(c,t)[2];
Laplacian=Laplacian+C_UDSI_G(c,t,1)[0]+C_UDSI_G(c,t,2)[1]+C_UDSI_G(c,t,3)[2];

C_UDSI(c,t,5)=dD_T*C_T_G(c,t)[0];
C_UDSI(c,t,6)=dD_T*C_T_G(c,t)[1];
C_UDSI(c,t,7)=dD_T*C_T_G(c,t)[2];
d_Laplacian=d_Laplacian+C_UDSI_G(c,t,4)[0]+C_UDSI_G(c,t,5)[1]+C_UDSI_G(c,t,6)[2];

C_UDSI(c,t,9)=D_D*C_T_G(c,t)[0];
C_UDSI(c,t,10)=D_D*C_T_G(c,t)[1];
C_UDSI(c,t,11)=D_D*C_T_G(c,t)[2];
LL=LL+C_UDSI_G(c,t,9)[0]+C_UDSI_G(c,t,10)[1]+C_UDSI_G(c,t,11)[2];

C_UDSI(c,t,13)=dD_D*C_T_G(c,t)[0];
C_UDSI(c,t,14)=dD_D*C_T_G(c,t)[1];
C_UDSI(c,t,15)=dD_D*C_T_G(c,t)[2];
dLL=dLL+C_UDSI_G(c,t,13)[0]+C_UDSI_G(c,t,14)[1]+C_UDSI_G(c,t,15)[2];

}
end_c_loop(c,t)
}
C_UDSI(c,t,4)=Laplacian;
C_UDSI(c,t,8)=d_Laplacian;
C_UDSI(c,t,12)=LL;
C_UDSI(c,t,16)=dLL;
}
Maryam-A is offline   Reply With Quote

Old   February 29, 2020, 04:37
Default
  #15
Senior Member
 
mahdi rostami
Join Date: Jan 2020
Posts: 155
Rep Power: 6
mahdi-united is on a distinguished road
Quote:
Originally Posted by Bogdan
;139339
when you use an user defined scalar actually you solve an equation like equation 11.2.1 in the UDF user manual. a user define memory is a variable where you store some intermediate values needed further in your calculations.

You get the segmentation fault error because when you launch FLUENT and read your data and case file, there is no gradient available so you will get the error. What you can do is either make 1 or 2 iterations without hooking your functions, then hook your functions, or use the following statement in your DEFINE_ADJUST function

Alloc_Storage_Vars(domain, SV_U_G,SV_NULL)

then at the end of your function:

Free_Storage_Vars(domain,SV_U_G,SV_NULL)

The problem with these two instructions is that they just allocate memory but actually not computing the gradient for the first one or two iterations (You can check this by putting a Message macro). Hope this help you.
hi dear friend

please help me

what are the arguments for this macros for accessing species mass fraction?
mahdi-united is offline   Reply With Quote

Reply


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 Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
UDF compiling problem Wouter Fluent UDF and Scheme Programming 6 June 6, 2012 04:43
Gambit - meshing over airfoil wrapping (?) problem JFDC FLUENT 1 July 11, 2011 05:59
natural convection problem for a CHT problem Se-Hee CFX 2 June 10, 2007 06:29
Adiabatic and Rotating wall (Convection problem) ParodDav CFX 5 April 29, 2007 19:13
Is this problem well posed? Thomas P. Abraham Main CFD Forum 5 September 8, 1999 14:52


All times are GMT -4. The time now is 18:50.