Здравствуйте.
Я пытаюсь написать UDF для плотности заряда частицы (charge density), что является параметром материала. Включён модуль MHD, использую DPM.
При использовании даже простейшего кода ( при компилировании всё ок) после расчёта при просмотре отчётов (траекторий частиц, например) выдаёт ошибку, блокирующую их показ: Error at Node 2: get_udf_function: function charge_density_macro has wrong type: 2! = 46.
Согласно инструкции она означает, что я применил этот UDF для неверного параметра.Хотя я применяю его как раз для параметра материала частицы.
Вот пример кода:
#include "udf.h"
DEFINE_DPM_PROPERTY(charge_density_macro, c, t, p, T)
{
real charge_density;
charge_density = -1;
return charge_density;
}
P.S. Ошибка возникает только в случае компилированного кода ( при interpreted всё ок). Однако в моём случае (для основного кода) необходимо использовать compiled
1) Первое, что приходит на ум - может не хватать директив компилятора. Рекомендую вставить в шапку кода набор:
#include "udf.h"
#include "dpm.h"
#include "surf.h"
#include "dpm_mem.h"
#include "sg.h"
#include "sg_mphase.h"
#include "flow.h"
#include "mem.h"
#include "metric.h"
#include "math.h"
#include "models.h"
#include "sg_udms.h"
2) Второе - может быть конфликт с версией Fluent или неправильная настройка компилятора. А остальные коды компилируются без ошибок?
3) Третье - иногда бывают сбои, если не указать точку с нулём после ввода числа (нужно было charge_density = -1.0;)
Также возможно, что вы указали не то название переменной при объявлении макроса: в UDF Manual DEFINE_DPM_PROPERTY (name, c, t, tp, T) а вы указали p вместо tp DEFINE_DPM_PROPERTY(charge_density_macro, c, t, p, T) (но это маловероятно могло вызвать ошибку)
4) Четвёртое - есть мнение, что в Вашей задаче может потребоваться применение макроса DEFINE_DPM_SCALAR_UPDATE.
5) Пятое - рекомендую поискать в Google диссертации, где используют желаемые макросы. Для этого просто введите в поиск название макроса (например, DEFINE_DPM_PROPERTY)
Успехов!
Добавить комментарий