Все ответы об инженерном анализе

Перед началом работы настоятельно рекомендуем ознакомиться с правилами форума.

Задание неравномерного теплового потока по длине трубы (3d задача) (udf)

Alex_Cherniuk
Аватар пользователя Alex_Cherniuk

Подкажите, пожалуйста, как правильно задать плотность теплового потока в трубе при написании 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.

Заранее спасибо за помощь.

Kirill Pestov
Аватар пользователя Kirill Pestov

Здравствуйте!

В целом логика программы верна, но вы забыли добавить макрос 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);
 }
       
 

Добавить комментарий

Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Приложить файл

Максимальный размер файла: 999 МБ.
Допустимые типы файлов: txt doc docx xls xlsx pdf rar zip 7zip tar.