


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一個牛頓拉弗遜法求解非線性問題迭代過程的簡單程序例子! Example source code for Newton-Raphson Method in Non-linear Problems ! 可以進行荷載步長自動調整! Load step can be automatically adjusted! 讀者可參考該模塊加入相應的子程序編制自己的非線性計算程序module Main_Iterationuse Lxz_Tools ! 通用子程序模塊 use TypeDef ! 數據結構定義模塊 use Data_Input ! 數據輸入模塊 use Data_Output ! 數據輸出模塊 u
2、se Elem_Prop ! 單元屬性模塊 use MatSolve ! 矩陣求解模塊 implicit none contains subroutine RC2D_Main() type(typ_GValue) : GValue ! 總體控制變量數據結構數組節點數據結構數組 混凝土單元數據結構數組 鋼筋單元數據結構數組荷載數據結構數組 初始荷載 材料數據結構數組 支座數據結構數組type(typ_Node),pointer : Node(:) ! type(typ_Elem),pointer : Elem(:) ! type(typ_Rebar),pointer : Rebar(:) ! t
3、ype(typ_Load),pointer : Load(:) ! type(typ_Load),pointer : Initial_Load(:) ! type(typ_Material),pointer : Material(:) ! type(typ_Support),pointer : Support(:) !call DataInput(GValue,Node,Elem,Rebar,Material,Load,Support,& Initial_Load) ! 讀入數據! 迭代輸出數call Iteration(GValue,Node,Elem,Rebar,Load,Supp
4、ort,Initial_Load) 核心程序call DataOutput(GValue,Node,Elem,Rebar,Material,Load,Support) ! 據write(*,*) "計算成功結束 "read(*,*) deallocate(node) deallocate(Elem) deallocate(Rebar) deallocate(Load) deallocate(Support)return end subroutine subroutine Iteration(GValue0,Node0,Elem0,Rebar0,Load0,Support0,
5、Initial_Load0) type(typ_GValue) : GValue0 type(typ_Node) : Node0(:) type(typ_Elem) : Elem0(:) type(typ_Rebar) : Rebar0(:) type(typ_Load): Load0(:) type(typ_Load): Initial_Load0(:) type(typ_Support) : Support0(:) type(typ_GValue) : GValue type(typ_Node) : Node(GValue0%NNode) type(typ_Elem) : Elem(GVa
6、lue0%NElem) type(typ_Rebar) : Rebar(GValue0%NRebar) type(typ_Load): Load(GValue0%NLoad) type(typ_Load): Initial_Load(GValue0%NInitial_Load) type(typ_Support) : Support(GValue0%NSupport) Integer(ikind) : I,J,II,IIIGValue=GValue0 GValue%FinishedStep=0II=1 ! 開始計算加載步數LOOP_A: dowrite(*,*) "= write(*
7、,*) 'Step',II," 總加載步數 ",GValue%NStepwrite(*,*) ' 完成 ',(GValue%FinishedStep)/real(GValue%NStep)*100.0,'%'! 對數據進行備份,在荷載步調整操作時恢復上一步的參數 do I=1,GValue%NNode; Node(I)=Node0(I); end do do I=1,GValue%NElem; Elem(I)=Elem0(I); end do do I=1,GValue%NRebar; Rebar(I)=Rebar0(I);
8、end do do I=1,Gvalue%NLoad; Load(I)=Load0(I); end do do I=1,Gvalue%NInitial_Load; Initial_Load(I)=Initial_Load0(I); end do do I=1,GValue%NSupport; Support(I)=Support0(I); end doGValue%GError=1.0 ! 初始誤差設定為 1.0 != GValue%ForError=0.0d0 ! 前一次迭代誤差清零III=1LOOP_B: do write(*,*) 'Iteration Number:',
9、 III call Get_Elem_B(GValue,Elem,Node) ! 計算形函數 call Get_Elem_D(GValue,Elem) ! 計算混凝土單元材料本構矩陣 call Get_Elem_K(GValue,Elem) ! 計算混凝土單元剛度矩陣 call Get_Rebar_K(GValue,Rebar,Node) ! 計算鋼筋單元剛度矩陣 call Get_Elem_F(GValue,Elem) ! 計算混凝土單元荷載向量 call Get_Rebar_F(GValue,Rebar) ! 計算鋼筋單元荷載向量 ! 計算節點不平衡力call Cal_Node_DForc
10、e(GValue,Node,Elem,Rebar,Load,Initial_Load)! 計算荷載誤差call Get_Error_F(GValue, Node, Load, Initial_Load,support)if(III.ne.1) then !開始迭代! call Get_Error_F(GValue, Node) ! write(*,*) " 當前迭代誤差 :",GValue%GError if(GValue%GError<=GValue%ErrorT) then ! 誤差小于誤差容限,進行下一步計 算!do I=1,GValue%NElem! 更新相應
11、的參數 do J=1,4Elem(I)%Concrete(J)%EPS=Elem(I)%Concrete(J)%STRAIN Elem(I)%Concrete(J)%SIG=Elem(I)%Concrete(J)%Stress Elem(I)%SRebar(J)%EPS=Elem(I)%SRebar(J)%STRAIN Elem(I)%SRebar(J)%SIG=Elem(I)%SRebar(J)%Stress end do end dodo I=1, GValue%NRebarRebar(I)%SIG=Rebar(I)%Stress Rebar(I)%EPS=Rebar(I)%Strain
12、end do! 把新的參數賦給保留參數do I=1,GValue%NNode; Node0(I)=Node(I); end dodo I=1,GValue%NElem; Elem0(I)=Elem(I); end dodo I=1,GValue%NRebar; Rebar0(I)=Rebar(I); end dodo I=1,Gvalue%NLoad; Load0(I)=Load(I); end dodo I=1,GValue%NSupport; Support0(I)=Support(I); end do write(*,*) " 計算收斂 , 進行下一步計算 " II=
13、II+1GValue%FinishedStep=GValue%FinishedStep+1 ! 完成一步計算exit LOOP_Bend ifend if! 得到前 3 此誤差修正if(III=2) GValue%ForError(1)=GValue%GError if(III=3) GValue%ForError(2)=GValue%GError if(III=4) GValue%ForError(3)=GValue%GError if(III>4) thenGValue%ForError(1)=GValue%ForError(2)GValue%ForError(2)=GValue%F
14、orError(3)GValue%ForError(3)=GValue%GError end ifif(III>=30 .and. GValue%ForError(1)<GValue%ForError(2) .and. & GValue%ForError(2)<GValue%ForError(3).or.& GValue%GError>1.0d6) then ! 三次誤差持續增大! 荷載折半GValue%NStep=GValue%NStep*2if(GValue%NStep>GValue%MaxStep) then write(*,*) "最大分割步數 , 計算不收斂 "stop end ifGValue%FinishedStep=GValue%FinishedStep*2 write(*,*) "計算收斂困難 ,步長減半 "exit LOOP_B end if! 得到整體剛度矩陣并求解 ! c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 我國經濟社會及煤炭產業發展現狀與煤炭科技十二五發展規劃
- 金花優本競爭品牌媒體投放分析
- 寧夏警官職業學院《半導體器件》2023-2024學年第二學期期末試卷
- 山西省晉中學市榆社縣市級名校2025年初三第二學期二模考試英語試題含答案
- 成都銀杏酒店管理學院《化工產品市場營銷》2023-2024學年第二學期期末試卷
- 大方縣2024-2025學年數學五下期末聯考試題含答案
- 新員工銷售行業演講
- 西安思源學院《機械結構有限元分析》2023-2024學年第二學期期末試卷
- 菏澤家政職業學院《室內設計(實踐)》2023-2024學年第二學期期末試卷
- 遼寧城市建設職業技術學院《學前教育發展史略》2023-2024學年第二學期期末試卷
- 同等學力工商管理綜合復習資料(全)
- 愛愛醫資源-生理學-122排卵、黃體形成與月經周期
- 科技小巨人工程驗收培訓
- 大班繪本教案《月亮冰激凌》
- 外科學教學課件:骨盆及髖臼骨折
- 關鍵過程(工序)和特殊過程(工序)管理辦法
- 火力發電廠運煤設計規程
- 01-第一章--粉末的制取霧化法
- 專利挖掘和布局專題培訓課件
- 3D打印學習教案
- 六年級動員大會(課堂PPT)
評論
0/150
提交評論