有限元剛度矩陣的一維變頻寬儲存用C 實現(一)

2021-08-20 21:59:39 字數 1928 閱讀 4959

有限元計算中的剛度矩陣是稀疏、對稱矩陣,經過各個自由度的合理排序可以使得其中的非零元素集中在主對角線附近,形成帶狀矩陣。這樣的稀疏帶狀矩陣在儲存時一般有「二維等頻寬」和「一維變頻寬」儲存兩種方式。其中,「一維變頻寬」儲存可以節省大量的記憶體空間,提高計算速度,但現在網上大多數「一維變頻寬」儲存的資料都是基於

fortran語言的,下面討論「一維變頻寬」儲存的c++實現。以下僅僅是我自己學習的心得體會,如果大大們發現問題,歡迎提出討論

限於篇幅,關於「一維變頻寬」儲存的詳細原理就不贅述了,有興趣的同學可以去看有限元程式設計的書籍,下面僅討論其c++實現。

「一維變頻寬」儲存需要乙個儲存剛度矩陣中帶內元素的一維陣列pgk[l](l為帶內元素總數),和乙個用於儲存剛度矩陣中各行主對角線上元素在陣列pgk[l]中的序號(稱作對角元位址) 的一維輔助陣列pdiag[n](n為剛度矩陣階數)。由於剛度矩陣中元素關於主對角線對稱,故pgk[l]中只儲存剛度矩陣中上三角或者下三角部分的帶內元素。由於剛度矩陣中每行上非0元素僅出現在和該行所代表的自由度直接聯絡的那些自由度的列上,故剛度矩陣每行的最大半頻寬為:

下三角儲存的行最大半頻寬=當前行行號-直接聯絡的自由度的最小列號+1;

上三角儲存的行最大半頻寬=直接聯絡的自由度的最大列號-當前行行號+1;

首先計算一維變頻寬儲存的輔助陣列pdiag[n],因此要想辦法對節點自由度編號,之後按編好號的節點自由度組裝總剛矩陣,令節點自由度編號規則為:先對未知自由度編號,再對已知自由度編號,最後把從屬節點的自由度編號設定為主節點自由度編號(所謂從屬節點,就是乙個節點被多個單元共用的情況,就是共享節點,多個單元用的是同乙個節點,自然也就用的是相同編號的自由度)。最後得到的總剛矩陣為:

也就是:下圖中o代表未知位移,θ代表已知位移,「空」代表元素為0

可以看出,指定乙個當前自由度,則當前自由度的編號即為總剛矩陣中當前行的行號,當前列的列號。

得到輔助陣列pdiag[n]的要點為:

(1)建立單元定位矩陣pelemdof[ntotalelem][m](ntotalelem為單元總數;m為每個單元所擁有的自由度數,對於桁架單元有兩個節點,每個節點有2個自由度,故m=4),其中每行儲存了每個單元所擁有的自由度的編號;

(2)計算下三角儲存時剛度矩陣各行最大半頻寬時,先取出剛度矩陣中第i行(就是第i號自由度)的編號(即,二維陣列pelemdof[i]的第i行),之後到陣列pelemdof的第i行中尋找與該自由度相關的最小自由度編號(即,陣列pelemdof的第i行中儲存的那幾列上的元素的最小值),最後計算行最大半頻寬。

程式流程圖如下:

附**如下:

void bandanddiagcalcu(int ntotalelem,int ntotaldof,element *pelem,int ** pelemdof,int *pdiag) 

//用求出的單元定位向量矩陣求「一維壓縮儲存演算法(一維變頻寬儲存)」中,剛度矩陣中各行的半頻寬及對角元位址;

//最終pdiag中儲存的是「對角元位址」

//求出的單元定位向量矩陣儲存在pelemdof指向的整型二維陣列中

//ntotaldof為總的自由度數;pdiag為指向整型陣列的指標,該陣列長度為ntotaldof,用於儲存的是「對角元位址」

//ntotalelem為總的單元數量;pelem為指向element型的結構體陣列(單元陣列)的首位址

}else}}

pdiag[0]=0; //將pdiag中儲存的剛度矩陣第0行的主對角元位址設為0

for(i=1;i

有限元剛度矩陣的一維變頻寬儲存用C 實現(三)

在有限元剛度矩陣的一維變頻寬儲存用c 實現 二 中,我們已經把總體剛度矩陣 k 中下三角部分的帶內元素順利存入pgk陣列中,現在我們來討論如何從pgk陣列中取出 k 內的任意元素。從儲存了總剛矩陣 k 中的帶內元素的一維陣列pgk中取出總剛矩陣 k 的元素,主要是建立總剛矩陣 k 中第i行第j列的元...

有限元分析的一些基本考慮

有限元分析的一些基本考慮 單元形狀對於計算精度的影響 宋博士的部落格 筆者發現,在分析複雜問題時,我們所可能出現的錯誤,竟然是一些很根本的錯誤,這些根本錯誤是由於對有限元的基本理論理解不清晰而造成的。鑑於這個原因,筆者決定對一些基本問題 例如單元形狀問題,單元大小問題,應力集中問題等 展開調查,從而...

有限元法分析工程實際問題的一般過程

1有限元法分析工程實際問題的一般過程 應用有限元分析工程實際問題的一般過程如圖1所示。次過程可以分為三個階段,即前處理 分析和後處理。有限元分析的第一階段是把現實生活中的結構工程問題轉化為可供計算機分析的有限元模型。有限元模型的合理性 正確性將直接影響計算分析結果與工程實際之間的距離。這一過程稱為有...