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

Пружина для клапана на UDF

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

Добрый день. 

Пробую смоделировать работу клапана с пружиной. Что то не получается с UDF победить.

Цель. При перемещении шарика в сторону сжатия пружины пружина сжимается и становится жестче. Для вычисления силы пружины в 6DOF необходимо знать координату центра масс шарика. Пробую ее вычислить в нижеследующем UDF, но в коде где то принципиальная ошибка. У меня не хватает опыта в UDF, разобраться самостоятельно c этой проблемой. Сижу уже 3 дня.... Прошу подсказку. Спасибо.  

 

#include "udf.h" 
#include "dynamesh_tools.h"

int ZONE_ID = 7; - поверхность шара Named Selection

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

{
real kcm;               /* Переменная в которую будет занесена координата ЦТ*/
real myforce;        /*Переменная в которую будет занесена расчитанная сила*/ 

Thread *dt = Lookup_Thread (domain, ZONE_ID); 
Dynamic_Thread *dt = DT_THREAD(dt); 
kcm = DT_CG (dt)[0];
myforce = 3000.0 * kcm;  /*Закон изменения жесткости пружины*/ 


prop[SDOF_MASS] = 0.1;
prop[SDOF_ZERO_TRANS_X] = FALSE;
prop[SDOF_ZERO_TRANS_Y] = TRUE;
prop[SDOF_LOAD_F_X] = myforce;

}

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

Часть проблемы решил указав DT_CG (dt)[0]; просто напрямую. Цифра по координате выводится в Message корректно. 

Теперь не могу понять, почему шарик движется вправо и задача разваливается если - сила Force на шарик (действующая справа на лево) от потока на входе в 1000 раз больше чем сила противодействия пружины. Шарик должен двигаться влево. И Message это подтверждают. Не вносит ли команда DT_CG (dt)[0] каким то чудо образом действия, на движение шарика вправо?

#include "udf.h" 
#include "dynamesh_tools.h"

#define koordinata_x    0.019


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

{
real kcm;
real myforce;
real koordinata_mm;

kcm = DT_CG (dt)[0];
myforce = 400.0 * ( kcm - koordinata_x );
koordinata_mm = kcm * 1000;


prop[SDOF_MASS] = 0.1;
prop[SDOF_ZERO_TRANS_X] = FALSE;
prop[SDOF_ZERO_TRANS_Y] = TRUE;
prop[SDOF_LOAD_F_X] = myforce;

Message("koordinata_mm    = %f \n", koordinata_mm );
Message("myforce   = %f \n", myforce);
}

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

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

Проект 

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

Привет, Антон!

С UDF всё ОК. Начни со стационара, потом переключи на нестационар, уменьши шаг в сто раз и увидишь, что сама сила нормального давления жидкости меняет знак, пружина тут не при делах. На первый взгляд это кажется нелогичным, т.к. поток дует справа налево, но такое возможно за счет снижения статического давления при ускорении потока. Вот видос с левитатором Бернулли, демонстрирующим данный эффект. Только без звука смотри. Кстати, эта штука стоит у нас в Екате в детском развлекательном центре. 

В общем, принципиально направление силы слева направо возможно. Но для точного расчета этой силы нужно разбираться с физичностью распределения давления. У тебя абсолютное давление уходит глубоко в минус, отсюда и сила чудодейственная получается явно завышенной. Первым делом я бы перепроверил ГУ. Перепад в 45 очков - это космос, хотя я понимаю, что для вашей пятки это где-то близко к реальности. Возможно, стоит подключить модель кавитации и/или сжимаемой жидкости. Также можно поиграть с плотностью сетки, особенно в зазоре.

Вообще задачи, в которых на пружинно-массовую систему действует гидродинамичская сила, зависящая от положения тела, достигают равновесного состояния крайне неохотно. Это, в частности, написано в презентациях, которые я тебе высылал по подшипникам. Чтобы помочь решению устаканиться, можно сначала найти равновесное положение при помощи оптимизатора.

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

Дмитрий - как всегда огромное Вам спасибо. Граничные условия тестовые взяты от балды, что первое в голову пришло. Это отработка методики для решения задач с клапанами. Пока цель заставить все правильно двигаться. 

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

Оптимизировал код немного. Может кому пригодится, выложу тут.

Надо еще If elce подключить, что бы сделать силу равной нулю при растяжении пружины право. Т.к в жизни сила пружины тоже будет 0 при координате больше начального значения. 

#include "udf.h" 
#include "dynamesh_tools.h"

#define koordinata_x    0.019
#define spring_stifnes_N_mm  0.2

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

{
real kcm;
real myforce;
real koordinata_mm;
real constanta;

kcm = DT_CG (dt)[0];
koordinata_mm = kcm * 1000;
constanta = koordinata_x * 1000;
myforce = spring_stifnes_N_mm * (constanta - koordinata_mm);

prop[SDOF_MASS] = 0.1;
prop[SDOF_ZERO_TRANS_X] = FALSE;
prop[SDOF_ZERO_TRANS_Y] = TRUE;
prop[SDOF_LOAD_F_X] = myforce;

Message("koordinata_mm    = %f \n", koordinata_mm );
Message("myforce   = %f \n", myforce);
}

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

А как ограничить скорость движения шара. Допустим я хочу что бы при любых перепадах давления и любых силах он не двигался быстрее чем 0,01 м/с. Это наверное упростит поиск равновесного состояния? 

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

При данных условиях описанный в коде, решения статического расчета , после включения transient шарик корректно движется влево. Далее из-за открытого клапана сильно падает сила воздействия на шарик. Потом это все летит обратно. Срабатывает контакт детекшен. Скорость шарика в момент подхода к контакт детекшен составляет 0,6 м/с это очень много. Нужно как то ограничиватьс корость движения вопреки динамике. 

#include "udf.h" 
#include "dynamesh_tools.h"

#define koordinata_x    0.019
#define spring_stifnes_N_mm  0.2

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

{
real myforce;
real kcm = DT_CG (dt)[0];
real koordinata_mm = kcm * 1000;
real constanta = koordinata_x * 1000;

if (DT_CG (dt)[0] >= koordinata_x) {
myforce =0; 
}

else {                            
myforce = spring_stifnes_N_mm * (constanta - koordinata_mm);
}

prop[SDOF_MASS] = 0.1;
prop[SDOF_ZERO_TRANS_X] = FALSE;
prop[SDOF_ZERO_TRANS_Y] = TRUE;
prop[SDOF_LOAD_F_X] = myforce;

Message("koordinata_mm    = %f \n", koordinata_mm );
Message("myforce   = %f \n", myforce);
}

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

Цитата:
Нужно как то ограничиватьс корость движения вопреки динамике. 

Если мои советы не нравятся, смотри DEFINE_CG_MOTION.

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

Советы нравятся, я не умею с оптимизатором работать. Там так просто наскоком не разобраться. Планируем приехать на обучение по оптимизации. 

Добавить комментарий

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

Максимальный размер файла: 128 МБ.
Допустимые типы файлов: txt doc docx xls xlsx pdf rar zip 7zip tar.