ВУЗ:
Составители:
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 , ad−k31−k12+bg1 , np , np ) ;
K = K+s p a r s e ( i 2 , i2 , ad−k12−k23+bg2 , np , np ) ;
K = K+s p a r s e ( i 3 , i3 , ad−k23−k31+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 ! x−y ! 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 ' ] ) В результате получим следующую таблицу
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »