ВУЗ:
Составители:
1.1. Рассылка элементов локальных матриц жесткости. 41
k13=on es ( nt , 1 ) ; K=K+s p a r s e ( it1 , i t 3 , k13 , np , np ) ;
k23=on es ( nt , 1 ) ; K=K+s p a r s e ( it2 , i t 3 , k23 , np , np ) ;
% r e p l a c e next 3 l i n e s to K=K+K. ' ; f o r symmetric matrix
k21=on es ( nt , 1 ) ; K=K+s p a r s e ( it2 , i t 1 , k21 , np , np ) ;
k31=on es ( nt , 1 ) ; K=K+s p a r s e ( it3 , i t 1 , k31 , np , np ) ;
k32=on es ( nt , 1 ) ; K=K+s p a r s e ( it3 , i t 2 , k32 , np , np ) ;
k11=on es ( nt , 1 ) ; K=K+s p a r s e ( it1 , i t 1 , k11 , np , np ) ;
k22=on es ( nt , 1 ) ; K=K+s p a r s e ( it2 , i t 2 , k22 , np , np ) ;
k33=on es ( nt , 1 ) ; K=K+s p a r s e ( it3 , i t 3 , k33 , np , np ) ;
В этой функции предполагается, что мы можем векторизовать
сборку элементов локальных матриц жесткости. Для симметричной
матрицы достаточно заменить среднюю тройку операторов на K =
K +K.
′
. Именно такой стиль программирования принят в pde toolbox.
Он не требует циклов и экономичен по затрачиваемой памяти (под
все kij надо выделить один вектор).
Конечно, можно не думать о векторизации вычисления локаль-
ных матриц, жертвуя дополнительной оперативной памятью. Напри-
мер, следующая версия сравнима по времени работы с предыдущей
и даже экономичнее по требуемой памяти, чем best1.
f u n c t i o n K=assembabest3 ( p , t ) np=s i z e ( p , 2 ) ; nt=s i z e ( t , 2 ) ; do f e =3;
i t 1=t ( 1 , : ) ; i t 2=t ( 2 , : ) ; i t 3=t ( 3 , : ) ; %i t k=i n d i c e s o f l o c a l po i n t k
Kt=ones ( nt , dofe , d o fe ) ; % a l l l o c a l s t i f f n e s s matrices
K= s p a r s e ( i t 1 , i t 2 , Kt ( : , 1 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 1 , i t3 , Kt ( : , 1 , 3 ) , np , np ) ;
K=K+s p a r s e ( i t 2 , i t3 , Kt ( : , 2 , 3 ) , np , np ) ;
% r e p l a c e next 3 l i n e s to K=K+K. ' ; f o r symmetric matrix
K=K+s p a r s e ( i t 2 , i t1 , Kt ( : , 2 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t1 , Kt ( : , 3 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t2 , Kt ( : , 3 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 1 , i t1 , Kt ( : , 1 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 2 , i t2 , Kt ( : , 2 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t3 , Kt ( : , 3 , 3 ) , np , np ) ;
Следующая программа позволяет протестировать эффективность
этих версий программы сборки.
f u n c t i o n mainTestAssembK
% t e s t i n g asse mbl ing f u n c t i o n s .
c l c
1.1. Рассылка элементов локальных матриц жесткости. 41
k13=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 1 , i t 3 , k13 , np , np ) ;
k23=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 2 , i t 3 , k23 , np , np ) ;
% r e p l a c e next 3 l i n e s t o K=K+K. ' ; f o r symmetric matrix
k21=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 2 , i t 1 , k21 , np , np ) ;
k31=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 3 , i t 1 , k31 , np , np ) ;
k32=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 3 , i t 2 , k32 , np , np ) ;
k11=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 1 , i t 1 , k11 , np , np ) ;
k22=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 2 , i t 2 , k22 , np , np ) ;
k33=o n e s ( nt , 1 ) ; K=K+s p a r s e ( i t 3 , i t 3 , k33 , np , np ) ;
В этой функции предполагается, что мы можем векторизовать
сборку элементов локальных матриц жесткости. Для симметричной
матрицы достаточно заменить среднюю тройку операторов на K =
K + K.′ . Именно такой стиль программирования принят в pde toolbox.
Он не требует циклов и экономичен по затрачиваемой памяти (под
все kij надо выделить один вектор).
Конечно, можно не думать о векторизации вычисления локаль-
ных матриц, жертвуя дополнительной оперативной памятью. Напри-
мер, следующая версия сравнима по времени работы с предыдущей
и даже экономичнее по требуемой памяти, чем best1.
f u n c t i o n K=assembabest3 ( p , t ) np=s i z e ( p , 2 ) ; nt=s i z e ( t , 2 ) ; d o f e =3;
i t 1=t ( 1 , : ) ; i t 2=t ( 2 , : ) ; i t 3=t ( 3 , : ) ; %i t k=i n d i c e s o f l o c a l p o i n t k
Kt=o n e s ( nt , d ofe , d o f e ) ; % a l l l o c a l s t i f f n e s s matrices
K= s p a r s e ( i t 1 , i t 2 , Kt ( : , 1 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 1 , i t 3 , Kt ( : , 1 , 3 ) , np , np ) ;
K=K+s p a r s e ( i t 2 , i t 3 , Kt ( : , 2 , 3 ) , np , np ) ;
% r e p l a c e next 3 l i n e s t o K=K+K. ' ; f o r symmetric matrix
K=K+s p a r s e ( i t 2 , i t 1 , Kt ( : , 2 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t 1 , Kt ( : , 3 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t 2 , Kt ( : , 3 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 1 , i t 1 , Kt ( : , 1 , 1 ) , np , np ) ;
K=K+s p a r s e ( i t 2 , i t 2 , Kt ( : , 2 , 2 ) , np , np ) ;
K=K+s p a r s e ( i t 3 , i t 3 , Kt ( : , 3 , 3 ) , np , np ) ;
Следующая программа позволяет протестировать эффективность
этих версий программы сборки.
f u n c t i o n mainTestAssembK
% t e s t i n g assembling f u n c t i o n s .
clc
Страницы
- « первая
- ‹ предыдущая
- …
- 39
- 40
- 41
- 42
- 43
- …
- следующая ›
- последняя »
