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

Момент сил


German_psv

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



Доброго времени суток.

1. Применить функцию, работающую относительно центра тяжести x_cg,

Compute_Force_And_Moment(domain,tlf,x_cg,f_glob,m_glob),

ссылка на функцию имеется в f_wall.h

Попытки подключить ее через

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

ни к чему не привели. Момент не высчитывается.

Макрос DEFINE_ADJUST(my_adjust,d) также не подходит, так как в нем

нет указателя dt, который требуется для вычисления x_cg = DT_CG(dt)

Пример использования Compute_Force_And_Moment можно найти <noindex>здесь на стр. 42</noindex>.

DEFINE_SDOF_PROPERTIES вызывается до вычисления перемещений и скоростей на текущем шаге, поэтому такой подход нежелателен. При необходимости получения кинематических данных вне DEFINE_SDOF_PROPERTIES можно сделать как <noindex>тут</noindex> (см. _dt).

Важно, что в Compute_Force_And_Moment необходимо подставлять ссылку не на Dynamic_Thread, а на Thread (это разные типы структур). На Thread получить ссылку даже проще:

Domain *domain = Get_Domain(1);

Thread *t = Lookup_Thread(domain, <идентификатор_зоны>);
где <идентификатор_зоны> - целочисленный идентификатор (ID в Boundary Conditions).

И ещё, последним параметром в Compute_Force_And_Moment стоит cxboolean, равный в примере использования TRUE. Если честно - не понял что это.

Сам пока попробовать не успел, но чисто теоретически оно должно быть так.

С уважением.

Изменено пользователем Magway
Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток, German_psv.

Domain *domain = Get_Domain(6);

Дело в неправильном использовании Get_Domain (см. раздел 3.2.6 Специальные макросы (Special Macros) руководства по ФОП (UDF)). В данном случае необходимо подставлять 1 (подразумевая тем самым смесь (mixture)), можно, конечно, подставить 2, 3... (для работы с отдельной фазой (phase), например по отдельности вода, воздух и пр.), но гипотетический смысл этого пока неподвластен моему разуму :g:

Опробовал - работает, т.е. силы и моменты не нулевые. Но у меня задача объёмная и без VOF.

Thread *tfl = Lookup_Thread(domain, ZONE_ID);

Случайно обнаружил, что вместо этого можно использовать следующее (см. пример кода в разделе 2.6.1 DEFINE_CG_MOTION руководства по ФОП (UDF)):

Thread *tfl = DT_THREAD(dt);
Думаю это может сэкономить время (незначительно) при повторном использовании макроса. Опробовать не успел.

real x_cg[3]; /* CG location */

real f_glob[3]; /* Total forces (global) */

real m_glob[3]; /* Moment (global) */

...

for (i=0; i< ND_ND; i++)

x_cg=DT_CG(dt);

Так и хочется записать:

real x_cg[ND_ND];

real f_glob[ND_ND];
Но с m_glob[3] так не выйдет... не по фэншую получается.

В качестве примера использовалась UDF

Везёт Вам, мне туда никак :sad:

Непонятными для меня остаются следующие моменты:

- какие составляющие учитываются в Compute_Force_And_Moment;

- за что отвечает последний аргумент;

- использует 6DOF макрос Compute_Force_And_Moment, или справляется иначе.

С уважением.

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

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

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

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

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

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

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

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

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

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

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




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