Привет всем!)
Я тут впервые и столкнулся с одной проблемой. Нужно написать udf макрос, который менял бы частоту вращения диска с 500 до 1000 через определенное количество времени. График нагружения и всё остальное есть в вордовском файле. На стационаре всё хорошо считает, сходимость имеется, но без макроса никак не получается исследовать переходный режим.
К тому же, ещё присутствуют сомнения, какой именно define нужно использовать в данном случае. define profile вроде не подходит, как мы поняли, пока остановились на define cg motion.
Пример того, что у нас пока получается скинуть не могу, в ближайшее время только, он просто не у меня находится.
Буду благодарен за любую помощь)
Вложение | Размер |
---|---|
методичка | 790.62 КБ |
Здравствуйте!
Все верно, нужно использовать макрос DEFINE_CG_MOTION.
Пример написания udf можете посмотреть ниже:
#include "udf.h"
DEFINE_CG_MOTION(disk,dt,cg_vel,cg_omega,time,dtime)
{
if (time <= 10.0)
{
cg_omega[2] = 49.9*time + 1.0;
} else
{
if ((time >= 10.0) && (time < 10000.0))
{
cg_omega[2] = 500.0;
}else
{
if ((time >= 10000.0) && (time < 10010.0))
{
cg_omega[2] = 50*time - 499500.0;
} else
{
if (time > 10010.0)
{
cg_omega[2] = 10000.0;
}
}
}
}
}
Кирилл, спасибо большое за ответ, но есть одна загвоздка)
По сути говоря, получается так, что флюент игнорит те параметры, которые мы задаем в udf, а использует только те граничные условия, которые мы задаем на стенке (0,500,1000 рад/с), и он сразу же начинает расчет именно с этой скоростью вращения.
Получется так, что приоритет он выставляет на граничные условия, нежели на udf. Как это изменить? Макрос он считывает, проблем нет, но прописанные условия не диктует.
Когда вы используете макрос DEFINE_CG_MOTION, то все настройки задаются в ветке Dynamic Mesh. Там надо в разделе Dynamic Mesh Zones создать вращающиеся зону и назначить ей макрос. По идее никаких граничных условий для движущиеся зоны задавать больше не нужно.
А какую именно функцию надо использовать? Interpreted или compiled? Просто наткнулись на такую вещь, что cg motion используется только для второго.
И при создании библиотеки он пишет Error: The UDF library you are trying to load (libudf) is not compiled for 2d on the current platform (win64). Мол данная вещь доступна только для 3д.
Да, некоторые макросы являются только компилируемыми и define_cg_motion один из них.
Вы видимо раньше скомпилировали udf в 3D версии, а сейчас пытаетесь загрузить библиотеку в 2D версии Fluent.
А в UDF можно указать размерность? Например, cg_omega[2] = 50*time - 499500.0 [rad/s]
И что такое [2] ? Если у меня параметр n для частоты вращения, могу я его использовать в UDF, вместо cg_omega[2] написать n ?
Нельзя, UDF работает только с единицами СИ
Добавить комментарий