> Макрос для ANSYS указанный в документации(mor4ansys-1.8.fm.pdf) при
> структурном анализе получает в full и emat файлы только матрицу
> жёсткости(stiffness).
Это не так. EMAT файл содержит как минимум две матрицы, если они
определены в модели. Сделайте так как написано, и посмотрите, что
получится. Если будут ошибки, пошлите листинг, который выдает MOR for
ANSYS в этом случае.
Вот есть один пример
http://www.imtek.uni-freiburg.de/simulation/mor4ansys/lab/resonator/
Он более сложный, чем нужно вам, но он показывает, что из EMAT файла
получаются все матрицы.
> antype,substruc
> seopt,mat,2,1 !будут расчитаны матрицы масс и жёсткости и записаны в
> файл mat.sub
Вы также здесь можете задать распечатку матриц в листинге ANSYS.
> antype,modal !в результате модального анализа 1 формы будут
> получены матрицы
> modopt,lanb,1
Я не особо экспериментировал с модальным анализом, поскольку это не
работает с термическими задачами.
> Но ни в одном из вариантов не считается матрица вязкости(damping
> matrix).
Это не совсем так. EMAТ содержит вязкость, если она определана на уровне
элемента. В случае BETAD и ALPHAD она действительно не записывается, но
в этом случае она на самом деле не нужна. Эти параметры можно будет
определить позже на уровне редуцированной модели.
> В руководстве(mor4ansys-1.8.fm.pdf) прочитал,что она
> необязательна и попробовал загрузить готовые emat и full файлы в
> mor_for_ANSYS.
> Итог - файлы читаются верно и матрицы масс и жёсткости
> считываются,про матрицу вязкости пишется :Empty.Почти все решатели по
> ходу решения выдают ошибку:Factoring is impossible :try another
> solver. В итоге решатель TAUCSdlt с параметром metis решает без каких-
> либо ошибок,но в итоге получаются матрицы размерностью 0.
Скорее всего у вас матрица жесткости вырождена. Попробуйте в ANSYS
решить стационарную задачу. Надо задать ограничения, чтобы не было
поступательных и вращательных движений тела.
> Вопрос - возможно ли вообще редуцирование модели в
> mor_for_ansys,если матрицы 2?
Да, конечно. Пришлите ваш сценарий в ANSYS, и я сделаю для вас пример.
> И известны ли вам методы получения матрицы вязкости при структурном
> анализе в full файл?
Да, я нашел одно более универсальное решение. Но лучше всего, если вы
пошлете пример. Вам, скорее всего, это будет не нужно.
> если изменить параметры seopt в 1 варианте макроса(seopt,mat,
> 3,1) ,то будет рассчитываться и матрица вязкости и все матрицы будут
> храниться в файле mat.sub,но с этими файлами не работает ваша
> программа и в этой ситуации wrfull игнорируется,так как матрица
> вязкости расчитывается другим решателем,а wrfull работает только при
> sparse.
Обратите внимание, что вы также можете использовать метод Guyan для
уменьшение размерности. Также можно mode superposition. Для чистой
структурной механики, это работает очень неплохо.
Евгений
P.S. Это несколько выходит за рамки этой группы, но мне кажется, что
трафик все равно не очень большой. Однако, если другие участники сочтут
это обсуждение для них не интересным, я могу для вас сделать группу
mor4ansys_ru.
Установите в SEOPT параметр SEPR=1
>> Это не совсем так. EMAТ содержит вязкость, если она определана на уровне
>> элемента. В случае BETAD и ALPHAD она действительно не записывается, но
>> в этом случае она на самом деле не нужна. Эти параметры можно будет
>> определить позже на уровне редуцированной модели.
>
> Видимо это значит,что я должен,каким-то образом определить её на
> уровне элемента?
> Указания: damp,1,1000 - недостаточно?Я в модели указываю
> nuxy,ex,dens,damp параметры.
> И я проверял,если убрать dens или damp, то при макросе варианта 1 с
> условием seopt,mat,3,1 - соответственно
> обнуляются матрицы масс или вязкости(при наличии этих параметров -
> всё есть).Но при любых других попытках
> их посчитать - mor_for_ansys находит только 2 матрицы,да и при
> листинге EMAT файла,в заголовке указано,что
> матрица вязкости не считалась.Как раз никак не могу добиться
> того,чтобы она считалась.
Вы наверное правы, при использовании DAMP в MP ANSYS может не записывать
это в элементные матрицы. Если вы посмотрите на уравнение 15-20 в
ANSYS Theory Reference (15.3. Damping Matrices), beta^m не включается в C_k.
Вам действительно нужно задавать beta разной для разных материалов? Или
ее значение одинаково и вам также подойдет команда BETAD?
> Вообще моя задача - взять данные структурного анализа из ANSYS
> проредуцировать модель и сконвертировать её для
> русскоязычной программы Pradis.Причём нужно разбить модель на
> конечные элементы в ANSYS,а прикладывать силы и тп в PRADIS.
> Как и что делать после редуцирования я в теории знаю,весь затык
> именно в редуцировании.
Несколько соображений по поводу вашей модели.
1) Я боюсь, что MOR for ANSYS несовместим с antype,substruc. Последнее -
это свой метод редукции, встроенный в ANSYS (Guyan reduction), и вы
можете использовать его независимо.
2) Алгоритм Арнольди, запрограммированный в MOR for ANSYS, предполагает,
что матрица жесткости невырождена и что задана нагрузка. Если вектор
нагрузки нулевой, то алгоритм сразу же останавливается. Здесь полезно
посмотреть на слайды 18-19 и 24
http://modelreduction.com/doc/teaching/eurosime/lecture1.pdf
Здесь приведен пример системы первого порядка, но это неважно. Важно,
что требуется определить входы и выходы. То есть, model reduction
зависит от входов. В этом отличие от Guyan reduction и mode superposition.
3) Для применения MOR for ANSYS к вашему примеру требуется задать
ограничения, скажем зафиксировать какую-нибудь сторону, и задать
нагрузку. Если это для вас неприемлимо, используйте Guyan reduction или
mode superposition. Я правда не уверен, что они будут функционировать с
вырожденной матрицей. Без нагрузки, это пожалуйста, а вот, что с ними
произойдет в случае вырожденной матрицы - это вопрос.
4) Я попробовал посмотреть про Pradis, чтобы понять вашу задачу, но, к
сожалению, www.lambda.ru недоступна. Похоже, что они не проплатили
провайдеру.
Таким образом, вначале вам надо понять, походит ли к вам требования
изложенные на слайдах выше. Теория, которая используется в MOR for
ANSYS, применяется к так называемым динамическим системам, где в
дополнении к системным матрицам определы матрицы входа и выхода.
Соответственно, когда есть только системные матрицы, теория не работает,
поскольку в этом случае нельзя определить передаточную функцию.
Евгений
Я сделал файлы для вашей модели. Вы найдете их в разделе файлы
http://groups.google.com/group/matrixprogramming_ru/web/nevid.zip
Я не могу проверить MOR for ANSYS 1.83, поскольку у меня под рукой
только ANSYS 11, а он генерит такие FULL файлы, которые старая версия не
читает. Но просто запустите с ANSYS 10 (или более старой версией)
model.ans и затем matrices.old.ans. А затем уже MOR for ANSYS 1.83. Если
будут проблемы - пожалуйста, опишите их подробнее.
> По поводу - подойдёт ли алгоритм mor_for_ansys пока думаю,возможно,всё-
> таки придётся писать что-то самому или
> использовать Guyan reduction и mode superposition
> Вы случайно не знаете,как ими воспользоваться или где найти про это
> инфу(в хелпе нашёл только математику редукции,но не то,как ей
> воспользоваться)
В описании к ANSYS все есть. Запустите там поиск и вы все должны найти.
В nevid.zip есть примеры, как их использовать с вашей моделью и
результаты сравнения с MOR for ANSYS (см. README).
Здесь так. MOR for ANSYS дает более точные результаты, причем сама
процедура редуцирования быстрее. Однако, результаты зависят от вектора
нагрузки (но можно использовать несколько нагрузок/входов)
>> Вам действительно нужно задавать beta разной для разных материалов? Или
>> ее значение одинаково и вам также подойдет команда BETAD?
>
> пока передо мной не стоит какой-то конкретной задачи(с пластиной - это
> для примера,важен сам факт получения и обработки данных на том конце в
> PRADIS) это не важно и BETAD подходит.
В случае proportional damping (ALPHAD и BETAD), матрица вязкости не
добавляет новой информации, поэтому эти параметры просто можно задать на
уровне редуцированной модели, как это, к слову сказать, и делается в
ANSYS для Guyan reduction и mode superposition. Теория для MOR for ANSYS
в этом случае представлена в
R. Eid, B. Salimbahrami, B. Lohmann, E. B. Rudnyi, J. G. Korvink.
Parametric Order Reduction of Proportionally Damped Second-Order
Systems. Sensors and Materials, v. 19, N 3, p. 149-164, 2007.
http://www.myu-inc.jp/myukk/S&M/archives/S&M19.html#No.3
Препринт http://www.rt.mw.tum.de/TRAC/TRAC1-1-EID.pdf
Задача MOR for ANSYS упростить задачу, то есть аппроксимировать исходную
динамическую систему аналогичной системой, но меньшей размерности.
Последующий расчет происходит уже вне MOR for ANSYS. Программа просто
читает большие матрицы из бинарных файлов ANSYS, находит подпространство
небольшой размерности, проецирует на него исходные матрицы и затем
записывает их в формате Matrix Market.
> Но если в задаче определены входы и выходы (а они должны быть
> определены даже в задаче NeviDa), то вопрос: влияют ли значения
> нагрузки на входе на матрицу А? Если нет, то можно задать любое
> значение нагрузки, получить матрицу А (а для 2-го порядка и другие
> матрицы) и использовать их по усмотрению NeviD, правильно?
Вы все правильно понимаете. На языке динамической системы награзка
разбивается на постоянный вектор и входную фукнцию
f(t) = bu(t)
Последняя не участвует в процессе редукции, а просто переносится без
всякого изменения. Входных функций может быть даже несколько. Однако они
привязаны к матрице входа. Это означает, что если в дальнейшем
потребуется определить новую линейно независимую нагрузку (скажем, силу
на другую ноду), то это уже нельзя будет сделать на уровне редуцируемой
модели. Процесс редуцирования придется повторить.
Посмотрите на слайд 24
http://modelreduction.com/doc/teaching/eurosime/lecture1.pdf
Там это идея выражена графически.
Матрица симметричная, поэтому это так и происходит. Выберите UMFPACK как
solver, тогда матрицы будут преобразованы к обычным - ни и считаться
будет дольше.
> Так как я их потом вручную считываю - не самая удобная форма.Хотел
> спросить - возможно ли настроить mor_for_ansys на вывод в другой
> формат MM.Например просто array или сoord.
У меня в новой версии есть возможность записать матрицы в виде таблицы,
это я сделал для Caspoc. Но чтобы это сделать в старой версии, надо
поменять код.
Более простое решение для вас - воспользуйтесь SciPy. Там есть функция
для чтения MatrixMarket и записи в виде таблицы. Скажем
matA = scipy.io.mmread('mor.A')
scipy.io.write_array('matrix.A', matA, precision=16)
> Если нет,знаете ли вы,как записывается array symmetric?
> Например для матрицы:
> 2 3 5 6
> 3 4 3 1
> 5 3 8 9
> 6 1 9 7
> в MM array symmetric - будет так(?):
> 2
> 3
> 5
> 6
> 4
> 3
> 1
> 8
> 9
> 7
Вот, что говорит формат
Symmetric Square matrix with aij = aji. Only entries on or below the
matrix diagonal are provided in the le. The entries above the main
diagonal are known by symmetry.
The entries are listed in column-major order.
То есть, как вы и написали.
Когда норма очередного вектора слишком маленькая (по умолчанию 1е-12),
он считается равным нулю и процесс останавливается - происходит так
называемая deflation. Можно изменить эту величину с помощью флага -t
1e-18 например, тогда вы получите еще вектора.
> 2.как говорил выше - моя задача изначальная была - получение матриц из
> ансиса,потом редуцирование их каким-либо методом,потом предоставление
> редуцированных матриц в Pradis и решение той же задачи,что и в
> Ансисе.В результате - сравнение результатов.
> Так вот вся работа была проделана и перепроверена и у меня получаются
> например вот такие расхождения серьёзные:
> ANSYS:0,0053
> Pradis:0,0031
> Почти в два раза.
> При этом при редуцировании я задаю только файлы full и emat с помощью
> ключа -f
> Может быть стоит как-то указать,к какому узлу приложена сила?
> Задача у меня простая: прут,правый край которого зацементирован,а к
> верхнему углу левого приложена сила.
Сила указывается в векторе нагрузке. Соответственно, вектор нагрузки уже
поменять нельзя, его можно только масштабировать при умножении на
некоторую скалярную функцию.
Посмотрите на пример, который я для вас сделал. Там ведь все
согласуется. Помните, что полученные матрицы применимы только с той
нагрузкой, которая была использована.
Вы определяете в ANSYS вектор нагрузки. Это и определяет матрицу входов.
Больше ничего задавать не надо.
> Там ещё есть настройка -C outdofs.txt для указания выходов.Вы не могли
> бы объяснить как её использовать?
> То есть,например,если выходом будет 5 узел,как должен выглядеть файл
> outdofs.txt?
Одна строка для одной степени свободы, например
name UX 3
где name - это просто имя (без пробелов), UX - степень свободы, 3 -
номер ноды, например по команде в ANSYS node(x, y, z).
Можно задать сколько угодно строк. -f определяет все степени свободы как
выходы.
Я бы посоветовал взглянуть на слайд 24 в
http://modelreduction.com/doc/teaching/eurosime/lecture1.pdf
Там показывается, как должна использоваться уменьшенная модель.
MOR for ANSYS не использует эти файлы, он использует матрицы полученные
из matrices.ans. Если вы хотите получить матрицы после Guyan reduction,
надо просто указать в команде, что вы хотите их распечатать. В команде
seopt надо для этого установить какой-то флаг - посмотрите в описании
команд ANSYS.
Правильно. Вам нужно запустить model.ans и затем matrices.old.ans. Это
даст вам исходные матрицы, которые можно использовать с MOR for ANSYS
1.83. Сценарий guyan.ans - это использование Guyan reduction для
сравнения. Аналгично modal.ans - это проведение mode superposition для
сравнения.
Этот скрипт вызывается из freq.ans, guyan.ans и modal.ans. Он записывает
результаты гармонического анализа из ANSYS в текстовой файл. Эти
текстовые файлы дальше используются в plots.py для сравнения с
результатами, полученными из уменьшеной модели.