Перейти к публикации

Динамическая сетка для колеблющегося тела


Рекомендованные сообщения

Здравствуйте. Начала разбираться с динамической сеткой, нужно смоделировать вибрации конуса в потоке.

udf получилось такое -

#include "udf.h"

DEFINE_SDOF_PROPERTIES(vibrations, prop, dt, time, dtime)

{

prop[sDOF_MASS] = 800;

prop[sDOF_IXX] = 200;

prop[sDOF_IYY] = 100;

prop[sDOF_IZZ] = 100;

prop[sDOF_LOAD_F_Y] = 3000*sin(6280*time); /* external force */

}

Только почему-то конус движется исключительно вверх, строчка с силой никак не влияет на движение.

Посоветуйте, пожалуйста, что можно сделать.

Ссылка на сообщение
Поделиться на других сайтах


Здравствуйте. Начала разбираться с динамической сеткой, нужно смоделировать вибрации конуса в потоке.

udf получилось такое -

#include "udf.h"

DEFINE_SDOF_PROPERTIES(vibrations, prop, dt, time, dtime)

{

prop[sDOF_MASS] = 800;

prop[sDOF_IXX] = 200;

prop[sDOF_IYY] = 100;

prop[sDOF_IZZ] = 100;

prop[sDOF_LOAD_F_Y] = 3000*sin(6280*time); /* external force */

}

Только почему-то конус движется исключительно вверх, строчка с силой никак не влияет на движение.

Посоветуйте, пожалуйста, что можно сделать.

А что такое переменная time? Откуда программа должна узнать, что это время?

Вам надо сначала вернуть в функцию время из вашего расчёта, а уже потом засовывать его в функцию движения конуса.

Вот вам пример:

#include "udf.h"

DEFINE_PROFILE(unsteady_velocity, thread, position)

{

face_t f;

real t = CURRENT_TIME;

begin_f_loop(f, thread)

{

if (t<0.4) F_PROFILE(f, thread, position) = -5.0;

if (t>=0.4 && t<=1.4) F_PROFILE(f, thread, position) = 264.0*t - 11.04;

if (t>1.4) F_PROFILE(f, thread, position) = -5.0;

}

end_f_loop(f, thread)

}

То есть у вас будет примерно вот так:

#include "udf.h"

DEFINE_SDOF_PROPERTIES(vibrations, prop, dt, time, dtime)

{

real t = CURRENT_TIME;

prop[sDOF_MASS] = 800;

prop[sDOF_IXX] = 200;

prop[sDOF_IYY] = 100;

prop[sDOF_IZZ] = 100;

prop[sDOF_LOAD_F_Y] = 3000*sin(6280*t); /* external force */

}

Только проверьте, а то я мог тоже напутать, так что сильно тапками не бейте.

Ссылка на сообщение
Поделиться на других сайтах

А что такое переменная time? Откуда программа должна узнать, что это время?

Судя по примерам и определению функции, её переменные уже определены и больше ничего не нужно задавать. Хотя не уверена в этом)

Совет:

для вибрации лучше задавать скорость (в виде гармонической функции),

в udf на основе макроса DEFINE_CG_MOTION.

В случае применения силы, как это сделали Вы, движение тела будет

именно таким как Вы его описали.

Спасибо за совет и объяснение!

Попытки использовать эту функцию были. udf интерпретируется на ура, но не компилируется, не строит библиотеку libudf.

Вот варианты udf, которые у меня получились:

#include "udf.h"

#include "math.h"

#include "dynamesh_tools.h"

DEFINE_CG_MOTION(sins, dt, vel, omega, time, dtime)

{

double a, w;

real v;

/* define motion variables */

a = 0.05; /* 0.05m movement amplitude */

w = 6280; /* Hz frequency */

v = -a * w * sin(w*time);

vel[1] = v;

/* define object movement law */

vel[0] = 0;

vel[1] = v;

vel[2] = 0;

}

#include "udf.h"

real v_prev = 0.0;

DEFINE_CG_MOTION(vibration,dt,vel,omega,time,dtime)

{

real t = CURRENT_TIME;

real dv;

double *b;

NV_S(b, =, 0.01);

NV_S(vel, =, 0.0);

NV_S(omega, =, 628.0);

if (!Data_Valid_P())

return;

dv = dtime * *b* *omega * *omega * sin(t* *omega);

v_prev += dv;

/* set y-component of velocity */

vel[1] = v_prev;

}

Посоветуйте, пожалуйста, может быть есть какая-то принципиальная ошибка?

Ссылка на сообщение
Поделиться на других сайтах

Судя по примерам и определению функции, её переменные уже определены и больше ничего не нужно задавать. Хотя не уверена в этом)

Спасибо за совет и объяснение!

Попытки использовать эту функцию были. udf интерпретируется на ура, но не компилируется, не строит библиотеку libudf.

Вот варианты udf, которые у меня получились:

#include "udf.h"

#include "math.h"

#include "dynamesh_tools.h"

DEFINE_CG_MOTION(sins, dt, vel, omega, time, dtime)

{

double a, w;

real v;

/* define motion variables */

a = 0.05; /* 0.05m movement amplitude */

w = 6280; /* Hz frequency */

v = -a * w * sin(w*time);

vel[1] = v;

/* define object movement law */

vel[0] = 0;

vel[1] = v;

vel[2] = 0;

}

#include "udf.h"

real v_prev = 0.0;

DEFINE_CG_MOTION(vibration,dt,vel,omega,time,dtime)

{

real t = CURRENT_TIME;

real dv;

double *b;

NV_S(b, =, 0.01);

NV_S(vel, =, 0.0);

NV_S(omega, =, 628.0);

if (!Data_Valid_P())

return;

dv = dtime * *b* *omega * *omega * sin(t* *omega);

v_prev += dv;

/* set y-component of velocity */

vel[1] = v_prev;

}

Посоветуйте, пожалуйста, может быть есть какая-то принципиальная ошибка?

Первая ваша функция вот в таком виде скомпилировалась у меня нормально:

#include "udf.h"

#include "math.h"

#include "dynamesh_tools.h"

DEFINE_CG_MOTION(sins, dt, vel, omega, time, dtime)

{

double a, w;

real v;

a = 0.05;

w = 6280;

v = -a * w * sin(w*time);

vel[0] = 0;

vel[1] = v;

vel[2] = 0;

}

А вы копипастите из хелпа? Просто при рассмотрении вашей функции в ворде вместе со знаками табуляции видны какие-то стрелки. А у меня иногда вылезала невидимая псевдографика. Будте аккуратны с этим.

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Добрый день.

Все скомпилировалось и колебается как надо.

Теперь нужно посмотреть пограничный слой на теле. Для этого надо построить пограничную область с прямоугольной сеткой, но какими граничными условиями задать moving face в gambit?

Если я задаю область как interface или interior, её не читает fluent.

Если задаю только границы этой области, то fluent видит, но область не движется вместе с телом.

Как же быть?

Ссылка на сообщение
Поделиться на других сайтах

Ничего не надо делать.

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

поэтому тело движется как надо.

В приложении есть все картинки, из которых всё будет ясно.

С уважением, Герман.

Здравствуйте, Герман.

С границами стало немного понятнее, спасибо. Однако непонятно, как задается сама поверхность moving face, которая уже есть, судя по картинкам в файле, вдобавок к границам interior_out_body и interior_in_body. И default-interior:13 также не задается и не появляется.

Я сейчас пытаюсь сделать для понимания простую модель пограничного слоя на квадрате. Пробовала строить различные варианты сеток, вот пара примеров из гамбита:

post-38417-1361175739.jpgpost-38417-1361175760_thumb.jpg

Без пограничного слоя все движется как надо, но получить поверхность moving face не выходит.

Ссылка на сообщение
Поделиться на других сайтах

Добрый день, коллега.

Посмотрите аттач, там всё, применительно к вашей задаче, написано.

Если Вы попробуете повторить в точности инструкцию, то конкретные номера faces и edges'ов могут измениться, так как порядок действий может не совпасть с инструкцией.

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

Спасибо! Замечательно понятная инструкция!

Некоторые пункты я делала неправильно, теперь поняла свои ошибки. Основная проблема в том, что я не могу корректно задать в своем гамбите граничные условия для поверхности, у меня нет в меню типа fluid, а когда я вообще задаю хоть какую-то поверхность, то файл затем не сохраняется в формате msh для fluent. Видимо, это происходит из-за того, что у меня более старая версия гамбита 2.3.16. Сейчас обновлю гамбит и посмотрю, что получится.

Ссылка на сообщение
Поделиться на других сайтах

Рекомендую, как поставите Gambit 2.4+Exceed 13.0, загрузите файл-журнал

и смотрите одновременно инструкцию и соответствующее место в Гамбите.

Внимательно смотрите на скриншоты!

Добрый день, Герман.

Поставила всё, теперь сохраняет. И fluid я тоже нашла :blush:

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

post-38417-1361269019_thumb.jpg

Ссылка на сообщение
Поделиться на других сайтах

Решилась проблема - нужно было в дефолтах указать большее значение для переменной max end dangle.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...