Подкажите, пожалуйста, как правильно задать плотность теплового потока в трубе при написании udf.
Ось трубы совпадает с осьою OY. Плотность теплового потока при y = 0..0,31868 (м) описывается зависимостью:
q = -568888.9*y**2 + 853333.3*y + 200000.0, Вт/м2
а при y > 0,31868 (м)
q = -146408.9*y + 639226.6, Вт/м2
Моя попытка написать udf:
#include "udf.h"
DEFINE_PROFILE(htc, thread, position)
{
face_t f;
real y;
begin_f_loop(f, thread)
{
y = F_T(f,thread);
if (y < 0.31868)
F_PROFILE(f, thread, position) = -568888.9*(y+0.5)**2 + 853333.3*(y+0.5) + 200000.0;
else
F_PROFILE(f, thread, position) = -146408.9*(y+0.5) + 639226.6;
}
end_f_loop(f, thread);
}
Не знаю верна ли логика программа. При интерпретации выдает ошибку:
Error: line 12: invalid type for pointer dereference: int.
Заранее спасибо за помощь.
Здравствуйте!
В целом логика программы верна, но вы забыли добавить макрос ND_ND, который определяет вектор, а также F_CENTROID(pos,f,t), который используется для нахождения центра грани. Если учесть данные замечания, то udf должен выглядеть следующим образом:
#include "udf.h"
DEFINE_PROFILE(heat_flux,t,i)
{
real pos[ND_ND];
real y;
face_t f;
begin_f_loop(f,t)
{
F_CENTROID(pos,f,t);
y = pos[1];
if (y < 0.31868)
F_PROFILE(f,t,i) = -568888.9*y*y + 853333.3*y + 200000.0;
else
F_PROFILE(f,t,i) = -146408.9*y + 639226.6;
}
end_f_loop(f,t);
}
Добавить комментарий