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