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

UptoLike

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

54 Глава 3. Программирование сборки матриц МКЭ
K = s p a r s e ( i1 , i2 , k12+bg2 , np , np ) ;
K = K+s p a r s e ( i 2 , i3 , k23+bg3 , np , np ) ;
K = K+s p a r s e ( i 3 , i1 , k31+bg1 , np , np ) ;
K = K+s p a r s e ( i 2 , i1 , k12+bg1 , np , np ) ;
K = K+s p a r s e ( i 3 , i2 , k23+bg2 , np , np ) ;
K = K+s p a r s e ( i 1 , i3 , k31+bg3 , np , np ) ;
K = K+s p a r s e ( i 1 , i1 , adk31k12+bg1 , np , np ) ;
K = K+s p a r s e ( i 2 , i2 , adk12k23+bg2 , np , np ) ;
K = K+s p a r s e ( i 3 , i3 , adk23k31+bg3 , np , np ) ;
end
i f nargout==2
fx = c a l c ( x , y , s dl , f ) ;
fx = ( f x / 6) .
*
J ;
F = s p a r s e ( i1 , 1 , fx , np , 1 ) ;
F = F + s p a r s e ( i 2 , 1 , fx , np , 1 ) ;
F = F + s p a r s e ( i 3 , 1 , fx , np , 1 ) ;
e l s e
F = [ ] ;
end
Сравним эти две версии программы на примере. Рассмотрим об-
ласть, состоящую из 3-х подобластей, изображенную на рис. 1 (см.
§2, c. 19). Его геометрия определяется матрицей gtm. Замерим время
выполнения на 3-х сетках, выполняя функцию
f u n c t i o n mainTestAssembа
tassemba = [ ] ; tassemban = [ ] ; % as se m bl ing time
nt = [ ] ; np = [ ] ;
g=gtm ; % geometry matrix
% PDE c o e f f i c i e n t s
c=' 1 ! x .^2+y ! s i n ( x+y )' ; % s t r i n g
a=@(x , y , s d l ) y. ^2; % anonymou s f u n c t i o n
b1='x+y ! xy ! x .
*
y' ; % s t r i n g
b2=1; % double
f=@c3 ; % handle of the m . f i l e
f o r hmax=[0 . 1 0 . 0 5 0 . 0 2 ]
[ p , , t ]= in it me sh ( g , 'hmax' ,hmax ) ;
np=[np s i z e (p , 2 ) ] ; nt =[ nt s i z e ( t , 2 ) ] ;
t i c ; [K, F ] = assemba (p , t , c , a , b1 , b2 , f ) ; tassemba =[ tassemba t oc ] ;
t i c ; [K, F ] = assemban (p , t , c , a , b1 , b2 , f ) ; tassemban =[ tassemban t oc ] ;
end dis p (' np nt tassemba tassemban' )
di s p ( [ np' nt ' tassemba ' tassemban ' ] )
В результате получим следующую таблицу
54                                             Глава 3. Программирование сборки матриц МКЭ



  K =   s p a r s e ( i 1 , i 2 , k12+bg2 , np , np ) ;
  K = K+s p a r s e ( i 2 , i 3 , k23+bg3 , np , np ) ;
  K = K+s p a r s e ( i 3 , i 1 , k31+bg1 , np , np ) ;

  K = K+s p a r s e ( i 2 , i 1 , k12+bg1 , np , np ) ;
  K = K+s p a r s e ( i 3 , i 2 , k23+bg2 , np , np ) ;
  K = K+s p a r s e ( i 1 , i 3 , k31+bg3 , np , np ) ;

  K = K+s p a r s e ( i 1 , i 1 , ad−k31−k12+bg1 , np , np ) ;
  K = K+s p a r s e ( i 2 , i 2 , ad−k12−k23+bg2 , np , np ) ;
  K = K+s p a r s e ( i 3 , i 3 , ad−k23−k31+bg3 , np , np ) ;
end

i f n a r g o u t==2
   fx = calc (x , y , sdl      , f );
   f x = ( f x / 6 ) . *J ;
   F =           sparse ( i1   , 1 , fx , np , 1 ) ;
   F = F + sparse ( i2         , 1 , fx , np , 1 ) ;
   F = F + sparse ( i3         , 1 , fx , np , 1 ) ;
else
   F=[];
end

    Сравним эти две версии программы на примере. Рассмотрим об-
ласть, состоящую из 3-х подобластей, изображенную на рис. 1 (см.
§2, c. 19). Его геометрия определяется матрицей gtm. Замерим время
выполнения на 3-х сетках, выполняя функцию
f u n c t i o n mainTestAssembа
tassemba = [ ] ; tassemban = [ ] ;            % a s s e m b l i n g time
nt = [ ] ; np = [ ] ;

g=gtm ;    % geometry matrix

% PDE c o e f f i c i e n t s
c=' 1 ! x . ^2+y ! s i n ( x+y ) ' ; % s t r i n g
a=@( x , y , s d l ) y . ^ 2 ;              % anonymous f u n c t i o n
b1='x+y ! x−y ! x . * y' ;                  % string
b2 =1;                                      % double
f=@c3 ;                                     % handle of the m . f i l e
f o r hmax=[0 . 1 0 . 0 5 0 . 0 2 ]
    [ p ,∼ , t ]= i n i t m e s h ( g , 'hmax' , hmax ) ;
    np=[np s i z e ( p , 2 ) ] ; nt =[ nt s i z e ( t , 2 ) ] ;
    t i c ; [ K, F ] = assemba ( p , t , c , a , b1 , b2 , f ) ; tassemba =[ tassemba t o c ] ;
    t i c ; [ K, F ] = assemban ( p , t , c , a , b1 , b2 , f ) ; tassemban =[ tassemban t o c ] ;
end d i s p ( '                      np                 nt        tassemba       tassemban' )
d i s p ( [ np' nt ' tassemba ' tassemban ' ] )

В результате получим следующую таблицу