矩陣位移法大作業監工日記

 

 

 

5/15

新建文件夾,先做好前期結構數據化的手寫性梳理,寫一點變量的定義,感覺有很多重複的信息,但是懶得精簡了。

編寫輸入文件in.txt,和直接用const差不多,感覺不如直接程序內打表,因爲後面結構數據化的時候還是直接存的信息,泛用化水平進一步降低。

 

  1 /* 矩陣位移法大作業
  2  單元數:10  結點數:12  整體結點位移編碼:22 
  3  結點編碼:
  4  1(0,0,1)
  5  2(2,3,4)
  6  3(5,6,7,)
  7  4(0,0,0)
  8  5(8,9,10)
  9  6(5,6,11)
 10  7(0,0,12)
 11  8(13,14,15)
 12  9(16,17,18)
 13  10(13,14,19)
 14  11(0,0,0) 
 15  12(20,21,22) 
 16  單元定位向量: 柱:0 梁:1
 17  (1) 【0,0,1,2,3,4】 1,2 0
 18  (2)【2,3,4,5,6,7】 2,3  1
 19  (3)【0,0,0,8,9,10】 4,5  0
 20  (4)【8,9,10,5,6,11】 5,6  0
 21  (5)【8,9,10,13,14,15】 5,8  1
 22  (6)【5,6,11,16,17,18】 6,9  1
 23  (7)【0,0,12,13,14,15】 7,8  0
 24  (8)【 13,14,15,16,17,18】 8,9  0
 25  (9)【13,14,19,20,21,22】 10,12  1
 26  (10)【0,0,0,20,21,22】 11,12  0
 27 */
 28 /* 輸入文件 in.txt
 29  12 10 22
 30  100000 15000
 31  1000000 10000
 32  3 4 3
 33  4 3 2 
 34  20
 35  12 14 10
 36  0 0 1 
 37  2 3 4
 38  5 6 7
 39  0 0 0
 40  8 9 10
 41  5 6 11
 42  0 0 12
 43  13 14 15
 44  16 17 18
 45  13 14 19
 46  0 0 0
 47  20 21 22
 48  1 2 0
 49  2 3 1
 50  4 5 0
 51  5 6 0
 52  5 8 1
 53  6 9 1
 54  7 8 0
 55  8 9 0
 56  10 12 1
 57  11 12 0
 58 */ 
 59 
 60 
 61 
 62 
 63 #include<iostream>
 64 #include<fstream>
 65 #include<cstdio>
 66 #include<algorithm>
 67 #include<cmath> 
 68 using namespace std;
 69 double EA[3],EI[3]; //梁和柱的強度參數表
 70 double l[4],h[4],q[4],Fp; // 跨長、層高、均布荷載、集中力
 71 double K[25][25],k[25][25]; // 整體剛度矩陣 和 單元剛度矩陣
 72 double alpha,T[8][8]; //旋轉角和旋轉矩陣 
 73 int Njoint,Nelem,NglbDOF; //結點數,單元數,結點位移個數 
 74 struct Joint{ //結點信息 
 75     double x,y; //座標
 76     int GDOF[5]; //結點位移編碼 
 77 }J[20];
 78 struct Elem{ //單元信息 
 79     int N1,N2; //兩個結點
 80     int GlbDOF[8]; //單元定位向量
 81      double len,A,EI,EA; //長度,轉角,抗彎剛度,抗拉剛度 
 82 }E[15];
 83 int main(){
 84     cin>>Njoint>>Nelem>>NglbDOF; //讀入信息 並 進行結構數據化 
 85     cin>>EA[0]>>EI[0]>>EA[1]>>EI[1];
 86     for(int i=1;i<=3;++i) cin>>l[i];
 87     for(int i=1;i<=3;++i) cin>>h[i]; cin>>Fp;
 88     for(int i=1;i<=3;++i) cin>>q[i];
 89     
 90     J[1].x=J[2].x=0;  //結點初始化 
 91     J[3].x=J[4].x=J[5].x=J[6].x=l[1];
 92     J[7].x=J[8].x=J[9].x=J[10].x=l[1]+l[2];
 93     J[11].x=J[12].x=l[1]+l[2]+l[3];
 94     J[1].y=J[4].y=J[7].y=J[11].y=0;
 95     J[12].y=h[3];
 96     J[5].y=J[8].y=J[10].y=h[2];
 97     J[2].y=h[1];
 98     J[3].y=J[6].y=J[9].y=2.0*h[2];    
 99     for(int i=1;i<=Njoint;++i) 
100         for(int j=1;j<=3;++j) 
101             cin>>J[i].GDOF[j];
102             
103     for(int i=1;i<=Nelem;++i){ //單元初始化 
104         cin>>E[i].N1>>E[i].N2;
105         int opt; cin>>opt;
106         E[i].EA=EA[opt]; E[i].EI=EI[opt];
107         for(int j=1;j<=3;++j){
108             E[i].GlbDOF[j]=J[E[i].N1].GDOF[j];
109             E[i].GlbDOF[j+3]=J[E[i].N2].GDOF[j];
110         } 
111         E[i].len=sqrt(pow(J[E[i].N1].x-J[E[i].N2].x,2)+pow(J[E[i].N1].y-J[E[i].N2].y,2));
112         E[i].A=
113     }
114 
115     
116 } 
5/15

 5/16

開始寫單元剛度矩陣的生成,一個元素一個元素敲,接着生成旋轉矩陣,開始進行整體剛度陣的集成。矩陣乘法直接抄的一年級時做的大作業,估計後面解線性方程組的時候還會再copy。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章