2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 МКЭ - память под матрицу жесткости. ANSYS и собственный код.
Сообщение01.11.2006, 07:14 


31/10/06
18
Доброе утро.
Имеем задачу НДС, решаемую методом КЭ.
Размер задачи ~ 65 000 узлов. 3 степени свободы.
То есть размер матрицы будет 3*65000 на 3*65000.
Если пересчитать всё в байты, то необходимо примерно 200 ГИГАбайт оперативки.
Пусть экономное храненение матрицы (симметрия+выкинуть нулевые элементы) позволит в 10 раз сократитьнам требование памяти.
Но всё равно это будет 20 ГИГАбайт. Это в собственном коде.
НО! ANSYS решает эту задачку на персоналке с 1 Гигом оперативки, беря при этом примерно 800 мегабайт.
Вопрос: каким образом он это делает? Как он так экономно расходует память?
Может кто поможет? Хотя бы ссылку на возможные решения?
Большое спасибо.

 Профиль  
                  
 
 
Сообщение01.11.2006, 12:44 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Что-то мне подсказывает, что ненулевых элементов будет чуть меньше, чем Вы думаете. :)

Во всяком случае, не больше, чем 3*65000*N, где N --- максимальное число конечных элементов, которые могут сходиться в одном узле.

 Профиль  
                  
 
 
Сообщение01.11.2006, 13:08 


13/09/05
153
Москва
Цитата:
Пусть экономное храненение матрицы (симметрия+выкинуть нулевые элементы) позволит в 10 раз сократить нам требование памяти.


Не совсем так. Матрица жесткости получается ОЧЕНЬ сильно разреженной.
Количество ненулевых элементов в строке матрицы можно определить априори по сетке конечных элементов. Если узел N1 "соединяется" с узлом N2 посредством некоторого конечныого элемента, то в матрице жесткости элемент (N1, N2) будет ненулевым.
В обычных треугольных сетках один узел может "соединяться" с 4-8 соседними узлами (если сетка качественная и практически нет элементов с очень малыми узлами).
В четырехугольных сетках - примерно тоже самое.

Так что в итоге получаем, что в матрице жесткости в не зависимости от количества конечных элементов в строке имеется всего 4-8 (для "кривых" сеток это чуть больше, но все равно малое значение) ненулевых элементов. Во всей матрице ненулевых элементов будет ЧИСЛО СТРОК*(4-8). В Вашем случае - 65000*3*(4-8). С учетом симметрии - получаем в два раза меньше. Здесь еще важный момент - в чем хранить числа. Если используется формат double - то это 8 байт на число, float - всего 4 байта. При решении гармонических задач - необходимы комплексные числа, а это два числа на одну степень свободы.

При использовании спарс-матриц экономия получается существенной. Так, например, в задачах расчета электрических полей (1 степень свободы) с 200,000 узлов (примерно 400,000 треугольных элементов) у меня требуется метров 400-500 для формата double precision.

Добавлено спустя 13 минут 48 секунд:

worm2 писал(а):
Во всяком случае, не больше, чем 3*65000*N, где N --- максимальное число конечных элементов, которые могут сходиться в одном узле.


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

 Профиль  
                  
 
 
Сообщение01.11.2006, 21:57 


31/10/06
18
Всем большое спасибо.
Действительно количество ненулевых элементов матрицы очень мало. Например из 1.5 млн всего 36 тысяч ненулевых.
В итоге сделали хранение только ненулевых.

 Профиль  
                  
 
 
Сообщение02.11.2006, 11:32 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
VLarin писал(а):
Это если элементы первого порядка, а если высших - тут нужно также учитывать промежуточные узлы. В любом случае - число ненулевых элементов в матрице жесткости соответствует числу узлов, с которыми "соединяется" некоторый i-узел посредством конечных элементов:))

Да, Вы правы. Я должен был написать "... максимальное число рёбер конечных элементов, которые могут сходиться в одном узле".

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group