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

Как задать свободное движение движение wall вдоль оси Х ?

10 сообщений / 0 новое
Последняя публикация
L-13
Аватар пользователя L-13

Уважаемые профессионалы .Подскажите пожалуйста как задать свободное движение стенки wall вдоль оси Х ? Нижеприведенный макрос не работает . При наличии добавленных элементов в область Dynamic Mech Zones пишет  Warning: incorrect cg motion opora (opora это wall выделенный красным) . Данная зона должна свободно перемещаться вдоль оси Х. Синизу на нее будет действовать давление поднимая ее вверх, а сверху будет противодействующая сила опуская опору вниз. Нужно что бы Fluent рассчитал зазор при разных давлениях на входе, величину утечек в кг/сек при разных давлениях, и визуализировал движение этой опоры. Я подозреваю что макрос   DEFINE_SDOF_PROPERTIES не подходит для не замкнутого объема. Какой макрос правильно применить в данной задаче? Спасибо.

#include "udf.h"

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

{

    prop[SDOF_MASS] = 7;

    prop[SDOF_IXX] = 0.00077;

    prop[SDOF_IYY] = 0.00077;

    prop[SDOF_IZZ] = 0.00077;

    prop[SDOF_LOAD_F_X] = -70.0;

    prop[SDOF_LOAD_F_Y] = 0;

    prop[SDOF_ZERO_TRANS_X] = FALSE;

    prop[SDOF_ZERO_TRANS_Y] = TRUE;

    prop[SDOF_ZERO_TRANS_Z] = TRUE;


    printf("\ndelta_missile: updated 6DOF properties");
}
 

 

ВложениеРазмер
Иконка изображения 54545.jpg222.56 КБ
Kirill Pestov
Аватар пользователя Kirill Pestov

Здравствуйте! Вы не подключили опцию Six DOF в разделе Options, поэтому макрос и не работает (и не забудьте потом в панели Dynamic Mesh Zones, тоже подключить Six DOF). Если у вас опора движется поступательно вдоль оси Х без вращения, то зачем вы задаете момент инерции? Вообще свойства ATT сейчас можно задать через панель Six DOF Properties и не писать специально для этого макрос, но, насколько я помню, там нельзя указать внешнюю силу.

L-13
Аватар пользователя L-13

Не работает сила противодейсвия prop [SDOF_LOAD_F_X] = 6400*t;. 6400N за 1 сек.  Линейная зависимость силы от времени. Перемещение вдоль оси Х получить удалось, но оно бескончное. Правильно ли задана нагрузка SDOF_LOAD_F_X? 

Идет очень большое искажение сетки. Ремешинг настроить не удалось. 

 

#include "udf.h"

DEFINE_PROFILE(unsteady_pres, thread, position)
{
    face_t f;
    real t = CURRENT_TIME;

    begin_f_loop(f, thread)
    {
        F_PROFILE(f, thread, position) = 46.0*101325.0*t;
    }
    end_f_loop(f, thread);
}

DEFINE_SDOF_PROPERTIES(opora, prop, dt, time, dtime)
{
    real t = CURRENT_TIME;

    prop[SDOF_MASS] = 70;


    prop[SDOF_ZERO_TRANS_X] = FALSE;

    prop[SDOF_ZERO_TRANS_Y] = TRUE;

    prop[SDOF_ZERO_TRANS_Z] = TRUE;


    prop[SDOF_ZERO_ROT_X] = TRUE;

    prop[SDOF_ZERO_ROT_Y] = TRUE;

    prop[SDOF_ZERO_ROT_Z] = TRUE;

    printf ("\opora: updated 6DOF properties");

    Message("time = %f);

    prop [SDOF_LOAD_F_X] = 6400*t;

    prop [SDOF_LOAD_F_Y] = 0;

    prop [SDOF_LOAD_F_Z] = 0;
}

DEFINE_GEOM(axis, d, dt, position)
{

    position[1] = 0;

}


DEFINE_GEOM(wall_deform, d, dt, position)
{

    position[1] = 0.0125;

}
 

L-13
Аватар пользователя L-13

 

 

L-13
Аватар пользователя L-13

L-13
Аватар пользователя L-13

В простой Transient постановке задача решается отлично. С dynamic Mesh не идет :(

https://

 

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

1. В prop [SDOF_LOAD_F_X] = 6400*t; у вас лишний пробел после prop.

2. В Message("time = %f); пропущены кавычки.

3. В строке printf ("\opora: updated 6DOF properties"); зачем-то экранируете букву \o. Она же у вас не спец. символ. Убирайте обратный слэш, а то компилятор ругается.   

4. Можно обойтись без функции DEFINE_GEOM и все сделать через интерфейс. В Definition выбираете plane, указываете точку на плоскости и нормаль к ней.

5. Remeshing с четырехугольными элементами не работает, поэтому делайте треугольную сетку. Size Function подключать не надо и без неё все будет перестраиваться.

6. Layering (работает только с чистой гекса-сеткой (четырехугольной)) в данном случае нецелесообразно использовать, так как перемещаемая граница имеет сложную форму и трудно будет ориентировать линии сетки таким образом, чтобы ячейки удалялись послойно.

L-13
Аватар пользователя L-13

Спасибо большое. Подсказки очень помогли. Система заработала но не доконца как нужно. 

1. Не получается настроить Contact Detection. Нужно ли подключать к нему UDF? В каких случаях подлючается UDF к контакту, а в каких нет? В уроке с клапаном байпасным выполнено без UDF. Пробовал две границы wall делать Rigid Body без UDF и пробовал включать в контакт UDF макрос из хелпа. Контакт не работает. 

2. Как вывести в консоль силу от давления жидкости (inlet press) на гидропяту?  Не могу понять отрабатывает SDOF_LOAD_F_X свою силу противодействия по формуле 6400*t или нет. Хочется сравнить силу заданную мной и развиваемую гидропятой от давления при одинаковом моменте времени. Гидродинамическая пята полностью до упора перемещается влево и запирает сама себя на выходе жидкости. Или это действительно так получается или  SDOF_LOAD_F_X не работает.

 Спасибо большое за оказываемую помошь. :) 

 

L-13
Аватар пользователя L-13

Актуальный код на данном этапе работы 

#include "udf.h"

DEFINE_PROFILE(unsteady_pres, thread, position)
{
    face_t f;
    real t = CURRENT_TIME;

    begin_f_loop(f, thread)
    {
        F_PROFILE(f, thread, position) = 80.0*101325.0 + 46.0*101325.0*t;
    }
    end_f_loop(f, thread);
}

DEFINE_SDOF_PROPERTIES(opora, prop, dt, time, dtime)
{
    real t = CURRENT_TIME;
    real x_force_pump = 6400*t - 3850.0;
    prop[SDOF_MASS] = 70;
    prop[SDOF_ZERO_TRANS_X] = FALSE;
    prop[SDOF_ZERO_TRANS_Y] = TRUE;

    /* valid only when outlet is 80atm (3850.425 r=12.5 force) */
    prop[SDOF_LOAD_F_X] = x_force_pump;

    Message ("\n\ntime = %f, x_force_pump = %f, pres_inlet(atm) = %f\n\n", t, x_force_pump, 80.0 + 46.0*t);
}


DEFINE_SDOF_PROPERTIES(wall_rigid, prop, dt, time, dtime)
{
    prop[SDOF_ZERO_TRANS_X] = TRUE;
    prop[SDOF_ZERO_TRANS_Y] = TRUE;
}

DEFINE_GEOM(axis, d, dt, position)
{
    position[1] = 0;
}

DEFINE_GEOM(wall_deform, d, dt, position)
{
    position[1] = 0.0125;
}

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

1. В вашем случае для Contact Detection необходимо подключать UDF, который приведен в документации. Единственно, вам нужно изменить его так, чтобы скорость гидропяты обращалась в ноль при достижении определенного расстояния, которое вы указываете в proximity threshold (укажите расстояние равное 2-3 ячейкам, чтобы избежать появления вырожденных элементов в месте контакта). В примере с байпасным клапаном макрос в contact detection не подключается, так как там движение границ задается явно и вся логика реализована в макросе DEFINE_GRID_MOTION (он тоже приведен в документации). Опция contact detection нужна для того, чтобы определить, когда подключать макрос (при сближении на определенное расстояние) с функцией DEFINE_CONTACT и чтобы определить свойства новой контактной зоны (в вашем случае для имитации запирания гидропяты необходимо создать пористую зону с большим коэффициентом гидравлического сопротивления).

2. Создайте обычный монитор силы через Report Definitions >  New > Force Report.

Тема закрыта