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

UptoLike

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

60 Глава 3. Программирование сборки матриц МКЭ
% from the FEM s ys te m. uN=K0\F0 r e t u r n s the s o l u t i o n
% on th e nonD i r i c h l e t p o i n t s . The s o l u t i o n to the f u l l PDE
% problem can be o bt ai ned by the MATLAB command u=N
*
uN+uD.
%
% [K, F ,N, uD,H,G]=ASSEMBPDE( bc , p , e , t , c , a , b1 , b2 , f ) g i v e s a s p l i t
% r e p r e s e n t a t i o n o f th e PDE pro blem.
%
% [ K0,M0,N]=ASSEMBPDE( bc , p , e , t , c , a , b1 , b2 , d) a ss em bl es the
% PDE e i g e n v a l u e problem Lu=lam du by e l i m i n a t i n g the D i r i c h l e t
% boundary c o n d i t i o n s . E i ge n va l ue s lam and e i g e n v e c t o r s u=N
*
uN
% can be obt ai ne d by s o l v i n g ei g e n v a l u e problem K0 uN=lam M0 uN.
%
% The geometry o f th e PDE problem i s giv en by the mesh data p , e , t ,
% bc d e s c r i b e s the boundary c o n d i t i o n s of the PDE prob lem.
%
i f nargout==6
[K, F ] = assemba (p , t , c , a , b1 , b2 , f ) ;
[N,H, uD,G]= assembe ( bc , p , e ) ;
e l s e i f ( nar gout ==4)| | ( nargout==1)
[K, F ] = assemba (p , t , c , a , b1 , b2 , f ) ;
[N,H, uD,G]= assembe ( bc , p , e ) ;
i f s i z e (N,2)== s i z e (p , 2 ) % no D i r i c h l e t boundary c o n d i t i o n s
K=K+H; % K=K0
F=F+G; % F=F0
e l s e
Nt=N. ' ;
K=K+H;
F=Nt
*
((F+G)K
*
uD ) ; % F=F0
K=Nt
*
K
*
N; % K=K0
end
i f nargout==1
uN=K\F ;
K=N
*
uN+uD; % K=u
end
e l s e i f nargout==3
K = assemba (p , t , c , a , b1 , b2 ) ;
F = assembam ( p , t , f ) ; % F=M
[N,H]=assembe ( bc , p , e ) ;
i f s i z e (N,2)== s i z e (p , 2 ) % no D i r i c h l e t boundary c o n d i t i o n s
K=K+H; % K=K0
e l s e
Nt=N. ' ;
K=Nt
*
(K+H)
*
N; % K=K0
F=Nt
*
F
*
N; % F=M0
end
e l s e
e r r o r (' assembpde : nargout' , 'Wrong number o f output pa r am e t e r s . ' ) ;
end
60                                         Глава 3. Программирование сборки матриц МКЭ


%    from t h e FEM s y s t e m . uN=K0\F0 r e t u r n s t h e s o l u t i o n
%    on t h e non−D i r i c h l e t p o i n t s . The s o l u t i o n t o t h e f u l l PDE
%    problem can be o b t a i n e d by t h e MATLAB command u=N*uN+uD.
%
%    [ K, F , N, uD , H,G]=ASSEMBPDE( bc , p , e , t , c , a , b1 , b2 , f ) g i v e s a s p l i t
%    r e p r e s e n t a t i o n o f t h e PDE p r o b l e m .
%
%    [ K0 , M0,N]=ASSEMBPDE( bc , p , e , t , c , a , b1 , b2 , d ) a s s e m b l e s t h e
%    PDE e i g e n v a l u e problem Lu=lam du by e l i m i n a t i n g t h e D i r i c h l e t
%    boundary c o n d i t i o n s . E i g e n v a l u e s lam and e i g e n v e c t o r s u=N*uN
%    can be o b t a i n e d by s o l v i n g e i g e n v a l u e problem K0 uN=lam M0 uN.
%
%    The geometry o f t h e PDE problem i s g i v e n by t h e mesh data p , e , t ,
%    bc d e s c r i b e s t h e boundary c o n d i t i o n s o f t h e PDE p r o b l e m .
%
if    n a r g o u t==6
    [ K, F ] = assemba ( p , t , c , a , b1 , b2 , f ) ;
    [ N, H, uD ,G]= assembe ( bc , p , e ) ;
e l s e i f ( n a r g o u t = = 4 ) | | ( n a r g o u t==1)
    [ K, F ] = assemba ( p , t , c , a , b1 , b2 , f ) ;
    [ N, H, uD ,G]= assembe ( bc , p , e ) ;
    i f s i z e (N,2)== s i z e ( p , 2 ) % no D i r i c h l e t boundary c o n d i t i o n s
       K=K+H;                                % K=K0
       F=F+G;                                % F=F0
    else
        Nt=N. ' ;
       K=K+H;
       F=Nt * ( (F+G)−K*uD ) ; % F=F0
       K=Nt*K*N;                             % K=K0
    end
    i f n a r g o u t==1
       uN=K\F ;
       K=N*uN+uD ;                           % K=u
    end
e l s e i f n a r g o u t==3
   K = assemba ( p , t , c , a , b1 , b2 ) ;
   F = assembam ( p , t , f ) ; % F=M
    [ N,H]= assembe ( bc , p , e ) ;
    i f s i z e (N,2)== s i z e ( p , 2 ) % no D i r i c h l e t boundary c o n d i t i o n s
       K=K+H;                                % K=K0
    else
        Nt=N. ' ;
       K=Nt * (K+H) *N;                      % K=K0
       F=Nt*F*N;                             % F=M0
    end
else
    e r r o r ( 'assembpde : na r g o u t ' , 'Wrong number o f output p a r a m e t e r s . ' ) ;
end