王宏偉 湯建偉 秦 舒 周宏偉(中國礦業(yè)大學(xué)(北京) 力學(xué)與建筑工程學(xué)院,北京100083)(中國礦業(yè)大學(xué)(北京) 能源與礦業(yè)學(xué)院,北京100083)
彈性力學(xué)是研究物體在外力、溫度改變或其他外界因素作用下彈性階段的應(yīng)力、應(yīng)變和位移的分布特征的一門學(xué)科,是固體力學(xué)的一個重要分支[1-2]。彈性力學(xué)是力學(xué)專業(yè)的核心課程,也是結(jié)構(gòu)工程、巖土工程、采礦工程和機械工程等其他工科專業(yè)的必修課,課程內(nèi)容可為本科生和研究生在今后的工程實踐或科學(xué)研究打下扎實的理論基礎(chǔ)。
作者在從事彈性力學(xué)課程教學(xué)過程中發(fā)現(xiàn),即使是課堂上聽課非常認真的同學(xué),課下仍然會問到應(yīng)力或位移解答在平面或者空間中的分布問題。由于彈性力學(xué)高度依賴偏微分和泛函方程的求解,最終所得到的結(jié)論,即便是經(jīng)典彈性力學(xué)問題,解答仍是一些復(fù)雜且枯燥的公式[3-5]。學(xué)生雖然理解了這些經(jīng)典問題的工程背景、載荷施加和邊界條件,甚至對求解過程也了如指掌,但依然是霧里看花、不得要領(lǐng),學(xué)習(xí)的積極性和主動性大打折扣。作者基于教學(xué)經(jīng)驗可以感知到,學(xué)生期待的是看得見、摸得著的結(jié)果。如果能實際操作改變參數(shù),將所得結(jié)果可視化,觀察結(jié)果的變化,達到與問題互動,與教師互動,與同學(xué)交流的目的,則教學(xué)效果更佳。
根據(jù)上述想法,作者前期開展了部分彈塑性力學(xué)解答的交互式教學(xué)和可視化結(jié)果顯示的教學(xué)實踐,獲得了一些教學(xué)經(jīng)驗,并且發(fā)表了階段性成果[6]。但是,作者在后續(xù)的教學(xué)實踐中發(fā)現(xiàn),在數(shù)據(jù)庫中切換不同的解答時,無法實現(xiàn)不同解答的獨立參數(shù)輸入和可視化顯示。而且,在切換不同解答時,結(jié)果顯示的速度較慢,無法保證課堂教學(xué)的時效性。因此,作者在現(xiàn)有教學(xué)方法實踐的基礎(chǔ)上,單獨針對彈性力學(xué)經(jīng)典問題,構(gòu)筑了不同問題的獨立操作和可視化高效顯示的數(shù)據(jù)庫,通過數(shù)據(jù)庫和學(xué)生及教師的交互式操作,期待這些解答能夠更形象、生動、有色彩。
數(shù)據(jù)庫的作用是將彈性力學(xué)經(jīng)典解答中枯燥且抽象的公式進行集合,并用模塊化的方法將彩色云圖和曲線生動形象顯示出來。為了能夠使各個經(jīng)典解答集合到同一環(huán)境中顯示,作者采用Visual C++和MATLAB 聯(lián)合編程的手段開發(fā)和設(shè)計了該數(shù)據(jù)庫。數(shù)據(jù)庫中應(yīng)力結(jié)果的云圖和曲線基于MATLAB語言環(huán)境中計算和繪制,而面對用戶的前端界面和內(nèi)部調(diào)用模塊是基于Visual C++ 多線程設(shè)計并開發(fā)的。同時,C++ 在數(shù)據(jù)庫開發(fā)過程中的作用還在于將各個解答獨立調(diào)用并高效且有序地顯示出來。圖1 為數(shù)據(jù)庫前端界面。
在數(shù)據(jù)庫構(gòu)筑過程中,需要重點解決三個問題。第一,數(shù)據(jù)庫和用戶之間的交互式數(shù)據(jù)傳輸。數(shù)據(jù)庫的用途之一是為了實現(xiàn)交互式操作,即用戶根據(jù)自己的需求,輸入相關(guān)的參數(shù),數(shù)據(jù)庫返回用戶想得到的結(jié)果。這就要求數(shù)據(jù)庫能夠?qū)栴}調(diào)用模塊,參數(shù)輸入模塊和結(jié)果輸出模塊有機結(jié)合起來。第二,不同彈性力學(xué)解答的獨立調(diào)用。數(shù)據(jù)庫在調(diào)用彈性力學(xué)解答時,需要保證前次調(diào)用的清零和本次調(diào)用時輸出端和顯示端窗口的重新分配。第三,數(shù)據(jù)庫可視化顯示模塊出圖的時效性??梢暬@示模塊給用戶提供了理解彈性力學(xué)經(jīng)典解答的全新渠道,但如果顯示速度太慢,或者出現(xiàn)信息顯示不全,則會影響可視化效果和課堂教學(xué)體驗。因此,數(shù)據(jù)庫在開發(fā)時將十分注重可視化模塊的動態(tài)調(diào)整,針對不同問題顯示區(qū)域的分布會動態(tài)變化。
圖1 數(shù)據(jù)庫前端界面
根據(jù)以上需要解決的主要問題可知,保證時效性和獨立性是數(shù)據(jù)庫實現(xiàn)構(gòu)筑的基礎(chǔ)。
MATLAB 生成的程序需要特定的運行環(huán)境,這為用戶帶來了極大的不便,用Visual C++搭建的前端界面和內(nèi)部調(diào)用模塊可以解決這個問題,也能夠?qū)崿F(xiàn)數(shù)據(jù)庫調(diào)用的獨立性。Visual C++ 構(gòu)建的平臺包含問題的描述模塊、參數(shù)輸入模塊、結(jié)果輸出模塊和對MATLAB 生成結(jié)果的調(diào)用模塊。Visual C++作為前端平臺,對后臺的MATLAB 計算結(jié)果進行動態(tài)調(diào)用,可以保證不同彈性力學(xué)問題的獨立顯示。
時效性是指數(shù)據(jù)庫實現(xiàn)交互式操作和可視化顯示的效率。作為一個數(shù)據(jù)庫軟件,代碼過長會導(dǎo)致運行效率降低。MATLAB 編寫的數(shù)據(jù)庫的代碼存在運行速度慢的問題,這無疑會降低軟件的運行效率。Visual C++ 多線程計算可將不同解答的代碼程序相互獨立調(diào)用,通過主程序控制計算,將各個計算子程序用多線程運行,實現(xiàn)了并行計算,快速準確出圖,有效地解決了這一問題。圖2 為Visual C++和MATLAB 聯(lián)合編程的數(shù)據(jù)庫運行的邏輯流程圖。
圖2 數(shù)據(jù)庫運行的邏輯流程圖
彈性解答的塑性延續(xù)是對彈性階段的進一步認識,可以更深刻地理解物體在載荷變化過程中的力學(xué)性能。盡管目前數(shù)據(jù)庫完成了彈性解答的構(gòu)筑,但物體在達到彈性極限后,往往會進入彈塑性和塑性狀態(tài),應(yīng)力解答應(yīng)當(dāng)考慮塑性部分的結(jié)果。因此,數(shù)據(jù)庫也在塑性階段給出了部分問題的應(yīng)力解答,留有數(shù)據(jù)輸出空間。
為了進一步探討數(shù)據(jù)庫的操作和應(yīng)用,以簡支梁受均布載荷問題和梁的純彎曲問題為例,闡述數(shù)據(jù)庫在問題描述、參數(shù)輸入和結(jié)果輸入等方面的特點。
長為l、高為h、寬為單位1 的矩形截面梁,兩端簡支,在梁的上邊界受到均布載荷q的作用,求解梁內(nèi)的應(yīng)力分布問題,如圖3 所示。
圖3 數(shù)據(jù)庫中的簡支梁受均布載荷問題描述
由于梁的橫截面上同時存在彎曲正應(yīng)力σx和切應(yīng)力τxy,因此該問題屬于梁的橫力彎曲問題。由于有縱向纖維的擠壓應(yīng)力σy和切應(yīng)力τxy的存在,梁的橫力彎曲問題討論彈塑性和塑性解較為困難。因此,該案例中只分析梁的彈性解答。
針對簡支梁受均布載荷問題,彈性力學(xué)給出了其應(yīng)力分布的經(jīng)典解答,即
相比于梁的純彎曲問題,式(1)給出的解答既復(fù)雜又抽象。盡管我們可以通過材料力學(xué)知識,將其簡化為熟悉的彎曲正應(yīng)力和切應(yīng)力公式(2)[1],但是由于含有變量較多,依然令學(xué)生難以捉摸。
式中,b= 1,I=h3/12 為慣性矩,S=h2/8?y2/2為靜矩,F(xiàn)s為任一橫截面的剪力。在簡支梁受均布載荷問題中,需要輸入的參數(shù)有簡支梁的長度l、高度h和均布載荷q的大小,而輸出的結(jié)果為彎曲正應(yīng)力σx、擠壓應(yīng)力σy和切應(yīng)力τxy。如果僅僅依靠式(1) 和式(2) 無法真正理解這兩組結(jié)果的深刻內(nèi)涵,更不能準確把握材料力學(xué)結(jié)果和彈性力學(xué)結(jié)果的區(qū)別。課堂教學(xué)中經(jīng)常有同學(xué)會問到彎曲正應(yīng)力σx中的q(y/h)(4y2/h2?3/5)項的作用是什么,如果以兩個具體的案例進行分析,如梁的長高比l/h分別為2.5 和0.75 來說明修正項的意義,能很好地解決這一問題,如圖4 所示。
圖4 梁的橫力彎曲問題中σx 的結(jié)果輸出
彈性力學(xué)教材中指出,q(y/h)(4y2/h2?3/5) 項是彎曲正應(yīng)力的修正項,對于淺梁(l遠大于h),修正項所占的比例很小,而對于深梁,則需要注意修正項。課堂教學(xué)單純的講公式,很難理解這個修正項的作用,但如果將其用曲線圖表示出來,則能直觀地看出修正項對淺梁和深梁的不同影響。
以梁的純彎曲為例,說明數(shù)據(jù)庫對于彈性解答的塑性延續(xù)特點。設(shè)有矩形截面梁,高為h,寬為b,在梁的兩端受到力偶矩M的作用,假設(shè)梁為理想彈塑性材料,求該梁的應(yīng)力分布,如圖5 所示。由于該案例屬于梁的純彎曲問題,在問題描述模塊中的下拉菜單里選擇梁的純彎曲問題時,數(shù)據(jù)庫給出了該問題的計算簡圖和應(yīng)力分布結(jié)果,如圖5 所示。其中,輸出結(jié)果不僅給出了彈性階段應(yīng)力解答,也包括進入塑性狀態(tài)后的彈塑性解答和塑性解答。
圖5 數(shù)據(jù)庫中的梁的純彎曲問題描述
首先,分析梁在彈性階段的應(yīng)力解答,其任一橫截面上的彎曲正應(yīng)力為
式中,由于力偶矩M、梁高h和梁寬b均為常數(shù),應(yīng)力σx則為變量z的線性分布函數(shù)。
其次,分析梁在彈塑性階段的應(yīng)力解答。隨著力偶矩M的增加,梁任一橫截面的上下兩個邊緣最開始進入塑性狀態(tài)。此時,梁的彈性極限力偶矩為Me=bh2σs/6,式中σs為材料屈服極限。力偶矩繼續(xù)增加,塑性變形將從橫截面上下邊緣對稱地向內(nèi)部發(fā)展。由于梁為理想彈塑性材料制成,在橫截面沒有全部進入塑性狀態(tài)之前,彎曲正應(yīng)力σx為
式中,zs為橫截面上梁的中性層到彈塑性交界面的距離,計算結(jié)果為
最后,分析梁全部進入塑性狀態(tài)后的應(yīng)力解答。力偶矩繼續(xù)增加,當(dāng)整個橫截面都進入塑性狀態(tài)時,由于梁為理想彈塑性材料,整個橫截面上的彎曲正應(yīng)力σx為
由于此時zs= 0,所以梁的塑性極限力偶矩為Mp=bh2σs/4。
式(3)、式(4)和式(5)分別為純彎曲梁在彈性、彈塑性和塑性階段的應(yīng)力解答。盡管公式簡潔明了,但是畢竟無法生動形象。圖6 為數(shù)據(jù)庫給出的三個階段應(yīng)力解答的應(yīng)力云圖。公式和云圖互為補充,教師容易講解,學(xué)生理解簡單而且印象深刻。
圖6 數(shù)據(jù)庫中的梁的純彎曲問題的解答
本文構(gòu)筑了彈性力學(xué)經(jīng)典解答數(shù)據(jù)庫,通過Visual C++ 和MATLAB 聯(lián)合編程,可以保證構(gòu)建的數(shù)據(jù)庫內(nèi)部調(diào)用模塊對數(shù)據(jù)的獨立調(diào)用,注重可視化模塊的動態(tài)調(diào)整,針對不同問題顯示區(qū)域的分布會動態(tài)變化,將各個計算子程序用多線程運行,實現(xiàn)了并行計算和快速準確的結(jié)果輸出,保證了交互式操作的時效性。
課堂教學(xué)中,學(xué)生往往會因為只學(xué)到了公式而不能清晰透徹地理解公式的內(nèi)在含義而迷茫。使用彈性力學(xué)經(jīng)典解答數(shù)據(jù)庫,教師和學(xué)生進行交互式操作和交流,學(xué)生可以通過彩色云圖和曲線直觀地分析應(yīng)力分布和受力變化,從而提高了對彈性力學(xué)的學(xué)習(xí)興趣,對所研究的問題和解答也有了更深刻的理解。