Как убрать жесткие движения тела в линейной упругости?

9

Я хочу решить КUзнак равноб где Кмоя матрица жесткости Однако некоторые ограничения могут отсутствовать, поэтому некоторое движение твердого тела может все еще присутствовать в системе (из-за собственного нулевого значения). Поскольку я использую CG для решения линейной системы, это неприемлемо, так как иногда CG не сходится в полуположительных задачах (но иногда я могу сходиться).

На самом деле, я использую наказание смещения в том смысле, что я добавляю штраф в форме α||U||2к упругой энергии. Таким образом, энергия читает

W(u):=12uT(K+αI)ubtu
где αпринимается как пропорциональный некоторому диагональному входу матрицы жесткости. Но на самом деле это имеет эффект демпфирования некоторого режима деформации, который я когда-нибудь хотел бы иметь.

Некоторые мои вопросы:

а) Могу ли я преобразовать исходную систему, чтобы она была свободной от сингулярности и положительно определенной (такой как преобразование координат или преобразование конгруэнтности или что-то еще)? Моя идея состоит в том, чтобы использовать такое преобразование, чтобы все еще использовать CG в преобразованной проблеме

б) Есть ли стандартный способ справиться с этими особенностями?

Большое спасибо !

С уважением,

Том

Том
источник

Ответы:

6

Стандартный способ - добавить ограничение U(Икс0)знак равно0 для произвольно выбранного узла Икс0, Это гарантирует, что ваше тело не может перемещаться или вращаться и, следовательно, убирает нулевое собственное значение. Получившаяся система с этим ограничением является положительно определенной даже без штрафа.

Вольфганг Бангерт
источник
1
Спасибо! Да, но в моем случае у меня есть несколько плавающих подструктур, и я не могу сказать, какие узлы (3 не коллинеарных узла в 3D) исправить. Вот почему мне интересно, если нет решения более высокого уровня, так как в моем случае нулевое пространство хорошо известно.
Том
Если у вас есть несколько структур, вам нужно исправить один узел для каждой структуры. Неважно, какой, просто выберите один на структуру.
Вольфганг Бангерт
3
@WolfgangBangerth Это трехмерная эластичность, поэтому вам нужно закрепить три неколинейных точки, чтобы контролировать нулевое пространство измерения 6. Закрепление этих трех смещений является возмущением ранга 9, и непросто гарантировать, что модификация ранга 3 за пределами пустое пространство не меняет решение. Для любого выбора точек и значений для закрепления существует 3-мерное семейство правых частей, в котором ваша закрепленная задача дает правильный ответ только для одного члена.
Джед Браун
Нет, вы не можете закрепить 3 точки для 9 ограничений, потому что тогда вы бы также зафиксировали их относительные расстояния. Если ваши граничные условия действительно не предоставляют каких-либо других ограничений (например, если они не являются нормальным смещением по окружности), то вам нужно зафиксировать 1 точку + различные углы поворота в двух других точках, чтобы получить в общей сложности 6 ограничений.
Вольфганг Бангерт
6

Если вы знаете нулевое пространство, вы можете сделать совместимым правую часть и сделать так, чтобы метод Крылова не позволял предварительному кондиционеру вызывать загрязнение, см. Почему неправильное закрепление точки для удаления нулевого пространства? для дальнейшего обсуждения. В PETSc это делается с помощью MatNullSpaceобъекта. Обратите внимание, что вы можете предоставить свою собственную функцию для проецирования пустого пространства, что было бы полезно для снижения стоимости проецирования, когда у вас много плавающих структур.

Если вы не знаете пустое пространство и не можете избежать несовместимой правой части, существуют специальные методы Крылова, такие как MINRES-QLP, которые могут найти решение с минимальной нормой, несмотря на это. Этот подход может быть полезен, если у вас есть петли и одноточечные соединения, которые соединяют только некоторые режимы. Обратите внимание, что вы все равно должны быть осторожны с тем, что предварительный кондиционер вызывает загрязнение (например, из-за факторизации LU, обнаруживающей нулевые точки, возможно, на грубом уровне многосетки).

Джед браун
источник
Спасибо, Джед! Я думал об удалении проекцией пустого пространства непосредственно в моем итеративном методе. Но мне было интересно, если это не слишком дорого (я могу создать оператор, который проецирует нулевое пространство, так как оно действительно тривиально по эластичности). Также я думаю, что остаток должен быть спроектирован, а?
Том
2
Сделайте правую часть совместимой и проецируйте нулевое пространство после каждого приложения предварительного кондиционера (поскольку многие предварительные кондиционеры будут загрязнять нулевое пространство). Это дает оператор КрыловаКзнак равно(я-N)п-1A такой, что {б,Кб,К2б,...}ортогонально пустому пространству. Поскольку ваша задача симметрична, вам не нужна другая процедура для левого и правого пустых пространств. Это то, что делает PETSc, если вы позвоните MatSetNullSpace().
Джед Браун