Программирование МКЭ в МATLAB. Даутов P.З. - 39 стр.

UptoLike

Составители: 

Глава 3
ПРОГРАММИРОВАНИЕ СБОРКИ МАТРИЦ
МКЭ В MATLAB
§ 1. Программирование рассылки элементов
1.1. Рассылка элементов локальных матриц жесткости.
Для примера рассмотрим сборку глобальной матрицы жестко-
сти для линейных 3-х узловых конечных элементов для конечно-
элементной области, образованной разбиением сторон квадрата на nx
частей. Будем считать, что все локальные матрицы жесткости одина-
ковы, чтобы оценить расходы непосредственно на рассылку элемен-
тов. Рассмотрим 5 способов сборки для различных сеток и фиксируем
процессорное время их выполнения.
Конечно-элементное разбиение (триангуляция области) представ-
ляется тремя массивами (p, e, t) как это принято в pde toolbox. Для нас
важно, что в t(1 : 3, it) хранятся глобальные номера узлов на элемен-
те с номером it.
1-ый алгоритм (bad1), естественный, написанный согласно опре-
делению алгоритма сборки глобальной матрицы жесткости. Так про-
граммировать сборку матриц в MATLAB не рекомендуется.
f u n c t i o n K=assembabad1 (p , t )
np=s i z e ( p , 2 ) ; % number of mesh points
nt=s i z e ( t , 2 ) ; % number o f f i n i t e ele ment s
do fe =3; % number of mesh p o i n t s on f i n i t e element
K =s p a r s e ( np , np ) ; % g l o b a l s t i f f n e s s matrix
Kt=ones ( dofe , d of e ) ; % l o c a l s t i f f n e s s matrix
f o r i t =1: nt
I=t ( 1 : dofe , i t ) ; % g l o b a l po in t i n d i c e s on element i t
f o r i =1: dofe , f o r j =1: do fe % Assemble g l o b a l s t i f f n e s s matrix
i i =I ( i ) ; j j=I ( j ) ;
K( i i , j j )=K( i i , j j )+Kt ( i , j ) ;
end , end
end
2-ый алгоритм (bad2), векторизованная версия предыдущего.
Для совсем небольших сеток неплохой способ.
                                               Глава 3
    ПРОГРАММИРОВАНИЕ СБОРКИ МАТРИЦ
             МКЭ В MATLAB


              § 1. Программирование рассылки элементов

1.1. Рассылка элементов локальных матриц жесткости.

    Для примера рассмотрим сборку глобальной матрицы жестко-
сти для линейных 3-х узловых конечных элементов для конечно-
элементной области, образованной разбиением сторон квадрата на nx
частей. Будем считать, что все локальные матрицы жесткости одина-
ковы, чтобы оценить расходы непосредственно на рассылку элемен-
тов. Рассмотрим 5 способов сборки для различных сеток и фиксируем
процессорное время их выполнения.
    Конечно-элементное разбиение (триангуляция области) представ-
ляется тремя массивами (p, e, t) как это принято в pde toolbox. Для нас
важно, что в t(1 : 3, it) хранятся глобальные номера узлов на элемен-
те с номером it.
    1-ый алгоритм (bad1), естественный, написанный согласно опре-
делению алгоритма сборки глобальной матрицы жесткости. Так про-
граммировать сборку матриц в MATLAB не рекомендуется.
f u n c t i o n K=assembabad1 ( p , t )
np=s i z e ( p , 2 ) ; % number o f mesh p o i n t s
nt=s i z e ( t , 2 ) ; % number o f f i n i t e e l e m e n t s
d o f e =3;            % number o f mesh p o i n t s on f i n i t e e l e m e n t

K =s p a r s e ( np , np ) ;         % g l o b a l s t i f f n e s s matrix
Kt=o n e s ( dofe , d o f e ) ;      % l o c a l s t i f f n e s s matrix
f o r i t =1: nt
    I=t ( 1 : dofe , i t ) ;         % g l o b a l p o i n t i n d i c e s on e l e m e n t i t
    f o r i =1: dofe , f o r j =1: d o f e % Assemble g l o b a l s t i f f n e s s matrix
          i i =I ( i ) ; j j =I ( j ) ;
          K( i i , j j )=K( i i , j j )+Kt ( i , j ) ;
    end , end
end

   2-ый алгоритм (bad2), векторизованная версия предыдущего.
Для совсем небольших сеток неплохой способ.