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

UptoLike

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

24 Глава 2. Построение сеток в MatLab
−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1
−0.1
0
0.1
Рис. 4. Неудачная параметризация граничных сегментов.
f u n c t i o n [ x , y]= g e l l 0 ( bs , s )
d=[ pi 3/2
*
pi 0 p i /2
3/2
*
pi 2
*
pi pi /2 p i
1 1 1 1
0 0 0 0 ] ;
% STANDARD code
nbs=s i z e ( d , 2 ) ; % numbe r o f boundary segments
i f nar gin ==0, x=nbs ; r etu r n ; end
i f nar gin ==1, x=d ( : , bs ) ; retu r n ; end
x=z e r o s ( s i z e ( s ) ) ; y=z e r os ( s i z e ( s ) ) ; [m, n]= s i z e ( bs ) ;
i f m==1 && n==1,bs=bs
*
ones ( s i z e ( s ) ) ; end
%
i f isempty ( s ) ,
f o r i s =1:4 % e l l i p s e segments
i=f i nd ( bs==i s ) ;
i f isempty ( i )
a=1; b=0. 1 ;
x ( i )= a
*
cos ( s ( i ) ) ;
y ( i )= b
*
s i n ( s ( i ) ) ;
end
end
end
Как видим, сетка весьма некачественная; это объясняется тем, что
функция initmesh не может распределить равномерно узлы на гра-
нице области; угловая параметризация в данном случае не помогает
в этом. Тем не менее, этой параметризацией можно воспользоваться,
но со следующей модификацией функции gell0:
f u n c t i o n [ x , y]= g e l l 1 ( bs , s )
d=[ pi 3/2
*
pi 0 pi /2
3/2
*
pi 2
*
pi pi /2 p i
1 1 1 1
0 0 0 0 ] ;
% STANDARD code
nbs=s i z e ( d , 2 ) ; % number o f boundary segments
i f nar g in == 0, x=nbs ; r e t u r n ; end
i f nar g in == 1, x=d ( : , bs ) ; re t u r n ; end
x=z e r o s ( s i z e ( s ) ) ; y=z e r os ( s i z e ( s ) ) ; [m, n]= s i z e ( bs ) ;
i f m==1 && n==1,bs=bs
*
ones ( s i z e ( s ) ) ; end
%
24                                                                  Глава 2. Построение сеток в MatLab


            0.1


              0


           −0.1
              −1       −0.8      −0.6     −0.4      −0.2        0        0.2      0.4      0.6   0.8   1

                     Рис. 4. Неудачная параметризация граничных сегментов.
f u n c t i o n [ x , y]= g e l l 0 ( bs , s )
d=[ p i              3/2 * p i 0              p i /2
       3/2 * p i 2 * p i          p i /2 p i
           1          1             1          1
           0          0             0          0 ];
%−−−−−−−−−−−− STANDARD code −−−−−−−−−−−−−−−−−−−−−−
nbs=s i z e ( d , 2 ) ;                % number o f boundary segments
 i f n a r g i n ==0, x=nbs ; r e t u r n ; end
 i f n a r g i n ==1, x=d ( : , bs ) ; r e t u r n ; end
x=z e r o s ( s i z e ( s ) ) ; y=z e r o s ( s i z e ( s ) ) ; [m, n]= s i z e ( bs ) ;
 i f m==1 && n==1,bs=bs * on e s ( s i z e ( s ) ) ; end
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 i f ∼isempty ( s ) ,
     f o r i s =1:4 % e l l i p s e segments
         i=f i n d ( bs==i s ) ;
         i f ∼isempty ( i )
             a =1; b=0 . 1 ;
             x ( i )= a * c o s ( s ( i ) ) ;
             y ( i )= b* s i n ( s ( i ) ) ;
         end
    end
end


Как видим, сетка весьма некачественная; это объясняется тем, что
функция initmesh не может распределить равномерно узлы на гра-
нице области; угловая параметризация в данном случае не помогает
в этом. Тем не менее, этой параметризацией можно воспользоваться,
но со следующей модификацией функции gell0:
f u n c t i o n [ x , y]= g e l l 1 ( bs , s )
d=[ p i             3/2 * p i 0            p i /2
     3/2 * p i 2 * p i          p i /2 p i
          1           1           1          1
          0           0           0          0 ];
%−−−−−−−−−−−−−−−− STANDARD code −−−−−−−−−−−−−−−−−−−−−−−−−
nbs=s i z e ( d , 2 ) ;              % number o f boundary segments
 i f n a r g i n ==0, x=nbs ; r e t u r n ; end
 i f n a r g i n ==1, x=d ( : , bs ) ; r e t u r n ; end
x=z e r o s ( s i z e ( s ) ) ; y=z e r o s ( s i z e ( s ) ) ; [m, n]= s i z e ( bs ) ;
 i f m==1 && n==1,bs=bs * on e s ( s i z e ( s ) ) ; end
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−