?? ad_bwopt.m
字號:
% RCM算法優(yōu)化稀疏矩陣帶寬
enum1=size(elem1,1);
ennum1=size(elem1,2);
enum2=size(elem2,1);
ennum2=size(elem2,2);
enum3=size(elem3,1);
ennum3=size(elem3,2);
nn=sparse(nnum,nnum); %初始化節(jié)點(diǎn)相連關(guān)系矩陣
ne=zeros(nnum,1);
% 將二次六面體單元(包括退化單元)所有節(jié)點(diǎn)相鄰關(guān)系代入關(guān)系矩陣
for i=1:enum1
for j=2:ennum1
if elem1(i,j)~=0
for k=2:ennum1
if elem1(i,k)~=0
nn( elem1(i,j),elem1(i,k) )=1;
end
end
ne(elem1(i,j),1)=ne(elem1(i,j),1)+1;
end
end
end
% 將二次四面體單元所有節(jié)點(diǎn)相鄰關(guān)系代入關(guān)系矩陣
for i=1:enum2
for j=2:ennum2
if elem2(i,j)~=0
for k=2:ennum2
if elem2(i,k)~=0
nn( elem2(i,j),elem2(i,k) )=1;
end
end
ne(elem2(i,j),1)=ne(elem2(i,j),1)+1;
end
end
end
% 將一次六面體單元所有節(jié)點(diǎn)相鄰關(guān)系代入關(guān)系矩陣
for i=1:enum3
for j=2:ennum3
for k=2:ennum3
nn( elem3(i,j),elem3(i,k) )=1;
end
ne(elem3(i,j),1)=ne(elem3(i,j),1)+1;
end
end
nn_origin=nn;
nn_adopt=nn;
uplimit=getappdata(handles.apply_push,'uplimit'); %限定迭代次數(shù)的上限
k=1;
[i,j]=find(nn);
bw=max(i-j)+1;
bw0=bw;
while k<=uplimit
ndm=Cal_ndm(nn,ne,nnum);
refsh=ndsort(ndm,nnum);
nntemp=nn(refsh,refsh);
netemp=ne(refsh);
[i,j]=find(nntemp);
bw1=max(i-j)+1;
if bw>bw1
bw=bw1;
nn_opt=nntemp;
node=node(refsh,:);
end
nn=nntemp;
ne=netemp;
k=k+1;
if sort(refsh)==refsh
break;
end
end
%~~~~~~~~~~~調(diào)整節(jié)點(diǎn)編號優(yōu)化后的節(jié)點(diǎn)、單元及邊界載荷矩陣~~~~~~~~~~~~
p=node(:,1);
for i=1:nnum
node(i,1)=i;
end
%~~~~~~~~~~調(diào)整單元里的節(jié)點(diǎn)編號~~~~~~~~~~~~~~~~~~~~
for i=1:enum1
for j=2:ennum1
if elem1(i,j)~=0
elem1(i,j)=find( p==elem1(i,j) );
end
end
end
for i=1:enum2
for j=2:ennum2
if elem2(i,j)~=0
elem2(i,j)=find( p==elem2(i,j) );
end
end
end
for i=1:enum3
for j=2:ennum3
if elem3(i,j)~=0
elem3(i,j)=find( p==elem3(i,j) );
end
end
end
%~~~~~~~~~~調(diào)整邊界載荷矩陣~~~~~~~~~~~~~~~~~~~~
disps=disps(p,:);
force=force(p,:);
for i=1:nnum
disps(i,1)=i;
force(i,1)=i;
end
%~~~~~~~~~~~調(diào)整節(jié)點(diǎn)編號優(yōu)化后的節(jié)點(diǎn)、單元及邊界載荷矩陣結(jié)束~~~~~~~~~~~~
setappdata(handles.apply_push,'nn_adopt',[nn_opt]);
setappdata(handles.apply_push,'nn_origin',[nn_origin]);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -