Добрый день!
Подскажите, пожалуйста, как правильно подайти к решению задачи:
Есть граница Fluid/Solid c граничными условиями Coupled Wall. На данной границе надо модифицировать теловой поток - добавить поверхностный / объемный источник тепла. Источник тепла зависит от температур в ячейках по обеим сторонам граници. Как правильно это сделать?
Попробовал через DEFINE_PROFILE, однако возникли сложности с определением температур в сопряженных ячейках. Проблема в получение указателя на потоки ячеек для Fluid и Solid.
У меня получился такой код для определения T смежных ячеек, но он не работает.
DEFINE_PROFILE(heat_flux,t,i)
{
double Tfluid,Tsolid;
thread *ts; //shadow face thread
thread *t0; //thread for fluid cell
thread *t1; //thread for solid cell
cell_t c0; //cell fluid
cell_t c1; //cell solid
begin_f_loop(f,t)
{
c0=F_C0(f,t);
t0 = THREAD_T0(t);
Tfluid=C_T(c0,t0);
if (!NULLP(ts = THREAD_SHADOW(t)))
{
c1=F_C0(f,ts);
t1=THREAD_T0(ts);
Tsolid=C_T(c1,t1);
}
F_PROFILE(f,t,i) = 100500*(Tsolid-Tfluid);
}
end_f_loop(f,t)
}
Перед началом работы настоятельно рекомендуем ознакомиться с правилами форума.
Генерация тепла на Coupled Wall
2 ноября, 2020 - 19:32
#1
Нашёл изящное решение вашего вопроса. https://www.eureka.im/971.html
Это код для однократного расчёта разности температур по обе стороны стенки
Можете переписать под DEFINE_ADJUST, загрузить разницу температур в память C_UDMI и использовать в DEFINE_PROFILE, ну или сразу под DEFINE_PROFILE переписать
It is sometimes necessary to reference the cells on either side of the wall/wall-shadow zone. Mostly to get the temperature difference. But F_C1 does not work here. Instead, there are a couple of macros that work here -
Thread *t_shadow=THREAD_SHADOW(t);
face_t f_shadow=F_SHADOW(f,t);
These are defined in "mem.h".
The resolution below contains a UDF that uses these macors to compute the temperature difference between a solid cell and fluid cell separated by a wall - wall shadow zone.
#include "udf.h"
#define wall_id 11 /*change this number according to your case */
DEFINE_ON_DEMAND(temp_diff_shadow)
{
Domain *d=Get_Domain(1);
Thread *wall_t=Lookup_Thread(d,wall_id); /* get the wall thread*/
Thread *wall_shadow_t=THREAD_SHADOW(wall_t); /*get the wall shadow thread */
Thread *wall_cell_t,*shadow_cell_t;
cell_t wall_c,shadow_c;
face_t f,f_shadow;
real temp_diff;
begin_f_loop(f,wall_t) /* loop over all the faces of the wall */
{
wall_cell_t=THREAD_T0(wall_t); /* get the cell zone in the wall side */
wall_c=F_C0(f,wall_t);
f_shadow=F_SHADOW(f,wall_t); /*get the corresponding face in the shadow thread */
shadow_cell_t=THREAD_T0(wall_shadow_t); /*get the cell sone in the shadow side */
shadow_c=F_C0(f_shadow,wall_shadow_t);
temp_diff=C_T(wall_c,wall_cell_t)-C_T(shadow_c,shadow_cell_t);
Message("Temp Diff = %gn",temp_diff);
}
end_f_loop(f,wall_t)
}
Спасибо!
Добавить комментарий