在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾何非線性有限元基本原理及matlab編程

8XCt_sim_ol ? 來源:仿真秀App ? 2023-02-17 10:09 ? 次閱讀

4、幾何非線性matlab代碼實現(xiàn)

(1)非線性求解算法流程總結(jié)

在前面的部分中,描述了通過增量迭代數(shù)值方法求解線性化平衡方程組的過程。通用求解算法的流程圖如圖19所示。

19774a8e-adf9-11ed-bfe3-dac502259ad0.png

圖19

(2)matlab代碼實現(xiàn)

① 切線剛度矩陣的matlab代碼

根據(jù)公式(24),切線剛度矩陣中的彈性剛度矩陣實現(xiàn)代碼如下:

19886a58-adf9-11ed-bfe3-dac502259ad0.png

根據(jù)公式(25),切線剛度矩陣中的幾何剛度矩陣實現(xiàn)代碼如下,注釋掉的部分為應(yīng)變張量的高階項,可根據(jù)需要決定計算與否:

19990e44-adf9-11ed-bfe3-dac502259ad0.png

在上述彈性剛度矩陣和幾何剛度矩陣得到后,單元的切線剛度矩陣實現(xiàn)代碼為:

19a86e84-adf9-11ed-bfe3-dac502259ad0.png

② 非線性系統(tǒng)求解的matlab代碼

主函數(shù)首先初始化節(jié)點位移向量 U、載荷比值 lr。然后,增量迭代過程以一個while循環(huán)開始,該循環(huán)一直運行直到達(dá)到最大步數(shù)。增量步數(shù)計數(shù)器在增量循環(huán)開始時立即遞增。預(yù)測階段從更新UL公式的參考構(gòu)型開始。

在當(dāng)前的平衡構(gòu)型下,即在上一步結(jié)束時獲得的單元內(nèi)力和節(jié)點位移基礎(chǔ)上,計算預(yù)測階段的切線剛度矩陣 Kt。因此,tangStiffMtxUL()函數(shù)接收單元結(jié)構(gòu)體數(shù)據(jù)的向量和節(jié)點位移的向量,兩者都使用上一步的結(jié)果進(jìn)行了更新。然后,切線剛度矩陣用于計算位移的切線增量d_Ut,通過使用參考載荷矢量求解線性系統(tǒng),求解線性系統(tǒng)函數(shù)solveLinearSystem()。

下一步是計算預(yù)測階段荷載比增量。當(dāng)增量步是第一步時,預(yù)測增量的初始符號s設(shè)置為正數(shù),且負(fù)載率增量 d_lr認(rèn)為指定,另外存儲第一步中位移切線增量d_Ut的范數(shù)的平方值,n2。該值用來在后續(xù)步驟中計算GSP。對于剩余的增量步(增量步>1),GSP根據(jù)公式(41)計算,增量符號在根據(jù)公式(42)進(jìn)行調(diào)整,即每次 GSP 值為負(fù)時必須反轉(zhuǎn)預(yù)測階段荷載比增量的符號。

之后,根據(jù)式(40)獲得增量大小的調(diào)整因子J。需要指出表達(dá)式中的變量 iter存儲上一步執(zhí)行的迭代次數(shù),必須將其增加1以避免被零除,因為預(yù)測的解對應(yīng)于零次迭代。如果用戶選擇以恒定增量執(zhí)行分析,則調(diào)整因子J的值設(shè)置為一。最后,根據(jù)公式(38)計算預(yù)測的荷載比增量。得到荷載率預(yù)測增量后,根據(jù)式(36)計算位移預(yù)測增量d_U(僅使用位移的切線增量),并對當(dāng)前增量步的載荷比和位移增量(D_lr 和 D_U)進(jìn)行更新。

迭代校正階段,首先迭代次數(shù)的計數(shù)器iter被初始化為零,因為假設(shè)第一次校正迭代僅在預(yù)測階段的收斂之后才開始。然后迭代循環(huán)開始于一個while循環(huán)中,該循環(huán)運行直到達(dá)到最大迭代次數(shù)或者不收斂時停止。

在迭代循環(huán)開始時,載荷比和節(jié)點位移的總值用上次迭代獲得的修正增量更新,或者如果剛進(jìn)入循環(huán)則用預(yù)測階段的增量更新。外部節(jié)點力矢量 P 很容易從總載荷比lr中獲得,而內(nèi)部節(jié)點力矢量 F 需要在通過intForcesUL()函數(shù)針對當(dāng)前節(jié)點位移進(jìn)行計算。然后通過外力和內(nèi)力矢量之間的差獲得殘余力矢量 R。

基于殘余力范數(shù)的標(biāo)準(zhǔn)檢查當(dāng)前迭代的收斂性,如公式(43) 所示。如果與參考荷載向量的比足夠小,則迭代收斂,算法退出循環(huán)進(jìn)入下一個增量步。否則,算法繼續(xù)進(jìn)行下一次迭代校正并立即遞增迭代次數(shù)inter。 荷載和位移增量校正迭代前先要選擇迭代方案。如果選擇標(biāo)準(zhǔn)的 Newton-Raphson 迭代,將使用更新后的構(gòu)型來計算新的切線剛度矩陣,即使用在上一次迭代結(jié)束時獲得的單元內(nèi)力和節(jié)點位移。否則,如果選擇修正Newton-Raphson 迭代法,則繼續(xù)使用在預(yù)測階段的得到的切線剛度矩陣。

位移校正的切線增量d_Ut和殘余增量d_Ur分別使用參考載荷Pref和殘余力R用線性系統(tǒng)計算。荷載比比的迭代校正選用恒定圓柱弧長法的表達(dá)式,由方程式(45)給出。最終根據(jù)方程(36)得到節(jié)點位移的迭代修正。一旦獲得載荷和位移的修正值,運用其增量值來更新前增量步。最后,更新總的位移和荷載。

對于給定的位移計算內(nèi)力基于UL公式通過函數(shù)intForcesUL()實現(xiàn),首先初始化內(nèi)力的全局向量,然后,對所有單元執(zhí)行循環(huán),計算局部坐標(biāo)系下每個單元的內(nèi)力矢量,將其轉(zhuǎn)換為全局坐標(biāo)系下的內(nèi)力矢量,并將其組裝至全局矢量中。在循環(huán)開始時,計算單元伸長率D_L,是通過當(dāng)前單元長度 L_c 與參考配置(每個增量步開始時)的長度 L_1 之間的差值獲得的。

之后,計算單元剛體旋轉(zhuǎn)角度(單元與全局坐標(biāo)系X軸的角度),即每個增量步開始時的角度angle_1+剛體旋轉(zhuǎn)增量 rbr。當(dāng)前角度在單元結(jié)構(gòu)體中更新。

內(nèi)力增量矢量D_f1彈性剛度矩陣與相對位移矢量(變形矢量)的乘積計算得出的。此增量添加到總內(nèi)力矢量,獲得局部坐標(biāo)系中當(dāng)前構(gòu)型下的總內(nèi)力fl存儲在單元數(shù)據(jù)結(jié)構(gòu)中,用于計算切線剛度矩陣(幾何剛度矩陣)。通過將局部坐標(biāo)系中的內(nèi)力矢量乘以旋轉(zhuǎn)矩陣,獲得全局坐標(biāo)系下的內(nèi)力矢量。最后,使用單元索引矢量將單元內(nèi)力插入到全局矢量中。

(預(yù)測階段代碼)
function Result = solve(Model,Anl,Elem,Pref)
% 初始化節(jié)點位移和荷載比
U = zeros(Model.neq,1);
lr = 0;
% 初始化result結(jié)構(gòu)體,并插入初始平衡點
Result = struct('U_step',[],'U_iter',[],'lr_step',[],'lr_iter',[]);
Result.U_step(:,1) = U;
Result.U_iter(:,1) = U;
Result.lr_step(1) = lr;
Result.lr_iter(1) = lr;
%===========開始增量步求解過程====================================
step = 0;
while (step < Anl.max_steps)
step = step + 1;   
% 更新參考構(gòu)型下的UL方程(L_1根據(jù)上一增量步結(jié)束時的位移U進(jìn)行更新;angle_1隨著迭代步更新并將上一增量步結(jié)束的angle作為該步angle_1;內(nèi)力fi_1同angle)
% 此處更新的L_1,angle_1和phi_1會在求解內(nèi)力的函數(shù)中用到intForcesUL
for i = 1:Model.nel
Elem(i).L_1     = elemLength(Elem(i),U); %L_1  Length from beggining of step
Elem(i).angle_1 = Elem(i).angle; %angle_1 Angle with horizontal axis from beggining of step
Elem(i).fi_1    = Elem(i).fi; %fi_1 Vector of internal forces in local system from beggining of step
end
% 切線剛度矩陣(根據(jù)Ui-1更新Ki0)
[Kt,Elem] = tangStiffMtxUL(Model,Anl,Elem,U) ;  %%根據(jù)i-1增量步的位結(jié)束移向量更新節(jié)點位置后得到的單元剛度矩陣(單元長度,單元角度),但返回的Elem只更新了Ke用來接下來計算內(nèi)力
% 預(yù)測解位移的切線增量delta_Ui1
d_Ut = solveLinearSystem(Model,Kt,Pref);%delta_Ui1預(yù)測階段的位移的切線增量,接下來是計算預(yù)測階段的荷載比增量(增量步是否為第一增量步對應(yīng)的荷載比增量公式不同)    
if (step == 1)
s = 1;       %第一增量步的預(yù)測階段的增量的符號默認(rèn)為正
d_lr = Anl.init_incr;   %delta_lamda_11 人為規(guī)定預(yù)測階段d_lr    
n2 = d_Ut'*d_Ut;%第一增量步中位移切線增量的范數(shù)的平方值,會在后續(xù)分析步計算GSP
else 
GSP = n2 / (d_Ut'*d_Ut_1);%公式(41)    % Generalized Stiffness Parameter   
if (GSP < 0)
s = -s; %公式(42) 增量步符號
end        
% 增量步調(diào)整系數(shù)J
% J = sqrt((Anl.trg_iter + 1) / (iter + 1));%目標(biāo)迭代次數(shù)/上一增量步步的迭代次數(shù)(公式(40))必須將其增加 1 以避免被零除,因為預(yù)測的解對應(yīng)于零次迭代
J = 1;      
%% 預(yù)測階段荷載比增量  采用圓柱弧長法 
% Extract free DOF components
D_U_temp   = D_U(1:Model.neqf);
d_Ut_temp  = d_Ut(1:Model.neqf);
d_lr = J * sqrt((D_U_temp'*D_U_temp) /(d_Ut_temp'*d_Ut_temp));%公式38:圓柱弧長法
% Apply correct sign
d_lr = s * d_lr;   
end    
% 荷載比要小于規(guī)定值(==1)
if ((Anl.max_ratio > 0.0 && lr + d_lr > Anl.max_ratio) ||...
(Anl.max_ratio < 0.0 && lr + d_lr < Anl.max_ratio))
d_lr = Anl.max_ratio - lr;%保證恰好達(dá)到最終的荷載比增量1實現(xiàn)荷載的全部施加
end   
d_U = d_lr * d_Ut;%根據(jù)公式(36)預(yù)測階段假定殘差為零因此,只有前一項切線增量   
% Store predicted results
d_lr_1 = d_lr; d_Ut_1 = d_Ut; d_U_1  = d_U;       
% 前步的載荷比和位移增量(后續(xù)會隨著迭代不斷更新疊加)
D_lr = d_lr;  D_U  = d_U;   
% 總荷載比和位移
lr = lr + d_lr;
U  = U  + d_U;   
%
(校正迭代階段代碼)   
% Start iterative process
iter = 0;
conv = 0;
while (conv == 0 && iter < Anl.max_iter)
% External and internal forces
P = lr * Pref;
[F,Elem] = intForcesUL(Model,Elem,U,D_U,1);%采用上一次迭代計算得到的Ke,并根據(jù)D_U對Ele.angle和Ele.fi進(jìn)行更新
R = P - F;    %殘余力矢量   
% Store iteration results
Result.U_iter(:,size(Result.U_iter,2)+1) = U;
Result.lr_iter(size(Result.lr_iter,2)+1) = lr;
% Check for  convergence
conv = (norm(R(1:Model.neqf))/norm(Pref(1:Model.neqf)) < Anl.tol);
if (conv == 1)
break;
end
% Start/keep corrective cycle of iterations
iter = iter + 1;
[Kt,Elem] = tangStiffMtxUL(Model,Anl,Elem,U);   %每次迭代更新,標(biāo)準(zhǔn)牛頓拉普森方法,Elem.ke更新


% Tangent and residual increments of displacements
d_Ut = solveLinearSystem(Model,Kt,Pref);
d_Ur = solveLinearSystem(Model,Kt,R);


% 荷載比修正(公式(45))恒定弧長法-圓柱法
a = d_Ut'*d_Ut;
b = d_Ut'*(d_Ur + D_U);
c = d_Ur'*(d_Ur + 2*D_U);%D_U為上一迭代步的值,d_Ur為本步更新后的值
s_iter = sign(D_U'*d_Ut);
d_lr = -b/a + s_iter*sqrt((b/a)^2 - c/a);        


%如果增量步過大可能會出現(xiàn)復(fù)數(shù)
if (~isreal(d_lr))
conv = -1;
break;
end


% 公式(36)
d_U = d_lr * d_Ut + d_Ur;


% Increments of load ratio and displacements for current step
D_lr = D_lr + d_lr;
D_U  = D_U  + d_U;


% Total values of load ratio and displacements
lr = lr + d_lr;
U  = U  + d_U; 
end
%----------------------------------------------------------------------------------
(內(nèi)力計算)
function [F,Elem] = intForcesUL(Model,Elem,U,D_U,update_angle)
% Initialize global vector of internal forces
F = zeros(Model.neq,1);
for i = 1:Model.nel
% Lengths: Beginning of step, current, and step increment
L_1  = Elem(i).L_1;%每個增量步開始時進(jìn)行更新
L_c  = elemLength(Elem(i),U);
D_L  = L_c - L_1;


% Rigid body rotation from step beginning and current angle
rbr   = elemAngleIncr(Elem(i),U,D_U);%rbr帶有符號,增加正值,減少負(fù)值
angle = Elem(i).angle_1 + rbr;


% Update element angle
if (update_angle)
Elem(i).angle = angle;
end


% Rotation matrix from local to global coordinate system
c = cos(angle);
s = sin(angle);
rot = [ c -s  0  0  0  0;
s  c  0  0  0  0;
0  0  1  0  0  0;
0  0  0  c -s  0;
0  0  0  s  c  0;
0  0  0  0  0  1 ];
% Relative rotations(變形轉(zhuǎn)角)
r1 = D_U(Elem(i).n1.dof(3)) - rbr;
r2 = D_U(Elem(i).n2.dof(3)) - rbr;
% Vector of local displacements
dl = [0; 0 ; r1; D_L; 0; r2];%沒有y向變形,只有軸向和轉(zhuǎn)動變形???
% Increment of internal forces in local system
D_fl = Elem(i).ke * dl;


% Total internal forces in local system
fl = Elem(i).fi_1 + D_fl;


% Store total internal forces in local system
Elem(i).fi = fl;
% Transform internal forces from local system to global system
fg = rot * fl;
% Assemble element internal forces to global vector
gle    = Elem(i).gle;
F(gle) = F(gle) + fg;
end
end








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • matlab
    +關(guān)注

    關(guān)注

    188

    文章

    2998

    瀏覽量

    233380
  • GSPM
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    6166
  • MATLAB編程
    +關(guān)注

    關(guān)注

    1

    文章

    13

    瀏覽量

    8577

原文標(biāo)題:SimPC博士:幾何非線性有限元基本原理及matlab編程(下)

文章出處:【微信號:sim_ol,微信公眾號:模擬在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    【PDF】matlab有限元法計算分析程序編寫

    【PDF】matlab有限元法計算分析程序編寫附件:
    發(fā)表于 02-28 11:04

    MATLAB有限元分析與應(yīng)用

    有限元分析和應(yīng)用。另外,本書還提供了大量免費資源。 第1章引言 1.1有限元方法的步驟 1.2用于有限元分析的MATLAB函數(shù) 1.3MATLAB
    發(fā)表于 02-28 11:07

    OASYS.Suite.13.1.WINDOWS.LINUX.64通用非線性瞬態(tài)動力分析有限元軟件

    OASYS.Suite.13.1.WINDOWS.LINUX.64通用非線性瞬態(tài)動力分析有限元軟件OASYS Suite是其一系列軟件的套裝:Oasys PRIMER、Oasys T/HIS
    發(fā)表于 07-02 16:22

    線性電源的基本原理是什么

    多路線性電源 AC-DC穩(wěn)壓電源 低紋波電源 可調(diào)線性電源 原理圖PCB目錄多路線性電源 AC-DC穩(wěn)壓電源 低紋波電源 可調(diào)線性電源 原理圖PCB
    發(fā)表于 07-30 07:47

    有限元法的原理

    1有限元法原理有限元法是以變分原理為基礎(chǔ)的一種數(shù)值計算方法。把所要求解的邊值問題轉(zhuǎn)化為相應(yīng)的變分問題,利用剖分、插值和離散化,把變分問題轉(zhuǎn)化為普通多元函數(shù)的極值問題,得到一組多元代數(shù)方程組,求解得到
    發(fā)表于 09-06 08:08

    膜式空氣彈簧非線性彈性特性有限元分析

    膜式空氣彈簧非線性彈性特性有限元分析:本文以自由膜式空氣彈簧為研究對象,采用有限元的理論方法,應(yīng)用非線性有限元軟件ABAQUS 建立了空氣彈
    發(fā)表于 08-23 14:37 ?20次下載

    有限元分析及應(yīng)用_曾攀

    本書強(qiáng)調(diào)有限元分析的工程概念、數(shù)學(xué)力學(xué)基礎(chǔ)、建模方法以及實際應(yīng)用,全書包括3篇,共分12章;第一篇為有限元分析的基本原理,包括第1章至第5章,內(nèi)容有:有限元分析的力學(xué)基
    發(fā)表于 05-02 08:40 ?0次下載

    電機(jī)內(nèi)電磁場的有限元計算

    介紹了有限元基本原理,以QFSN 220 隱極式汽輪發(fā)電機(jī)作為分析模型,應(yīng)用ANSYS 專業(yè)有限元分析軟件對其進(jìn)行了磁場分析,結(jié)果基本與設(shè)計值相符。
    發(fā)表于 05-27 16:24 ?28次下載
    電機(jī)內(nèi)電磁場的<b class='flag-5'>有限元</b>計算

    求解時步有限元系統(tǒng)方程的改進(jìn)非線性算法_劉慧娟

    求解時步有限元系統(tǒng)方程的改進(jìn)非線性算法_劉慧娟
    發(fā)表于 01-08 13:58 ?1次下載

    如何使用Matlab進(jìn)行有限元分析和硬盤的選購與使用資料說明

    介紹了Matlab 語言特點,給出了Matlab 環(huán)境下實現(xiàn)有限元的步驟。并以一個具體實例說明如何使用Matlab 進(jìn)行有限元分析。使用該方
    發(fā)表于 07-24 16:27 ?5次下載
    如何使用<b class='flag-5'>Matlab</b>進(jìn)行<b class='flag-5'>有限元</b>分析和硬盤的選購與使用資料說明

    使用MATLAB有限元建模材料

    使用MATLAB有限元建模材料說明。
    發(fā)表于 05-27 09:39 ?0次下載

    非線性有限元及程序》凌道盛、徐興編著

    非線性有限元及程序》凌道盛、徐興編著
    發(fā)表于 11-13 16:01 ?0次下載

    基于Matlab有限元編程的變截面懸臂梁分析

    近日我注冊并認(rèn)證了仿真秀專欄,將在仿真秀官網(wǎng)和App給平臺用戶帶來Matlab有限元編程、復(fù)雜函數(shù)擬合和matlab繪圖相關(guān)內(nèi)容。此外還會帶來隔震建筑Abaqus建模仿真分析等內(nèi)容。本
    的頭像 發(fā)表于 09-08 11:11 ?4744次閱讀

    基于六面體單元熱應(yīng)力問題的Matlab有限元編程求解

    導(dǎo)讀:上一篇《彈性地基梁matlab有限元編程,以雙排樁支護(hù)結(jié)構(gòu)計算為例》引起了Matlab有限元編程
    的頭像 發(fā)表于 11-17 11:10 ?3521次閱讀

    SimPC博士:幾何非線性有限元基本原理matlab編程

    非線性系統(tǒng)求解難點在于,即在任何平衡構(gòu)型下,切線剛度矩陣的計算取決于結(jié)構(gòu)的變形幾何形狀和單元的內(nèi)力(見part1剛度矩陣推導(dǎo))。 這些屬性是從節(jié)點位移獲得的,但節(jié)點位移是未知數(shù)。 因此,無法解析求解平衡方程組,需要運用數(shù)值方法進(jìn)行處理。
    的頭像 發(fā)表于 02-02 11:13 ?3699次閱讀
    SimPC博士:<b class='flag-5'>幾何</b><b class='flag-5'>非線性</b><b class='flag-5'>有限元</b><b class='flag-5'>基本原理</b>及<b class='flag-5'>matlab</b><b class='flag-5'>編程</b>
    主站蜘蛛池模板: 免看一级a一片成人123 | 日本aaaa毛片在线看 | 涩综合| 人人看人人澡 | 午夜三级国产精品理论三级 | 68日本xxxxxxxxx xx | 久久e热| 国产农村一级特黄α真人毛片 | 精品视频网站 | 五月网婷婷 | 色天天躁夜夜躁天干天干 | 最好看免费中文字幕2018视频 | 香蕉视频色版在线观看 | 人人插视频| 男女一级大黄 | 美女淫 | 久久国产午夜精品理论片34页 | 久久久久久久久久久9精品视频 | a毛片网站| 亚洲一本视频 | 特黄特色网站 | 久久成人亚洲 | 国产操女 | 欧洲亚洲国产精华液 | 欧美7777kkkk免费看258 | 51国产午夜精品免费视频 | 夜夜操夜夜摸 | 操综合| 日本黄免费 | 午夜视频福利 | 黄色午夜视频 | 国产亚洲美女精品久久久2020 | 色六月婷婷 | 黄色网址在线免费观看 | 天天在线天天综合网色 | 成年人www | 中文一级黄色片 | 888米奇在线视频四色 | 1314亚洲人成网站在线观看 | 激情欧美一区二区三区中文字幕 | 一区二区三区高清不卡 |