Як видалити жорсткі рухи тіла в лінійній пружності?


9

Я хочу вирішити Ku=b де Kмоя матриця жорсткості. Однак деякі обмеження можуть бути відсутніми, тому деякий жорсткий рух тіла може залишатися в системі (через власне значення нуля). Оскільки я використовую CG для вирішення лінійної системи, це не прийнятно, оскільки іноді CG не сходить на напівпозитивних проблемах (але я іноді може конвергуватися).

Насправді я використовую підхід до певного переміщення в тому сенсі, що я додаю штрафну форму α||u||2до пружної енергії. Так енергія зчитується

W(u):=12uT(K+αI)ubtu
де αприйнятий як пропорційний деякому діагональному введенню матриці жорсткості. Але насправді це впливає на зволоження деякого режиму деформації, який я хотів би колись мати.

Деякі мої запитання:

а) чи можу я перетворити оригінальну систему так, щоб зробити її без сингулярності та певного позитивного (наприклад, перетворення координат чи перетворення конгруентності чи будь-чого іншого)? Моя ідея - використовувати таке перетворення, щоб все-таки використовувати CG для перетвореної проблеми

б) Чи існує якийсь стандартний спосіб поводження з цими особливостями?

Дуже дякую !

З повагою,

Том

Відповіді:


6

Стандартний спосіб - додати обмеження u(x0)=0 для довільно обраного вузла x0. Це гарантує, що ваше тіло не може переводити чи обертатись, і тому забирає нульове власне значення. Отримана система з цим обмеженням є позитивно визначеною навіть без вашого строку покарання.


1
Дякую! Так, але я мій випадок, у мене є кілька плаваючих підструктур, і я не можу сказати, які вузли (3 нелінійні вузли в 3D) виправити. Ось чому мені цікаво, чи не існує рішення вищого рівня, оскільки в моєму випадку нульовий простір добре відомий.
Том

Якщо у вас є кілька структур, то вам потрібно виправити по одному вузлу для кожної структури. Не має значення, який саме, просто виберіть по одній структурі.
Вольфганг Бангерт

3
@WolfgangBangerth Це еластичність в 3D, тому вам потрібно зафіксувати три нелінійні точки, щоб контролювати нульовий простір розмірності 6. Закріплення цих трьох переміщень - обурення рангом 9, і нелегко переконатися, що модифікація рангу 3 перевищує нульовий простір не змінює рішення. Для будь-якого вибору точок та значень, які потрібно зафіксувати, існує тривимірне сімейство правої сторони, в якому ваша зав'язана проблема дає правильну відповідь лише для одного члена.
Джед Браун

Ні, ви не можете закріпити 3 бали за 9 обмежень, тому що ви потім також фіксуєте їх відносні відстані. Якщо ваші граничні умови дійсно не передбачають жодних інших обмежень (наприклад, якщо вони не є нормальним зміщенням по колу), вам потрібно зафіксувати 1 бал + різні кути повороту на двох інших точках загалом 6 обмежень.
Вольфганг Бангерт

6

Якщо ви знаєте нульовий простір, ви можете зробити праву частину сумісною і метод Крилова запобігає забрудненню попереднього кондиціонера, див. Чому зафіксовано крапку для видалення нульового простору? для подальшого обговорення. У PETSc це робиться за допомогою MatNullSpaceоб'єкта. Зауважте, що ви можете надати власну функцію для проектування нульового простору, що було б корисно для зменшення витрат на проекцію, коли у вас багато плаваючих структур.

Якщо ви не знаєте нульового простору і не можете уникнути несумісного правого боку, існують спеціалізовані методи Крилова, такі як MINRES-QLP, які можуть знайти рішення мінімальної норми, незважаючи на це. Цей підхід може бути корисним, якщо у вас є шарніри та одноточкові з'єднання, які з'єднують лише деякі режими. Зауважте, що ви все ще повинні бути обережними щодо попереднього кондиціонера, що спричиняє забруднення (наприклад, через LU-факторизацію, що знаходить нульові повороти, можливо, на грубому рівні мультисетки).


Дякую тобі Джеде! Я думав про видалення нульового простору за допомогою проекції безпосередньо в своєму ітеративному методі. Але мені було цікаво, чи це не надто дорого (я можу створити оператора, який проектує нульовий простір, оскільки він справді банальний по еластичності). Також я думаю, що залишок слід також спроектувати?
Том

2
Зробіть сумісність правої сторони та спроектуйте нульовий простір після кожного застосування попереднього кондиціонера (адже багато попередніх кондиціонерів забруднить нульовий простір). Це дає оператору КриловаK=(IN)P1A такий як {b,Kb,K2b,}є ортогональним до нульового простору. Оскільки ваша проблема симетрична, вам не потрібна інша рутина для лівого та правого нульових пробілів. Це те, що робить PETSc, якщо ви телефонуєте MatSetNullSpace().
Джед Браун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.