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

UptoLike

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

58 Глава 3. Программирование сборки матриц МКЭ
e=e ( : , e (6 ,:) == 0| e (7 ,: ) == 0) ; % a l l boundary edg es
i e=e ( 5 , : ) ;
[ bsg ,]= f i n d ( s p a rs e ( ie , ie , 1 , np , np ) ) ; % i n d i c e s o f boundary segments
nbsg=numel ( bsg ) ;
% s e t l o c a l numeration o f boundary segments
l o c=z e r o s (1 , nbsg ) ;
% s e t mixed boundary co n d i t i o n s
i f nargout >=2
bsN=bc.bsN ;
i f numel ( bsN)>0
i f bsN==in f , bsN=bsg ; end % a l l b . c . a re mixed
l o c ( bsN)= 1 : numel ( bsN ) ;
% fi n d boudary ed ges with mixed b . c .
eN=e ( [ 1 2 5 ] , ismember ( i e , bsN ) ) ;
i 1=eN ( 1 , : ) ; i2=eN ( 2 , : ) ; % i n d i c e s o f s t a r t and end po i n t s
x=0. 5
*
(p (1 , i 1 )+p ( 1 , i 2 ) ) ; y=0. 5
*
(p (2 , i 1 )+p ( 2 , i 2 ) ) ;
h=s q r t ( ( p (1 , i 2 )p (1 , i1 ) ) . ^2+(p (2 , i 2 )p (2 , i1 ) ) . ^2 ) ; % edge s l en g th
s d l=l o c ( eN ( 3 , : ) ) ;
% e v al u a t e sigma , mu on edg es b ar y ce nt e r
sx = c a l c ( x , y , sdl , b c . s g ) ;
mx = c a l c ( x , y , sdl , bc.mu ) ;
% d ia g o na l and o f f d i ag o n al e le men ts o f edge mass matrix
so = ( sx /6) .
*
h ; sd = 2
*
so ; % ' exact ' i n t e g r a t i o n
%so = ( sx /4) .
*
h ; sd = so ; % qu adra ture r u l e
H = s p ar s e ( i1 , i2 , so , np , np ) ;
H = H + s p a r s e ( i2 , i1 , so , np , np ) ;
H = H + s p a r s e ( i1 , i1 , sd , np , np ) ;
H = H + s p a r s e ( i2 , i2 , sd , np , np ) ;
i f nargout==4
mx = c a l c ( x , y , s dl , bc.mu ) ;
mx = (mx/2) .
*
h ;
G = s p a r se ( i1 , 1 ,mx, np , 1 ) ;
G = G + s pa r s e ( i2 , 1 ,mx, n p , 1 ) ;
end
end
end
% s e t D i r i c h l e t boundary co n d i t i o n s
bsD=bc.bsD ;
i f numel ( bsD)>0
i f bsD==i n f , bsD=bsg ; end % a l l b . c . a re D i r i c h l e t
l o c ( bsD)= 1 : numel ( bsD ) ;
i f a l l ( l o c ==0),
di s p (' e r r o r . bsD+bsN = number o f boundary segments' )
end
eD=e ( [ 1 2 5 ] , ismember ( i e , bs D ) ) ; % boudary e dge s with D i r i c h l e t b . c .
58                                               Глава 3. Программирование сборки матриц МКЭ


e=e ( : , e ( 6 , : ) = = 0 | e ( 7 , : ) = = 0 ) ; % a l l boundary e d g e s
i e=e ( 5 , : ) ;
[ bsg ,∼]= f i n d ( s p a r s e ( i e , i e , 1 , np , np ) ) ; % i n d i c e s o f boundary segments
nbsg=numel ( bsg ) ;

% s e t l o c a l numeration o f boundary segments
l o c=z e r o s ( 1 , nbsg ) ;

% s e t mixed boundary c o n d i t i o n s
i f nargout >=2
   bsN=bc.bsN ;
   i f numel ( bsN)>0
      i f bsN==i n f , bsN=bsg ; end % a l l b . c . a r e mixed
      l o c ( bsN)= 1 : numel ( bsN ) ;
      % f i n d boudary e d g e s with mixed b . c .
      eN=e ( [ 1 2 5 ] , ismember ( i e , bsN ) ) ;

      i 1=eN ( 1 , : ) ; i 2=eN ( 2 , : ) ; % i n d i c e s o f s t a r t and end p o i n t s
      x=0 . 5 * (p ( 1 , i 1 )+p ( 1 , i 2 ) ) ; y=0 . 5 * (p ( 2 , i 1 )+p ( 2 , i 2 ) ) ;
      h=s q r t ( ( p ( 1 , i 2 )−p ( 1 , i 1 ) ) . ^2+(p ( 2 , i 2 )−p ( 2 , i 1 ) ) . ^ 2 ) ; % e d g e s l e n g t h

      s d l=l o c ( eN ( 3 , : ) ) ;
      % e v a l u a t e sigma , mu on e d g e s b a r y c e n t e r
      sx      = calc (x , y , sdl , bc.sg ) ;
      mx      = c a l c ( x , y , s d l , bc.mu ) ;

      % d i a g o n a l and o f f d i a g o n a l e l e m e n t s o f edge mass matrix
      s o = ( sx / 6 ) . *h ;    sd = 2 * s o ; % 'ex act ' i n t e g r a t i o n
      %s o = ( sx / 4 ) . *h ; sd = s o ;               % quadrature r u l e

      H   =     sparse ( i1         , i2   , so , np , np ) ;
      H   = H + sparse ( i2         , i1   , so , np , np ) ;
      H   = H + sparse ( i1         , i1   , sd , np , np ) ;
      H   = H + sparse ( i2         , i2   , sd , np , np ) ;

    i f n a r g o u t==4
       mx = c a l c ( x , y , s d l , bc.mu ) ;
       mx = (mx/ 2 ) . *h ;
       G =           s p a r s e ( i 1 , 1 , mx, np , 1 ) ;
       G = G + s p a r s e ( i 2 , 1 , mx, np , 1 ) ;
    end
  end
end

% s e t D i r i c h l e t boundary c o n d i t i o n s
bsD=bc.bsD ;
i f numel ( bsD)>0
   i f bsD==i n f , bsD=bsg ; end % a l l b . c . a r e D i r i c h l e t
   l o c ( bsD)= 1 : numel ( bsD ) ;
   i f a l l ( l o c ==0),
       d i s p ( ' e r r o r . bsD+bsN ∼= number o f boundary segments' )
   end
   eD=e ( [ 1 2 5 ] , ismember ( i e , bsD ) ) ; % boudary e d g e s with D i r i c h l e t b . c .