Ansys Assistant will be unavailable on the Learning Forum starting January 30. An upgraded version is coming soon. We apologize for any inconvenience and appreciate your patience. Stay tuned for updates.

Ansys Learning Forum Forums Discuss Simulation Fluids Melting and solidification process for different boundary condition& time period Reply To: Melting and solidification process for different boundary condition& time period

sumeet94
Subscriber

Sir, I wrote a UDF regarding the above-stated problem, which is given below,

#include "udf.h"
real pcm_tavg;
real gc_tavg;

#define T_S 494  /*pcm solidus temperature*/
#define T_L 514  /*pcm liquidus temperature*/
#define h 10 /*heat transfer coefficient*/
#define T_amb 300 /*ambient temperature*/

/* CALCULATING THE PCM DOMAIN VOLUME WEIGHTED AVERAGE TEMPERATURE*/

DEFINE_EXECUTE_AT_END(pcm_domain_average_temperature)
{
statement
----------
pcm_tavg = -----;
}

/* CALCULATING THE GLASS COVER AREA WEIGHTED AVERAGE TEMPERATURE*/

DEFINE_EXECUTE_AT_END(glass_cover_average_temperature)
{
statement
----------
gc_tavg = -----;
}

/* APPLYING CHARGING AND DIS-CHARGING BOUNDARY CONDITION */
 
DEFINE_PROFILE(bound_condition,thread,position)
{
    real x[ND_ND];
    real current_time = CURRENT_TIME;
    int current_time_step = N_TIME;
    real current_time_step_size = CURRENT_TIMESTEP;
    real total_time = current_time_step*current_time_step_size;
    current_time=0;
 #if !RP_HOST
        face_t face;
        while(current_time<=total_time)
        {
            begin_f_loop(face,thread)
            {
                if(pcm_tavg>=T_L)
                {
                    Message("pcm completely melts, pcm_Tavg = %g\n",v_w_tavg);
                    while(current_time<=total_time)
                    {
                        begin_f_loop(face,thread)
                            {
                               if(pcm_tavg<=T_S)
                                {
                                    Message("pcm completely solidifies, pcm_Tavg = %g\n",v_w_tavg);
                                    break;
                                }                                    
                                else
                                { 
                                    F_CENTROID(x,face,thread);
                                    F_PROFILE(face,thread,position) = h*(T_amb-gc_tavg);
                                }
                            }
                        end_f_loop(face,thread)
                       current_time = current_time + current_time_step_size; 
                    }                    
                }
                else
                {
                F_CENTROID(x,face,thread);
                F_PROFILE(face,thread,position) = 20000;
                }
            }
            end_f_loop(face,thread)
            current_time = current_time + current_time_step_size;
        }
    #endif    
}

First, I calculated the PCM domain volume-weighted average temperature and area-weighted average temperature for the glass cover outer surface, respectively, using the UDF - DEFINE_EXECUTE_AT_END macros, as shown in the UDF above. These two UDFs work fine.  

The change of boundary condition is done by using the DEFINE_PROFILE macro. Initially, the flux value applies as per the condition. But, the problem arises when the PCM average temperature exceeds the T_L; it doesn't enter the if condition statement of the 1st while statement; rather, it continues with the else statement. Can you please suggest why the if statement doesn't work?

[bingo_chatbox]