|
[Sponsors] |
September 30, 2019, 13:04 |
UDF code for water absorption in Polymer
|
#1 |
New Member
david
Join Date: Sep 2019
Posts: 9
Rep Power: 7 |
Hello everybody,
I am simulating the process of water absorption of polymers in water. Polymer was soaked in water for 25h, 100h, 225h, 400h, 625h, 900h, 1225h, 1600h, then polymer was removed to observe their water permeability phenomenon. Water is a stationary mass, without applied pressure, at a temperature of 65 ° C. The mathematical model consists of the diffusion equation in three dimensions: dM/dt = D*d2M/dx2 + D*d2M/dy2 + D*d2M/dz2 where D: diffusion coefficient ( I already know this value), M: water content. I'm try to write UDF code, but I don't know that it's correct or no?. In particular, the time steps to observe water content (25h, 100h....)?. Thank in advance for your help! ****************************** #include "udf.h" /* USER INPUTS */ /********************************************/ #define temp 338 /* at 65C, Initial Temperature Unit:K*/ /********************************************/ /* Defined constants */ #define g 9.81 #define M(c,t) C_UDSI(c,t,0) /* water content (concentration) */ #define D 1.72e-12 /* diffusion coefficient Unit: m^2/s */ /* Solid density (EP resin density) in kg/m3 */ #define rhos 1150 /********************************************/ DEFINE_ADJUST(adjust_UDS,domain) { Thread *t; cell_t c; thread_loop_c (t,domain) { begin_c_loop (c,t) { C_UDSI(c,t,0) = C_VOF(c,t); } end_c_loop (c,t) } } /********************************************/ /* DIFFUSION */ /********************************************/ DEFINE_DIFFUSIVITY(UDS_diffusivity, c, t, i) { return C_R(c,t)*1.72e-12 + C_MU_TURB(c,t)/0.7; } /********************************************/ /* WATER CONCENTRATION */ /********************************************/ DEFINE_ON_DEMAND(M_concentration) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ real time, dtime; real M_x, M_y, M_z, dM_x, dM_y, dM_z, M, dM; real div_x, div_y, div_z; Thread *t; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Loop over all cell threads in the domain */ thread_loop_c(t,d) { /* Loop over all cells */ begin_c_loop(c,t) { temp = C_T(c,t); time = CURRENT_TIME; dtime = CURRENT_TIMESTEP; M_x = C_UDSI(c,t,1); M_y = C_UDSI(c,t,2); M_z = C_UDSI(c,t,3); dM_x = C_UDSI_G(c,t,0)[0]; dM_y = C_UDSI_G(c,t,0)[1]; dM_z = C_UDSI_G(c,t,0)[2]; /* take gradient */ div_x = C_UDSI(c,t,1)[0]; div_y = C_UDSI(c,t,2)[1]; div_z = C_UDSI(c,t,3)[2]; /* take laplacian */ laplacian = div_x + div_y +div_z; M = C_YI(c,t,0); dM = C_YI_G(c,t,0); C_YI_G(c,t,0)/dtime = D*laplacian(M); return M; end_c_loop(c,t) } } } /********************************************/ /* TIME STEPS */ /********************************************/ DEFINE_DELTAT(mydeltat,d) { real time_step; real flow_time = CURRENT_TIME; if (flow_time < 360000) {time_step = 270000;} else if (flow_time < 810000) {time_step = 720000;} else if (flow_time < 1440000) {time_step = 1350000;} else if (flow_time < 2250000) {time_step = 2160000;} else if (flow_time < 2250000) {time_step = 3150000;} else if (flow_time < 3240000) {time_step = 4320000;} else if (flow_time < 4410000) {time_step = 5670000;} else{time_step = 5670000} return time_step; } /********************************************/ /* INITIAL VALUE */ /********************************************/ DEFINE_INIT(myinti,domain) { cell_t c; Thread *t; real xc[ND_ND]; real time; real M_x, M_y, M_z; Thread_loop_c(t,domain) { begin_c_loop_all(c,t) { C_CENTROID(xc,c,t); C_T(c,t) = 338; if (time = 0) M_x = M_y = M_z = 0; else M_x = C_UDSI(c,t,1); M_y = C_UDSI(c,t,2); M_z = C_UDSI(c,t,3); } end_c_loop_all(cc,t) } } Last edited by qkhanh189; October 1, 2019 at 19:39. |
|
October 1, 2019, 04:47 |
|
#2 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
compile your code, you have type errors inside your code, read log and fix them
your DEFINE_DELTAT(mydeltat,d) is confusing time_step = 270000 is it what you really want? else if () construction in your case should go from MAX to MIN, but in your case it is opposite in DEFINE_INIT(myinti,domain) variable time is not defined, add time = CURRENT_TIME; does your equation have source? but there is no source in your code in DEFINE_ON_DEMAND macro you have Code:
return M; your scalar (M(c,t)) will be defined after you execute on_demand function best regards |
|
October 1, 2019, 19:55 |
|
#3 |
New Member
david
Join Date: Sep 2019
Posts: 9
Rep Power: 7 |
Thanks so much AlexanderZ, Could you help me some points?
I rewrite UDF after compile with ANSYS as follow, the code work fine. But I think that I didn't do the code correct: 1. See attached figure1: with DEFINE_ON_DEMAND, I use C_UDMI(c, t, 0) = D * laplacian; for equation dM/dt = D*d2M/dx2 + D*d2M/dy2 + D*d2M/dz2. But I don't know how to write DM/dt??? 2. See attached figure2: finally, I want to know water absorption in polymer with time 25h, 100h, 225h, 400h, 625h, 900h, 1225h, 1600h. I use DEFINE_DELTAT (25h = 90000s, 100h=360000, then deltat = 270000s....). But i confused, I don't know how to define this. 3. See attached figure3: How can i write the boundary conditions at the surface as the figure 3??? #include "udf.h" /* USER INPUTS */ /********************************************/ #define temp 338 /* at 65C, Initial Temperature Unit:K*/ /********************************************/ /* Defined constants */ #define g 9.81 #define M(c,t) C_UDSI(c,t,0) /* water content (concentration) */ #define D 1.72e-12 /* diffusion coefficient Unit: m^2/s */ /* Solid density (EP resin density) in kg/m3 */ #define rhos 1150 /********************************************/ DEFINE_ADJUST(adjust_UDS,domain) { Thread *t; cell_t c; thread_loop_c (t,domain) { begin_c_loop (c,t) { C_UDSI(c,t,0) = C_VOF(c,t); } end_c_loop (c,t) } } /********************************************/ /* DIFFUSION */ /********************************************/ DEFINE_DIFFUSIVITY(UDS_diffusivity, c, t, i) { return C_R(c,t)*1.72e-12 + C_MU_T(c,t)/0.7; } /********************************************/ /* WATER CONCENTRATION */ /********************************************/ DEFINE_ON_DEMAND(M_concentration) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ real time, dtime; real M, dM, laplacian; real div_x, div_y, div_z; Thread *t; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Loop over all cell threads in the domain */ thread_loop_c(t,d) { /* Loop over all cells */ begin_c_loop(c,t) { C_T(c,t)=338; time = CURRENT_TIME; dtime = CURRENT_TIMESTEP; M = C_YI(c, t, 0); C_UDSI(c, t, 1) = C_YI_G(c, t, 0)[0]; C_UDSI(c, t, 2) = C_YI_G(c, t, 0)[1]; C_UDSI(c, t, 3) = C_YI_G(c, t, 0)[2]; /* take gradient */ div_x = C_YI_G(c, t, 1)[0]; div_y = C_YI_G(c, t, 2)[1]; div_z = C_YI_G(c, t, 3)[2]; /* take laplacian */ laplacian = div_x + div_y +div_z; C_UDMI(c, t, 0) = D * laplacian; end_c_loop(c,t) } } } /********************************************/ /* TIME STEPS */ /********************************************/ DEFINE_DELTAT(mydeltat,d) { real time_step; real flow_time = CURRENT_TIME; if (flow_time < 90001) {time_step = 90000;} else if (flow_time < 360000) {time_step = 270000;} else if (flow_time < 810000) {time_step = 720000;} else if (flow_time < 1440000) {time_step = 1350000;} else if (flow_time < 2250000) {time_step = 2160000;} else if (flow_time < 3240000) {time_step = 3150000;} else if (flow_time < 4410000) {time_step = 4320000;} else { time_step = 5670000; } return time_step; } /********************************************/ /* INITIAL VALUE */ /********************************************/ DEFINE_INIT(myinti,domain) { cell_t c; Thread *t; real xc[ND_ND]; real time; real M_x, M_y, M_z, M; thread_loop_c(t,domain) { begin_c_loop_all(c,t) { C_CENTROID(xc,c,t); C_T(c,t) = 338; time = 0; M = 0; } end_c_loop_all(cc,t) } } |
|
October 15, 2019, 01:25 |
|
#4 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
update your progress
best regards
__________________
best regards ****************************** press LIKE if this message was helpful |
|
November 22, 2019, 23:02 |
|
#5 |
New Member
david
Join Date: Sep 2019
Posts: 9
Rep Power: 7 |
I was still stuck, could anyone help me.
|
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Compiling the customized UDF code for PEMFC | dmfo | Fluent UDF and Scheme Programming | 2 | October 1, 2017 19:30 |
UDF code help solve reaction rate equation palm oil | zirkov | Fluent UDF and Scheme Programming | 0 | February 13, 2017 11:34 |
write code UDF Fluent solve kinetic reaction rate equation palm oil | zirkov | FLUENT | 0 | February 13, 2017 11:16 |
UDF Compilation Error - Loading Library - COMMON Problem! Help! | robtheslob | Fluent UDF and Scheme Programming | 8 | July 24, 2015 01:53 |
error in conditional UDF code | Bollonga | Fluent UDF and Scheme Programming | 3 | October 7, 2013 13:01 |