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

UptoLike

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

1.2. Рассылка элементов локальных векторов сил. 43
принятый в best2 или best3, в зависимости от возможности вектори-
зовать вычисление локальных матриц жесткости.
Для произвольных конечных элементов можно рекомендовать
приведенную ниже функцию в предположении, что для вычисле-
ния локальной матрицы жесткости на элементе с номером it имеется
функция e = l ocsm (it, p, t).
f u n c t i o n K=assemba ( dofe , p , t )
% te mplat e f o r matrixas sem bl ing f u n c t i o n f o r dofepoint ' s FEM
np=s i z e (p , 2 ) ; % number o f mesh p o i n t s
nt=s i z e ( t , 2 ) ; % numb er o f f i n i t e element s
Kt=z e r o s ( dofe , dofe , nt ) ; % a l l l o c a l s t i f f n e s s m a tri c e s
f o r i t =1: nt
Kt ( i t , : , : ) = locsm ( i t , p , t ) ; % l o c a l s t i f f . m a t r . on element i t
end
K=s p a rse ( np , np ) ; % glo b a l s t i f f n e s s matrix
f o r i =1: dofe , f o r j =1: d o fe
K=K+s p a rse ( t ( i , : ) , t ( j , : ) , Kt ( : , i , j ) , np , np ) ;
end , end
1.2. Рассылка элементов локальных векторов сил.
Программирование сборки глобального вектора сил осуществля-
ется аналогично, за исключением того, что теперь собирается вектор,
а не разреженная матрица. Можно рекомендовать три способа про-
граммирования, в зависимости от возможности векторизации вычис-
ления компонент вектора сил. Эти способы представлены ниже.
% t e s t i n g FEM ass em bling f u n c t i o n s
t b e s t1 = [ ] ; t b e st2 = [ ] ; t b e s t3 = [ ] ;% ass em bli ng times
nt = [ ] ; np = [ ] ;
f o r nx=[10 50 100 200 400 ]
% se t the r e g u l a r ( nx+1)
*
(nx+1) mesh on the domain
[ p ,, t ]=poimesh (' sq uareg' , nx , nx ) ;
np=[np s i z e (p , 2 ) ] ; nt =[ nt s i z e ( t , 2 ) ] ;
t i c ; F=assembFbest1 (p , t ) ; t b e s t 1 =[ t b e s t1 to c ] ;
t i c ; F=assembFbest2 (p , t ) ; t b e s t 2 =[ t b e s t2 to c ] ;
t i c ; F=assembFbest3 (p , t ) ; t b e s t 3 =[ t b e s t3 to c ] ;
end
dis p (' np nt bes t1 bes t2 t b e st3' )
dis p ( [ np' nt' tbest 1 ' tb es t2 ' tb est3 ' ] )
f u n c t i o n F=assembFbest1 ( p , t )
1.2. Рассылка элементов локальных векторов сил.                                                           43


принятый в best2 или best3, в зависимости от возможности вектори-
зовать вычисление локальных матриц жесткости.
    Для произвольных конечных элементов можно рекомендовать
приведенную ниже функцию в предположении, что для вычисле-
ния локальной матрицы жесткости на элементе с номером it имеется
функция e = locsm(it, p, t).

f u n c t i o n K=assemba ( dofe , p , t )
% t e m p l a t e f o r matrix−a s s e m b l i n g f u n c t i o n f o r dofe −p o i n t ' s FEM
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
Kt=z e r o s ( dofe , dofe , nt ) ; % a l l l o c a l s t i f f n e s s m a t r i c e s
f o r i t =1: nt
    Kt ( i t , : , : ) = locsm ( i t , p , t ) ; % l o c a l s t i f f . m a t r . on e l e m e n t i t
end

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
f o r i =1: dofe , f o r j =1: d o f e
   K=K+s p a r s e ( t ( i , : ) , t ( j , : ) , Kt ( : , i , j ) , np , np ) ;
end , end



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

    Программирование сборки глобального вектора сил осуществля-
ется аналогично, за исключением того, что теперь собирается вектор,
а не разреженная матрица. Можно рекомендовать три способа про-
граммирования, в зависимости от возможности векторизации вычис-
ления компонент вектора сил. Эти способы представлены ниже.
% t e s t i n g FEM a s s e m b l i n g f u n c t i o n s
t b e s t 1 = [ ] ; t b e s t 2 = [ ] ; t b e s t 3 = [ ] ;% a s s e m b l i n g t i m e s
nt = [ ] ; np = [ ] ;

f o r nx =[10 50 100 200 4 0 0 ]
   % s e t t h e r e g u l a r ( nx+1) * (nx+1) mesh on t h e domain
    [ p ,∼ , t ]= poimesh ( ' s q u a r e g ' , nx , nx ) ;
    np=[np s i z e ( p , 2 ) ] ;      nt =[ nt s i z e ( t , 2 ) ] ;

    t i c ; F=assembFbest1 ( p , t ) ;          t b e s t 1 =[ t b e s t 1 t o c   ];
    t i c ; F=assembFbest2 ( p , t ) ;          t b e s t 2 =[ t b e s t 2 t o c   ];
    t i c ; F=assembFbest3 ( p , t ) ;          t b e s t 3 =[ t b e s t 3 t o c   ];
end
disp ('                 np                      nt                 best1             best2   tbest3')
d i s p ( [ np' nt ' t b e s t 1 ' t b e s t 2 ' t b e s t 3 ' ] )

f u n c t i o n F=assembFbest1 ( p , t )