Добрый день.
Подскажите, порекомендуйте средства для debug'a функций UDF. Хотелось бы отслеживать значения переменных, моменты когда крашется fluent и тп.
Спасибо)
Перед началом работы настоятельно рекомендуем ознакомиться с правилами форума.
Рекомендации по DEBUG 'инку UDF.
20 декабря, 2021 - 15:45
#1
Приветствую, Евгений.
Рекомендую записывать отслеживаемые величины в различные ячейки пользовательской памяти UDM.
Для начала не используйте макросы, которые воздействуют на поля величин (DEFINE_PROFILE, DEFINE_SOURCE...)
Вместо этого отследите, какие цифры код использует в памяти в рамках макросов общего назначения DEFINE_ADJUST, DEFINE_EXECUTE_AT_END и DEFINE_ON_DEMAND.
Привожу пример кода, который выводит максимальную и минимальную температуру в домене:
#include "udf.h"
DEFINE_ADJUST(post_adjust, d)
{
real T_min = REAL_MAX, T_max = 0.0;
Thread *t;
cell_t c;
/* Check for UDMs */
if (N_UDM < 1) {
Message("\n Error: No UDM defined! Abort UDF execution.\n");
return;
}
/* Loop over all cell threads */
thread_loop_c(t, d)
{
/* Loop over all cells */
begin_c_loop(c, t)
{
/* Calculate and store °C temperature in first UDM */
C_UDMI(c, t, 0) = C_T(c, t) - 273.15;
/* Check for min/max */
if (C_T(c, t) < T_min) T_min = C_T(c, t);
if (C_T(c, t) > T_max) T_max = C_T(c, t);
}
end_c_loop(c, t)
}
/* Convert to °C just before printing min/max, */
T_min -= 273.15;
T_max -= 273.15;
Message0(" Minimum temperature = %.1f degC\tMaximum temperature = %.1f degC\n", T_min, T_max);
}
Макрос Message0 удобнее использовать, так как он выводит информацию с хост-процесса. Макрос Message выводит информацию с узлов и может быть неудобен при использовании нескольких ядер.
В более трудных случаях может потребоваться распараллеливание при постобаботке.
Спасибо! Запись в UDM практикую, помогает. Мессаджи использую реже, возьму на вооружение.
Но Fluent любит вылетать, не объясняя причин, например когда указатель на thread определен не верно / равен NULL. Особенно когда работаешь с мультифазными течениями. В таких случаях debug превращается в мучение. Иногда даже сложно понять на какой строчке все крашется.
Коллега, я Вас понимаю! Прям боль. Один вариант, которым пользуюсь и работает: добавлять по одной-две строчки... ничего другого не придумал.
Добавить комментарий